Home
netch80
Recent Entries 

Advertisement

Customize
31st-Dec-2030 11:00 pm - [header]
Это субжурнал для [info]netch по тематике IT. Все вопросы - к оригиналу.
13th-Nov-2009 07:42 pm - время, стой. раз-два.
Цитируем Posix:

===
Epoch

The time zero hours, zero minutes, zero seconds, on January 1, 1970
Coordinated Universal Time (UTC).
===

Смотрим в википедию - с 1970-го года в UTC было 24 вставных секунды (leap seconds).

Проверяем системные часы:

>>> a = (10*366+29*365)*86400
>>> a
1230768000
>>> import time
>>> time.gmtime(a)[0:6]
(2009, 1, 1, 0, 0, 0)

то есть никто не применял коррекцию по ним.

Первый вопрос - покажите мне хоть один юникс или одну Windows, чтобы честно реализовывала UTC, а не UT1 или UT2?

Второй вопрос - а нафига этот UTC нужен в практической машинной реальности?
В прошлом сообщении пришёл к выводу, что спасением для быстрого детекта сигнала "притормозить" является синхронный вызов.

Но надо было действительно подумать, чтобы вспомнить, что ответ на синхронный вызов тоже падает в очередь сообщений, и извлечь его оттуда - тот же receive с матчингом - тормозит линейно зависимо от длины очереди.

"Схватить автомат и убивать всех подряд" (tm)
23rd-Sep-2009 08:37 am - umass, sync и вокруг
Что-то во фре (или в семёрке, или даже в 7.2) подломали в плане аккуратности доступа к дискам. Уже два раза запарывал нафиг файловую систему на флэшке телефона, подключаемой как простой umass, несмотря на то, что после umount и sync ждал больше минуты, пока всё не успокоится.

Это смыкается с выводом, который сделал по текущему проекту: любые асинхронные подходы хороши для держания нагрузки, но независимо от стиля и качества реализации обязаны иметь и синхронные варианты, и команды типа "здесь барьер, всё что задано до него - завершить". В частном случае, sync после umount не должен был вернуть управление, пока не сбросил весь грязный кэш. Если для этого нужен другой sync - ok, но предоставьте.
19th-Sep-2009 09:55 pm - Зюки
А вот как диагностировать, кто виноват в том, что Firefox и Seamonkey одинаково выводят вместо греческих букв зюки какого-то неизвестного мне алфавита? (Уточнение: фря, 7.2)
Ибо когда A посылает толстый поток данных на B, B - на C, C захлёбывается и просит B прикрутить краник - посылать сообщение об этом бессмысленно. Нормальным ходом оно дойдёт чёрт знает когда, а выбирать по маске с линейным перебором очереди - прямой способ убить всё вокруг нагрузкой.

Все альтернативные способы кривы. Прокси-процесс с flow control - лишняя нагрузка на пересылке. Самым разумным показалась эмуляция глобальной переменной через специальный процесс и gen_server:call() к нему на каждые 100-1000 обработанных сообщений. Главное, чтобы этот процесс не сдох сам от нагрузки.

Ну и как это называется? ;(
INSERT WHEN NOT EXISTS (SELECT an_address FROM active_nodes WHERE an_address='10.0.7.141:5061') THEN INTO active_nodes (an_address, an_env, an_expires) VALUES ('10.0.7.141:5061', 2, PORTA_COMPAT.NOW() + NUMTODSINTERVAL(600,'SECOND')) SELECT NULL FROM DUAL;

вот кому и зачем тут этот последний SELECT мусора из ниоткуда.
< href="http://www.rsdn.ru/forum/cpp.applied/3517122.aspx">на которые наступают снова и снова</a>.
11th-Jul-2009 10:52 pm - to quote or not to quote
Про грамматизьму в IETF я уже говорил, но, видно, мало. Только что нарвался с RFC2617.

Пусть параметр в открытом виде выглядит так: a"b
Как quoted-string в заголовке Authorization он будет выглядеть так: "a\"b"

Передавать же в вычисления response надо так: a\"b
(то есть снять только крайние кавычки, внутренность параметра не менять)

Возникает простой логичный вопрос: quoted-string допускает квотинг любого символа, то есть та же строка могла быть записана и как "\a\"\b", и как "\a\"b", и всеми аналогичными вариантами. И какой из них передавать в вычисления дайджеста, и почему?
26th-Jun-2009 05:26 pm - коммит
commit 7d319d801dc7ced3bbd1c7b66034bc124c4bde0c
Author: Valentin Nechayev <netch@*******>
Date: Fri Jun 26 17:19:07 2009 +0300

Hypervisor: functest 2 - for functest style 2.

(Recursion: see Recursion.)

Author: jamie
Date: Wed May 27 14:11:23 2009
New Revision: 192895
URL: http://svn.freebsd.org/changeset/base/192895

Log:
  Add hierarchical jails.  A jail may further virtualize its environment
  by creating a child jail, which is visible to that jail and to any
  parent jails.  Child jails may be restricted more than their parents,
  but never less.  Jail names reflect this hierarchy, being MIB-style
  dot-separated strings.


Не знаю, насколько полезно, но выглядит очень круто:)
27th-May-2009 11:35 pm - порт или не порт?
Коллега уже несколько дней заводит машинку на Cell'е. При загрузке она пишет на консоль вполне разумные слова и понимает команды, но затем при запуске ядра начинает писать мусор. Зовёт на помощь подумать.

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

Вписывает в yaboot.conf установку 115200 для ttyS0. Запускаем. Цепочки зюк короче и разнообразнее. Вписывает 19200. Запускаем. После критического места продолжается нормальный читаемый рассказ (стартовые скрипты, отсутствующие конфиги, и прочая и прочая). Пляшем джигу.

Говорю что-то в стиле "это элементарно, Ватсон". И тут мне объясняют, что никакой это нафиг не компорт. Это виртуальный последовательный порт по ethernet'у с участием IPMI.

Давно я в таком ах... ошеломлении не был... Оказывается, таки да - оно пытается эмулировать все свойства порта включая скорость, и несоответствие скоростей приводит к потокам искривлённых байтов. Причём не у всех - мне тут же привели пример Tyan'овской матери, на которой в одну сторону (наружу) настройка скорости не влияла, а в другую (внутрь) влияла, и оно могло чего-то выводить, но не принимать ввод.

Пламенный привет интелу и бимерам.
У firefox (2-го, по крайней мере) что-то сильно клинит между окнами/табами (тредами?) при загрузке картинок. Характерно наблюдать netstat'ом скорость загрузки на комплекте из ~40 табов, когда он подымается по restore previous session. Вначале скорость крайне неравномерна, резко прыгая от 0 до пика канала, но в основном держась в районе 1-3KB/s. Затем давка в дверях заканчивается, и начинается период ровной загрузки на полный канал, насколько осилит, и так пока не выбрано основное содержание. Зато в начальный период может успеть умереть до трети загрузок, по "remote not responding" (а скорее всего запросы даже не были отправлены). Так как редкая страница сейчас обходится без картинок - эффект устойчив.

Интересно, firefox3 повторяет это или нет? Проверять жалко (уже ведь загрузилось много;))
10th-May-2009 09:14 pm - дыбр апгрейдный
Переход домашней фряхи с 6.4 на 7.2 прошёл почти безболезненно, кроме следующего:

- иксы 7.4 не запускались с нормальной диагностикой пока не обнаружил, что у них проблема с пониманием старого ~/.Xauthority (!) Разумеется, никакие логи этого не показали, пока не был убран весь .xinitrc - тогда кто-то начал плакаться в цикле на его формат.

- драйвер звука вообще потерял возможность что-то знать про его входные устройства (mic, line in). прямо хоть под линукс переключайся.

А ещё я "обожаю" firefox. 2-й поставлен и запущен. Поставил 3-й рядом, запускаю. Запускается морда 2-го. Берётся ktrace, изучается отчёт под микроскопом - нигде нет слова про 2-й. Вывод - оно присоединилось к тому что в памяти и запросило его открыть окно:( Опция смены профиля этому не помешала. Вспоминается рассказ Вагнера про неумение современных средств работать совместно.
Тема известная (просто нагуглив можно получить и монстров типа Punto, и лёгкий keyla, и простой как угол дома lswitch), но захотелось получить вариант как у меня на Unix - Caps переключает между английским и русским, а Ctrl+Caps - между русским и украинским.

Пока идеально не получилось: [UPD] на FAR какие-то странные эффекты. Впрочем, и там можно через родной переключатель (как Ctrl+Shift) выбрать любую.

Текущие результаты (исходник и экзешник). Исходник - слегка замученный lswitch.c от Haali. Caps крутит раскладки по кругу вперёд, Ctrl+Caps - назад. Командная строка с 'q' убирает резидент, с '3s' запускает в моём любимом режиме, в любом другом случае пытается ставить с переключением по кругу.

Уже удобнее, чем в Putty, и Caps тоже можно включать (имитируя блондинку;))
4> <<P:32/big-float>> = <<63,128,0,0>>.
<<63,128,0,0>>
5> P.
1.0
6> <<P:32/big-float>> = <<127,128,0,0>>.
** exception error: no match of right hand side value <<127,128,0,0>>
7> <<P:32/big-float>> = <<127,128,0,1>>.
** exception error: no match of right hand side value <<127,128,0,1>>

в команде 6 я пытался расшифровать +INF, 7 - +NAN(1)

А вот что пишет ползучий питоний:

>>> struct.unpack('>f', '\x7f\x8f\x00\x00')[0]
nan
>>> struct.unpack('>f', '\xff\x8f\x00\xff')[0]
nan

"это не число, и к дьяволу подробности!"
Зато хоть создавать не запрещает:

>>> a = float('nan')
>>> a
nan
>>> -a
nan

и на том спасибо.
С тем, что нельзя открыть файл-устройство, уже столкнулись (отвечает eisdir'ом, хотя совсем не каталог). В рассылках нашлось обоснование - мол, "а что если оно заблокируется на ожидании?" (я вообще-то /dev/urandom пытался открыть, и это мои проблемы, если что-то заблокируется). А сегодня новое. Цитирую коллегу...


Я обнаружил интересную фичу: если файл открыт с опцией compressed, то
file:position/2 за пределы файла напрочь завешивает всю е-ноду вплоть до
момента, пока кто-то не допишет в этот файл нужное количество данных. При
этом нет разницы, зазипован ли файл на самом деле. А ведь единственный
способ узнать реальный размер зазипованных данных - это поблочно прочесть
его весь до eof`а!!!


Интересно, сколько ещё таких недопараллельностей таится в "параллельной" среде...
20th-Mar-2009 10:03 am - tokyo cabinet
Издеваемся оптимизацией параметров для таблицы tokyo cabinet:

tcbtest write -rnd -lc 1024 -nc 512 ~/tmp/test.tcb 2000000 1000 1000
[...]
time: 86.647 (23Kinserts/sec)

tcbtest write -rnd -lc 1536 -nc 768 ~/tmp/test.tcb 2000000 1000 1000
[...]
time: 34.053 (59Kinserts/sec)

tcbtest write -rnd -lc 2000 -nc 1000 ~/tmp/test.tcb 2000000 1000 1000
[...]
time: 7.430 (270Kinserts/sec)

tcbtest write -rnd -lc 4000 -nc 2000 ~/tmp/test.tcb 2000000 1000 1000
[...]
time: 6.550 (305Kinserts/sec)

tcbtest write -mt -cj -tl -lc 100000 -nc 1000000 -ca 1000000 -nl -rnd ~/tmp/test.tcb 10000000 1000 1000 100000
[...]
time: 21.857 (457Kinserts/sec)

вот что-то приличное, а если не подстроить - происходит экспоненциальная потеря производительности.

Егор - а ты можешь подсказать, как mysql подкрутить (ключевые слова)?
Хочется чего-то сравнимого хотя бы до порядка, а 8Kinserts/sec меня не радует.

Имитационная обстановка - тупая таблица типа

CREATE TABLE `log` (
`l_when` int(11) default NULL,
`l_node` int(11) default NULL,
`l_object` int(11) default NULL,
`l_data` varchar(127) default NULL,
KEY `l_now` (`l_node`,`l_object`,`l_when`),
KEY `l_onw` (`l_object`,`l_node`,`l_when`)
)

с заполнением последовательными для l_when и рандомными для l_object и l_node.
Пожалуй, можно окончательно сформулировать: написание параллельного выполнения на message passing ничуть не проще (а часто и сложнее), чем на общей памяти с традиционными мьютексами, условными переменными и прочей соответствующей атрибутикой. Но это увеличение затрат не в разы и предсказуемо. А вот то, что при таком подходе реально упрощается - это возможность сделать так, чтобы у каждого участника спросить (послав ему соответствующее сообщение) - "а на чём ты задумался и почему?" и, может быть, "плюнь на это, очистись от данной операции и иди дальше" - по сравнению с "ждём освобождения, освобождения нет, кто занял и почему - ХЗ" или тем более "память разрушена, кто разрушил, почему и как - ХЗ" - экономия времени и сил получается не только в разы, но порой и на порядки. То есть упрощается диагностика и отладка.

И вот ради этого можно писать даже на таком кошмаре, как Erlang.:)

(Если кому-то сказанное очевидно - что ж, пусть возьмёт с полки пирожок. Я предпочитаю разъяснить до глубин, на которых жупелы типа "стоимость поддержки" перестают быть Обстракциями.)
2nd-Jan-2009 11:06 am(no subject)
У git есть очень правильная фича - указание, что именно из текущих изменений рабочей копии надо включать в коммит (не до уровня файлов, а внутри файла) - можно разобрать по отдельным микропатчам и задать включаемые.

Но ни один туториал и ни один пользователь вживую из тех, с которыми я общался, не был способен правильно это назвать и объяснить - все ужасно косноязычно рассказывали про "индекс" и "git работает не с файлами, а с содержанием".
24th-Dec-2008 10:48 pm - Об относительности
Тот, кто думает, что в LISP'е слишком много скобок, никогда не писал на m4.
19th-Dec-2008 10:19 am - разочарования
- Функция loop получает кучу параметров, внутри неё if, и только в одной ветке
надо поменять значение одного параметра, а в остальные он должен прийти
неизменённым. Как это удобно сделать?
- Вызови в этом месте loop() с новым параметром и заверши работу.
- Но у меня дальше большая общая часть работы.
- Вынеси её в отдельную функцию, вызови loop() из неё.
- Это неудобно. Почему бы не сделать что-то вроде Xout=ifdef(X1, X1, X),
loop(...,Xout)?
- Ты хочешь неправильного. Здесь делают именно так.




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




- Мне нужно сделать общий репозиторий, в который все будут складывать свои
изменения.
- Ты хочешь неправильно. Это распределённая система.
- Я и использую её как распределённую. Каждый тащит изменения к себе, делает
что хочет в любом количестве своих копий и репозиториев, затем, когда решил,
что всё окончательно правильно - делает push.
- Ты хочешь неправильно. Каждый должен коммитить в свою ветку в центральном
репозитории. Дальше у него остальные забирают изменения.
- Я не хочу разводить бардак, особенно когда таких источников будет два
десятка. Каждый обязан влить свои изменения и за это отвечает.
- Ты хочешь неправильно. Здесь так не делают. Приходи, получай ченжсеты
от своих сотрудников и вливай это в общий репозиторий, есть стандартная
поддержка приёма и применения по почте и иными средствами.
- Мне надо чтобы они это делали сами. И это неудобно ещё по целому ряду
параметров - например, надо держать на сервере полный шелл.
- Ты хочешь неправильно. Это распределённая система.




- Если я хочу один репозиторий, но две рабочих копии?
- Ты хочешь неправильно. Это распределённая система. Каждая рабочая копия
получает полную копию репозитория со всей историей.
- Я не хочу каждый раз переливать между двумя репозиториями у себя в home.
- Ты хочешь неправильно. Это распределённая система.




- Лог коммитов сортируется по дате исходного коммита. Если кто-то поставил
дату коммита 70-м годом, его будет очень долго и нудно искать.
- Да, дата коммита и авторство не меняются при слиянии.
- Тогда почему у коммита нет нескольких дат и авторов? Ведь тот, кто влил
набор изменений, тоже сделал существенное действие, которое должно быть
отражено. Он выбрал источник вливания, он выбрал набор изменений.
- Ты хочешь странного.
8th-Dec-2008 11:18 pm - Python, 3000?
Я вот одного не пойму со всем этим - куда и зачем они спешат с обновлениями.
Что-то вводится в 2.6, и становится единственным вариантом в 3.0. Это вместо того, чтобы:
- стать допустимым в 2.6.
- стать дефолтом в 3.0.
- стать единственным в 3.1.
или ещё медленнее (три переходных).
Сейчас поставщики разных дистрибутивов начнут активно впихивать 3.0 везде. Это при том, что на дворе ещё дофига 2.4 и даже 2.3. После перехода будет совсем другой язык, многие вещи несовместимы и любая серьёзная программа требует переписки.

Для сравнения - majordomo работает под Perl 5.8, при том, что код писался под Perl4.

И что вместо reload() теперь? (это я уже, наверно, торможу к вечеру)
8th-Dec-2008 08:32 pm - судьба softupdates
Нет неошибающихся программистов, нет программ без ошибок. Редкие
исключения вроде TeX не нарушают это правило и даже подтверждают тем, что
эти ошибки были. Что делает нормальный программист, который знает, что он
ошибётся и хочет как можно быстрее и удобнее найти и устранить последствия
этого? Он строит тесткейсы и разнообразные проверки в рантайме: как
минимум жалобы на нарушение инвариантов. Он добавляет отладочную печать и
даёт ручку для регулировки её уровня и состава. Он даёт сбор статистики и
возможность анализа этой статистики на предмет устойчивости и
осмысленности работы. Он даёт удобную регулировку использования своего
кода, если без него можно обойтись.

Но если код добавлен, работает плохо, а его автор не желает ничего реально
сделать, чтобы он нормально работал, и не предоставляет никаких средств
для диагностики, локализации и устранения проблем? В христианстве это
называется "гордыня", а на луркоморье - ЧСВ, чувство собственного величия:
человек думает о себе существенно лучше и значительнее, чем он есть, и
действует исходя из своего самомнения.

Судьба softupdates - отличный пример воздействия гордыни на результат.
Неплохая и полезная технология убита качеством реализации и заморочкой на
непогрешимость её автора, при непригодном к сопровождению и отладке коде:
- Включение и выключение требует сложных манипуляций с перемонтированием.
- Код ведёт свою ничем не управляемую жизнь. Даже обычный sync на него
не действует, хотя, казалось бы, что может быть проще.
- Рантайм-статистики нет.
- Средств рантайм-диагностики нет (даже просто снять список задержанных
микроопераций с их таймаутами и зависимостями). Так называемые опции
DIAGNOSTICS и DEBUG включают дай бог чтобы 2% необходимых проверок.
- Самоконтроля нет.
- Даже заготовок для подключения всего вышеперечисленного нет, из чего
можно сделать однозначный вывод - если автору потребуется что-то
диагностировать, ему придётся всё вписывать с самого начала.
- Код предельно сложной подсистемы (у которой и собственные нетривиальные
структуры и соотношения данных, и работа в условиях сложной ядерной модели
данных, и работа с нижними уровнями, у которых собственная сложная логика)
написан предельно неструктурно (не в смысле функций, но в смысле блоков и
подсистем). О том, что код такого типа всё-таки можно так писать, чтобы
выделять и тестировать основные блоки ещё до запуска программы - автор
представления не имеет.

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

Хотел бы я обойтись тут без комментариев про определённые личные качества
автора данной реализации, но когда его ближайший друг уже 20 лет всеми
силами избегает элементарного рефакторинга там, где слои реализации
громоздятся друг на друге уже в 4-5 слоёв и отдельные части может понять
только тот, кто работает с этим уже лет десять - не могу обойтись.;)

P.S. А самая большая фигня тут в том, что в соседнем лагере ничуть не
лучше.
print list(s) в питоновом шелле - удобный способ понять, как же строка распарсилась:)
Со строками вида \"([^\r\n\"\\\\]|\\\\[^\r\n])*\"" это жизненно важно.
28th-Sep-2008 08:46 am - freetim
А что, до сих пор нет opensource аналога The Incredible Machine?
24th-Sep-2008 10:59 pm - *12
В телефонии не хватает возможности при звонке сразу указывать его важность и срочность.
В результате обычный разговор по сотовому начинается с "Здравствуйте, я QWE, можете говорить?"

Можно сделать так, что дописывать это к CLD (например, 80441234567*70), только надо, чтобы это как-то внятно отображалось и это можно было донабрать к любому номеру. (Хотя с учётом условия Фано это скорее должен быть префикс.)

P.S. Тему злоупотреблений срочностью не рассматриваем - понятно, и что такое бывает, и как это лечить.
16th-Sep-2008 02:59 pm - ssh no password
Извернулся пошлым, но работающим образом:

$ ps axww | fgrep sshd
20023 ?? Is 0:00.01 /usr/sbin/sshd
20041 ?? Is 0:00.11 /usr/sbin/sshd -p 922 -oPidFile=/var/run/sshd922.pid -oProtocol=2 -oChallengeResponseAuthentication=no -oPasswordAuthentication=no
(ну и нормальный стартовый скриптик к нему)

в файрволле:

01500 fwd 127.0.0.1,922 tcp from table(11,1) to me dst-port 22

"А вокруг такая тишина"...
16th-Sep-2008 02:50 pm(no subject)
Задолбали логи на человеческом языке.
Проблема в том, что их зверски неудобно парсить.

    } elsif ($line =~ / (\S+)\[\d+\]: .*(Illegal
 user|Invalid user|Failed password
 for|authentication error for( illegal user)?) (\S+) from (\S+)/) {


и дальше всё в том же духе - ловить пачку разных изложений одного и того же (ещё и меняющихся со временем - то illegal user, то invalid user...). Это вместо того чтобы аккуратно написать что-то вроде

SSH-AUTHFAIL: ip=1.2.3.4 hostname=1-2-3-4.urody.net login=pupkin reason=user_acl

установив соответствующие правила эскейпинга параметров.

Пусть даже будут параллельные два варианта - для людей и для роботов. Но не такой текст...

P.S. Виндовый вариант со специнтерфейсом по типу гибкой базы - перегиб в другую сторону. Но показательный перегиб.
14th-Sep-2008 12:42 am - SSH
OpenSSH'евцы тормозят по-чёрному. Ну ввели Match в sshd_config, но почему самое полезное из того, что там в принципе может быть - отключение парольного доступа - не доступно в субопциях?

Финский SSH выглядит в разы более культурно. Видно, что автор умеет осмысленно думать.
почему /lost+found, а не /.lost+found?
13th-Sep-2008 10:36 am(no subject)
Ну как можно было так придумать BPF, чтобы не дать возможность задать в фильтре нужное направление движения пакетов (in/out)???
Почему на современных материнках есть параллельный порт, но нет последовательного? Кому этот параллельный ещё нужен? Кому нужен сейчас последовательный - я знаю, постоянно нужен.
1st-Sep-2008 11:03 pm(no subject)
Странно, но до сих пор бог миловал от видения троянов на сайтах - а сегодня столкнулся с двумя такими. В обоих случаях в страницу подсажен <iframe> со ссылкой на диверсантов - но в одном случае ещё и закодирован - все коды символов увеличены на 1 (видимо, чтобы обычный поиск не нашёл). Гугл, однако, нашёл. И оба сайта почему-то сработали редиректом на порносайт. Очередной пример сращения сетевого криминалитета с "экстремалами"...
27th-Aug-2008 09:35 pm - (мрачно)
Любой протокол должен максимум через 20 лет редизайниться с нуля.
Сегодняшний пример - DNS. Ну что стоило подумать про 64- или 128-битный ID ещё во время первых атак с подменой ID?

Не хочется кассандрить, но это напоминает начало системного кризиса Internet.
25th-Aug-2008 08:40 am - searchlist
Понаблюдал за идиотскими запросами в DNS и по результату порасставлял всем sendmail'ам входного и транзитного циклов:

define(`confBIND_OPTS', `-DNSRCH -DEFNAMES')dnl

Не понимаю идеологии searchlist'а в резолвере. Я бы понял, если бы имя не длиннее ndots компонентов пробовалось со всеми суффиксами из searchlist. Но длинные-то зачем пробовать??

15:54:48.860789 193.193.193.131.63791 > 193.193.193.100.53: [udp sum ok] 50452
[1au] A? host-79-164-42-5.qwerty.ru.carrier.kiev.ua. ar: . OPT UDPsize=4096 (71)
(ttl 63, id 29920, len 99)
15:54:48.861518 193.193.193.131.63791 > 193.193.193.100.53: [udp sum ok] 13909
[1au] A? host-79-164-42-5.qwerty.ru.lucky.net. ar: . OPT UDPsize=4096 (65) (ttl
63, id 29923, len 93)
15:54:49.858742 193.193.193.131.63791 > 193.193.193.100.53: [udp sum ok] 25802
[1au] A? 201-254-84-19.speedy.com.ar.carrier.kiev.ua. ar: . OPT UDPsize=4096 (72
) (ttl 63, id 30362, len 100)
15:54:49.859763 193.193.193.131.63791 > 193.193.193.100.53: [udp sum ok] 49213
[1au] A? 201-254-84-19.speedy.com.ar.lucky.net. ar: . OPT UDPsize=4096 (66) (ttl
63, id 30374, len 94)
Ставил debian. Lenny, с netinst диска.
Много граблей. Не знаю, пропустил я выбор пакетов для установки или нет, но их не оказалось - система была в настолько минимальном состоянии, что странно, что что-то работало. Из текстовых редакторов был только nano по умолчанию и ed (ну, мне не проблема, остальным - не знаю;))

1. После установки с диска не оказалось ни одного нормального источника основных пакетов. Пришлось делать "звонок другу" и вписывать руками.

Было вписано такое первыми строками:

deb http://http.us.debian.org/debian lenny main non-free contrib
deb http://ftp.de.debian.org/debian/ lenny main non-free contrib

после этого apt-get update - и получился нормальный набор.

2. При выборе таймзоны и английском языке установки не было возможности выбрать таймзону Киева. Пришлось оставить на потом и доработать руками (скопировать в /etc/localtime)

2. Вручную добавлены: openssh-server, bind9, gcc, inn2 (кстати, если просить inn без номера, будет 1.7.2 - а нафига???), iproute, innfeed (отдельно от inn2), joe, less (хм...), file, mc, mrtg, perl-doc (без него был только man perl, но не детальные), rsync, screen, sudo, chkconfig, telnet, vim, wget, procinfo.
Часть из них - понятно, местная специфика. Но некоторые моменты в выборе отсутствующих - удивляют.

3. Снёс exim, поставил sendmail (местная специфика).

4. Зачем-то писался /var/log/syslog для *.*. Отключил, ибо место зажрало.

5. Кэш apt'а с пакетами слишком быстро растёт. Убил файлы.

6. Гнутый getopt() по умолчанию - диверсия. Нельзя сказать просто "ctlinnd reload newsfeeds -controlchan", как принято. Надо или POSIXLY_CORRECT ставить, или "--" писать.

7. Где стартовый скрипт iptables??? Оказывается, политика. Надо добавлять руками. Ограничился трёхстрочным скриптиком, что читает из конфига.

8. При всём богатстве пакетов, suck'а там нет. Собирал и ставил руками.

9. Пути у inn'а странные - нафига over.view симлинком на overview и out.going отдельно от outgoing?

10. Почему /etc/bind, а не /etc/named??

11. К sendmail'у не ставится LDA автоматом (надо ставить sensible-mda, который тянет за собой procmail)

12. /etc/mailname camel.lucky.net.lucky.net, и такая же хрень в hosts - пришлось править руками.

P.S. Всё равно проще и удобнее, чем gentoo :)))
10th-Jun-2008 03:20 pm - привет Чингачгуку
Второй раз, как истинный бледнолицый, натыкаюсь на одни и те же грабли.

Грабля первая. X-сервер цепляется к терминалу как к управляющему. Xinitrc пытается что-то писать на stdout (точнее, что-то запущенное из него). У терминала стоит режим TOSTOP. Всё, пока не начнёшь от безысходности писать в файл лог работы xinitrc - не поймёшь, что происходит.

Грабля вторая. Машинка переходит из роли "чиста сервера" в роль консоли. Gtk не может найти cairo-xlib.h. Пляски с бубном продолжаются до тех пор, пока не обнаруживается, что в /etc/make.conf застряло WITHOUT_X11=yes и cairo собирается, но без работы с Xlib. Нафига оно вообще нужно без xlib, партия не разъясняет.

Ну не ёлы-палы?
22nd-May-2008 05:05 pm - День рождения Ethernet
22.05.1973

ура, товарищи.
17th-May-2008 03:40 pm(no subject)
Очередная дискуссия в ukr.nodes за/против Apple дала ссылку с тезисами, которых ещё не видел в столь чётком оформлении: http://desk.nnm.ru/apple_psihologiya_interfeiysov

Пара характерных цитат:

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


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


Как по мне, проблема Windows не только в этом. Но ситуация, в которой она оказывается - мягко говоря, невыгодна. С одной стороны, чтобы устранять болезни типа неработы в определённых ситуациях и сочетаниях факторов, надо давать больше возможностей по управлению ситуацией и пониманию её; с другой стороны, чтобы не давать того выбора, который излишен большинству - надо отнимать и эти жалкие возможности. Apple выигрывает это за счёт ужесточения политики - начиная от аппаратных средств и заканчивая методами программирования. MS не имеет такой свободы - попытки её ввести систематически проваливаются. Сможет ли кто-то преодолеть идеологический барьер соседа?
13th-May-2008 08:17 am - CVS, файл vs. каталог
CVS не позволяет создать каталог с именем уже существовавшего в репозитории файла (даже в давно забытых ветках).
Нарвался на это, естественно, в cvsbackup (/etc/security - был файлом, стал каталогом)
9th-May-2008 11:34 am(no subject)
Какие странные люди делали firefox.
Мало того, что оно из-за одной иконки в адресной строке с сайта в документе, загруженном с диска, показывает три разных окна про "какой кошмар, у вас тут сертификат самоподписанный". Так оно ещё и блокирует загрузку в остальных окнах.

Разве так сложно унести это в другой тред?
case insensitivity в текстовых форматах - диверсия и для текста тоже.
Парсинг требует массового копирования строк для канонического формата, вместо того, чтобы просто показывать куски принятых данных. Но и для читаемости человеком это не даёт ничего.

SIP - один из тех протоколов, на которых это видно особенно жёстко.

UPD: и не только это. Например, идея разместить from_tag как параметр поля From - кому-то показалась красивой. Но правильное место для неё - в call-id (который лучше переименовать в просто id). Потому что парсить целое поле для того, чтобы вытащить из него один тег (а остальное там никакому промежуточному агенту типа прокси не нужно, и тем более не нужно уровню транзакций) - безумный оверхед.
23rd-Apr-2008 10:46 am - Грамматизьма
В IETF засилье грамматистов.

"Грамматистами" я их называю потому, что они вводят текстовые протоколы со сложной грамматикой, в которой можно вложить что угодно куда угодно... но реально эта возможность используется очень слабо (да, мне так кажется - а докажите обратное;)), зато даёт сильные побочные эффекты.

Первым звонком о последствиях такой "грамматизации" был RFC822 и его реализации. RFC822, он же стандарт номер 11, построен так, что произвести адекватный разбор письма можно только применив полный грамматический разбор заголовка. Известные подходы вроде "\r\n\r\n - признак конца заголовка и начала тела", "\r\n - разделитель строк в заголовке" - недопустимые упрощения, потому что есть такое quoted string, внутри которого возможен quoted CRLF. Например (в сишном представлении внутри строки):

"To: \"X\\\r\nyyy:\" <a@b>\r\n"

По строгому соответствию здесь одно поле To: с вычурным, но допустимым mailbox, у которого phrase - один word, который quoted-string. В этом quoted-string есть допустимый quoted-pair, состоящий из обратного слэша и CR. Есть также LF, но это непринципиально.

Ни один из широко распространённых MTA или MUA это так не поймёт. Для него CRLF - первично, поэтому в письме окажется два поля заголовка - To: сломанного формата и yyy:, которое, так как не описано как structured, будет воспринято как есть, со всем своим мусором. Полную грамматику никто не парсит.

(Это не единственная хохма RFC822. Наплевательское обращение с NUL'ами почти во всех реализациях - тоже известно. Но это уже тараканы бездумного распространения и применения языка Си и его стандартных средств.)

Через 19 лет выпустили RFC2822. Много мелких правок. Исправили ли проблему квотинга CRLF, дали ли возможность обойтись без тотального парсинга? Похоже, да. По крайней мере не вижу ни одного возражения этому.

Но RFC822 - официальный стандарт (STD11), а RFC2822 - так себе, "proposed standard".

To be continued, тема весьма обширная.

Advertisement

Customize
This page was loaded Dec 10th 2009, 10:13 am GMT.