?

Log in

No account? Create an account

Граблины

Jun. 7th, 2014 | 07:06 am

IT-гремлины должны зваться граблинами.

Link | Leave a comment |

2.5 ёлки метёлки

May. 24th, 2014 | 11:22 am

Вот у меня открыта лента FB, вот ткнул в ссылку, оно перешло на неё. Жму back - и как понять, где я был, и продолжить чтение дальше? А если переход был случаен?

Дурнейшее поветрие современного web 2.5 (или как там его назвать, потому что 2.0 уже было) - отсутствие чёткого понятия, что такое показываемая страница. В общем случае тебе покажут что угодно, приблизительно совпадающее с тем, что ты хотел. А особенно "лента", которую начал, может быть, тот же facebook, но поддерживают все (ладно там flickr, который 90% кошки и трамваи в тумане, но уже и itc.ua!) И вот я куда-то перешёл... скорее всего, случайно. Ибо:

1. Одни олигофрены от интерфейсостроения решили, что можно совместить полностью противоположные(!) функции на одной кнопке, если они не могут быть выбраны одновременно. Например, в Firefox - остановить загрузку и перезагрузить страницу. В результате жму на долго не грузившейся странице... привет, race condition: пока палец тратил миллисекунды на нажатие кнопки на мышке, страница успела "докачаться". Точно так же средняя кнопка мыши: пока курсор на ссылке, это open in new tab, а когда нет - это go to link from clipboard. Спасибо, это хоть можно в about:config зарулить нормально, в отличие от предыдущего. Но боюсь, скоро и это уберут.

2. Другие такие же недержатели IQ, начиная с facebook, не могут внятно показать, это ссылка или нет. Ещё неделю назад было, что "Показати більше..." это открыть кат в том же окне (а средняя кнопка открывает ещё одну ленту), а "Читати далі..." это полноценная ссылка, которую лучше открыть в новой вкладке. Но сейчас это не так - кучу раз наткнулся уже, что "Показати більше", но открывает другую страницу (в той же вкладке). Прощай, лента. Так читать её больше трёх последних котиков нельзя. Что, на каждом подозрительном объекте щёлкать правой и искать, нет ли там open in new tab, и сравнивать URL с текущим? Так тоже могут обхитрить, диверсанты.

В ЖЖ это сделано более разумно. Все кнопки типа "развернуть комментарии", "открыть подкат" имеют две реакции - при обычном нажатии JS разворачивает, а при средней кнопке (или правой плюс open in a new tab) - делает показ в ограниченном виде (только подветка, только один постинг). Это даже после последних переделок. Видно, что там ещё сохранились остатки здравой технической мысли. И лента там показывается почти по-человечески - каждый кусок имеет свой URL.

А почему "почти"? Потому что если я читал первый кусок, потом пошёл на более старые где "?skip=50", а за это время добавилось 10 сообщений, то я увижу 10 уже виденных в начале ленты. Конечно, спасибо, что известили, что есть новые, но это лучше делать иначе - где-нибудь в заголовке выходной страницы.

А ещё они таким подходом убивают сервера базы, и появляются в интернете рецепты типа "страшно тормозит сервер на выборках типа SELECT ... LIMIT 100 OFFSET 100500500? Выберите с offset'ом только id статей подзапросом и затем выберите сами статьи через SELECT * ... in (SELECT id...)". То, что надо было при формировании страницы запомнить timestamp самой старой записи и уже, не задрачивая сервер, спросить просто и эффективно "SELECT * from messages WHERE форум AND ts_updated < ${threshold_from_url} ORDER BY ts_updated DESC LIMIT 50", им, видимо, на ум не приходит уже лет 20, сколько есть эти форумы и ленты.

UPDATE: Почему такой бардак в переключении между частями ленты даже там, где она есть?
У одних в прошлое это "previous page", в будущее - "next page".
У других строго наоборот в прошлое это next page - ну логично же, [censored], начинают-то с самых свежих (а кто не скачет с нами, тот предатель, да).
У хабра к более старым это "туда". To Du.blin. Они считают читателей такими тупыми, что не разберутся, куда же надо листать?
На opennet поставили на этих ссылках "раньше"/"позже" по моей просьбе, но впараллель к невнятному "следующая страница" и "предыдущая страница" соотственно.

UPDATE2: если забанить кого-то в FB, это настолько срывает блюдце скрипту, что лента перерисовывается полностью с нуля. "Семь бед - один Reset" (tm)

"Пробачте за емоції, простите, накипело" ((c) Орест Лютий)

Кстати, у меня на работе FB показывает верхнюю полоску (в которой поиск и нотификации) постоянно, а дома - нет. Акаунт один и тот же, версии FF одинаковые, основные настройки - тоже. Что за ахтунги у них в DevOps?

Link | Leave a comment {19} |

TDD is dead

May. 3rd, 2014 | 05:03 pm

Примерно то же, что я говорю уже пару лет, но теперь от аскакалов тематики.
http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html
https://www.facebook.com/notes/kent-beck/rip-tdd/750840194948847
(via DOU)

UPD: http://rbcs-us.com/documents/Why-Most-Unit-Testing-is-Waste.pdf

Link | Leave a comment {2} |

Перехват Ctrl на веб-странице

May. 1st, 2014 | 08:27 am

На одном сайтике есть такое:

<body onkeydown="if(event.ctrlKey){return false;}" ... >

В результате Firefox (28) не позволяет закрыть страницу через клавиатуру (Ctrl+W). Только мышью.
Чего это он и есть ли лечение?

Link | Leave a comment {1} |

дорогами Эдельвейса Захаровича

Apr. 15th, 2014 | 03:31 pm

Стругацкие таки гении.

Сначала обнаружил, что эвристическая машина Машкина это концепция, по силе сравнимая с машиной Тьюринга.

Затем, разбирая riak backends, смог для описания логики их работы только вспомнить фразу: "Ротор поля наподобие дивергенции градуирует себя вдоль спина и там, внутре, обращает материю вопроса в спиритуальные электрические вихри, из коих и возникает синекдоха отвечания..."

Хотя в варианте async_fold эта самая синекдоха отвечания откладывается до момента реального применения:)

Link | Leave a comment |

Rich IPC [2] - dbus

Mar. 2nd, 2014 | 09:43 am

С продвижением dbus в ядро народ упорно идёт к этому, хоть и в разы более путанно. Ну почему бы не сделать проще...

Link | Leave a comment |

get next key

Mar. 1st, 2014 | 11:00 am

В разнообразных новых движках БД (которые принято называть NoSQL, хотя NoRel было бы адекватнее) обожают key-value подход, но изображают хэш - все ключи независимы. В Riak в принципе не вводили связь между соседними ключами. Этому есть какие-то конструктивные причины? Или это просто недоработка авторов, потому что им такого было не нужно?

Очень много задач удобно решаются с помощью операций типа "получить значение ключа, следующего за данным в порядке выбранной сортировки". BerkeleyDB это умела почти с рождения. SQL движки - тоже (пусть это и надо получить заклинаниями типа ORDER BY + LIMIT n, внутри всё равно исполняется проход по упорядочённому индексу). В случае неподдержки такого приходится заниматься закатом солнца вручную (например, с рисованием индексов своими силами).

Одно частичное возражение я вижу - шардинг. Его в некоторых случаях удобно делать через отдельные биты хэша ключа, в таком случае задача "найти следующий", если делается на локальных хранилищах, требует запроса ко всем шардам. Но это только удорожание операции, если она нужна, а не принципиальная невозможность; к тому же минимальное кэширование результатов лукапа делает цепочку таких getnext не дороже прохода по локальному хранилищу. Ещё какие-то причины?

Link | Leave a comment {14} |

byte_order == south_central_endian

Feb. 5th, 2014 | 04:02 pm

Читал одно ревью, много думал.
Хочется получить описание структур в стиле:


typedef struct {
  network_order_and_packed {
    unsigned event: 8;
    unsigned end: 1;
    unsigned reserved: 1;
    unsigned volume: 6;
    unsigned duration: 16;
  };
} rfc2833_event;


и чтобы оно само выполняло ntohs() и т.п. где нужно...

Link | Leave a comment {3} |

процессорное

Dec. 22nd, 2013 | 09:05 am

Может, баян, но я для себя ещё не формулировал.

Общеизвестная критика Intel с позиции "этот ваш x86 полный отстой, надо было делать как в ARM/MIPS/etc., конверсия во внутренний RISC не нужна, команды разбирать слишком дорого", которой полны соответствующие форумы - обычно заканчивается тем, что оппонент или стихает, или переходит в режим "от обоснуя слышу" и на этом обсуждение заканчивается якобы победой критика.

Но я ни разу не видел возражения на это, что RISC, VLIW, etc. организации банально нерасширяемы. Да, иногда цена расширения велика - начиная от тотального OOO+Tomasulo во внутренней логике (дорогая таки штука) до префиксов на каждую операцию (в x86-64 коде, ~38% всех команд с префиксом REX, и это я не считал те, у которых он подразумевается из-за единственности сути), но она подъёмна и, главное, перспективна в плане сохранения совместимости с существующими готовыми продуктами. X86-32 пережило даже внедрение AVX:) и умирать не собирается.

Отсюда обратный вывод - что x86 живо только пока идёт бурное развитие (по закону Мура). Как только последний остановится, она потеряет преимущество и лет за 10 уйдёт в ноль; но пока рост есть - она непобедима. Закон Чёрной королевы в действии.

Но странно другое. Практически каждое архитектурное решение Intel это в лучшем случае оптимальность на один шаг вперёд, уже через два шага побочные эффекты сиюминутной выгоды становятся явными недостатками. Результат выглядит как корабль, слой ракушек на котором в несколько раз толще ширины корабля. Зачем? Я не верю, что у них так плохо с мозгами.

Link | Leave a comment {36} |

либзюка.недобука.4.0

Dec. 22nd, 2013 | 08:37 am

Смешная штука этот ваш ld.so.


$ gcc -o libtt.sx -shared -fPIC tt.c
$ gcc -o t t.c libtt.sx -Wl,-rpath=`pwd`
$ ldd ./t
./t:
        libtt.sx => /var2/homes/netch/prog/tests/soname/libtt.sx (0x80081a000)
        libc.so.7 => /lib/libc.so.7 (0x800a1b000)
$ gcc -o lybtt.so -shared -fPIC tt.c
$ gcc -o t t.c lybtt.so -Wl,-rpath=`pwd`
$ ldd ./t
./t:
        lybtt.so (0x80081a000)
        libc.so.7 => /lib/libc.so.7 (0x800a1b000)


Типа, если нет префикса lib, то это не библиотека, а триокись неведомая?

Link | Leave a comment {2} |

Ън сбюфемхел

Nov. 18th, 2013 | 09:37 am

Вот эта картинка получилась от того, что при работающем firefox был проапгрейжен пакет cantarell-fonts. Ранее аналогичное я видел при обновлении libfreetype.



Рестарт процесса, к счастью, помогает.

Link | Leave a comment {3} |

если переставить на окно два калькулятора, сколько останется?

Sep. 18th, 2013 | 08:52 pm

Дочке в школе задали калькулятор написать на Delphi. Ну, думаю, а чего бы не тряхнуть стариной? Только, разумеется, самому и на чём-то более прогрессивном. Типа Python + wxWidgets.
Ещё ничего не начало работать, зато при попытке запуска получил:

Segmentation fault: 11 (core dumped)

как-то и продолжать не особо хочется...

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

UPDATE[2]: https://github.com/netch80/micro/tree/master/calculario_wx

Link | Leave a comment {15} |

инициализация структуры скопом

Aug. 10th, 2013 | 05:48 pm

Век живи - век учись...

  struct sigaction sa;
  <...>
  sa = (struct sigaction) {
    .sa_handler = fatsignal,
    .sa_mask = currset
  };


не знал о таком приёме, хотя это ANSI.

Link | Leave a comment {8} |

ศ? ฬ!

Jul. 9th, 2013 | 10:20 pm

Гость показал жестами, что представляет фирму Huawei.

Link | Leave a comment {2} |

Нос вытащили - все ноги отвалились

Jul. 7th, 2013 | 11:18 pm

Если пристрелить (SIGINT, ^C из консоли) один firefox, то с заметной вероятностью ещё несколько процессов скончаются по совершенно неожиданному:

g_dbus_connection_real_closed: Remote peer vanished with error: Underlying GIOStream returned 0 bytes on an async read (g-io-error-quark, 0). Exiting

Риторический вопрос - какой потомственный шлемазл решил, что отвал dbus это причина дохнуть всему процессу.

Link | Leave a comment {6} |

Вы уверены, что Oracle - это RDBMS?

Jul. 6th, 2013 | 09:35 am

> After finishing Oracle RAC update to 11.2.0.3.4

Несколько процессов стартуют одновременно и выполняют один и тот же запрос:

DELETE FROM shared_cookies WHERE sk_expires < :exp_ts;

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

Как-то я уже высказывался о нашем опыте работы с этим зверем. Продолжение последовало достаточно быстро.

UPDATE: всё проще - серверный процесс дох из-за бага.

Link | Leave a comment {11} |

не см. рекурсия

Jun. 17th, 2013 | 12:48 pm

Задумчиво и героически наступил на стандартную граблю - функция в главном треде ожидает ответа от сервиса, коллбэк которого исполняется в том же главном треде.

Link | Leave a comment {1} |

дерево дерево одолело

Jun. 11th, 2013 | 08:27 pm

Патчи мержились, звеня и подпрыгивая.

Link | Leave a comment |

четыре метра колючей проволоки

May. 3rd, 2013 | 02:37 pm

Что будет, если в git к репо одного проекта применить патч, вытащенный из репо совсем другого проекта, не имеющего ничего общего в целях и в коде, кроме всяких Makefile?
Практика показывает, что он успешно найдёт в них общее и даст смержить.

Link | Leave a comment {3} |

кот задавал вопросы

May. 2nd, 2013 | 05:50 pm

В erlang-russian продолжается эпический тред под названием "Кот создавал сайты на Erlang".
При этом до сих пор не появилось ни одного кота.

UPDATE: кот уже тестировал сайты, использовал Riak... привет новым локальным мемам.

Link | Leave a comment |

дыбр апгрейдный, железо

May. 2nd, 2013 | 05:44 pm

Решил больше не тянуть кота за хвост и поменял мать+проц у домашнего десктопа.

Gigabyte H61M-S2PV + Pentium G860, выбраны по принципу "самое простое, понятное и дешёвое при обязательном соблюдении входных требований", и 2 * 4GB DDR3.

Сняв старую (M2NPV-MX + Athlon64 X2 4800+), убедился, что сделал это достаточно вовремя (некоторые кондёры уже явно собрались поднять шляпы и откланяться с наилучшими пожеланиями).

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

Заметные траблы возникли только с графикой. Напрямую драйвер intel не подключился. Почитав камасутру, подумал, что пока и на VESA поживём, а если точно не хватит - можно будет и такими... мнэээ... методами заняться. Как ни странно, на VESA даже видео отлично идёт, если не на совсем полный экран. Ещё попыткой проверить скорость tuxracer'ом пришёл к тому, что тот упал в корку, при этом видеорежим переключился в что-то в стиле 640x480, при сохранении полного размера графики (1600x900), попытка выправить его xrandr'ом не сработала, просто перезапустил. Непонятно, где брать параметры для xrandr (например, для --output). [UPD1: если сделать так: "xrandr -s 1024x768; xrandr -s 1600x900" - то есть переключить в другой режим и сразу восстановить обратно - всё восстанавливается.]

Набортная сетевуха - if_re, но у меня со старой матери торжественно переехал 3c905C-TX выпуска где-то 2000 года:)

А вот звука на переднюю панель нет. То ли я чего начудил в конфиге, то ли ХЗ.

Link | Leave a comment |

дыбр апгрейдный, битность

Apr. 26th, 2013 | 05:17 pm

В переводе домашней фряхи на 64 бита была одна главная - скопировав старый конфиг, забыл добавить COMPAT_FREEBSD32, и одна поменьше - держал /usr/obj на ZFS. В остальном прошло без проблем по официальной инструкции.

А вот перевод рабочей машины всего-навсего с суси 12.2 на 12.3 увёл всю её вразнос, а восстановление через соседний Alt на том же диске дало всё, кроме загружающейся машины. Вот отдохну морально и на следующей неделе буду чинить внешним диском.
И когда "/etc/init.d/network start" тебе говорит "иди в сад, я тут не знаю, что реализует у вас сервис network", возникает очень обоснованное сомнение в умственной адекватности авторов systemd.

Link | Leave a comment {11} |

NBPRG wtf

Apr. 26th, 2013 | 12:23 pm

На подъезде висит объява:



Как там звали изобретателей русских клонов линукса? По-моему, тут даже линуксом не пахнет. Но претензий - вагон.

P.S. А что такое "23 & 27"?

Link | Leave a comment {28} |

интерчто?

Apr. 4th, 2013 | 03:53 pm

... предоставляется интерфейс типа "гуяно".

Link | Leave a comment {2} |

EFI, порутчик!

Mar. 7th, 2013 | 11:09 pm

Debian Wheezy автоматом поставило grub-efi, заметив запах последнего в BIOS, несмотря на то, что диск не в GPT. Пока не заставил его явно поставить grub-pc-bios, не давало пройти дальше rescue mode. Ну что за чудеса...
Зато на коробке от материнки гордо написано про Windows 8 ready.

Link | Leave a comment {1} |

Шуточки русификации

Feb. 16th, 2013 | 11:42 am

На свежекупленной клавиатуре Gembird на клавише Esc добавлена надпись "АР2".

Но почему тогда на Enter не написано (сами знаете что)?

Link | Leave a comment {40} |

Тени грядущего глюка

Feb. 14th, 2013 | 11:04 am

Не заметил когда, но на домашней машине появились непонятные тени символов - где-то на 1/3 их ширины справа и очень блеклые. Но достаточные, чтобы изображение стало казаться "мыльным".
В начале грешил на gtk, потому что видел эффект только в pidgin и ряде страниц firefox'а.
Посоветовался с коллегами. Поменял по их подсказке видеодрайвер.
После этого эффект не исчез. Но я его стал видеть даже в xterm.
Пересмотр параметров иксов ничего не дал.
Проблема исправилась шевелением видеокабеля.

Чувствую себя разучившимся траблшутингу.

Link | Leave a comment |

обнулить всё

Oct. 3rd, 2012 | 06:29 pm

Разбираю тикет - как себя вести, если идёт VoIP data поток с UDP source port = 0 (прописью: нулевой). Новые Quintum'ы такое посылают.

Пакет нулевой длины на UDP - это давно известно. Source port 0 - вот уже есть (через BSD sockets не создать, ну да ладно). Source IP 0.0.0.0 - норма для DHCP discover. А как понимать, если они все вместе в одном пакете?

Link | Leave a comment {6} |

Мода на двухфакторную аутентификацию

Sep. 10th, 2012 | 08:01 am

А почему бы её не делать через два пароля (обычный и мастер)?
Или через два email?
Почему все так тянутся делать это через мобилку? Ради желания побыть Старшим Братом?

Link | Leave a comment {13} |

покормить собак и...

Aug. 29th, 2012 | 11:15 am

Мне от KDE ничего не нужно, кроме пары игр, когда голова не варит. Но что за кошмар сделали с ними в KDE4??? Нормально смотреть можно только на варианты из 3-го, без дурацких цветностей, анимаций, псевдорисунков от руки и тому подобного бреда.
Приходится искать варианты, как ставить игры от 3-го.
Примеры - ksudoku, knetwalk

О старшие боги, сделайте так, чтобы авторов KDE4 хватило мешком по голове и они больше не портили хорошо работающее.

Link | Leave a comment {18} |

вести с грабельных полей,

Aug. 22nd, 2012 | 11:31 am

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

Не моя: в pidfile пишется просто число - PID, ничем не терминируется, файл предварительно (или после) не зачищается. Работало под pid=12347, запущен новый с pid=3642, в pidfile оказалось 36427.

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

Пока не знаю, какие выводы тут делать.

Link | Leave a comment {26} |

ssh путается в ключах клиента

Jul. 19th, 2012 | 09:34 am

Опять наткнулся на баг sshd (openssh), что он вместо того ключа, с которым авторизовался клиент, вдруг применяет другой. Стимулирует срабатывание наличие forced command, но точные условия не могу пока воспроизвести.
Но по всему этому начинаю бояться держать на ключевых машинах один sshd. Нужна альтернатива.

Вообще openssh написан ужасно. Например, чем надо думать, чтобы вместо попытки предварительно определить тип ключа прочитать несколько первых символов строки и затем вызвать разбор нужного типа - вызывать последовательно попытки чтения каждым типом, замусоривая дебаг сообщениями типа "а я не знаю, как это читать". Или с той же forced command - пытается вначале прочитать ключ без параметров, а когда видит, что фигня - читает уже с параметрами.
У ssh2-fi было гибче - каждый ключ в отдельном файлике.

Link | Leave a comment {13} |

ещё питоновых грабелек

Jul. 4th, 2012 | 02:16 pm

Кто с ходу увидит ошибку?

    for i in range(0,3):                                                    
        test.acct_servers[i].handleAcctRequest = \                          
                lambda p: handleAcctRequest(test, test.acct_servers[i], p)  

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

UPD[2012-07-05]: от gegmopo4:
... lambda p, i=i: (далее по тексту)
Работает, но я не берусь отправлять такое в общее репо.

Link | Leave a comment {42} |

весёлые разборки с питоном и glibc

Jun. 14th, 2012 | 08:28 am

Окружение: Linux/x86-64/glibc

I. Питон.

Берём небольшую тестовую программку:


import os, gc
def ps():
    os.system("ps -p %s -o vsz,rss | tail -n +2" % (os.getpid(),))
class A:
    pass
ps()
a = [A() for x in range(0,3000000)]
ps()
del a; gc.collect()
ps()


Если её запустить под 2.7 в описанном виде, получаем:

 20996  4456
1182596 1161900
936816 920336


Сделав одно небольшое изменение - A наследуется от object (и становится new style class) - получаем:

 20996  4452
314112 293528
 93032 76660


Формально new style легче буквально на десяток байт, но меняется что-то другое. Теперь запустим вообще под python3:

 28872  6956
249692 224164
 28872  7196


Раньше мы меряли потребление памяти тяжёлым процессом по пиковым нагрузкам, но это, как видно, уже неадекватный результат.
Кстати, окончательное освобождение из-под объектов происходит именно при gc.collect(). До этого чистится чуть-чуть (насколько я понял, собственно список, но не объекты).

Но!!! Как только мы создаём не пустой объект, а с реальным содержимым, память перестаёт освобождаться по удалению объектов:(

II. Уже Си (чтобы избавиться от возможных эффектов Питона). Тестовая программа порождает 50 тредов, после каждых 10 рассказывая объём процесса, каждый тред делает malloc(1) и уходит в вечный цикл сна. Запускаем... ой...

  6120   372
743572  2640
1480892 6736
2218212 8972
2365708 13068
2447668 13068


64MB на тред не включая 8MB стека до какого-то порога - это пять. косяков.
Теория см. здесь. И точно:

$ env MALLOC_ARENA_MAX=1 ./t1
  6120   372
612500  4688
694460  4688
776420  4868
858380  4868
940340  5060


А всего-то хотелось соотнести объём процесса с нагрузкой и придумать, как определять, что с ним что-то не так (например. забытый, но не удалённый и не отцеплённый, мусор в памяти). Но, видимо, просто не решится.

Link | Leave a comment {7} |

раскладки и традиции

Jun. 4th, 2012 | 10:01 am

Убийственный пример преобладания, нет, даже насилия традиции над здравым смыслом - тот интерфейс управления раскладками клавиатуры, который везде.
Что мешает сделать возможность "я вот прямо сейчас хочу включить украинскую/китайскую/etc., несмотря на то, что её нет в обычном списке"?
Не надо вспоминать XKB, устройство Windows и т.п. - это всё примеры того, как уже завязались на традиционный дизайн.

Переключение всех по циклу - почему только так? Почему из 5 возможных не оставить на цикле только 2?

Link | Leave a comment {13} |

новые времена

May. 18th, 2012 | 05:42 pm

Старый принцип: чтобы настроить сеть на не-маршрутизаторе, надо знать IP адрес, маску и шлюз.
Новый: к этому добавилось MTU.
Ибо на первом 1500, на втором 2044, на третьем 4000, на четвёртом 9200.
Кто-то, может, в этом мире живёт давно, но мы влетели на днях.

Link | Leave a comment {4} |

чтоб не захлебнуться

May. 1st, 2012 | 09:14 am

Никакие способности софта держанию нагрузки не работают, если поток поступает быстрее, чем приёмный процесс вообще способен его принять. Если регулировки потока нет и должны всё принимать, система будет неустойчива и будет выходить в турбулентный режим при переполнении некоторого уровня нагрузки. И неважно, Erlang это или что-то другое: или есть механизм ограничения приёма, потока, или система идёт вразнос.

Жизнерадостное игнорирование этого фактора - основная причина неадекватного поведения наших ранних версий.

А один общий mailbox процесса на все случаи приводит к тому, что управление потоком надо или делать через порты (в частности, выводя толстые потоки в TCP/SCTP/etc., даже если взаимодействуют ноды в кластере), или уметь явно говорить отправителю остановиться. Если бы было несколько очередей, с возможностью настройки каждой из них - можно было бы делать умнее; но сейчас - любое решение получается некорректным.

А существующие костыли закономерно повторяют старые добрые методы работы с очередями, реализованные в маршрутизаторах, начиная с Cisco. Только вот и они не помогают, когда процесс задумался непонятно о чём, а во входной очереди у него 730 тысяч сообщений. Здесь не кран надо менять, а всю систему.

Хочу много очередей с политиками. Размер очереди, простой дроп при заполнении, RED, GRED и так далее. Интересно, NIF'ами это можно сделать? Так, чтобы работало между нодами?

Link | Leave a comment {8} |

я фигею, дорогая редакция, или 32 бита больше не торт

Apr. 30th, 2012 | 03:22 pm

Падает енода из-за того, что ETS таблица раздувается до 3GB, а на всю еноду целиком отведено 4GB.
На раздувание от старта до такого падения нужно около трёх минут.
И это всё на нужных и законных данных.

Ну да, после того как сел и переделал более по-умному, затраты сократились в сотню раз. Но сама по себе тенденция удручает.

Link | Leave a comment {10} |

Великий сермяжный счётчик

Apr. 3rd, 2012 | 03:08 pm

Из Infiniband Architecture Specification:


When initially powered up or reset, the value of all counters contained in PortCounters on all ports of a node shall be set to zero. During operation, instead of overflowing, they shall stop at all ones. At any time, writing (Set) zero into a counter shall cause the counter to be reset to zero.


Это - остановка по достижению предела, сброс только в ноль, отсутствие атомарного чтения и сброса - сделано одинаково и для 32- и для 64-битных счётчиков, только предел разный.
Вопрос: кто может мне объяснить глубокий смысл такого решения?

Link | Leave a comment {18} |

fi

Mar. 27th, 2012 | 03:41 pm

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

А то злой Кориолис мешает нарезать правильные траектории.

Link | Leave a comment {2} |

Карты Карнауха

Mar. 24th, 2012 | 07:07 pm

Когда вижу Karnaugh map, всё время хочется прочитать фамилию как "Карнаух".

Link | Leave a comment {1} |

Логи раннего послепотопья

Mar. 24th, 2012 | 08:49 am

В свежем daily security check output домашней машины обнаружились попытки подбора ключей по sshd. Удивился, проверил файрволл. Как и ожидал, там в принципе эти попытки допускаются для ограниченного количества хостов.
Просмотр /var/log/auth.log показал, что они были 5 лет назад, а ротацию лога я куда-то потерял.
Вернул ротацию и думаю, хорошо ли это, что система не менялась тут с 2001-го года (только апгрейдилась).

Link | Leave a comment {1} |

DNS micro-DDOS

Mar. 24th, 2012 | 08:47 am

Который день подряд на secondary.net.ua идёт плотный поток запросов такого вида:

12:15:09.140941 IP 80.82.164.10.55750 > 195.149.112.1.53: 64562 A? ne08fwoeuhifn0ij.org. (38)
12:15:09.141387 IP 195.112.238.35.53418 > 195.149.112.1.53: 22014% [1au] A? nw98efhupnc98dshvui.org. (52)
12:15:09.141398 IP 91.143.63.9.49030 > 195.149.112.1.53: 27265 [1au] A? bef8iewuhfb.org. (44)

Знаю, что это какой-то троян, который через хэш получает доменное имя для центра управления, имя меняется каждый день. Конкретный троян неважен, их таких уже толпы.
Но имя зарегистрировано в DNS якобы с NS'ами primaryns.kiev.ua и secondary.net.ua и на обоих такая зона отсутствует.

Если кто-то убьёт бесплатный DNS, так это будут трояны.

Link | Leave a comment {1} |

грустный хак

Mar. 10th, 2012 | 11:08 am

Обнаружили, что там, где мы раньше просто передавали счётчик в 8 байтах, надо передавать ещё два значения — типа "ошибка снятия" и "отсутствие источника". Расширять некуда — грубо говоря, это embedded, протоколы и форматы в общем установлены. Но параметры не так быстро растут, чтобы переполнить 64 бита.

Так что выдвинул на внутреннее обсуждение предложение: "на ходу" сократить его до 63 бит, а случай старшего бита равного 1 применить на спец-значения. Вот жду до понедельника, будут ли фатальные возражения...

Чувствую себя сотрудником Microsoft — согласно уровню извращений — заказчикам тоже придётся перестраиваться (хоть и не срочно).

Link | Leave a comment {12} |

Временные трудности...

Mar. 1st, 2012 | 04:55 pm

Link | Leave a comment {2} |

open64 и аналоги

Feb. 27th, 2012 | 09:13 am

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

(А этот open64 забавный - у него мозги устроены совсем иначе, чем у gcc и clang.)

Link | Leave a comment {5} |

обратный эффект стабильности провайдера

Feb. 27th, 2012 | 09:08 am

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

Link | Leave a comment {8} |

а вот когда устанете проклинать, я тайком всё сделаю...

Feb. 22nd, 2012 | 06:11 pm

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

Наконец выяснили у автора. Один раз в 12 (прописью: двенадцать) часов.

Link | Leave a comment {1} |

Корректная вариация старой задачи

Feb. 7th, 2012 | 11:44 pm

Чему равно 84/5, если 8*8 = 54?

отсюда

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

Link | Leave a comment {12} |

timsort

Jan. 8th, 2012 | 07:41 pm

Отличный пример того, как происходят прорывы вроде бы в давно изведанных областях.

Гарантированно устойчивое O(n log n), с отличным постоянным коэффициентом и стабильным порядком. Хотя реализацию на пальцах не объяснить.

Link | Leave a comment {8} |