ads

Showing posts with label понаделано. Show all posts
Showing posts with label понаделано. Show all posts

Tuesday, November 5, 2013

Щетка для флейты

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

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

С обычной поперечной флейтой этот фокус не сработает и приходится активно вытряхивать, продувать и пользоваться ешриком и щеткой с тряпочкой.

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

В комплекте с каждой флейтой идет стандартный ершик. Он примерно раза в три короче самого инструмента. Поэтому чтобы им протереть все внутренности, флейту нужно разобрать, черт побери. Не то чтобы это такая сложная процедура, но лень. Особенно, когда играешь в машине и в салоне прохладненько: конденсат скапливается с утроенной энергией.

Ленивый я человек, потому сделал себе самодельный длиннющий ершик, которым вжик, и готово.

Вначале купил за 36 рублей в строительном магазине палку двухметровой длины, чтобы наверняка хватило. Там же за те же деньги приобрел и тряпочку.


Зашкурил палку, нарезал тряпку, приклеил.


Получилась прелесть, а не ершик.

Friday, July 26, 2013

Переплет

Решил тут распечатать и переплести книжку Макрвардта "Рангоут, такелаж и паруса судов XVIII века". Я бы ее с удовольствием купил, как я, бывает, делаю с прочими понравившимися мне книжками, которые я вначале прочитал в электронном виде и потом захотел видеть в бумажном. Но вот беда, последняя монета данной книги нет нигде в продаже. Секрет этого обстоятельства раскрывается, если посмотреть на цену, указанную на последней странице: 5 рублей.

Поэтому решил все-таки сам сшить.


Взял электронную версию, которую легко найти в гугле. Так как печатаю исключительно для себя, угрызений совести перед издателем нет. Но если издатель меня найдет, с радостью заплачу 5 рублей.

Распечатал книгу по четыре страницы на один лист A4 -- по две страницы с каждой стороны листа. С процессом распечатывания решил не усложнять: с тетрадями по 16 листов и шитьем мучиться не хотелось, поэтому распечатал сплошняком (т.н. брошюра в настройках печати), потом сложил каждый лист пополам и разрезал ножом.


Весь процесс занял не больше получаса, плюс еще минут 20 пока я соображал как заставить принтер печатать страницы в том порядке, что мне нужно. В итоге получился блок из 147 листов A5.

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


Показательна надпись: для детей от 12 до 16 лет. В Союзе все было сурово. Это сейчас старый дед может с упоением играться в детскую игрушку, а в те времена стукнуло 16 -- и всё. В общем, ограничение по возрасту сверху выглядит забавно.

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

Прежде чем клеить переплет, корешок блока проклеивается для первоначальной фиксации. Потом делаются пропилы.


В эти пропилы вставил толстые нити. Все это еще раз обильно пропитывается ПВА.


Как только немного подсохло -- еще раз все ПВА и приклеивается марля и картонка для жесткости.

Потом собственно сборка переплета. Я решил его сделать твердым, хотя в оригинале он был мягким.


Пока клей сохнет, видны всяческие страшные пятна и полоски в сеточку, но они пройдут как все высохнет и будет покрыто сверху акриловым лаком.


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


Еще приклеил две эти тесемочки из набора. Служат они, якобы, для красоты. В данном случае это просто дань традиции.

Выравнивать страницы и обрезать края блока не стал. Во-первых, и так ровно. А во-вторых, оно того не стоит.

Дальше приклеивается уже пролакированный и высохший переплет. Все это дело кладется под пресс.


Страницы как новенькие.


Готово. Можно лечь на диванчик и читать. Весь процесс занял где-то два часа.

Thursday, March 21, 2013

Online nonogram solver

This is clear javascript version of nonogram solver: https://teall.su/nonogram/.
Another my "just for fun" small program. It was made as simple as possible (in reasonable borders of course) and works completely on client-side browser. Algorithm uses finite-state machine to calculate possible cells to paint and eats, as I suppose, O(n2) machine time (and what do you want from NP-complete problem?). In addition there is brute-force search function in order if puzzle has no obvious solve steps but herewith has single solution. On huge grids solver runs deadly slow.


Eventually I'm a big fan of nonograms. My Android phone has CrossMe installed, and I play it often, especially if I have to wait for my wife while shoping =)
By the way, first attempt to create such solver was in 2000. We were first-year students and compete each other whose algo will solve puzzle from newspaper faster. But we even did not know about finite-state machines at that moment. I left my Intel 80486 computer to calculate grid for whole night, and after eight hours it was still unsolved =) Well, I will show my current algorithm to students after all =))

UPDATE. There is completely awesome survey about nonogram solvers and large collection of online and offline solvers and puzzles by Jan Wolter: http://webpbn.com/survey. I think everyone who interesting in nonograms will satisfied totally there. In additional, Jan presents list of puzzle exporters: http://webpbn.com/export.cgi.

UPDATE2. Great, google says this is the most popular solver we have for now: https://www.google.ru/#newwindow=1&q=online+nonogram+solver
For children getting upset with the solver: remember, a computer is not a human, it can't understand what the thing it's solving. If you have meet bad luck first time, try to use your intuition and help the solver checking/unchecking squares, and then let the solver has another try.

Friday, March 15, 2013

Сейчас скинули посмотреть новую модельку Т-34 в зимней гамме для одной новой игрушки, которая сейчас активно разрабатывается. И это напомнило мне мою первую 3d работу. Если это можно назвать работой =)) Еле-еле нашел исходники и смог отрендерить. Аж слезу пустил.


Кажется, это должна была быть игрушка Танчики. Тогда на третьем курсе не хватило на нее время в силу массы причин.

Хотя нет! Первой моделью был "Галаксиан" -- что-то типа робота, летающего в космосе =) Это писалась игра "Космические гладиаторы" на втором курсе и делалась на своем 3d движке, досовском, компилируется только Borland C++ 3.0. Велосипедисты же мы были =) Но было интересно.


Код еле-еле скомпилировал. Особенно доставляют вот такие строчки:


void InitGraph() { asm { mov ax,0x13; int 0x10 }; };
void CloseGraph() { asm { mov ax,3; int 0x10 }; };
void PointB(int x, int y, unsigned char color, int sel)
{
  asm {
    cmp x,0; jl notout; cmp y,0
    jl notout; cmp x,320; jge notout
    cmp y,200; jg notout
    push ds; push sel; pop ds
    mov ax,320; mov bx,y
    mul bx; add ax,x; mov bx,ax
    mov al,color; mov [bx],al; pop ds
  };
  notout:;
};

Тогда компьютеры были большие, деревья маленькие, а мы наивно полагали, что сможем на ассемблере сделать более эффективный код, чем компилятор С. Но это было очень интересно.

Графический движок умел даже текстурировать каким-то моим лично изобретенным алгоритмом.


У меня тогда был комп с Intel 80486 DX2. На нем все это адски тормозило. Но это было чертовски интересно =)

Надеюсь, еще через 15 лет буду также ржать над тем, что делаю сейчас =)

Wednesday, March 6, 2013

Интервью goodgame.ru

Записали позавчера интервью для Гудгейма (http://goodgame.ru/video/6359/). Сегодня празднуем пятилетие. За это время столько всего произошло и столько всего преобразилось, что ощущение будто прошло не пять лет, а все десять. Приятно было повспоминать по ходу беседы ключевые моменты. В интервью попало не все, но большая часть полуторачасового разговора поместилась. По-моему, получилось здорово и местами даже трогательно.


В принципе, сказанное осталось дополнить всякими олдскульными артефактами. Выложу здесь, пока все это окончательно не потерялось.


Логотип в хайрезе (кликабельно):


Макет первой шапки.


Макет календаря из технического задания на его реализацию.


Кусок одного из разделов оригинального ТЗ с разъяснениями для дизайнера (тогда рабочее название было TOPlayers):


Весь остальной материал все еще под грифом "секретно" =)
Продолжение, как говорится, следует =))

Friday, February 22, 2013

История одного дебаггинга

"Раньше я жалел, что не стал конструктором самолетов... теперь я этому безмерно рад."

Началось это месяц назад. На центральном объекте в городе Б во время сбора очередного генерального месячного отчета по всей этой энергетической бухгалтерии стряслась беда. Обновленные как нельзя кстати алгоритмы расчетов и структура БД, не до конца протестированные на нагрузке, привели к парализации работы бутылочного горлышка системы -- сервера приложений, моей руки творения. Сервер просто падал в хлам, с хрестоматийной accsess violation, жирно и непредсказуемо. Нужно было срочно спасать ситуацию.

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

Система в городе Б установлена по всем правилам конспирологической паранойи. На машину с сервером я попадал через VPN и два RDP, и кроме этого канала ничего не было. При просьбе скачать кое-чего на машину из Интернета админы только нервно отсмеивались.


А как я запущу микрософтовский дебаггер на машине без Студии? Даже дебагнутая версия сервера не может стартовать на другой машине из-за хитро-линкуемых отладочных динамических библиотек. Некоторое время ушло на то, чтобы собрать дебаг-версию, слинкованную со статическими библиотеками. Это был отдельный квест, и микрософту отдельный за него поклон. Снаряженная масса сервера получилась 50 Мб. Кое-как удалось запустить его, но дамп, выдаваемый Dr. Watson, оказался насколько ужасен и громаден (а я сижу через два RDP, мне даже курсор мышки сдвинуть сложно, не то что дамп анализировать), что было принято решение запускать сервер под более вменяемым gdb.

Для этого срочно было все перекомпилировано с помощью MinGW'шного gcc 4.7.2. И новые 50 мегабайт сервера опять были скопированы в Б. И тут случилась великолепная шутка: запущенный под дебаггером сервер падал на инициализации ODBC драйверов. Без дебаггера отрабатывал нормально, а с ним -- падал. Причем падал сам gdb, что вообще нонсенс. Ясное дело, что проблема не в сервере, а в кривом отладчике. Танцы с бубном не помогли: и скачивание последней версии gdb, и запуск всей этой машинерии с gdbserver, и установка cygwin вместо MinGW с последующей пересборкой всего и заменой gdb, -- все это прошло впустую. Пришлось отказаться от gdb.

Сервер был собран обратно студийным компилятором и в дело был пущен дебаггер cdb. Да, от него пользы стало побольше. Наконец-то удалось увидеть номер трида, на котором обрывалась жизнь сервера, и последний callstack. А дальше начался мучительный поиск багов. Таких, за которые я бы руки отрубал... если б не сам был бы автором.


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

Основные места боевых падений были связаны со встроенными С++ классами, выведенными в питоновское окружение. Тот же класс zerodbc в меру специфический и учитывает некоторые особенности системы, что в свое время исключило использование более вменяемого pyodbc.

Главная беда была в том, чтобы найти все места, где питоновская GIL отпускалась или хваталась раньше времени, что в одних случаях приводило к непредвиденным утечкам памяти, а в других -- к дедлокам. Раньше нагрузка на сервер была меньше, и таких ситуаций встречалось тоже мало. Фу, как непрофессионально. Я чувствовал себя студентом-первокурсником, исправляющим примитивнейшие опечатки в коде.

На определенном этапе ко мне присоединился Дима, коллега и друг из города Б, и с увлечением стал следить за моими потугами. Мы переписывались через джаббер и постоянно материли меня, кто во что горазд. О да, я заслужил такой порки =)
Почти все ошибки удалось найти и обезвредить. Уничтожая каждый новый баг мы приговаривали: "Как оно до этого работало?!" Многопоточное сложное приложение выполняется по принципу Мерфи: если какая-то невероятная ерунда может случиться, то она непременно произойдет. Это главное правило. Но несмотря на наши успехи, одна ошибка оставалась.

Обычный диалог был примерно следующего содержания:

nickela: ну это уже какой-то пиздец... access violation в SaveThread???
teal: да
nickela: ассемблерный дамп посмотри

В один из дней уже часов в одиннадцать вечера я решил расставить дополнительную проверку и блокировки, а также снабдить исчерпывающими логами потенциальные мемори-лико-генераторы. Дима подключился через скайп и выдал умопомрачительную по своей силе идею спрятать обработчики исключений OTL под скоуп питоновского GIL, чтобы исключить потенциальную проблему, что эксепшин в драйвере базы данных будет испорчен. Я с ним согласился и начал править код. К двум часам ночи все было готово, если б не одна досадная опечатка. В итоге весь следующий день мы ловили Fatal Python error: PyEval_SaveThread: NULL tstate. Так как последнюю правку кода я производил уже в полубредовом состоянии, то мало того, что не помнил толком, что менял, так еще и забыл сделать коммит в версионной системе. Поэтому день прошел очень весело. Ближе к концу рабочего дня мы были уже в истерике:

nickela: что-ты поправил этой ночью? признавайся!!!

Но в итоге ошибочка нашлась, чтоб ей пусто было. Это было непередаваемое облегчение -- увидеть как сервер падает на старой доброй, уже такой родной ошибке, а не на этой новой =)

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

Это многоходовка, но предусмотреть такую фигню с самого начала было очень сложно. Исправил, скопировал новую версию сервера и запустил. Работает. На этом можно наконец-то уйти на выходные. Сейчас смотрю на этот месяц, практически круглосуточный дебаг, аж страшно становится. Периодически посматриваю на watchdog -- все работает нормально. Аж не верится. Пожалуй, выпью-ка я сегодня коньячку =)

Monday, December 17, 2012

Универсальный код речей

Вот быстренько, под впечатлением, нарисовал бредогенератор на основе веселой таблички, что встретилась в интернете (гугль находит по поиску "универсальный код речей").
http://a.teall.info/drivel/
В оригинале там табличка 6 на 4 и комментарий, что, мол, объединением любых фраз последовательно из четырех столбцов, можно получить 10000 уникальных предложений. Ну, даже школьник понимает, что комбинаций всего 64 = 1296. Но тем не менее. Тексты получаются забавные.

Friday, December 7, 2012

Candidatus Carsonella ruddii DNA

This is a full map of DNA of Candidatus Carsonella ruddii bacteria. The smallest DNA that scientists had found. There are 159662 nucleobases within it at all. 160 Kbyte of data =)
I downloaded DNA sequence from http://patricbrc.org/portal/portal/patric/GenomeBrowser?cType=genome&cId=121052.
Afterwards I converted it into image. Nucleobases are standardly colored by four colors. 1 pixel for each nucleobase.
So now it is possible to see complete and full DNA at once. I think this is awesome =)


And here is bacteria itself (from http://bacmap.wishartlab.com/organisms/396):

Friday, November 16, 2012

I'm Dreaming of Home (Hymne des Fraternisés - Joyeux Noël) sheet music

One of my favorite music. Divinely simple and charming with awesome strong emotions. This was the first time I watched a film due music. Obviously I wanted to play this melody for sure. And below is a sheet music I have prepared for playing in duet (baroque D flute and guitar). The melody is very simple and bewitching, and easy played. I transposed it in G, so it is not in original key here.


Here is a link on live sheet music:
http://musescore.com/user/55060/scores/72787

Saturday, May 12, 2012

Поход под парусом

Или путешествие из Днепропетровска в Одессу и частично обратно на яхте.


Sunday, February 26, 2012

Acrobatic team Rus

At last I have been seen the web-site and new aircraft paint schemes of "Русь". It was a huge job, and it is very pleasure to me that I have took a part in this. OK, I am not designer literally, but have done my best to help my friends to make such great solution. We have spent two days at Vyazma airfield speaking with pilots, voting for different paint schemes, crawling under aircrafts to check all valuable places, and drinking beer and vodka. And now I see photos from Copenhagen's air-show, and aircrafts look wonderful. I am really happy that we have done such work. Moreover, I think that at now "Русь" is not ashamed to fly new aircrafts.


Photo from http://russ-pilot.ru/en/

Thursday, December 1, 2011

Flute traverse

At last I've made my own PVC-flute. So funny, really cool thing. 0.57 meter long tube with 6 finger holes and one embouchure. It was used http://www.cwo.com/~ph_kosel/flutomat.html to calculate drill diameter and hole positions. Pete, thank you very much! The sound is very interesting (and what is more valuable - have correct pitch). Unfortunately my asus notebook once again broke its web-cam drivers so I had no option to make video.
When I been in a plumbing shop, seller asked me about what kind of water (hot or cold) will be used with the tube I buying. I answered that this is for flute =) Seller was calm... it seems that every day they selling tubes to make flutes =)