Блог:Виталий Филиппов
Технические вопросы и вменяемые заметки — пока только от меня. А вдруг будет ещё от кого-то?
У меня, конечно, уже есть блог simply_a_man. Но там всё эмоции, эмоции, и всё не по делу.
2011-02-18 Наболевшее об Opera
Opera, Opera — мой любимый браузер, но команде я бы порекомендовал тестировать побольше, а выкладывать поменьше.
Причём тестировать не «модных» сферических коней в вакууме — всяких юнайтов, «гипножаб» и «бублики» и т. п., а самые базовые фичи — корректный рендеринг простейшего HTML и простейшее открытие страниц.
Если конкретно, то:
Во ВСЕХ билдах Оперы под Linux новее 10.63 разломаны настройки шрифтов — либо они вообще не учитываются, либо учитываются, только если их передёргивать каждый раз при старте браузера.
Во многих билдах Оперы под Linux происходят Странные Баги с зависанием загрузки различных страниц, такие, как на этом скринкасте. Это через прокси-сервер. Скрепя сердце я всё-таки пользуюсь 10.6, однако, чтобы Оно Нормально Работало на рабочем компьютере, мне пришлось поднять локальный squid с прозрачным проксированием. Послушать со стороны — удивительно, каким фанатом надо быть, чтобы такие извращения предпринимать.
Я считаю, что при наличии таких багов выпускать релизы, называемые «стабильными», просто недопустимо. Хотя, может быть, с тех пор баг всё-таки исправили. Но как же об этом узнать при полном отсутствии обратной связи? Публичного баг-трекера нет, на баг-репорты в комментах к блогу Opera Desktop Team никто не отвечает. Там отвечают только модераторы, если ты не дай бог (!) оставишь два одинаковых коммента с одним и тем же багом, воспроизведённым в двух разных билдах, к двум разным постам, относящимся к этим билдам. На баг-репорты, отправленные в закрытый багтрекер, не отвечают даже после того, как баг будет реально исправлен. Например, то ли 3, то ли 4 года назад я отправил туда баг: иконка в трее под Windows показывает письмецо, если есть «нетронутые» письма (которые ни разу не смотрел), а под Linux’ом — непрочитанные (на которых руками не нажал «Прочитанное»). Что бы вы думали, где-то через 3 года его исправили, но мне об этом, конечно же, никто не сообщил.
А например, в новейших 11.10 происходят тормоза с Google поиском, по крайней мере, при установленном user-javascript’е GoogleSrchUIMod.js. Как вы умудряетесь постоянно всё ломать, дорогие разработчики?
2011-01-02 Идея: электростанция от колеса автомобиля
Автономные бензиновые/дизельные электростанции стоят немало. На 4-5 кВт уже гарантированно дороже 30-40 т.р. Причём по всей видимости немалую часть стоимости составляет бензиновый двигатель.
Так вот идея, наверняка приходившая в голову не мне одному: было бы круто сделать портативную электростанцию 220 вольт с приводом от двигателя легкового автомобиля.
Только вопрос: а как? И начинается полёт не очень инженерно грамотной фантазии:
Привод можно взять со ступицы снятого колеса, как делали первые активные парапланерные лебёдки.
Где взять сам генератор? Вариант: купить. Удобно, потому что готовый и однофазный, только привод прикручивай. Мега-круто было бы приспособить для этих целей кластер из обычных автомобильных генераторов (типа ИСКРА 120А для жигуля, которая стоит 2700 руб), но с ними куча проблем:
- 14 вольт.
- Постоянного тока.
- Получить 220 вольт… Это ладно — можно переделать регулятор напряжения / перемотать витки на обмотке возбуждения.
- Необходимость начального возбуждения. Хорошо, аккумулятор никто не отменял.
Путь № 1:
- Убираем выпрямитель — ОК, ток переменный, но … трёхфазный.
- И что ещё важнее — хрен знает, какая у него частота. Точнее, этот хрен сильно зависит от скорости вращения.
- Стабилизировать частоту можно попробовать путём стабилизации оборотов с помощью вариатора от скутера. Но как после этого из трёхфазного получить однофазный ток — неизвестно!
- Кроме того, хрен его знает, как синхронизировать несколько генераторов.
- ⇒ не решение!
Путь № 2, в данном случае наиболее нормальный:
- Не убирать выпрямитель, получить сколько-нибудь вольт (больше ста) стабилизированного постоянного напряжения на выходе.
- Можно смело объединять генераторы в кластер, потому что напряжение постоянное.
- Использователь умформер (мотор-генератор) для преобразования напряжение из постоянного в переменное однофазное заданной частоты.
Но всё равно — геморроя с автогенератором получается больше, чем выгоды :(, и установка получится немаленькая.
2010-11-26 Идея: подвесочные датчики
Берём 4 энкодера (датчика угла) поточнее. Или наоборот, не поточнее, а попроще. Но видимо бесконтактных в любом случае, т.к. нагрузки. Сооружаем 4 катушки, на которые будет наматываться какая-нибудь леска, плюс в катушки вставляем возвратные пружины, которые будут стараться леску втянуть. Засосываем в закрытые корпуса, чтобы наружу торчала только леска и проводки.
Для обработки данных берём контроллер семейства dsPIC33F (оно вроде и ШИМ понимает, и несчастные "2-bit gray codes"), пишем для него прошивку, пишем софт на комп. Получаем некую мистическую хреновину, которая может строить графики длин вытянутой части тросов, т.е. получается 4 одновременных измерителя длины.
Идея применения: полученные датчики монтируются под опоры стоек в машине, леска цепляется за кулак колеса и мы измеряем графики длины стоек в реальном времени. То есть, тестируем подвеску с некоторой инженерной точки зрения, не снимая её с машины :)
2010-07-15 SimplePie - ещё одна ОО говёха
Всё забывал написать, что SimplePie - говно!
Или точнее, отличный пример монструозной объектной ориентированности на пустом месте.
SimplePie — это RSS-парсер на 15000+ строк. 28 классов. Ухаха. Simple. «Статуя Победитель — а теперь представьте, как выглядит побеждённый!» (c)
И при этом нельзя вкрутиться (нет точек расширения) чтобы добавить в запрос свои заголовки, или опции для cURL’а. И нельзя, например, задать опцию, чтобы поменять список тегов, принудительно удаляющихся из текста RSS.
Хыхы. Вопрос: нахера там столько кода и что он делает?
2010-07-05 Vitaphoto V3 (1.4)
Итак, представляю: Моя инженерная мысль разродилась очередной версией Vitaphoto: V3 или же 1.4. Качества:
- «Скажи синтетическим ключам „нет“!» Фотографии и альбомы идентифицируются по именам, а не по ID’шникам.
- Обычная страничная навигация заменена разбиением по датам.
- Огламуренный интерфейс, дизайн на флоатах и несколько размеров фото на выбор (viva большие мониторы!). Дошло аж до Drag’n’Drop’а.
- Поддержка видео.
- Убран «язык запросов по тегам». Заменён выборкой по нескольким тегам.
- Убраны «альбомы». Заменены выборкой по нескольким тегам.
- Убрана собственная авторизация, добавлена «глобальная» через расширение MediaWiki (вот оно).
- Добавлено облако тегов.
- Поддержка просмотра полной EXIF-информации.
- Переписана на Sway Solstice, причём, вместе со ScaleDaemon’ом. Кода меньше раза в 3, он понятнее и расширяемый, а работает лучше. И апача больше тоже нет.
- Живёт по адресу http://vmx.yourcmc.ru/vitaphotov3.
Почему идущая после 1.3 версия 1.4 называется также V3? Ответ кроется в версии схемы базы данных — это её третий вариант с момента зарождения. Первая база называлась просто «vitaphoto» (Vitaphoto 1.0, 1.1), вторая несовместимая с первой и заполняемая заново (Vitaphoto 1.2, 1.3) «vitaphotov2», третья и теперешняя «vitaphotov3».
Что можно сделать с Vitaphoto V3 (1.4)?
- Посмотреть VitaphotoV3 в действии
- Почитать о VitaphotoV3 в YourcmcWiki
- Посмотреть исходные коды VitaphotoV3
Начиная с сегодняшнего дня, старая версия (1.3) законсервирована, не обновляется, и пока что временно осталась по адресу http://vmx.yourcmc.ru/vitaphoto-legacy.
2010-06-24 Дневник SIV-2 Вектор-Самара
Хроники прохождения SIV-2 Вектор-Самара (15-21 июня 2010). SIV, если кто не знает — Simulation d’Incidents en Vol — «симуляция инцидентов в полёте», курс по превращению нештатных ситуаций в штатные + акробатике, под руководством Бобра.
Много букв, всё под катом! Разделы:
2010-06-09 О торговле в Векторе
Сам летаю у Волкова на лебёдке, тема «Вектор — барыги» на парафоруме не раз поднималась, оспаривалась и обижалась векторами — все вы такие покупатели нехорошие, мы вообще по доброй воле возим, а можем и не возить, вы попробуйте привезти дешевле…
Но ведь интересно — возникают же у людей такие мысли, неоднократно. Значит, неспроста!
Что, конечно, настораживает в первую очередь — цен на сайте в основном нет. Да-да, недолюбливаю людей (на парафоруме таких много, далеко не один вектор), которые не публикуют цен открыто, и ещё приговаривают «цены в личку, этика бизнеса». Фигизнеса. «Цена договорная» это называется. То, что официально никто не торгует, я уж и не говорю.
Здесь, кстати, можно очень положительно отметить http://airsport.ru/ - у них на сайте есть прайс-лист! Действующий! Там правда тоже есть прикол — не написана валюта :))) по крайней мере, не видна с первого взгляда на сайте и в PDF’ке прайс-листа их нет :) но там баксы, что всегда известно, и всегда честно сообщается.
А второе по поводу Вектора… Ну вот пример: вчера договорился о покупке запаски Sky Country, ок, «завтра позвони по этому телефону, я тебе скажу где забрать». Справедливости ради, договорился не с Волковым, а с Тохой, он обычно не занимается продажей. Сегодня звоню — «а её уже забрали» O_O. Вроде и нормально, это их полное право, но вообще-то так дело не делается. Я говорю «ну вообще это как-то не очень хорошо», мне — «ну вообще-то я по этому поводу не очень расстраиваюсь». А на коммент в ЖЖ говорит, мол я вообще по доброй воле решил продать, а мне в душу плюют постоянно такие как вы, потребители. Ну не продавай, какие проблемы, не будет никто плевать. Но ты же сам решил продавать, значит, это в твоих интересах? Ну и делай это нормально…
Ещё раз повторю — это его полное право, кому продавать, решает он. Но всё равно нелогично. Лично я в такой ситуации, даже если бы не занимался продажей оборудования, всё-таки когда позвонил бы ещё один человек, сказал бы, что её по идее сегодня уже забирают и отдал бы приоритет тому, кто позвонил первым. Объективно.
Это как курьер из интернет-магазина — это его полное право, он может и не звонить заранее, а просто приехать, доставить и позвонить по факту — «вы заказали с 9 до 20 доставку, значит, должны быть дома». Но положительных эмоций это, скорее всего, не вызовет, и обычно все звонят заранее, что экономит всем нервы.
А так что получается — мне нужно опять тратить время, выбирать запаску — потому что SC торгует только Вектор, а больше в наличии нет. Звонить, договариваться и т. п.
2010-05-17 Заметки Об Идиотизме - Bugzilla 3.6: New Extensions System
"In accordance with UNIX philosophy, Perl gives you enough rope to hang yourself." — Larry Wall
(«Согласно философии UNIX, Perl предоставляет пользователю верёвку, достаточно длинную для того, чтобы на ней можно было повеситься.»)
…И программисты это делают очень часто. Прекрасная иллюстрация этой цитаты — новая система расширений Bugzilla 3.6. Если кратко, то я даже не знал, что в перле можно сделать такое извращение. И лучше бы не узнавал.
Если расписать подетальнее, идея у авторов была такая — пусть каждое расширение будет подклассом Bugzilla::Extension, вся его конфигурация будет задаваться константами в этом классе, а все хуки (hooks) будут методами этого класса. Идея на первый взгляд неплохая, однако во-первых ведёт к различным проблемам сама по себе, а во-вторых имеет ужасную реализацию.
Старая система расширений была, конечно, не очень хороша, но зато очень проста: есть папочка со скриптами *.pl, каждый из которых представляет 1 (один) хук, то есть по сути 1 (одну) функцию, вторая папочка с хуками в шаблоны, действующими по такому же принципу (положил файл, получай установленный хук), третья папочка «lib», в которую можно складывать свои модули, и т. п. Её тоже уже пару раз рефакторили, в конце концов она пришла к описанному виду.
2010-04-25 И ещё авиамодельные видео
Теперь на тему Thrust Vectoring (управления вектором тяги) :)
Вот моделька F-22 с thrust vectoring’ом :)
Вот ещё некая моделька, хитрая! С дополнительным оперением типа схемы «утка» и гироскопами. «Колокол» чувак, конечно, не исполнял, но что-то мне подсказывает, что моделька его осилит :)
2010-04-08 Статистика голосов Бездны
Я ж когда Бездну читаю, её ещё и «модерирую» — помечаю звёздочками и пятёрками. Пятёрки бывают редко (их примерно 0.5 %), звёздочки — довольно часто (примерно 20 %).
Так как Бездна, теоретически, имеет собственную метрику — количество голосов пользователей, случайно прочитавших цитату — любопытен процент «хорошего» в множествах записей с разным количеством голосов (с тем, каким оно было при попадании в RSSproxy).
Вот я и построил гистограммку:
Вывод — максимум хороших записей в районе 30-и голосов, и в сторону меньшего числа голосов качество убывает даже немного медленнее, чем в сторону большего. А записи с большим числом голосов — похоже, обычное УГ.
2010-03-30 FFmpeg и именованные каналы
Прикольная фишка консольного ffmpeg’а — его можно использовать вместе с именованными каналами (named pipes) для нарезки и слияния видео.
Шаг первый: создаём именованные каналы. А допустим, у нас ещё и аудиодорожек несколько.
Сначала я хотел написать, как завещал великий FAQ — по одному файлу на каждую дорожку, то есть целую кучу: file1.v file1.a1 file1.a2 file2.v file2.a1 file2.a2 file.v file.a1 file.a2. Однако обнаружил, что AVI-контейнер прекрасно переживает конкатенацию и что в этом случае результат получается даже лучше — на мгновении, когда Балу дёргает Багиру за хвост в процессе пения Bare Necessities, не возникает никакого затупа. А в случае с кучей raw-файлов — возникало. Так что попробуем AVI.
mkfifo file1.avi mkfifo file2.avi mkfifo file.avi
Шаг второй: запускаем декодирующие в сырые форматы ffmpeg’и и конкатенирующий потоки cat в фоновом режиме — пускай ждут, пока им разрешат писать в каналы. Пусть входные файлы у нас — это грёбаные DVD’шные VOB’ы с тремя аудиодорожками, дискретизированными на 48 KHz, первые две — 5.1, последняя — моно.
Кстати 1: -ss нужно указывать время либо в секундах, либо в формате HH:MM:SS[.mmm]. Именно в таком, то есть просто MM:SS не прокатит.
Командная строка FFmpeg’а некоммутативна :) от перемены аргументов местами меняется смысл. Например, если указать -ss после -i файл, вы задолбаетесь ждать, пока оно перейдёт к нужному месту в файле, потому что будет seek’ать на уровне кодека. А если указать -ss до -i файл, seek’ать оно будет на уровне контейнера и сделает это быстро.
Кстати 2: для сырых аудиоформатов обязательно указывать параметры -ac -ar и -f (например s16le) либо -acodec (например pcm_s16le), как при кодировании, так и при декодировании, иначе как же оно узнает, какой raw формат мы хотим? При чтении raw формата эти параметры нужно указывать до -i входного_файла.
А -newaudio, например, нужно указывать после имени выходного файла. А опции для добавляемой -newaudio аудиодорожки — непосредственно перед -newaudio.
Кстати 3: -y поможет нам избежать предупреждений.
Кстати 4: запуск ffmpeg’ов с «выпуском» в именованный канал нормально не удавался под непривилигерованным юзером — ffmpeg получал SIGSTOP. В чём дело, я разбираться особенно не стал, а просто пускал его под рутом.
ffmpeg -y -ss 00:24:18 -i VTS_01_1.VOB -map 0.0 -map 0.1 -map 0.2 -map 0.3 \ -vcodec rawvideo -acodec pcm_s16le -ac 6 -ar 48000 file1.avi \ -acodec pcm_s16le -ac 6 -ar 48000 -newaudio -acodec pcm_s16le \ -ac 1 -ar 48000 -newaudio &>log1 & ffmpeg -y -t 91 -i VTS_01_2.VOB -map 0.0 -map 0.1 -map 0.2 -map 0.3 \ -vcodec rawvideo -acodec pcm_s16le -ac 6 -ar 48000 file2.avi \ -acodec pcm_s16le -ac 6 -ar 48000 -newaudio -acodec pcm_s16le \ -ac 1 -ar 48000 -newaudio &>log2 & cat file1.avi file2.avi > file.avi &
ffmpeg -y -ss 00:24:18 -i file1.avi -an -f yuv4mpegpipe file1.v &>log1.v & ffmpeg -y -ss 00:24:18 -i file1.avi -vn -map 0.1 -ac 6 -ar 48000 -f s16le file1.a1 &>log1.a1 & ffmpeg -y -ss 00:24:18 -i file1.avi -vn -map 0.2 -ac 2 -ar 48000 -f s16le file1.a2 &>log1.a2 & { ffmpeg -y -i file2.avi -t 91 -an -f yuv4mpegpipe - 2>log2.v | tail -n +2 >file2.v ; } & ffmpeg -y -i file2.avi -t 91 -vn -map 0.1 -ac 6 -ar 48000 -f s16le file2.a1 &>log2.a1 & ffmpeg -y -i file2.avi -t 91 -vn -map 0.2 -ac 2 -ar 48000 -f s16le file2.a2 &>log2.a2 & for i in v a1 a2; do cat file1.$i file2.$i > file.$i & done
Кстати 1: запустить один ffmpeg, который будет писать сразу несколько выходных файлов, не получится, т.к. кодирующий ffmpeg их будет анализировать по очереди, а декодирующий захочет писать все вместе. А писать в канал, из которого никто не читает, нельзя. Поэтому "сборка" просто повиснет.
Кстати 2: сырой видеоформат называется -f yuv4mpegpipe. Он допускает конкатенацию, но в этом случае нужно отрезать первую строку у всех файлов, кроме первого, чтобы их потоки начинались со слова "FRAME". Сырой видеокодек - -vcodec rawvideo.Шаг третий: запускаем кодирующий ffmpeg.
Кстати: для libx264, начиная с какой-то (Х-З какой) версии ffmpeg’а, нужно указывать опцию -vpre. А ещё лично я люблю забивать максимальный фактор квантования и не париться о качестве.
ffmpeg -y -i file.avi -vcodec libx264 -vpre hq -qmax 28 \ -acodec libfaac -ab 448k -ac 6 BareNecessities6ch.avi \ -acodec libfaac -ab 384k -ac 6 -newaudio \ -acodec libfaac -ab 96k -ac 1 -newaudio
И всё, с данного момента вся спящая в фоновом режиме машинерия активизируется и начнёт кодировать-декодировать.
Изначально вкурено с http://ffmpeg.org/faq.html#SEC29, но сильно исправлено и дополнено :)
2010-03-17 Пожалуюсь на Андроид ещё чуть-чуть
В смысле организации системы Андроид — по сути, к сожалению, шаг назад (куда-то в сторону Windows, возможно, Mobile). Нормальной системы управления пакетами с зависимостями и репозиториями там нет. К чему это приводит на практике? А к тому, что когда на каком-нибудь форуме 4PDA или XDA-Developers куча невнятного народа выкладывает кучу невнятных прошивок («официальная плюс две софтины убрано, а три добавлено») под Windows Mobile, это я понять могу. Ясное дело, винда закрытая, как в неё залезешь. Но когда точно такая же ситуация с Андроидом, который вроде-как Linux, вроде-как открытый, вроде-как инновационный — этого я понять не могу. :-(
Ну что мешало взять, к примеру, ipkg? Был бы ipkg — до Андроида 2.1, к примеру, можно было бы обновляться постепенно, частями. А одна из помех, по-видимому — выбор Java-подобного языка для платформы. В Java, с моей точки зрения, не очень красиво сделано управления библиотеками — куча JAR’ов, которые могут лежать где попало, иметь разные версии и т. д. и т. п. И пусть обычно в нормальных системах под это выделяются отдельные пути, всё равно способ, ИМХО, «defective by design». В Андроиде тоже лежит несколько таких «блобов» (framework.jar) и всё, частями ничего уже не обновишь; а нативная часть системы представляет собой обычную помойку.
Управление библиотеками и модулями языка, с моей точки зрения, очень хорошо сделано в Perl'е, потому что они все физически расположены в директориях, равных названиям пакетов, в фиксированном наборе системных путей. Аналогично расположены XS'ки и AutoSplit’ченные библиотеки. Таким образом, пути не зависят от версий самих библиотек, набор библиотек легко виден невооружённым глазом, и сложно установить две версии одной библиотеки так, что они будут конфликтовать. Плюс к этому есть CPAN — репозиторий библиотек, из которого все они легко ставятся. Похожий подход применяется и в Питоне. В PHP ситуация тоже чем-то похожа, но там, во-первых, большинство функций встроено в сам PHP и используется в виде глобальных функций, а не расширений, имеющих пакет/класс, а во-вторых, нет собственно пакетов.
И ещё один минус управляемого кода: это же ограничение свободы использования интерпретаторов и виртуальных машин разных языков! Ведь если подключить к Java нативную библиотеку ещё можно, то подключить Java-библиотеку к нативной уже сложнее… Короче говоря, мне кажется, что идеальная система должна быть написана на родном коде, а её библиотеки должны быть … ну хотя бы открытыми, чтобы можно было создать биндинги к любым языкам программирования и писать под своё мобилко хоть на сях, хоть на далвике с жабой, хоть на перле.
2010-03-09 Андроид - теперь о минусах
Ну да, Андроид — прикольная игрушка, красивая, куча софта. Про SlideIT keyboard, в которой не обязательно нажимать каждую клавишу, а можно провести пальцем по буквам слова, и она его подберёт по Т9, я уже написал. Есть программа-металлодетектор, которая неким образом использует встроенный компас для определения металла рядом с телефоном. Правда, очень сильно рядом, но тоже fun. Ну и так далее.
Короче говоря, Андроид из того, что сейчас есть — безусловно, лучший. НО это не только и не столько потому, что он очень хорош, а потому, что все остальные — полное говно.
Андроид — НЕ Linux. В Андроиде нет такого уровня повторного использования кода. Андроид НЕ пропагандирует Open-Source. Андроид Маркет — НЕ система управления пакетами. В маркете ситуация примерно как под виндой — много говнософта, некоторое количество платного, довольно много с рекламой, и очень мало открытого (open-source). Всё в одном месте — и то хлеб. Маркет контролируется гуглом, например, все multitouch приложения с маркета убраны, а пользователи могут попадать в чёрный список и переставать видеть платный и защищённый софт.
Реклама — это, конечно, вообще атас. Твари! Вы МНЕ на МОЁМ телефоне в программах будете рекламу показывать, да ещё и трафик хавать?! МОЙ трафик?! Это лечится AdFree Android’ом, но в интерфейсе программ остаются дырки под рекламу. А люди на американских форумах ещё и обсуждают — мол, нехорошо у себя на телефоне рекламу отключать, разработчиков хлеба лишать.
Андроид — НЕ Java. Это некий свой интерпретатор Dalvik VM, то есть пишется там управляемый код, причём без JIT’а — JIT есть только в 2.1, в статусе экспериментального. При этом управляемый код введён, видимо, просто для стабилизации API, так как какие он ещё даёт профиты — не очень понятно: Javaвские разрешения не используются, так что контроля за софтом особого-то и нет. Обязательная подпись кода тоже не очень понятно, зачем нужна — всё равно все ставят всё подряд. Зато из-за Dalvik’а огромное количество написанного на C/C++ кода использовать под Андроидом нельзя. Точнее, можно, но с геморроем, через аналог JNI. Как следствие — Fennec’а, например, нет. Это, в принципе, не так важно — встроенный браузер весьма неплох. Но скрипты он всё-таки не все осиливает.
Непонятно также, в чём проблема установки разных версий Андроида на разные устройства. Архитектура CPU везде, типа, одна (ARM). Драйвера, по идее, сидят в ядре и пишутся производителем в случае отсутствия. Исходники ядра есть. Исходники андроида тоже есть. Вопрос: в чём проблема? Почему для разных устройств делаются разные прошивки? Почему обычный человек не может просто собрать у себя на компьютере 2.1 и залить себе в телефон?
Да, ещё бесит, что народ, создающий доработанные прошивки, выкладывает их всегда на файлообменники — то есть пока тебе 10 раз не предложат увеличить член, прочитать чужие смс и сыграть в онлайн-покер, ты файл не скачаешь. Почему бы не выложить их, к примеру, в торренты?
О софте:
- Нет программ для автоматической транслитерации СМС при написании, а хочется. По-видимому, сам попробую написать на основе встроенного смс-клиента (он, вроде-бы, открытый).
- Аськи нормальной нет вообще — есть всякие Не Ебо (meebo im), работающие через промежуточный сервер и жрущие трафик, скачивая аватары, которые лично мне, к примеру, в х.. не впились. Частичное решение проблемы — сидеть в Jabber’е через Jabiru и использовать ICQ-транспорт.
- Нет вообще никакого Flash Video (*.flv) плеера. Вот это вообще удивительно, так как есть встроенный клиент Youtube, то есть сам формат библиотеки, по идее, понимают. Но локальный файл воспроизвести не можем. Есть платный yxflash — попробовал, полное говно — ничего не воспроизводит.
- Программы для отправки и получения СМС — закрытые и не идеальны. HandcentSMS, например, имеет некоторые баги, которые я бы с удовольствием пофиксил — а нельзя — исходников-то нет. Автор в своём форуме на багрепорты не отзывается. ChompSMS показывает bubble’ы а-ля iPhone и отключить их нельзя, а хочется. Встроенный клиент показывает смайлики и отключить их нельзя, а хочется. Также во встроенном клиенте нельзя выбрать номер из адресной книги.
- Большинство софт-клавиатур тоже закрытые, есть только одна открытая AnySoftKeyboard. Т9 я нашёл только платный или варезный, или HTC IME на телефонах HTC, понятное дело. В AnySoftKeyboard он вроде как тоже есть, но что-то не работает.
- Большинство медиаплееров унылы чуть менее, чем полностью, и ни один не поддерживает CP1251 в ID3-тегах.
2010-03-08 SlideIT
Даааа, вот игрушка этот андроид… Нет предела кастомизации. Просто праздник какой-то.)))
Поставил SlideIT keyboard: типа, набор в одно касание. Просто приблизительно двигаешь пальцем по нужным буквам, а она по Т9 выбирает слово.
Весьма прикольно)) набирать текст на человеческом языке можно с офигической скоростью. Простые слова ловятся на ура… Всякие «интоксикации» чуть похуже, но тоже набираются. Обычный режим она тоже поддерживает. И кстати имеет символьную клавиатуру с большим числом всякой фигни, включая даже символы стрелок вверх-вниз-влево-вправо. Попробую поиспользовать))
И ядро с поддержкой мультитача тоже уже поставил… И эмулятор Денди тоже ^_^
2010-02-28 Копирование из PDF в иероглифы
Наверняка все сталкивались с PDF-ками, которые отображаются совершенно корректно, но при этом никуда не копируются — при копировании получаются некие Юникодные иероглифы.
Так вот, тайна их раскрыта и довольно проста. Кривые приложения, создающие такие PDF’ки, берут однобайтовый CP1251, дополняют его нулевым байтом до двух байт, решают, что это UTF-16BE (Big Endian, младший байт по старшему адресу), и сохраняют текст в таком виде в PDF’ку, дополняя шрифтами, которые включаются рядом же. При этом в шрифты, которые включаются рядом же, по полученным «кривоюникодным» кодам CP1251-символов записываются правильные русские буковки, и поэтому при просмотре всё отображается нормально. Одновременно при копировании текста ни одно приложение понять, что же эта за кодировка такая любопытная, не может.
Помочь в понимании под UNIX’ом можно следующей командой:
LANG=ru_RU.UTF-8 LC_ALL=ru_RU.UTF-8 pdftotext INPUT.pdf - | iconv -f utf-8 -t utf-16be | tr -d '\0' | iconv -c -f cp1251
А под виндой — любым продвинутым текстовым редактором, умеющим сохранить файл в UTF-16BE, потом открыть его как бинарный и удалить все символы \0 (с нулевым кодом), а потом снова открыть его как CP1251.
2010-01-31 Проектор!
Купил себе DLP-проектор Optoma DX319p и проекционный экран (180 см). Оочень прикольно было с этим переться пешком, а потом в метро =) приделали скотчевую ручку, хорошо приделали, я следил — равновесие было соблюдено, в землю экран не втыкался =)
Демонстрацию хорошо провёл! У нас на кухне стоит старый чёрно-белый телевизор «Юность 406-Д». По телевизору шёл «Перевозчик»… Папа его смотрел… Тут, накатавшись на коньках, домой пришёл я, и думаю — хе-хе! Перевозчик, говоришь. Чёрно-белая юность, говоришь… И включил того же «Перевозчика» на проекторе =)) учитывая, что папа и в кино-то последний раз был лет где-то 10 назад, был полный восторг =)) «а как дысал, дысал» — когда я высказал идею покупки проектора, первой реакцией было, скажем так, неодобрение…
Если кто-то не знает, дешёвые проекторы бывают LCD и DLP. Первые — это обычная ЖК-матрица, работающая на просвет лампой. А вторые — это матрица микрозеркал, отражающая свет от лампы. Однако матрица у дешёвых DLP одна, и поэтому, чтобы изображение было цветное, попеременно показывается то красная, то зелёная, то синяя его часть. Отсюда цветное мерцание, эпилепсия и самоубийства. Но зато цвета ярче и насыщеннее, и показатели контраста тоже. В общем, я выбрал цвета.
Итак, DLP. Цвета таки действительно классные, а чёрный цвет — действительно чёрный. Тень от руки на экране в тёмной комнате разве что чуть-чуть темнее, чем отображаемый чёрный цвет. Радуга видна отчётливо! Но «по мозгам», вроде, не бьёт.
Сейчас пробую пошизить и поработать «на проекторе». При этом на экране ноутбука одновременно запущен фильм)))
Между прочим, сильно обиделся на KDE4 — Plasma, оказывается, не поддерживает несколько мониторов на одном X-экране (то есть, через xrandr).
2010-01-15 InnoDB не разваливается, разваливается память!
Однако, история с InnoDB исчерпана.
Сначала было подозрение на OPTIMIZE. Попробовал — не воспроизвелось.
Часик повосстанавливал, танцами с бубном вокруг разных значений опции innodb_force_recovery. В какой-то момент непонятным образом удалось снять mysqldump предположительно повреждённой базы и потом залить его обратно, после чего MySQL запустился более-менее без ошибок, по крайней мере, без segmentation fault’ов. Тут мне бы, конечно, снять полный дамп всех баз, увидеть ошибки, если они есть, либо получить копию данных, если их нет, но нет! Появилась новая идея.
Потом было подозрение на checkarray софтового RAID’а, запускающийся каждую неделю из крона. Попробовал. Воспроизвелось. Да так воспроизвелось, что при восстановлении данных таки похерилось, правда, лишь чуть-чуть и ненужных (немножко старых ревизий статьи, у которой их всего > 200, велика потеря). Ну, думаю, вот ты гадина, а! Ну, думаю, снова меня XFS, пусть даже в связке с mdadm’ом и InnoDB, обидел! Ну, думаю, ах я его! И сделал его ах — /var/ перенёс на ext3 — не ext4, потому что ядро ещё было 2.6.26, а в нём, дебиановском, ext4 нема, и InnoDB на «сырой раздел» (Raw Device) повесил, просто на RAID’овый, то есть без XFS’а в качестве слоя промежуточного. Провёл checkarray одновременно с обновлениями базы — уцелела. Лёг спать.
А за ночь база успела рассыпаться снова и уже без посторонней помощи mdadm’а. А я, зайдя на сервер, совершенно случайно стал архивировать 2-гиговый лог bzipом2. Архивировал он, архивировал, а потом и сказал — не хочу больше, устал. Может, у меня самого баг, но я в это не верю и надеюсь, что не будет никогда этого (заявление прекрасное), может, это компилятор скомпилил не туда и не то… А может, это у тебя с памятью что-то? Ну а частично записанный файл я, конечно, удалю, нафига тебе мусор всякий собирать.
Я и подумал — а может, у меня и правда с памятью что-то? Оказалось, действительно, даже memtester — не путать с memtest86/memtest86+, запускающимся вне операционной системы какой бы то ни было — на одном тесте и некоторых проходах обнаруживал ошибки. Правда только на одном тесте и не на всех проходах, но мы-то знаем, что их быть не должно вообще. Вот так и решилась проблема с разваливающимся InnoDB — заменой памяти. Для сервера её объём, кстати, был уже почти неприличен (2 гб). Теперь 4 гб. Тоже немного, но сервер-то изначально за «корок сопеек» самосборный, да и то халявит-простаивает, так что нефикЪ.
Кстати, памятью были две 1 гб планки Kingston’а 533 МГц’овых, полный мемтест я по ним ещё не гонял, но судя по тому, что с заменой всё починилось — именно они и были виновны. Мемтест погоняю и отчёт выложу, а пока запомним, что прожили они — парой, вместе и счастливо — всего примерно 2.5 года. А на новые 2гб Hynix’а во Флеше дали гарантию аж 5 лет, так что временно — до того, как накроется уже и Hynix — запишем, что Kingston — говно.
А ещё я из этой истории извлёк урок — бэкапы надо делать не на случай, что харды накроются — харды просто так не накроются, и от них RAID спасёт, а на случай, что чьи-то кривые ручки (программистов, конечно), внесут Страшный Баг в твои данные, и RAID не спасёт, а только размножит ошибку радостно по всем дискам. Либо ещё один вид бэкапов — «Larin-style». Которые закатываются на диски и закапываются на даче. Это на случай уничтожения или утраты. Или визита гоблинов.
2010-01-11 InnoDB разваливается!
Как он меня достал, капец!
Чего происходит, понять не могу, но время от времени база берёт и разваливается. Без каких-либо видимых предпосылок, просто берёт и разваливается. Все остальные базы целы (тоже InnoDB), а FeedOnFeeds разваливается.
Я уже даже с Debian’овского мискля слез и на Ourdelta перешёл, а база всё равно разваливается. А tablespace в InnoDB общий. Посему обламываются запросы ко всем базам.
Единственное, чего FeedOnFeeds делает отличного от других — это, похоже, OPTIMIZE TABLE. Так что я его сейчас отключу и попробую пожить без него, вдруг поможет?
А может, вообще пора на PBXT валить?
2009-12-27 И снова авиамодельные видео
Как же я прусь с FPV (First-Person View, вид от первого лица) видеороликов с авиамоделек — это капец =) бесконечно могу смотреть. Ну ничего, скоро соберу себе Great Planes Slinger и попробую не убить его при первом же полёте :-D
А вот видео от первого лица с установленной системой RVOSD (RangeVideo On-Screen Display) — телеметрия, GPS и автопилот:
FPV stryker autopilot maiden flight from Vova Reznik on Vimeo.
Правда не всё бывает гладко, бывают и вот такие катаклизмы… O_O
Данное резонансное явление называется «Flutter» (флаттер) — примерно от него, кстати, знаменитый Такомский мост развалился.
2009-12-23 Мечты о Bugzilla и Testopia
Выкинуть из багзиллы:
- Template Toolkit. Жестоко и полностью.
- Из шаблонов «логику уровня приложения», которой там процентов 50.
- Из шаблонов все сообщения и строки в отдельный уровень локализации а-ля MediaWiki.
Выкинуть из тестопии:
- 4 описания (Setup, Breakdown, Action, Expected Results), и заменить их «Description», интегрированным с Wiki.
- Документы тест-планов, и заменить их интеграций с Wiki.
- Почти весь AJAX. Можно оставить чуть-чуть — в местах, где он ДЕЙСТВИТЕЛЬНО требуется. Можно оставить механизм dashboard’а, но сделать его лучше (произвольное расположение) и сильно сбоку.
- Типы планов. Уж больно они «сбоку».
Сделать в багзилле как надо:
- Форму пользовательских настроек.
- Форму поиска багов.
- Форму редактирования бага.
- (Сделано в нашей CustISzilla) HTML-почту.
- ORM в основе объекта «баг».