Home
< back | 0 - 10 |  

(без темы)

Январь, 6, 2020 (00:00)



Таги:

f2f, f2k, lj -- распределенный блог, по типу распределенных сетей emule, kaaza (и т.п.)  (+ исследования веб-технологий и работы с ЖЖ);
kr214meedle -- программирование трехмерного редактора;
kr214eat (eat) -- программирование двухмерной игры;
kr214port -- веб-интерфейс к скриптам на компьютере пользователя;
kr214inno (inno) -- интерфейс к инсталлятору Inno Setup;
kr214icf -- клиент ICQ с поддержкой отсыла небольших файлов BASE64;
inserto -- интеграция картинок в html;
pilot -- исследования различных медиа-явлений;
ru_swine, ru_swine_dig -- программирование игры "Кошмар для Крыса" по мотивам сообщества ru_swine;
ru_swine, cdoko -- программирование игры "Кдокадилы едуд на пикник" по мотивам сообщества ru_swine.


_
Карта друзей

f2kv1 0.018

Июль, 13, 2009 (17:37)
Метки: ,

Набросал маленькую схемку функционирования программы:


_

mldonkey 3.0.0

Июль, 8, 2009 (14:30)
Метки: ,

Лазя в описании MD4 хэша обнаружил идеальнейшее решение транспорта -- MLDonkey. В чем его идельнейшесть -- специальным файлом он вешается в трей виндоус и начинает принимать соединения на (telnet 127.0.0.1 4000) и (http://127.0.0.1:4080).

Что это значит. Обычно, программы под виндоус делаются так -- рисуется интерфейс и к нему, потом, в будущих версиях, добавляется возможность внешнего управления. MLDonkey изначально сделан без интерфейса, только с возможностью удаленного управления.

Дополнительный профит -- транспорт не только eDonkey. Вот полный список: eDonkey, FileTP (HTTP, FTP, SSH), Overnet, Kademlia, Direct Connect, Gnutella, Gnutella2, OpenNap, Soulseek, BitTorrent, FastTrack, OpenFT.

Надеюсь, это сработает.

_

anticlockwise countdown

Июль, 7, 2009 (11:11)
Метки: ,

ВНЕЗАПНО в голову пришло несколько мыслей и я опять метнулся в совершенно другой проект. Похоже, это моё такое новое состояние -- метаться в разные стороны.

Если кто помнит, я в прошлом году (или это было в позапрошлом?) писал о распределенном блоге. Тогда-же сделал его версию на основе браузера, дабы было проще повторить интерфейс ЖЖ.

На прошлой неделе эту идею достал из архивов, смахнул пыльные биты и начал делать вторую версию (про вторые версии псто). Сейчас версия не доползла до ранней функциональности, поэтому предупреждаю -- только для ознакомления, все базы ещё изменятся раз сто. Если кто на эту ерунду с базами попадется -- пишите комментарии к постам с тегом (f2k).

Постоянная ссылка на f2k -- http://kr214.narod.ru/projects/f2kv1/


Картинка для привлечения внимания:


Краткий ликбез или Что происходит: Распределенный блог хранится на вашем домашнем или рабочем компьютере и копии (или части) его хранятся у ваших друзей или тех, кто ваш блог читает. Новые записи скачиваются через "транспорты" (основной е-донкей, может быть аська, тысячи их). Для коментов будет сложная система, для которой все-таки понадобится сервер. Но этот сервер можно поставить на свой-же комп или выбрать любое другое место.

Сейчас, это всё фантазии. В этой версии, посты только скачиваются с ЖЖ, их даже посмотреть нельзя. Однако, алгоритмы уже отработаны в первой версии, моя работа -- чистое кодирование. Вопрос только во времени.

_

Йа програмко, жевтоне чочо програмко. Откомпилируйте меня, кто-нибудь

Июнь, 23, 2009 (15:23)

Дорогой дневник! Я вступаю в состояние, когда элементарные истины открываются ВНЕЗАПНО. История, достойная в своей глупости, известных детективных талантов сэра Макса:

Заинтересовался возможностью собирания мелких объектов не из модели, а из спрайта (это ещё называют "монстры как в думе" -- мою нердскую сущность от такого определения передёргивает). Залез в хелп почитать о спрайтах и наткнулся на элементарную, банальнейшую конструкцию ID3DXSprite::Draw(pSrcTexture, pSrcRect, pScaling, pRotationCenter, Rotation, pTranslation, Color );

Здесь должен был быть кат, но я уже в пижаме.

Дорогой дневник, эта конструкция выводит спрайты. С нормальным соотношением пикселей, с поворотом и даже, с многоспрайтовой текстурой. Нет, это в высшей степени писец. Потому что, до этого я пользовался DrawIndexedPrimitive() с D3DPT_TRIANGLESTRIP. То есть, делал спрайты из двух полигонов, на которые кое-как натягивалась размытая текстура. Сейчас, когда я думаю об этом, понимаю, что единственный профит с полигонов -- это камера. Но что такое камера по сравнению с четкой текстурой? (это риторический вопрос).

В свою защиту могу только сказать, что нашел это в интернетах. Естественно, ведь ID3DXSprite настолько прост, что в инернетах о нём просто нечего писать.

Всё, что нужно -- его создать:

ID3DXSprite *spr;
D3DXCreateSprite(d3dev,&spr);

После этого можно спокойно выводить:

D3DXVECTOR2 pos=D3DXVECTOR2(x,y);
RECT rect;
rect.left=rect_x;
rect.top=rect_y;
rect.right=rect_x+dx;
rect.bottom=rect_y+dy;

spr->Draw(texture,&rect,NULL,NULL,0,&pos,0xFFFFFFFF);

Итак, к чему это привело. Временно, я забросил писание утилит (что отрицательно меня характеризует) и набрал такую вот штуку:



Суть в следующем -- после запуска белые точки бросятся разбираться с квадратами, отмеченными синим. Выделять можно мышью. Все правила поведения сейчас и потом (когда я сделаю нормальное передвижение точек по карте) соответствуют таковым в "Dungeon Keeper".

Если интересно -- можно скачать инсталляшку на странице kr214.narod.ru/projects/wallkeeper/

_

Вчера за ужином...

Июнь, 22, 2009 (16:47)

Вот такой сериал -- человек сидит за столом и ест. Просто ест, блюда меняются, какие-то он есть с аппетитом, какие-то внимательно распробывовает.

Суть в том, что в течении 20 минут (или 35, как повезет со сценаристом), человек ест. Он ничего не говорит, ни с кем не общается, никаких официантов вокруг него не шныряет. Весь интерес держится на процессе. За ним просто интересно наблюдать. Где-то в середине, оказывается, что у него аллергия на, скажем, арахис. Человек покрывается аллергической реакцией и две следующих серии сдвоенные -- он ест дома, болеет. Потом экспериментирует, скажем, с китайским рестораном, но к концу сезона возвращается к обычному европейскому меню.

В-общем, конец сезона, 12-я серия. В последней серии показывается обычный день этого человека. Вот он встаёт, чистит зубы (можно кинуть заранее спойлер, будто теперь сериал будет про чистку зубов), одевается, идет по абсолютно пустой улице в абсолютно пустой ресторан за углом. Готовит там сам себе еду, сам себе сервирует, съедает. Потом гуляет по пустым улицам, ну, короче, смысл понятен -- он совершенно один на планете.

Наконец, вечером, когда будет всё очевидно, серия заканчивается. Никаких подсказок, куда все делись (точно так-же как он раньше ничего не делал, кроме еды).

Всё, сериал окончен.

Вот...

Следующего сезона не будет. Разве-что можно выпустить короткий спешл, как он чистит зубы. Суть просто в выносе мозга, как в "Кроликах".

_

Мюзикл Металокалипс

Июнь, 19, 2009 (10:05)

Дорогой дневник! Приснилось мне сегодня начало трэшевого мюзикла, по сюжету сходного с "Шестиструнным самураем".

Суть такова. Существуют группы разного направления с некоторым количеством поклонников.

Внезапно появляется певец ртом матерных частушек в стиле реп. Сначала он набигает на какую-то то-ли поп-рок, то-ли поп-реп группу, которую, особо не напрягаясь, уничтожает подчистую. Во сне это выглядело как извержение из него образов во время песни. Образы налипали на противников и те запиливались. Кроме того, видел я всё это в виде киношных штампов -- то есть, эта сцена была заманухой перед титрами. Например, в момент самой бойни камера отьезжала на пейзаж и о ужасе происходящего можно было только догадываться по крикам. Наконец, единственный выживший выбегает из этого мессива, чтобы рассказать другим о приближении злодея.

Алсо, интересная деталь -- похоже, налипающие образы несли на себе мнение этого рэпера об окружающих. На них явственно чувствовался гомофобский окрас. (Стоит упомянуть, что прямо перед сном я просматривал конец второго сезона "Торчвуд").

Мюзикл продолжается. Следующая сцена -- злодей набигает на митол-группу в стиле дум. Они одеты в белые рубахи навыпуск, без ворота. Думеры обступают противника и поют, дабы его победить (текста я не запомнил, но там было больше припева, чем слов. Алсо, у думеров текст английский, у рэпера русский).

Параллельная сцена -- оказывается, я в этом сне всё-таки есть. Мы с каким-то странным дядей бегаем среди библиотечных стеллажей, дабы отыскать информацию о "истинном классическом роке". Очевидно, этот вопрос для сюжета и хэппи-энда очень важен.

Тем временем, злодей стоит невредимым посреди словоизлияния из ртов дум-митол-группы (почему-то там все были солисты). Еще ржака -- я не разбираюсь в музыке,  но знал, что это дум-митол. Поэтому, в моём сне играл саундтрек от  "DOOM-3" (то есть, это чисто ассоциативно).

Наконец, частушечник умело отвечает. Умело -- потому что как-то понял смысл песни и теперь перевирает.

В этот момент я проснулся.



В-общем, ужасный трэшак. Написал, потому что забавная концепция -- митол в конце должен был восторжествовать через поиски "классического рока".

^_^

Развлекушечка с фильмами

Май, 26, 2009 (10:36)

Развлекушечка с фильмами

www.empireonline.com/crypticcanvas/

Обратите внимание -- в некоторых названиях обязательно "the". В комментариях есть несколько отгадок. Подсказки можно получить здесь.

А вот ответы... )
_

Про программирование утилит

Май, 22, 2009 (11:02)

Как-то у меня так получается, что целыми днями я программирую, а ничего полезного в ЖЖ от этого не появляется. (А нужно-ли вообще в ЖЖ чему-то появляться -- это другой вопрос и lleo на него недавно отвечал).

Так. Что я могу предоставить полезного... Утилита сейчас не готова и нескоро будет. Код у меня специфичный, он под Борланд и активно пользует AnsiString, то есть, непереносим, не-Борландам он нафиг не сдался. Остаётся вещать, даря крупицы премудрости всем, кто случайно наткнется на статью.

* * *

Программисту утилит придется писать две версии

Сразу напишу, почему -- не потому что плохое планирование, а потому что форматы данных заранее никогда не известны. Я вполне серьезен, заранее невозможно предсказать, можно даже не пытаться. Единственное решение, это на первую версию потратить как можно меньше времени.

Разгадка простая -- программу определяют данные.

Например: клиент-сервер. На сервере хранится база. Клиенту, в принципе, нужна только малая часть базы. Прямое подключение к базе невозможно. (Неважно почему. Такая постановка задачи.)

Сразу-же вопрос, как будет идти обмен данными -- символьными строками (как IRC), XMLRPC, бинарными пакетами, CORBA, etc. Предположим, выбирается XMLRPC. То есть, данные приходят в виде пакета, оформляются тегами, можно набить из этих тегов списки или хэши и не мучаться с типами. Одно плохо -- эти теги на 80% увеличивают объём пакета, чисто текстовой информацией, которая вне пакета не нужна. Окей, мы ведь так и планировали -- вся база не нужна, только небольшая часть, нагрузка не очень. Все, утилита написана и можно сдавать.

И тут, выясняется, что при первом запуске, утилиту надо инициализировать очень большим объемом данных, и только потом запрашивать, как планировалось, понемногу... В результате, эти 80% надолго завешивают запуск утилиты, хотя потом она работает нормально. А для того, чтобы убрать 80%, надо переходить на совершенно другую модель передачи данных. Что делать? Делать, как написано в заголовке -- писать вторую версию. Первая версия нужна была для того, чтобы наткнуться на проблему. Вторая версия уже её решает.


С другой стороны, вы у меня спросите -- а заранее нельзя было этого предсказать? Куда делось планирование проекта? Так вот. Это и было планирование. Смотрите: (1) есть работающая утилита, пусть и долго инициализирующаяся, (2) есть что тестировать, (3) найдены все подводные камни, (4) достаточно одного программиста вместо профессионального проектировщика.

Можно найти такой минус -- программист старался-старался, а теперь надо всё с начала начинать? Так это не минус, просто надо было с самого начала смириться с тем, что первый блин будет комом и не тратить на него столько времени. Надо быть либо очень-очень хорошим предсказателем всех подводных камней, либо сразу считать первую версию не для продажи, предназначенной не для упражнений в эффективном кодинге, а собственно, процесом проектирования.


Окей, второй ваш вопрос -- с какого вия это называется второй версией? Надо-же только доделать первую?

Рассмотрим тот-же пример. Предположим, задача поставлена так, что невозможно установить нормальную БД, нужно писать свою, да ещё и обязательно хранить всё в памяти. Причем, мы помним, что клиент хранит только часть базы, то есть, ему явно требуется разреженный массив. Планирование подсказывает нам, что если хранить всё в хэше, то можно будет обращаться к записям по ключам хэша и таким образом, имитировать разреженный массив. Отлично. Программист вытаскивает на свет библиотечку с хэшем, компилирует, утилита готова.

И тут оказывается, что клиент не так уж часто удаляет устаревшие данные. А поиск по всё увеличивающемуся хэшу всё медленнее и медленнее. Что делать? Программист берется показать своё мастерство и пишет отлично спроектированный менеджер ресурсов, либо... пишет новую версию, которая не использует хэш (например, деревом чисел).

То есть, если программист не смиряется с тем, что первый блин комом -- он тратит время на усовершенствования неверного решения. Хотя, достаточно подумать и найти решение верное.


Вопрос третий -- как не превратить всё это в написание третьей, четвертой и т.д. версии? Ну это простой вопрос, ответ на него тот-же что и всегда. Надо, чтобы первая версия была рабочей, тогда можно будет её тестировать. Но без излишеств, чтобы не потратить времени больше, чем требуется на планирование.


Итого. Надо сразу смириться, что то, что получится в первый раз -- это то, что называется "бета". Конечная версия -- это не доработка беты, а написанная с нуля, вторая версия утилиты.

ЗЫ Теперь остаётся только найти в википедии, кто уже это раньше придумал и что у него получилось :")))


* * *

Дерево чисел (не помню, как это называется у нормальных программистов)

Смысл этой идеи в том, что нам позарез нужен большой разреженный массив и ключами к нему являются числа (то есть, это индексы).

Сначала задаём максимальное число индекса, например, миллион. Для пояснения работы, предположим, что раньше я в него занёс индексы от 10 до 255. Добиваем до шести цифр -- от 000010 до 000255.

После этого работа идёт так -- нужен нам индекс, скажем, 156. Добиваем его до шести цифр -- 000156. Идем в дерево. Начинается оно с десяти цифр от 0 до 10. Ссылка есть только на числе 0, а остальные NULL. Ссылка на 0 ведёт к следующим десяти цифрам. И так далее: 0->0->0->1->5->6. На последней шестерке хранятся уже наши данные, можно их забирать.

То есть, понятно -- чтобы достучаться до индекса надо выполнить шесть итераций. Например, в обычном массиве нужна была-бы одна итерация, но и места он занимал-бы на весь миллион сразу и почти весь пустой. В хэше количество итераций увеличивается вместе с размером и при больших числах производит унылые задержки. Получается отличная идея для небольшой БД -- запрос выполняется с одной и той-же скоростью, почти не занимает память под пустые данные, и идеально подходит под последовательно заполняемые индексы.

ЗЫ Эту идею я прочитал где-то в книге, а где -- не помню :"(


* * *

Ох...

Надеюсь, после этого мой долг демону ЖЖ, который требует постов, выполнен. :"))

ЗЗЫ ПодCUTивать не буду, юзайте колесико мыши ^_^


_

Всё что вы хотели знать о твердотелах

Май, 13, 2009 (11:05)

Пиар Виндоус 7 достиг небывалых высот -- они выпускают полезные статьи. Вчера, например, вышла статья про твердотельные накопители:


Собственно, не все интересуются такими вещами. Для тех, кто не хочет читать статью -- краткая политинформация.

Обычный жесткий диск -- это продвинутая дискетка 3.5", уже встроенная в дисковод. Плюсы -- много головок дают дикую быстроту считывания. Минусы -- проблема с вибрацией, из-за тех-же головок, если их чуть сдвинуть -- информации на диске ценок. Кроме того, диски крутятся, а значит, греются.

Диск SSD (или твердотельный) -- это продвинутая флешка. Минусы те-же что и у флешек. Плюсы -- производители постоянно борятся с минусами флешек. Еще два больших плюса -- она не требует такого дикого охлаждения, как современные жесткие диски (значит, бесшумная) и нет головок (значит, можно бить и ронять).

Такие флешки (например, по 20 Гб) уже стоят в кавайных удароустойчивых нетбуках:


(то-же самое, но ещё подробнее есть в вики).
_

< back | 0 - 10 |