← All posts tagged programming

проделать путь от макетки с парой микросхем до загрузки DOS за месяц, да еще и короткими набегами (из-за хронической нехватки времени)...
Да это просто невероятно круто!

С сильным опозданием прочитав чудесную книгу Чарльза Петцольда "Код. Тайный язык информатики" (надо было лет на 12 раньше), я не раз испытал сильный прилив эмоций: "Так вот какой он, путь от схемотехники, релейных машин к Intel 4004 и IBM PC!" Похожие чувства я испытывал местами и при прочтении Just for fun.

Теперь же, читая описание создания IBM PC своими руками, снова перехватило дух. Да, теперь можно создавать персоналку, стоя на плечах гигантов. Схемы, программное обеспечение — все в открытом доступе, технологии доступны. Но все равно захватывает!

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

Тот самый баг Грейс Хоппер: Moth in relay. First actual case of bug being found.
В сети часто встречается неправильная дата сего памятного дебаггинга: 9 сентября 1945 года. В действительности, в 45-м релейного компьютера Mark II еще не существовало, событие отлова моли в реле произошло двумя годами позже, в 1947-м. Зато слово bug в смысле неполадок употребялось в профессиональном сообществе задолго до.

Кажется, традиция отмечания 9 сентября дня тестировщика не распространена: о его отмечании слышать не приходилось. Поправьте, если это не так.

Наиболее жизнеспособным вариантом для продвижения JavaScript для разработки мобильных приложений называется доведение производительности мобильных устройств до уровня настольных систем. opennet.ru

JavaScript — Двигатель прогресса! А заодно и те безымянные миллионы, которые используют написанные на JS мобильные приложения.
Гоняя шары в метро на своем смартфоне, помните: вы двигаете технический прогресс! ;)

Опытным путем установил ограничение на максимальное количество точек на графике (по крайней мере, в случае описания двумя числами int + double) — 43249. На 43250 приложение выпадает в осадок, переставая отвечать. На построение массивов данных посему ставим ограничение по количеству точек. Зная теперь "число смерти", вставил откусывание хвостов спектральных порядков (симметричное относительно центра) и построил 25 рядов на одном графике. Ололо!

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

Управление положением легенды упорно отказываюсь понимать. Играя двумя параметрами отступов (легенды и поля рисования), нарисовал более-менее красивую картинку.

Также добавил кнопки зума, которые включают только зум по вертикали, только по горизонтали и оба. В итоге 6 батонов, картинки к ним пока не подобрал, потому стандартные плюс-минусы.

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

Построитель бинарных данных #2397281 теперь умеет читать Fits! На картинке — фрагмент спектра B-звезды из библиотеки Elodie obs.u-bordeaux1.fr По оси абсцисс, как и в прошлый раз — длины волн в ангстремах, но сгенерированные в соответствии с параметрами из fits-шапки.
Надо сказать, что это не первое андроид-приложение, читающее фитсы, есть еще Ioda ioda.lal.in2p3.fr play.google.com Правда, интерфейс настолько адский, что кроме вшитых примеров пока построить не сумел — все время падает без объяснения причин.

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

Радует, что смартфоны строят большой объем данных весьма шустро, совсем не как в эмуляторе ;)

Чуть более недели назад, в прошлую субботу я начал эксперимент по глубоководному погружению в неизведанную среду, который закончился на этих выходных.
Еще более года назад задумывался над написанием андроидного приложения по визуализации рядов данных: #1784224 И вот наконец распаковал Эклипс с андроидным SDK.
Устройства на Андроиде в массе своей не блещут производительностью, так что приложений под Андроид, способных показать график с 20x2000 точек, я не встречал. Именно с такими данными порой приходится работать: такого размера типичный массив одномерных векторов, представляющих собой экстрагированные порядке эшелле спектра сравнительно яркой звезды ;) Библиотеки для чтения бинарных данных я давно написал: #1050876 spectractor.sourceforge.net Правда, на Пайтоне и Си, а тут совершенно незнакомая мне Ява.
Графические библиотеки под андроид быстро нашлись. Пожалуй, самая симпатичная — AChartEngine achartengine.org Ее и выбрал.
В процессе написания познал много интересного и нового. В первую очередь, столкнулся с отличием от x86: чтение бинарных данных происходит в противоположную сторону. Пришлось переворачивать каждый прочитанный из файла байт, little to big endian: stackoverflow.com
Затем, когда массивы int[][] (вектора, координата Y графика) и double[][] (привязка к длинам волн, координата X) были прочитаны по hardcoded путям, выяснилось, что нативного диалога выбора файлов в Андроиде не существует. То-то они везде разные... Хорошо, копипастим готовое решение: stackoverflow.com
Далее тропинка раздваивается: дербаним примеры к AChartEngine и параллельно создаем приложение с нуля, начиная с диалогового окна выбора файлов и параметров, сколько и каких порядков строить. Первой к результату привела тропинка копипаста: уже в среду приложение строило то, что я просил.
Наиболее времязатратной для меня оказалась задача передачи выбранного массива данных (набор int[][], double[][] и сопутствующие им обозначения) из одного Intent-а в другой. В итоге, Bundle был запакован и передан, осталась настройка параметров графика, вылившаяся в избавление от заголовка окна неочевидной строкой в манифесте и не очевидным же уменьшением полей графика путем задания отрицательного значения отступа от края.

Итого, за первую неделю лета в свободное время (то есть за все оставшееся после неотложных дел, включая завтрак, обед и ужин) получил готовое самодостаточное приложение по визуализации массивов данных в бинарном представлении (файлы на СД-карте). Написанное, замечу, на доселе мне незнакомом языке. Кто считает, что это фигня, поскольку весь код уже написан и задача (слепить снеговика за час) фигня — ну попробуйте ;)
Скриншот XX построенных порядков прилагается.

Да здравствует копипаст-программирование! ;)

Провел дома Ubuntu install fest, поставил две 32-битные Убунты 12.04. И тут же разочаровался: дистрибутив стал еще более непригоден для целей разработки, ничего не компилится. На работе не медля поставил третьей системой Debian-based Linux Mint (первый в рейтинге Distrowatch, основанный на дебиане). Для начала он меня обрадовал невозможностью смены раскладки при установке, пришлось называть пользователя и машину русскими буквами ;) Далее обнаружилось, что wine в репах отсутствует, поставил ручками. В остальном — полет нормальный.

А мне epydoc в качестве генератора документации нравится все больше и больше, даже фреймы уже не особо режут глаз. Более того, он помогает исправлять баги, поскольку является, по сути, парсером и выдает основательный лог. Пока вот так: spectractor.sourceforge.net
А не подскажет ли кто хорошего руководства по подготовке образцово-показательного питоньего пакета? Пока пишешь таковой в одиночестве, вмешаться и наставить на путь истинный некому. Готов работающий setup.py, почти все сабмодули пакета, но метаинформация (содержимое всяких __init__.py, __package__) меня смущает.

В очередной раз не осилил задачу проведения сглаживающего сплайна для задачи полуавтоматического проведения континуума у спектрального порядка. Штурм scipy.interpolate пока почти ничего толкового не дал. Все, что у меня есть — это проведение сплайна по точкам, которые натыканы мышкой на графике. В MIDAS есть процедура interp/ii, она делает в точности то, что надо: по точкам спектрального порядка, коих 1000-2000, она проводит сплайн в зависимости от заданного параметра сглаживания и порядка сплайна, выдавая гладкую кривую, на которую порядок и делится. Все, что я накопал в scipy.interpolate, хочет, чтобы сплайн шел через каждую точку вне зависимости от заданного параметра сглаживания. То есть обычно задача — добавить информации, через несколько точек проведя кривую, а тут задача наоборот — по большому массиву построить гладкую кривую, описывающую общий ход. Если б кривая была полиномом небольшой степени, наверное стоило бы использовать leastsq, но. Нужна возможность менять параметр сглаживания, чтобы игнорировать дефекты размером от 1-10 до, скажем, 20-100 пикселей, а не стараться описать их кривой. Насколько я понял, нужно копать в сторону автоматического выбора т.н. узлов сплайнаЮ а я фиг знает, как это сделать в python. Кто-нибудь в теме?..

Ну наконец-то залились доки на spectractor.sourceforge.net Вот так: rsync -e ssh * gvardovich,spectractor@web.sourceforge.net:/home/groups/s/sp/spectractor/htdocs/ -avz С установкой RSYNC_PROXY. Фууу... Фреймы, которые делает Epydioc, конечно, ужасны, но зато доки готовые. Осталось еще для трех сабмодулей доки сделать и по-русски отчет написать. Не считая вечной борьбы с говнокодом.

Сделал сегодня 13 коммитов, создал epydoc-ом всю документацию и уже час как воюю с sourceforge.net. Как там залить файлы и куда?! Уже залил тестовый файл index.html в два разных места, эффекта — ноль. Вот это либо я не понимаю, либо что-то тут не так: sourceforge.net

Поставил и запустил свой spectractor на винде. Завелось на python-2.6 без проблем, класс! Надо посмотреть, как там с более поздними версиями у scipy.
Пора делать страничку spectractor.sourceforge.net и класть туда архив, пока там все еще git-репа. Перфекционизм и необходимость работать сильно тормозят процесс.