суббота, 31 июля 2010 г.

Homo Cyclistus Dolboebus

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

Ну так вот, негативки у меня нет, поэтому после прошедших дождей, разбарабаненным дорогами и проехавшим по ним тракторам эти самые дороги превратились в гребёнку. Вилка моя такое отрабатывает, если сильно спустить давление. Я спустил, проехал гребёнку, и думаю, смогу ли ли пробить вилку на таком давлении? Т.к. до самого дома спусков повышенной чёткости больше не предвидилось, то я встал на велосипед, встегнулся в педали, зажал передний тормоз и всем весом качнул вилку. Велосипед стоял на небольшом склоне, кормой к вершине, у меня 80 кг веса плюс рюкзак за спиной. Вилка ушла вниз на все свои 120 мм хода,центр тяжести пересёк вертикальную линию, и я сделал стоячий оверруль %) Тактика борьбы с оверрулём при торможении (отпустить тормоз) не помогла, ибо велосипед стоял на месте.

Больно ударил левую коленку и правое запястье и поймал сверху велосипед. Ну не сабж ли я? :)

пятница, 30 июля 2010 г.

Cltl2 vs ANSI

Читал на сон грядущий честно купленный "Common Lisp: The Language, 2nd edition", изготовленный из тел мёртвых деревьев, и с удивлением обнаружил функции evalhook и applyhook. Если в двух словах, то эти функции позволяют простым способом организовать пошаговое выполнение формы. Или легко сделать песочницу, запрещая лезть, куда не надо, и делать, что не надо.

К сожалению, в ANSI Common Lisp эти функции убрали :( Осталась только функция step, которой можно делать интерактивный степпинг. В SBCL сделан step в варианте permissive, т.е. форма просто выполняется и выводится результат, даже если переключить sb-ext:*evaluator-mode* на :interpreter. Упоминаний evalhook в исходниках не нашёл. Зато в LispWorks и step работает, и evalhook сидит в пакете system, и в IDE есть возможность визуального отображения степпинга.

Побаловался немного с evalhook в Лиспворксе. Блин, ну это же малина! Нафиг такое убирать было? :( Вот пример песочницы:


(defun forbiddenp (form)
  (member (car form) '(quit)))

(evalhook `(progn
             (quit)
             (1+ (* 6 8)))
          #'(lambda (x y)
              (unless (forbiddenp x)
                (eval x)))
          nil)

=> 49

Здесь quit не будет выполнен.

четверг, 29 июля 2010 г.

Про работу в большой компании за рубежом

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

Допустим, увидел человек объявление: "Требуется программист на C++ под Windows в большую, известную зарубежную компанию...". Ну а чё? По скиллзам проходит, английский достаточно прилично знает, шансы пройти собеседование высокие, контракт долгосрочный, не на полгода. Контора сама занимается документами и перевозом. Почему бы и нет? Тут хоть, вроде, и жизнь налажена, и работа терпимая, и денег не то, чтобы совсем много, но вполне хватает, но валить на сраном тракторе ведь надо. Тренд такой есть, да и самих террор и бесчинство бюрократии и ментов задолбали, сил нет. Вобщем, вот он - шанс пожить по-человечески.

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

К чему ему при таком раскладе нужно быть готовым в "большой, известной зарубежной компании"?

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

[*] Впрочем, любимое дело менеджмент легко превращает в кабальный ад. Любимое - это когда и нравится, и можешь сам принимать решения, и управлять своим временем.

Если вы туда сами напросились, как "программист на C++ под виндовс", а не они вас сами позвали, как ценного, известного специалиста, то денег много не дадут. Нужно торговаться. Но всё равно сильно больше не дадут, ибо дешевле взять менее жадного. Если же вам сами работу предлагают, то тут немного лучше, можно и поторговаться. Внутренние спецы на вас референс кадровикам дали, вы в глазах кадровиков "ценный кадр". Определить степень крутизны и точную цену им сложно, но вы уже точно не та серая масса, с которой они обычно работают.

Но ценность для компании вас всё равно не спасёт. Большая, известная компания делает большой, известный продукт, над которым работать вам через некоторое время надоест.

Перспективы роста у понаехавших в большой, известной компании нет. Даже если вы способный специалист. Нет, не так. Тем более, если вы способный специалист. Во-первых, у вас явно есть проблемы с общением, потому что на людишек времени не хватает, тут ведь нашлось такое, спать не можешь, кушать забываешь! Во-вторых, вы понаехали, и всех тонкостей культуры и богатств аборигенского языка никогда не узнаете. Поэтому будут двигать местных, менее способных, но общительных.

Зряплату не повышают. Ну, то есть, инфляцию компенсируют, но, как часто в нерезиновске бывает, в 2.5 раза за полтора года - нет, тут это фантастика. Премии дают, и чем больше делаешь, тем они больше, но это всё равно очень сильно меньше денег, чем от хорошего повышения з/п. Поэтому и нужно торговаться в самом начале. Если же чувствуешь, что развился, и денег стало совсем мало, то проще поменять работу, хорошо сторговавшись при приёме.

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

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

Со временем неудовлетворённость работой, чувство собственной недооценки, отсутствие ясных перспектив в жизни будут гнобить всё больше и больше. Чем дальше, тем хуже. "Я работаю в большой, известной компании." льстить самолюбию перестанет быстро, а "В большой, известной компании работает сам <ваши ФИО>." не получилось. Потом будете даже задумываться над тем, а нафиг я вообще сюда сунулся? Время ушло, но ничего значимого не принесло. В нерезиновске уже давно бы дорос до архитекта, стал уважаемым человеком, закрыл ипотеку, ездил на новой, хорошей машине, и прочими способами бесился с жиру.

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

Впрочем, если человек неамбициозный, работает не напрягаясь, но устраивая при этом работодателя, то такой вариант для него будет идеальным. Однако, такие люди и не щемятся никуда, раз их всё устраивает.

Как-то так :)

воскресенье, 25 июля 2010 г.

Лисп, свои типы данных и операции над ними.

В воскресенье объехали с женой вокруг Брно (65 км), размяли ноги. Увидел на lisper.ru этот тред, решил размять и мозг.

Итак, нужно иметь свой тип для представления денег. Деньги представляются числом с фиксированным количеством разрядов после запятой. Например, 2 для копеек. Числа с плавающей точкой использовать нельзя, т.к. значения во время вычислений определённо уедут из-за округлений, плюс нельзя контроллировать кол-во разрядов после запятой.

Пусть наш тип данным будет cons'ом, в голове которого будет само значение, а в хвосте - экспонента с десятичным основанием. Голова - целочисленная, масштабированная на экспоненту. Например, 2.43 во внутреннем представлении будет (243 . 2) .


(deftype money (&optional exp)
  `(and (satisfies consp) (satisfies is-money)))

Чтобы объект был похож на деньги, он должен быть cons'ом и удовлетворять is-money:

(defun is-money (x)
  (and (integerp (car x))
       (integerp (cdr x))))

Можно ещё проверок накрутить, типа, положительной экспоненты, пределов значений экспоненты и т.п., но не будем. Проверяем:

(typep '(1012 . 2) 'money) => T

Работает. Напишем хелпер, приводящий наш формат к нормальному числу:

(defun get-real-value (x)
  (cl:/ (car x) (expt 10 (cdr x))))

и хелпер, делающий деньги:

(defun make-money (val exp)
  `(,(round (cl:* val (expt 10 exp))) . ,exp))


Проверяем:

(make-money 10.12 2) => (1012 . 2)


Работает, но '(1012 . 2) в коде программы выглядит не очень презентабельно. К счастью, у нас есть ридтейбл, модификацией которого можно добиться, чтобы лисп, например, читал конструкцию вида $10.12'2 и создавал нужный конс (1012 . 2).

(set-macro-character #\$
 (lambda (s disp)
   (declare (ignore disp))
   (let ((*readtable* (copy-readtable)))
     (set-macro-character #\'
              (lambda (foo bar)
                (declare (ignore bar))
                (read foo)))
     `(make-money ,(read s) ,(read s)))))

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

(equal $10.12'2 '(1012 . 2)) => T

(typep $10.12'2 'money) => T

Всё ещё работает.

Разберёмся с какой-нибудь зловредной математической операцией, меняющей кол-во знаков после запятой. Пусть это будет умножение.

Т.к. функция умножения уже присутствует в системе, то её нужно затенить, дабы компилятор не ругался: (shadow :*). Функция получает список аргументов, над которым нужно произвести действие. В первом приближении я написал код вида (apply #'cl:* (mapcar деньги-в-число ...)) с последующим вызовом make-money с полученным числом и максимальной найденной экспонентой, но так делать неправильно, т.к. во время умножения будет копиться ошибка, перетекающая в старшие разряды и потенциально могущая попасть в значимый диапазон. Правильнее будет на каждой итерации приводить результат к деньгам, для чего воспользуемся техникой reduce:

(defun * (&rest args)
  (reduce
   (lambda (&rest args)
     (when args
       (apply #'make-money
          (case (length args)
        (1
         (destructuring-bind (v1 e1)
             (normalize-value (car args))
           (list v1 e1)))
        (2
         (destructuring-bind ((v1 . e1) (v2 . e2))
             (list (normalize-value (car args))
               (normalize-value (cadr args)))
           (list (cl:* v1 v2) (max e1 e2))))))))
   args))

где normalize-value:

(defun normalize-value (x)
  (if (typep x 'money)
      (cons (get-real-value x) (cdr x))
      (cons x 0)))

Проверяем:

(* $1.23'2 $2.01'2 2.0 1/2) =>  (247 . 2)

Опять работает.

Оставшиемя основные арифметические операции определяются аналогично (через macrolet). Внутреннее представление денег можно, по вкусу, изменить на структуру.

суббота, 24 июля 2010 г.

Upgrade

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


Объём 25 литров, 3 литра жижи, куча карманов, встроенный чехол для защиты от дождя и говна, на спине вентилирующася сетка. На груди, правда, нет ремня, как у Кэмелбэка, поэтому на расколбасе рюкзак будет скакать. Но зато при долгой езде в горку ничего сдавливать грудь не будет. И объём в 2.5 раза больше, можно спокойно покласть жратву, инструменты, кой-какую одежду. Со впихиванием всего этого в Кэмелбек есть проблемы.

Ещё купили себе компасы. Жена себе побольше, с линейкой, а я маленький, с карабином и градусником (градусник отломится по-любому :). В незнакомых местах по карте когда ездишь, то стороны света не всегда по естественным признакам определить можно.

пятница, 23 июля 2010 г.

Обезъяны и гранаты

Вот говорят, что женщины в основной своей массе водят аккуратней и правильней мужчин. Может, с основной массой оно и так, но вот остаточек - те ещё водилы!

Например, не далее, как вчера утром с нами случилась такая фигня: везу жену на работу, подъезжаю к развязке. Въезд на неё в довольно крутую горку, поэтому все въезжают в горку на скорости, а сама развязка лежит по другую сторону горки. Ну так вот, въезжаю... Справа ограждение, слева у самого поворота стоит отбойник, деваться в случае чаво особо некуда. И тут нам на встречу едет пара тёток. Они хотели повернуть на нашу дорогу, но "промахнулись" въездом. Подумаешь, пересекли двойную сплошную, выехали вслепую на встречку (см. про горку), а потом через просто сплошную ушли в свою сторону. Ну офигеть просто. Я-то при этом должен был влево внимательно смотреть, т.к. там плохо видно, как машины на высокой скорости с объездной дороги заскакивают. Именно поэтому там, помимо стрелок дорожной разметки и знака направления движения на отбойнике, есть двойная сплошная.

План-схема. Красная стрелка - я, зелёная - тётки.

четверг, 22 июля 2010 г.

среда, 21 июля 2010 г.

Лисп в промышленной разработке

Месяц с копейками на новой работе, уже можно делать кое-какие выводы по поводу применимости Коммон Лиспа в реальном деле.

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

Какие моменты хорошо заметны:
  • Код у людей пишется очень быстро.
  • Ошибок, связанных с динамической типизаций, практически не встречается. Даже если код пишет новичёк, то 99% производимых им косяков имеют алгоритмический характер, либо неправильное использование синтаксиса (!). Декларация типов при этом не используется совсем.
  • На предупреждения компилятора (warnings) мало, кто смотрит. Если компилятор не встал колом, то код считается рабочим и спокойно коммитится в репозиторий. В итоге, warning'и растут, как на дрожжах, и в вагоне шелухи не видно критических предупреждений, которые, по-идее, могли бы быть и show stopper'ами. Автоматическая посткоммитная сборка и посылка diff'а лога автору коммита не особо помогает. Правда, у нас уровень предупреждений повышенный стоит... Но факт есть факт: на warning'и никто не смотрит.
  • Предупреждения компилятора народу бывают сложными для понимания. Т.е. спрашиваешь человека, почему он не исправит эту фигню, а он отвечает, что не понимает смысл предупреждения. Это от того, что человек с концепцией языка не знаком, а прошлый опыт с вариациями C/C++ объяснить суть ошибки не может.
  • Настоящий фортрановский программист напишет фортрановскую программу на любом языке. Железячники пишут на Лиспе, как на VHDL или C. Студенты с академическим C++/Java бэкграундом пишут всё на классах. Только лисперы пишут на Лиспе, как на Лиспе. В итоге, встречаются вырвиглазные конструкции, вытащенные явно из железячной логики, или, там, множество вложенных хэш-таблиц с мильёном объектов на каждый чих, которые разбирать даже с помощью инспектора неудобно. А ведь можно было построить список, который очень просто рекурсивно обходится и паттерн-матчится... Но всё это говорит только о том, что порог вхождения в Лисп очень низкий, и писать на нём работающий код может человек с опытом программирования на любом языке.
  • Лисповый код очень просто рефакторится. Есть у нас большой человек с огромным опытом, и он, в числе прочего, причёсывает дизайн системы. Улучшения колоссальных размеров укладываются в очень мало изменённого кода (DSL на DSL'е :).
  • Люди без лиспового опыта предпочитают IDE Лиспворкса. Религиозные фанатики пишут в Емаксе (хотя Slime Лиспворкс не в полной мере поддерживает). Возможно, именно благодаря привычно выглядящему окружению (кнопки, тулбары, гуи) и мощному отладчику, даже начинающие пишут, пусть некрасивый, неканоничный, но рабочий код.
  • Люди с богатым опытом opensource-разработки и для проприетарных продуктов пишут хороший код. Одно удовольствие такой код читать.
В целом, ощущения полной неприменимости или какой-то значительной проблемности при использовании Лиспа нет. Даже при синтезе железа (привет, thesz!). Даже в такой критичной к ошибкам области, как биржи, где каждая миллисекунда простоя стоит денег ;)

    четверг, 15 июля 2010 г.

    Archlinux vs остальные

    Сижу на Арче уже почти два месяца, кое-какие pros и cons по сравнению с Федорой накопились.

    Начнём с минусов, чтобы не испортить под конец торт :)

    1. У пакетного менеджера нет истории транзакций (это когда одной командой можно отменить установку пакета с зависимостями, сделанную, скажем, полгода назад). yum history развратил меня чрезвычайно быстро. Мегаудобно. Но по этому пункту есть своё замечание в плюсах.

    2. Бинарных сборок софта маловато. Aur, конечно, большой, но собирать софт с параметрами по-умолчанию - это зло. И сломанные PKGBUILD в Aur встречаются, чего там. Да и не такой большой он, как репозитории в Федоре, Дебиане/Убунте.

    3. Встречается, что не хватает гибкости в системе. Например, приходилось править шелловский скрипт в /usr/sbin, чтобы он брал версию ядра из командной строки, а не `uname -r`. Эту фигню, кстати, уже поправили, но, в общем, такое дело в Арче встречается. Меня это не особо напрягает, т.к. инфраструктура крайне простая и понятная, но нужно быть подготовленным юзером, не стесняющимся ковырять шелловский код и понимающим, как система на достаточно низком уровне работает.

    4. Можно по неосторожности снести реально нужный пакет, и система молча, без истерик его удалит. А он нужен. Например, когды я приехал из командировки на новую квартиру без интернета, то захотел заюзать интернет через телефон. Для этого заранее поставил bluez, pppd, ну всё, как надо. Опыт большой. Но не проверил, что всё цепляется. И оказалось, что питоновский скрипт для обмена блютузными пинкодами требует pygobject, который я снёс. Горе... К счастью, я как-то на Арче пытался слить фотки с телефона, и bluez запомнил пинкод, поэтому обошлось. Но вот такое дело с пакетами есть, да. По этому пункту тоже есть замечание в плюшках.

    Теперь плюшки :)

    1. Что в yum напрягало - это постепенное обрастание системы гогном. Т.е. ставишь пакет на посмотреть, он кучу гогна за собой притащил. Потом пакет в гневе удаляешь ("ну и гогно!"), а зависимое гогно осталось. package-cleanup помогает, но не полностью - нужно глазами определять, что, чего, да как. И всё равно время от времени приходилось делать rpm -qa и вручную удалять завалявшееся гогно. Причём, раньше package-cleanup работал как-то лучше. Но проблема на корню была решена с появлением yum history.

    А в Арче такой проблемы вообще нет: pacman -Rscdn удаляет всё гогно, поставленное с этим пакетом, если оно больше никому не нужно.

    2. Я сто пудов уверен, что джава мне для запуска OpenOffice не нужна. В Федоре ставил два базовых пакета с --nodeps, а потом доставлял остальное нужное. При обновлении версии OOo приходилось его сносить и повторять сначала. В Арче же pacman просто говорит, что, де, кто-то там из уже установленных чего-то хочет. Мол, взгляни, хозяин, коли желание будет.

    3. Что бы там на верху не говорили, но Федора - это rolling based дистрибутив. Полгода между релизами, прекращение выпуска апдейтов ещё через полгода - это нифига не трёх- или пятилетный стейбл. До недавних пор вообще можно было получить ломающий по своей натуре апдейт, типа как Emacs с 22 до 23. Или ядро в пределах полугода два раза меняло апстримную версию (выпустили релиз ещё со старым ядром из-за проблем с планируемым для релиза, потом через две недели воткнули, какое и хотели, а ещё через 4 месяца выкатили наисвежайшее).

    Сейчас такого нет, софту мажорные апдейты в течеии релиза не делают, но это даже хуже, по-моему. Хуже, потому что темп развития дистрибутива бешенный, за полгода архитектурных изменений столько накапливается, что сделать абсолютно гладкий апгрейд нет возможности. Частично проблему решает утилита preupgrade, но она хочет много места в /boot для скачивания пакетов. Рекомендуют полгигабайта. Я найду и загрызу зубами того, кто мне ночью /boot на полгигабайта сделает. Да и всё равно, после preupgrade тоже нужно проблемы решать. Если не решать, то получится ноутбук моей жены =)

    В Арче такой проблемы нет. Просто время от времени запускаешь апдейт системы, и он гладенько проходит. А если что-то сломает, то проблему локализовать чрезвычайно просто: "Так, что там у нас за два пакета щас обновилось?... А что по этому поводу пишут в wiki?".

    4. Пересобрать софт в Федоре - это надо уметь. И хотеть. Потому что, если знаешь и умеешь, как пересобирается софт в Федоре, то обычно не хочешь этого делать. Но куда, порой, деваться? SIP-телефон Twinkle хочет qt и boost, куда это годно? Есть два патча, которые ему хотелку отрывают, но после очередного изменения версии Федоры, ну максимум, следующего, старая rpm'ка отказывается работать из-за требования старых версий библиотек. Приходится пересобирать... А тут политика партии по spec-файлам изменилась, старые патчи на старый же софт накладываться перестали, ещё какая фигня случилась...

    В Арче софт пересобирается крайне просто. PKGBUILD по сравнению со SPEC - это сама краткость и ясность. В Арче также есть customizepkg, который при апдейте системы автоматически пересобирает новую версию нужного софта с нужными тебе изменениями. У меня так, например, Емакс собирается с тулкитом athena вместо gtk.

    5. Если с Арчем возникла проблема, либо не знаешь, как чё делается - goto wiki. В натуре, Арчевская wiki - это самое полное собрание сочинений по всем аспектам юзанья дистрибутива, которое я только видел. Всё расписано по шагам, и всё работает. Даже мозг напрягать не надо, copy-paste в консоль только и делай.

    6. В Федоре жёсткая политика партии. Сказали всем юзать гном, кеды или lxde - все юзают гном, кеды или lxde. Отщепенцам, решившим вместо православно освящённых gdm/kdm и вышеозначенных DE поставить xdm и свой тёплый ламповый WM, придётся бодаться с глюками в самых неожиданных местах системы. То xdm с selinux'ом не дружит, то xdm энвайронмент нормальный не создаёт, то xdm не даёт залогиниться, то... И исправляют баги неохотно, даже после багрепортов с патчами. Хуле, если хочешь извращений, купи себе лучше кожанные стринги, наручники и плётку, нефиг силы разработчиков на всякую дребедень ненужную отвлекать...

    В Арче если софт попал в официально поддерживаемый репозиторий, то он работает. Может быть, конечно, и глючит, но не из-за особенностей дистрибутива (в Арче софт, кстати, патчат исключительно редко). Вобщем-то, на Арче я глюков ещё в своих кожанных стрингах не видел. Даже пришлось из профайла выносить все quirk'и, написанные для Федоры.

    7. Не знаю, как там в других попсовых дистрибутивах, но в Федоре явно наблюдается оверинжинирнг. Это когда люди наслаждаются наворачиванием технических сложностей. Оно, конечно, всё ради пущего удобства и интеграции, но, порой, у людей есть свои представления об удобстве и степени необходимой интеграции. Отступление от нормы в Федоре, как уже говорил, - это создание самому себе проблем. Отступление от нормы в Арче - ... Простите, о какой норме идёт речь? :)

    Но, вернёмся к оверинжинирингу в Федоре. Это плохо. Программисты часто бывают оторваны от реальности, поэтому диктатура технократии приводит к страшным спагетти-монстрам. Я знаю, я сам такой. С этим обычно борятся оглоблей, но технократия бывает против справедливой критики, что ихнее изваяние, на которое они убили полгода - гогно, по-сути. И ничего, что они сами это очень скоро осознают, и начнут ваять другого монстра на замену. Но оглоблей бить надо, иначе вместо требуемого автомата Калашникова всё время получается М-16, которая после каждого выстрела (желательно, в условиях лабораторной чистоты) должна перебираться и смазываться.

    Ну вот, как-то так :)

    среда, 14 июля 2010 г.

    Машины - отстой, маунтин байк - сила!

    Отвёз утром машину в сервис, обратно поехал на велосипеде. Предварительно снял свою зубастую дорогую Швальбу и поставил Кроссмарки. Блин, на лёгкой узкой резине велосипед просто летит (только не надо про шоссеры разговор заводить.... ;), по комьютеру средняя скорость была 23 км/ч, а без учёта стояния на светофорах - где-то 30 км/ч. Управляемость тоже гораздо выше, даже углы бордюров пару раз в поворотах задел. На Швальбах-то поворачивать нужно заранее, байк неторопливо на усилие реагирует. И на педали на Швальбах тоже неторопливо реагирует. Тут же кайф от спортивного стиля педалирования получил, с резкими ускорениями, торможениями, обруливаниями.

    Но всё это фигня. Вот пойдут дожди, говна в лесу распухнут, тут-то Кроссмарки и приедут...


    Но я переобуюсь в Швальбу




    натяну скафандр



    и поеду покорять


    понедельник, 12 июля 2010 г.

    Скорость vs расход топлива

    Я тут, когда не забываю, веду расходы по машине. Запчасти и прочие мойки лень вносить, а топливо более-менее стараюсь вбивать.

    Так вот, когда ехали в Париж, то по Германии я жал 150-160 км/ч, ну 140 минимум. И оказалось, что жрать наша машинка начинает в три горла, больше 6 литров. Обратно ехал специально медленно, 130 км/ч, и расход оказался в районе 5 л. Если резко не ускоряться, лишний раз не тормозить и прочие нагрузки движку не давать, то вообще, говорят, 4.5 л. можно. Но не нужно, ибо так ездить совсем неинтересно :)

    А ещё в пятницу в дверь упало левое стекло. Выходные провёл в гараже. Лопнула одна из двух пластиковых струбцин, держащих стекло. А лопнула из-за того, что трос привода сильно натянулся. Натянулся-то он из-за того, что выскочил из канавки на пластмассовом барабане, его крепко пожевало и заклинило. Выскочил он, понятное дело, из-за дороги Прага-Брно. Пытался сколхозить, даже что-то получилось, но при сборке обратно струбцина совсем рассыпалась. Надо менять струбцины, тросы и пластмассовую часть привода.

    Итого, из-за этой поганой стиральной доски уже третья поломка: лопнула пружина левой передней стойки, разболталось крепление защитного козырька рулевой тяги, теперь вот стеклоподъёмник ёкнулся. Зато в совершенстве знаю устройство водительской двери у Сеата Ибицы и Фольксвагена Поло со Шкодой Фабией до кучи :)

    Аплинковое

    Провели интернет на новую квартиру. Наконец-то... Неделю заняло. Сначала посетила ажно делегация из двух манагеров, которая заключила договор и сказала, что настоящий дяденька, делающий интернет, придёт только через неделю =\

    четверг, 8 июля 2010 г.

    По итогам командировки...

    ... и всему увиденному заявляю, что в нашей конторе почти весь софт написан на Лиспе (Коммон, который), как то:
    • как водится, конпелятор DSL. В Лисп и VHDL. Ага, из одного исходника сразу и для железки, и для софтовой эмуляции;
    • билд-система;
    • фреймворк для эмуляции и верификации;
    • GUI;
    • CLI-утилиты;
    • железнодорожные составы библиотек на все случаи жизни;
    Не на Лиспе написаны ядра для ПЛМ, да штуки 3 башевских скрипта, в итоге всё равно вызывающих Лисп.

    Кажный божий день учусь чему-нибудь новому у более опытных коллег, ну и сам, бывает, подсказываю полезности. Интервал деятельности - от созерцания времянных диаграмм проэмулированного VHDL, через парсеры сетевых протоколов и, как водится, самый обычный системный софт до того самого конпелятора. Самое прямое участие в обсуждении архитектур не только своих продуктов, но и смежных. Ну и куда ж без линуксового ядра, ядро тоже есть... Скучать вот времени нет. Одним словом, стартап!

    Удивительно, но за такое приятное времяпровождение ещё и деньги платют!

    Надо будет как-то написать пост про наши замечательные продукты.

    вторник, 6 июля 2010 г.

    Увидеть и умереть

    Проехали с женой 3000 км за последнюю неделю. У меня командировка в Париж была, жена поехала со мной. Два дня работала, потом по Лувру день шарилась. На выходные и последующие чешские праздники поехали к её сестре в Бельгию. В пути суммарно провели 33 часа.

    В Париже мне не понравилось. Вот почему:

    1. Большой город, я большие города не люблю.
    2. В центре совсем нет зелени, один асфальт и бетон.
    3. Много праздно шатающихся арабов и негров. Я праздно шатающихся арабов и негров не люблю.
    4. Бешенный трафик, люди ходят по дорогам, вагоны мотоциклистов и скутеристов прошмыгивают в полметра зазора между машиной и стеной. Одно неловкое движение баранкой, и можно услышать хруст костей.
    5. Было аццки жарко, +35 в тени. Работал в поту, ел в поту, спал в поту.
    6. Французы едят салаты. Мяса днём с огнём не сыщешь. Вернее, сыщешь, но мало, и см. следующий пункт.
    7. Дорого, бля. Бля, дорого.
    8. Каждый второй курит. Женщины все курят, по-моему.
    9. Грязновато как-то.

    Что понравилось:

    1. Люди в хорошей форме. Оно и понятно, на одних салатах-то...
    2. Хоть и курят, но табак не такой вонючий, как в России.
    3. Все хорошо пахнут. В Чехии и России тётки часто какими-то помоями как обльются, хоть вешайся, а тут вкусными духами пахнет.

    До отеля неожиданно добрались без особых проблем. Выбирались из Парижа где-то час-полтора, т.к. развязки с момента покупки навигатора успели поменяться, и он нас таскал туда-сюда, пока сами не выехали по указателям. Температура в машине была аццкая, до +39.

    Порядок цен:

    - 160 евро за сутки в средней паршивости отеле;
    - 27 евро за сутки на автостоянке;
    - 10 евро позавтракать вдвоём по паре круассанов и кофе. Вкусно, в натуре. Умеют французы делать кофе и круассаны;
    - 10 евро пообедать одному как попало (салат или булка с начинкой и колой);
    - 50 евро поужинать вдвоём и без претензий;
    - 10 евро сходить в Лувр;
    - 50 евро заправить неполный бак;
    - 250 временно заблокированных евро из-за тупняка местных контор, типа заправки и отеля.

    Финансовые звёзды как-то неудачно сложились, моя экс-редхатовская зряплата с квартальной премией на такой подвиг, да ещё и после переезда на новую квартиру (и никуда не девающейся ипотекой), оказалась не готова. Приехали назад почти под ноль. Неприятненько так обнаружить, что денег на карте почти не осталось, и потом считать, хватит ли на солярку домой =)

    Вот ещё хорошая новость: муж сестры жены (как это по-русски то?) починил нам машину, которую мы у него же и купили. Пару месяцев назад в ней что-то начало стучать при заднем ходе. Возил в местный чешский автосервис, там нифига не нашли.  А он нашёл. И пофиксил. Ничего страшного не было, но всё равно... Большое ему спасибо от пока ещё автолоха :)

    Архив блога