Понадобилось тут. Заманался гуглить готовые решения — собрал.
Пакеты для amd64 лежат тут.
Для самостоятельной сборки под другие архитектуры, скачайте
php5_5.2.13-1.diff.gz
php5_5.2.13-1.dsc
php5_5.2.13.orig.tar.gz
2010-04-12
PHP 5.2.13 for Debian Squeeze
2010-02-21
Flash Compiler as Is
Не могу молчать об этом!
Ковырялся тут с флешем. Это может шокировать любого IT специалиста.
Класс:
var A : Number = 0.0;
A = A*2*4;
И его дизассемблятина:
5 pushdouble 0
7 convert_d
8 setlocal1
9 getlocal1
10 pushbyte 2
12 multiply
13 pushbyte 4
15 multiply
16 convert_d
17 setlocal1
Даже в 21м веке остались подходы из 80ых! Долой оптимизаторы!
На железе с гигафлопом итоговая производительность в районе полутора мегафлопов.
p.s.: haXe транслирует так же.
2010-01-27
WavPlayer 1.7.1 — full JS api and support for reversed order bits .lu and .la
New version of WavPlayer, 1.7.1 released.
(далее…)
2009-12-03
Умножение
16битная математика для 8051 / ADuC847. Обычная и стандартная задача, встречающаяся сплошь и рядом. Просто? Давайте посмотрим.
Пусть у нас есть два 16битных беззнаковых числа во внутренней памяти: U1:U0 и V1:V0. Нужно вычислить их произведение, результат сложить в регистрах R0-R3.
(далее…)
2009-11-29
Asterisk records flash player — WavPlayer 1.6.1
Продолжаем эпопею с прямым проигрыванием записанных asterisk’ом файлов. Новый релиз WavPlayer: 1.6.1.
Скачать полно дерево исходников WavPlayer-src-1.6.1.7z(463Kb) либо просто пример интеграции: WavPlayer-sample-1.6.1.tar.bz2(30Kb).
Update: WavPlayer 1.7.1
(далее…)
2009-11-10
Теория и практика применения термосопротивления на ADuC847
В прошлый раз, было описано как измерить температуру с помощью термопары. Термопара позволяет производить измерение в довольно широком диапазоне, но в случае, когда нужна высокая стабильность измерения и чуствительность к малым изменениям — применяют термосопротивления.
Термосопротивления работают в меньшем диапазоне (до 600 градусов в пределе), зато они описываются полиномом второй степени (третьей, если включать отрицательный диапазон), имеют очень высокую стабильность считываемого показания (поскольку сигнал измеряется десятками Ом на градус, а не милливольтами).
(далее…)
2009-10-19
WavPlayer — flash player for asterisk sounds
Всё, для полноты картины, в WavPlayer были внесены последние изменения:
- Добавлена поддержка .alaw, .ulaw, .sln сырых файлов.
- Добавлено вычисление длины записи, чтобы можно было выводить прогресс
- Добавлены callback’и в js, таким образом можно сделать полноценный интерфейс на JS
Скачать его можно отсюда: wavplayer-1.2.tar
Теперь, и с README.txt внутри :)
Update: WavPlayer 1.7.1
Свежак: WavPlayer-1.6.1 с примером интеграции, возможностью позиционирования по файлу и паузой.
(далее…)
2009-10-18
WavPlayer 1.1 — flash wav/au/gsm player
Поскольку WavPlayer, который был разработан, в первую очередь предназначается для проигрывания файлов, записываемых Asterisk,то логично, что в рассылке всплыл впопрос: а играет ли он .wav49?
Update: WavPlayer 1.7.1
Свежак: выложен WavPlayer-1.2 с поддержкой RAW файлов: sln, alaw, ulaw и возможностью создания интерфейса на JS
(далее…)
2009-10-17
Thread locking for JS
Define: var busy = 0; // In accessible context
Lock: if (++busy!=1) { –busy; return; }
Unlock: busy=0;
Один из лучших простых методов блокировки на JS. хотя и не идеальный — ++busy не атомарный :( поэтому теоритически может получиться так, что два кода одновременно начавших выполнять этот иф — и оба не выполнятся. но никогда не будет такого, что оба выполняются.
2009-10-15
WavPlayer – wav/au player on flash
При работе с телефонией частенько всплывают файлы, записанные в 8Khz, и кодированные в PCM/G.711a/G.711u. Что делать, если нужно обеспечить проигрывание этого файла с веба? Нужен wav/au flash player. Но флеш поддерживает только mp3…
Update: WavPlayer 1.7.1
Свежак: WavPlayer-1.6.1 с примером интеграции, возможностью позиционирования по файлу и паузой.
Свежак: выложен WavPlayer-1.2 с поддержкой RAW файлов: sln, alaw, ulaw и возможностью создания интерфейса на JS
Свежак: выложен WavPlayer-1.1 с поддержкой GSM кодека.
(далее…)
2009-10-03
Вывод списка в табличной форме
Достаточно часто встречается в современной семантической верстке проблема: логически, есть список элементов. А визуально дизайнер хочет разместить это в виде таблички. Что же делать? Выдавать на-гора обертки дива за дивом, и ставить им display:table? Отказываться от семантики?
(далее…)
2009-09-22
Skype API on Linux
Волею судеб, идёт сейчас крупная битва за урожай борьба с подъёмом и рулением Skype клиентами под Linux. Посольку Naked Skype так и остался только спекой, приходится жить со стандартным клиентом.
(далее…)
2009-09-04
Hardware рулит, или о пользе гистерезиса.
Практически все аппаратные системы обладают гистерезисом: отставанием реакции на приложенные силы. Когда-то это плохо (например, передавать сигнал без сдвига фазы), когда-то это используют (те же магнитные способы записи).
Но не мешало бы об этом вспоминать и при разработке софта! На днях столкнулся с очень отвратительным поведением Firefox: если по hover размер блока изменяется, и при этом объект уходит из-под мыши — блок теряет hover. Возвращается к прошлым размерам и снова применяет hover. Некрасиво.
попробуйте сами, наведите на правый край этого квадрата:
Кстати опера работает лучше: потерю hover она отрабатывает, но восстановление после этого hover опять игнорируется. Хотя решение всё равно не идеальное — прыгает при движении мыши. Что, в общем-то, лучше, чем постоянно прыгающее в статичном состоянии.
<html> <head> <style> a { display: block; border: 1px solid red; width: 100px; height: 100px; background: blue; } a:hover { display: block; border: 1px solid red; width: 50px; height: 100px; background: blue; } </style> <body> <a href="test">test</a> </body> </head></html>
2009-08-13
ADuC847, его ADC и измерение температуры с термопары (часть 2: практика)
Теперь посмотрим реализацию на практике измерения температуры.
(далее…)
Автоматические многоточия
Вы же часто видели классическое оглавление?
А..................1 Б..................2 В..................3
Как получить его в HTML+CSS без использования кучи точек и сложного выравнивания?
(далее…)
ADuC847, его ADC и измерение температуры с термопары
Казалось бы: классическая задача. Есть термопара (ХА, ХК, ПП), подключенная к АЦП (между AIN1-AIN2), есть датчик температуры разъема (TC1047A). Нужно получать периодически температуру. Чего проще?
(далее…)
2009-08-02
Удаленная факс-машина на Asterisk
Создание удаленной факс-машины представляется довольно громоздкой системой. Как правило, для решения устанавливают Samba на сервер, на котором установлен Asterisk, на ней поднимается виртуальный принтер.
Мне же требовалась факс машина на удаленном сервере. То есть, сервер с asterisk находится не в локальной сети, а в локальной сети нет ни одной машинки с линуксом. Конечно, можно было установить andLinux или голый coLinux… Но это очень сильно попахивало забиванием гвоздей паровым молотом. Можно, но что-то не для того он предназначен.
Посему родилась такая схема:
1. Ставится виртуальный принтер http://sourceforge.net/projects/imageprinter/
2. В нем ставится формат TIFF + FAX3 + Multiple page, с сохранением в C:\FAX и запуском после C:\FAX\fax.vbs
3. В c:\fax\ складывается файлик fax.vbs
Получается так: пользователь печатает на Imageprinter, получает в ответ запрос на какой номер отправить факс, затем fax.vbs делает следующее:
1. Пакует rar’ом картинку (что сильно утрамбовывает ее. если рара нет — уйдёт непакованное)
2. отсылает POST’ом по http эту картинку на http://куданадо/fax/?fax=введенныйномер
На сервере /fax/index.php производит следующее:
1. Распаковывает картинку (если пакованная)
2. Создаёт .call файл
3. Переносит его в spool директорию астериска, в outgoing.
Пример кода приведён в конце записи. Пример не содержит авторизации, обхода проблем прав доступа и тд, однако подойдёт для начала экспериментов.
Скачать: fax.vbs + index.php
P.S.: Для asterisk-1.4 TxFAX и RxFAX берут отсюда.
2009-07-15
Gallery2+Drupal repair
English, in short: if you have troubles after Gallery2 database crash, you should reinstall gallery2, then you will still have errors in drupal like
Error (ERROR_MISSING_OBJECT) : 1 GalleryUser
that problem fixed by manual creation of mapping of drupal admin to gallery2 admin with
INSERT INTO `g2_ExternalIdMap` VALUES ('1', 'GalleryUser', '6');
After that you should do again drupal users export to gallery2, and re-create albums from old g2data folder.
После «неосторожного обращения с mysql» были убиты файлы данных innodb, в которых лежала фотогалерея Gallery2, встроенная в друпал. Разумеется, сайт себя начал плохо чуствовать, а галерея померла в принципе.
Папка g2data была срочно забекаплена для восстановления всех 600 метров ужасов от юзеров, в базе мускула все g2_% таблицы были почиканы и сама галерея переустановлена.
Вот тут-то началось веселье. Было невозможно ни включить ни выключить плагин в друпале, постоянно ругалось на битость галереи.
Вылечилось ручным созданием маппинга друпал админа на админа галереи (в друпале админ всегда uid=1, а в галереи свежеустановленной админ имеет id=6)
INSERT INTO `g2_ExternalIdMap` VALUES (’1′, ‘GalleryUser’, ‘6′);
После этого нормально отключились доп плагины галереи и удалось провести полноценный экспорт всех юзеров.
Затем просто вкомил в качестве «загрузка с сервера» папку old-g2data/albums и всё вернулось на круги своя.
Ну, кроме настроек, разумеется. Но это уже отдельная песня.
2009-07-14
Opera scrollbar problem
English version, in short: if you have some block for all size of screen, that should cut-off all content (width/height 100% + overflow: hidden), opera cuts off its content, but left scrollbar for empty content.
To fix that problem, you can try replace
#some { overflow: hidden; width: 100%; height: 100%; }
with
#some { overflow: hidden; position: absolute; left:0; right:0; top:0; bottom:0; }
That helps opera to correctly cut-off all content without adding scrollbar. That doesn’t break Mozilla/Safari/Chrome, but breaks even IE8, so you should override CSS for IE8 with conditional comments.
Поговорим опять о багах в Опере. на этот раз — лишний скроллбар.
Вот у нас есть код:
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru"> <head> <link rel="stylesheet" href="screen.css" type="text/css" /> </head> <body> <div id="nofooter"> <div id="main-page-sizer"> <div id="main-page-wrapper"> <div id="main-page"> <div id="main-bg"></div> </div> </div> </div> <div id="footer-pusher"></div></div> <div id="footer"> <div id="logo-footer-mover"><div id="logo-footer"></div></div> </div> </body> </html>
И парный к нему CSS:
html{ height: 100%;} body { height: 100%; margin: 0; padding: 0; position: relative; background: #6c1700 50% 0; } #nofooter{ min-height: 697px; min-width: 1000px; height: 100%; margin-bottom: -1px; position: relative; } #footer-pusher { height: 1px; clear: both; line-height: 1px; font-size: 1px; } #footer { height: 1px; line-height: 1px; min-width: 1000px;} #main-page-sizer { min-height: 697px; margin-bottom: -1px; height: 100%; width: 100%; overflow: hidden; position: relative; } #main-page-wrapper { margin: 0 -140px; overflow: hidden; height: 100%; } #main-page { background-color: #4c1700; width: 1280px; height: 100%; margin: 0 auto; position: relative; background: red; } #main-bg { background: green no-repeat; position: absolute; left: 356px; top: 0; width: 634px; height: 970px; } #logo-footer-mover { width: 202px; height: 1px; margin: 0 auto; position: relative; } #logo-footer { background: blue; width: 202px; height: 71px; position: absolute; top: -70px; left: 0; }
Итоговая страница тянется по Y от ~700px до 1000px без скроллбара, причем во всем этом пределе от main-bg видно столько, сколько влезло.
(На самом деле, блок main-page имеет размер 1280*970px, и в нем может быть размещено что угодно, причем это что угодно будет отцентровано по иксу в размерах от 1000px (при сжимании от 1280 до 1000 слева и справа части скрываются без появления полосы прокрутки), и прижато по игреку к верху, причем всё, находящееся внизу ниже 700px отрезается тоже без появления полосы прокрутки. При размере больше 970px размер main-page должен быть 100% (там сейчас и прописано 100%), чтобы другие расположенные в нем блоки с height=100% были максимум, всё остальное занимает его бекграунд.
Забудем про проблемы IE (они легко фиксятся через expression для 6 и 7), и поговорим о интересном баге с прокруткой в опере.
При сворачивании, как только размер #main-page-wrapper становится меньше размера #main-bg, то содержимое #main-bg корректно обрезается, но появляется полоса прокрутки, несмотря на overflow:hidden. Причем за пределами ничего нет, там показывается только бекграунд от body.
После долгих копаний, удалось найти workaround вокруг этой проблемы: вместо
#main-page-wrapper { overflow: hidden; height: 100%; }
Используется
#main-page-wrapper { overflow: hidden; position: absolute; left: 0; top: 0; bottom: 0; right: 0; /* Opera scrollbar workaround */ }
То есть меняем блок, с параметрами width/height: 100%+overflow:hidden на position: absolute 0/0/0/0 + overflow:hidden.
Теоритически, это одно и то же. На практике созаёт проблемы с IE8, которые лечатся через условные комментарии и переопределение на position:static+height:100%.
В общем, это решает проблему… но не совсем. В результате всё хорошо показывается если загрузить страницу в каждом из разрешений.
Если же загрузить в маленькое окно и начать тянуть только за нижнюю границу — то отрисовка бекграундов-изображений не повторяется, рисуется только сплошной цвет. До тех пор, пока окно не будет изменено еще и по горизонтали, или не будет перезагружена страница.
Workaround’а для этой проблемы уже не удалось найти.
2009-07-12
Saitek P2500 driver 0.9.0 — обновление linux драйвера для Saitek P2500
Linux friver for Saitek P2500 gamepad supporting force feedback. Original (v.0.8.1) found at goffi.org, but it too old, and can’t be build with latest kernel.
I have updated driver, now it compiles and work against 2.6.30 kernel, supporting FF_PERIODIC (with only FF_SINE waveform) and FF_RUMBLE (emulated via FF_PERIODIC in driver, kernel emulation not used).
Get it here: Saitek P2500 linux driver v0.9.0.tar
Драйвер с поддержкой фидбека, найденный на goffi.org версии 0.8.1 оказался настолько лохматой давности, что с последним ядром не собирался принципиально.
В результате глубокого ковыряния в дебрях коммитов ядра, родился драйвер 0.9.0: компилится и работает на 2.6.30, поддерживаются FF_PERIODIC с FF_SINE и FF_RUMBLE (причем FF_RUMBLE сделано изначально goffi через FF_PERIODIC. вообще, линуксовый framework для forcefeedback сам делает эту подмену, однако что-то на тесте через fftest показал, что слабый и сильный RUBMLE не отличаются через ядровую подмену, так что я оставил подмену от goffi).
Качайте: Saitek P2500 linux driver v0.9.0.tar
2009-05-06
my2pg.pl: продолжение
как выяснилось, одного фикса с ` ему мало.
Еще обнаруженные проблемы:
1. В после конверсии INSERT в COPY числа с плавающей точкой (1.0 например) превращаются в две колонки. Бред тот еще. Лечится правкой $colRe:
my $colRe = qr/(?:'[^'\\]*(?:\\.[^'\\]*)*'|[\w.+-]+)/;
2. DROP TABLE IF EXISTS оставляет после себя висящую «;». Мелочь, а неприятно. Заодно остаются USE …; LOCK и UNLOCK…
Вылечилось заменой блока дропа на:
s/^DROP\s+TABLE\s+IF\s+EXISTS([^;]+);//; # remove USE database; s/^USE\s([^;]+);$//; # remove LOCK & UNLOCK clauses s/^(UN)?LOCK TABLES[^;]*;$//; # remove mysql-specific comments s/^\/\*![0-9]+ .*?\*\/;$//;
3. ENUM тип теперь поддерживается нативно, а потому сишный код для него лишний. Выкинута вся генерация .cшки относительно этого типа, и перед s/enum… воткнуто
$types .= "CREATE TYPE $typename AS ENUM ('".join("','",@item)."');\n";
4. Ну и как писано выше –
s/`//g;
после
if($tabledef) {
Взять поправленную версию можно тут: my2pg-133
Дополнение: так же обнаружились проблемы с импортом NULL полей и добавлена обработка ON UPDATE CURRENT_TIMESTAMP.
2009-05-05
Попробуем оживить блог работой.
Что ж, попробую запустить блог полезными записями..
Сегодня понадобилось отконвертить дамп из мускула для скармливания pgsql’ю. Лёгкий гуглинг в момент нашел скрипт my2pg.pl, однако он сломался на первом же: бэк-тики в названиях (`field`).
Фикс оказался самым простейшим, после
if($tabledef) {
воткнуть
s/[`]//g;