All streams
Search
Write a publication
Pull to refresh
19
0
Иван Шведунов @ivan4th

User

Send message
Помню, я в 2000 году дорабатывал для немцев программу расчёта оптики пучка электронов в ускорителе и линиях транспортировки. Программа изначально работала на нескольких унихах, имела примитивный GUI на Tcl/Tk, а также имела недостатки в области физики (не хватало продольных характеристик пучка). Надо было сделать, чтобы программа работала не только под унихами, но и под Windows, а также улучшить расчётную часть, после чего съездить в Майнц и подключить программу к местному крупному ускорителю электронов — MAMI. Всё это было сделано, но не без заковырок. Во-первых, у программы получилась довольно интересная архитектура — Qt для Windows тогда был для научных целей слишком дорогим, другие тогдашние кроссплатформенные тулкиты меня чем-то не устроили, и в результате в программе был C-шный GUI API layer (изначально программа была на C), опиравшийся на голый Win32 под виндой и на Qt под Unix'ами — наверное, можно было бы сделать попроще, и сейчас за такое решение я бы себя, быть может, убил, но это было давно. Во-вторых, подключение к системе управления ускорителя было не очень гладким.

Так вот, по поводу Win32. Под NT 4.0 / Windows 2000 приложение вело себя идеально, а вот под Windows 98 вылезала какая-то странная хрень. Сначала появлялось окошко с непонятной мне надписью по-немецки (на компах была немецкая локаль). Затем начинался полтергейст — слетали все шрифты, рушились иконки, при запуске блокнота курсор в нём был на весь экран. Далее приходилось перезапускаться. Я обратился к тамошнему товарищу, под руководством которого я работал, чтобы он мне перевёл надпись в окошке. Товарищ очень прифигел и сказал мне, что там написано — «Операция правильна». Я был в полной растерянности… Ошибка явно проявляла себя не сразу, и в отладчике её искать было очень затруднительно. В общем, нашёл я её уже вернувшись в Москву, пару месяцев спустя, после долгих посиделок с SoftICE — я ошибся в вызове SetDIBits(), вследствие чего Windows 9x рушил память ядра. В общем, понравилось.

Другим казусом при работе с этой программой было, собственно, подключение к системе управления. Мне дали документацию по протоколу и объяснили, какие магниты на линии пучка сейчас не задействованы — с ними можно играться, только не надо включать большие дипольные магниты, т.к. народ (в т.ч. ядрёнщики из других стран) постоянно работает с пучком и они могут вызвать отклонения даже на заметном расстоянии. Ну, я поигрался чуть-чуть, потом смотрю, что-то паника в пультовой напротив, народ забегал. Во время работы с ускорителем вылетела подсистема управления питанием магнитов. Я ошибся в заголовке пакета и демон словил переполнение стека. Сломаться ничего не успело, демона перезапустили, меня бить не стали и даже сказали спасибо за найденный баг.

Безотносительно этой программы — году в 2004-2005 я как-то решил поиграться с рандомизацией WMF под XP, уж больно подозрительной казалась передача оного прямо в ядро. Двигала мной иррациональная ненависть к винде, с которой я тогда был вынужден работать по долгу службы. Ну, сделал прогу, которая замусоривает WMF файл случайными байтами в случайных местах, открывает его, кажись, в IE (чтобы сразу проверить потенциал remote exploit'а), и далее в цикле. Программа поработала пару минут, после чего вылез синий экран. Винда более не загрузилось — на загрузке я получил «The registry cannot load the hive». Самое обидное, что прога не sync'ала файловую систему, и виноватый WMF не сохранился. После восстановления винды повторные запуски рандомайзера подобного эффекта уже не дали, не повезло, и я на это дело забил — а зря, вскоре security researcher'ы нашли большую пачку уязвимостей в WMF/EMF.
Если дело дойдёт до потери операторами хотя бы 1-5% (все 30%, это, конечно, вряд ли), вы уже для них не будете маленькими. А по поводу сотрудничества с ними — ну, может быть… Главное, чтобы их предложения были не в духе «анализировать активность и советовать что-то немного более выгодное… оператору».
Грамотная идея. Сам несколько лет назад подумывал сделать такую штуку, но, разумеется, руки так и не дошли. В то же время мне всегда казалось, что запутанная система тарифов с «подводными камнями» очень важна для операторов, и подобные приложения для них — как серпом по баксам. Маски-шоу ещё не случались?
Тема была сильно измусолена вплоть до начала 90х — всяких там rule engine'ов было выше крыши. Они и сейчас есть в наличии, но, как мне кажется, они несколько утратили в популярности из-за т.н. AI Winter. Когда-то люди надеялись, что на таких правилах можно построить сильно крутой AI, однако надежды не сбылись и про rule engines все в основном как-то позабыли. Что-то в этом духе произошло и с Lisp'ом. Как мне кажется, незаслуженно — ведь помимо AI правила имеют большое количество других применений, где они могут быть весьма эффективны.
На самом деле тема большая — логика на основе forward chaining (Rete algorithm, это всё), backward chaining (Prolog, etc.). К IRule это имеет довольно опосредованное отношение, зато имеет отношение к pattern matching'у, unification etc. Я делал подобную хрень (forward chaining) на основе трансляции правил в хранимки и триггеры PostgreSQL.
У меня один знакомый провёл длительное время в больнице, слишком тщательно закупорив бутылку от шампанского с карбидом. Бутылку разорвало, товарища нашпиговало осколками…
Уточню, такая ситуация наблюдается там, где я езжу. Ни разу не было штрафа за превышение до 20 км/ч — Москва, Московская область, немного Ленинградская область и Карелия (в основном вне населённых пунктов). В других местах может быть по-другому.
Давно в ту сторону не ездил, но, кажется, как раз в районе развязки с ТТК камер не особо, можно разогнаться, создав проблемы выезжающим с ТТК на Звенигородку в центр — если им надо перестроиться, чтобы вскоре повернуть налево.
Надо на проблему взглянуть под другим углом. Идиоты, летающие на всех парах через перекрёстки и пешеходные переходы, будут всегда, штрафуй их или нет. К счастью, не каждый случай «пролёта» заканчивается жертвами. С другой стороны, отстегнув несколько раз по заметной сумме за свои подвиги, такой кадр, быть может, в следующий раз притормозит перед таким участком. В конце концов, притормозит перед камерой — уже знает, что она там стоит, попадался. Это я, конечно, не к тому, что подобный подход к выбору скорости верен — но на разных людей действуют разные меры воздействия, не понимают головой, что надо притормозить — пусть поймут кошельком. Теперь рассмотрим случай, когда камера на прямом участке за километр до перекрёстка. Долбодятел выучит камеру, будет перед ней притормаживать, а на оставшемся километре — тапку в пол, ведь на перекрёстке-то камеры нет!
Ещё скажу про одно положительное свойство камер — извиняюсь за некоторую политизированность.
По всей видимости, у московской системы камер должен быть какой-то whitelist. Если
исключить из этого списка машины экстренных служб и другие случаи объективной необходимости,
оставив номера частных автомобилей — получится неплохой расстрельный список.
Может быть, стране пригодится в будущем.
Кстати, интересно, а такое часто бывает — задумался о вечном, и тут внезапно вспомнил, что скоро камера, долбанул по тормозам, удар в зад, замес?
Лично я не склонен пытаться обойти камеры — камеры не фиксируют превышения
до 20 км/ч (может, и больше, но не рискую), по мне в Москве (в т.ч. на ТТК и МКАДе)
быстрее ехать не критично. Но в то же время замечу, что «Стрелки», по моим наблюдениям,
вешают гораздо чаще там, где разогнаться можно безопасно, а не там, где ехать
быстро действительно опасно. Скорее можно увидеть камеру на прямом
участке, где пешеходов не встретишь — а вот вблизи перекрёстков, в местах с
ограниченной видимостью, там, где через дорогу ходит много пешеходов Стрелок
как-то по-моему не густо. Поскольку большинство водителей хоть как-то соображает,
в таких люди сбавляют скорость и камера становится невыгодной, может
даже не окупиться. Хотя, по-моему, лучше бы камеры висели преимущественно
как раз в опасных местах — ведь всё-таки заявленная цель — безопасность, а не выгода.
А здесь (тест) тоже немного, но зато с практическим смыслом — для работы с протоколом SLIME в (изначально) моём проекте swank-js. Чтобы браузером из Емакса рулить (причём когда-то мне удавалось эту штуку даже с IE7 подружить).
Как-то одолжил у жены её карту для прохода в метро (Мастер-банк). Меня остановили после прохода турникетов менты вместе с сотрудницей метрополитена и попросили показать, по какой карте я прошёл. Показал — их устроило. Жена сказала, что её тоже останавливали, оказывается, ловят мухлюющих с социальными картами (имеется в виду, похоже, не клонирование, а разного рода менее технологичное мошенничество). Один раз ей зачем-то дали распечатку FAQ по борьбе с мошенниками с mosmetro.livejournal.com. Я это к тому, что вы, ребят, поосторожнее — если вот так тормознут после прохода по клону, могут быть неприятности, и показать что-то другое вместо клона — не поможет, сверят.
Тут соглашусь, биореактор — это для первого случая, а также, по возможности, для разных злокачественных vendor lock-in'ов и тому подобных ситуаций. Во втором случае (гитхаб) можно действительно игнорировать/править, ну или максимум, если совсем невмоготу, обложить матюгами в блоге/соцсетях/других сайтах, но тоже, конечно, без излишней ненависти.
Кстати, аутентичный говнокод обычно отличается тем, что начинаешь лихорадочно искать на экране кнопку . Надо будет фичреквест гитхабу написать.
На начальных стадиях помогает, если человек говнокодит просто по неопытности или не очень упорствует в своих сомнительных говнокодерских наклонностях. Но бывают упёртые гонокодеры, сознательно придерживающиеся такого стиля и не признающие других. Т.е. если человек делает это посреди улицы не первый год и категорически не признаёт никаких альтернатив такому поведению, тогда — без ненависти, но в биореактор.
Здорово. Правда, низкое качество кода не обязательно свзязано с какими-то дополнительными напрягами для компиляторов. Да и оптимизация, так скажем, вовсе не обязательно улучшает читабельность кода. Хотя, с другой стороны, когда-то давно я столкнулся с одной довольно занятной ситуацией. Товарищ в институте написал некислую расчётную программу, которая думала примерно полтора часа (на пне-120). Пока она считалась, он обычно ходил обедать в столовую. Штука была написана под линух, и, как-то взглянув на это творчество, я его спросил — а ты не хочешь добавить -O2 к CFLAGS в Makefile? Ну, добавил… Время работы упало с полутора часов до считанных секунд. Вот так вот испортил человеку обеденный перерыв, а всего-то дело было в том, что в программе было с десяток уровней вложенности циклов, и на самом внутреннем считался набор значений, который можно было бы посчитать заранее, о чём gcc в режиме оптимизации без труда догадался.

А из программерских баек меня больше всего за душу берёт сказка про программиста и эльфов.
С говнокодом с ним оно как в реальной жизни. Бывает — идёшь, наступишь во что-то, а не понятно, говно ли это или грязь, а может — просто показалось. А бывает — сразу понятно — оно. По запаху ли, по другим признакам. И на код смотришь — иногда думаешь, может, просто чего-то не понимаешь, не дорос ещё до того или иного подхода, или не уловил авторской задумки, или автор и впрямь был поставлен в такие рамки, что ничего другого выдать не мог, такое с каждым может случиться. А бывает что сразу видно, что перед тобой — настоящий аутентичный говнокод, порождение особой формы мышления, и автор его кроме поганой метлы иных средств воздействия не заслуживает. Особенно в случаях, когда у автора стаж работы «программистом» уже большой и изменить ход своей мысли он уже вряд ли сможет.
А ныне SCOты сдулись, и теперь MS будет делегировать сомнительные с точки зрения PR дела компании Nokia.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity