Пещера отшельного фердопердозника

2010-02-21

Flash Compiler as Is

Рубрика: low-level programming, programming — Метки: , , , , — datacompboy @ 01:24:07 | 1,132 views

Не могу молчать об этом!
Ковырялся тут с флешем. Это может шокировать любого 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 транслирует так же.

2009-11-10

Теория и практика применения термосопротивления на ADuC847

Рубрика: low-level programming, programming — Метки: , , , , — datacompboy @ 02:05:01 | 1,157 views

В прошлый раз, было описано как измерить температуру с помощью термопары. Термопара позволяет производить измерение в довольно широком диапазоне, но в случае, когда нужна высокая стабильность измерения и чуствительность к малым изменениям — применяют термосопротивления.
Термосопротивления работают в меньшем диапазоне (до 600 градусов в пределе), зато они описываются полиномом второй степени (третьей, если включать отрицательный диапазон), имеют очень высокую стабильность считываемого показания (поскольку сигнал измеряется десятками Ом на градус, а не милливольтами).
(далее…)

2009-10-18

Комментарии…

Рубрика: Без рубрики — Метки: , , — datacompboy @ 20:10:39 | 451 views

Н-да. Обнаружил, что блог вообще не принимал комментарии, по причине того, что стоит за reverse proxy. Вроде бы исправил. Интересно, спам зафлудит блог или нет?

2009-10-15

WavPlayer – wav/au player on flash

Рубрика: low-level programming, voip, web programming — Метки: , , , , , , , , , , — datacompboy @ 22:59:53 | 3,512 views

При работе с телефонией частенько всплывают файлы, записанные в 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

Вывод списка в табличной форме

Рубрика: web programming — Метки: , , , , — datacompboy @ 16:16:51 | 739 views

Достаточно часто встречается в современной семантической верстке проблема: логически, есть список элементов. А визуально дизайнер хочет разместить это в виде таблички. Что же делать? Выдавать на-гора обертки дива за дивом, и ставить им display:table? Отказываться от семантики?
(далее…)

2009-09-22

Skype API on Linux

Рубрика: voip — Метки: , , , , , , , — datacompboy @ 00:27:21 | 1,496 views

Волею судеб, идёт сейчас крупная битва за урожай борьба с подъёмом и рулением Skype клиентами под Linux. Посольку Naked Skype так и остался только спекой, приходится жить со стандартным клиентом.
(далее…)

2009-09-04

Hardware рулит, или о пользе гистерезиса.

Рубрика: web programming — Метки: , , , — datacompboy @ 20:46:54 | 377 views

Практически все аппаратные системы обладают гистерезисом: отставанием реакции на приложенные силы. Когда-то это плохо (например, передавать сигнал без сдвига фазы), когда-то это используют (те же магнитные способы записи).
Но не мешало бы об этом вспоминать и при разработке софта! На днях столкнулся с очень отвратительным поведением Firefox: если по hover размер блока изменяется, и при этом объект уходит из-под мыши — блок теряет hover. Возвращается к прошлым размерам и снова применяет hover. Некрасиво.

попробуйте сами, наведите на правый край этого квадрата:

test

Кстати опера работает лучше: потерю 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-07-15

Gallery2+Drupal repair

Рубрика: web programming — Метки: , , , — datacompboy @ 12:04:57 | 600 views

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

Рубрика: web programming — Метки: , , — datacompboy @ 19:01:35 | 1,005 views

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-03-18

О вреде копеек

Рубрика: Бухгалтерия — Метки: , , , — datacompboy @ 17:35:04 | 284 views

Пришло письмо из пенсионного фонда. Писмьмо состоит из: Конверт, 3 марки по 5 рублей, 1 марка на 0.15 рублей, 3 листа формата А4.
Письмо предписывает погасить пеню в размере 27 копеек, и содержит сразу заполненный листик для платежа.

Сайт работает на WordPress