LE Blog

Инженер с поэтической душой

03.04.2012 firtree_right Транспорт

Начинаю серию записей про поездку 18-29 марта 2012 года по маршруту Москва-Болонья-Милан-Гренобль-Цюрих-Москва. Записи будут разбиты на темы и предназначены, скорее, для сохранения опыта.

Самолеты

Поскольку на встрече Нового года была Ника, которая работает в Джизо.ру, то именно с их помощью я искал билеты на самолёт. Как я понял, это поисковик, и по итогам его работы меня перенаправили на предложения двух других аггрегаторов. Туда — в Болонью — я летел Брюссельскими авиалиниями по предложению Бравоавиа. А обратно — из Цюриха — Эйрболтиком по предложению Сентурия. У самого Джизо не так много прямых контактов с авиакомпаниями.

Тут у меня появились сразу предпочтения. У Бравоавиа два незначительных нарекания. Они не пишут трёхбуквенные обозначения аэропортов. И не указывают, что именно входит в мой эконом-класс. У Брюссельских авиалиний два эконом-класса (b.flex и b.light). В котором мы летели, кормят лучше. Но эта информация доступна на сайте авиакомпании по коду брони (PNR). Остальное и так хорошо. Электронная регистрация доступна по ссылке в письме. Транзакция по карточке приходит от BRAVOFLY SA, CH (как сказано на сайте) сразу при оплате.

Сентурия же произвела двоякое впечатление. Сначала они присылают длинное письмо про себя, двуступенчатую систему оплаты и про то, что скоро всё произойдёт. А потом происходит странное. С карточки списывается два раза по половине суммы за два билета от AIR BALTIC, MD. Это означает, что данные моей карточки где-то хранились и куда-то передавались, потому что я не вводил их на сайте авиакомпании, а вводил на сайте Сентурии. А через минуту приходит письмо с электронным билетом, которое выглядит вот так:

Причём сами пдф электронных билетов как будто выписаны galileo.com.ua и как будто я платил за них наличными (!). Причём в левом верхнем углу просто написано "ЛОГОТИП КОМПАНИИ". Усугубляет ситуацию то, что я не могу зайти и посмотреть детали бронирования на сайте авиакомпании, используя код. А так же, как потом выяснилось, не могу электронно зарегистрироваться. Они пишут, что питание стоит денег, но не пишут, что денег стоит и багаж. Я знаю это, так как летал Эйрболтиком.

С другой стороны, я смог оплатить багаж заранее, используя тот же код, по которому не смог посмотреть детали брони. А так же меня уведомили по почте об изменении времени вылета стыковочного рейса на 5 минут. И в конце концов всё закончилось хорошо, все долетели, но осадочек остался.

Аэропорты

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

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

Поезда

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

Когда искал, как доехать из Болоньи в Гренобль с помощью Трениталии, то она предлагала мне до 6-7 пересадок, включая автобус посередине. Но почти все маршруты были через Милан, поэтому было решено посетить этот город. В итальянских поездах действует распечатанный или с экрана телефона QR-код вместо билета.

Дальше поехали уже французским ЭсЭнСэЭф. Которые из Милана до Гренобля справились в одну пересадку. Но для них нужно было получить оригинал билета, который можно найти только в 5 (пяти) местах в Европе. Называется бутик Рэйл Юроп. Возможности самой компании я не исследовал, но там все говорят по французски. Один из этих пяти бутиков находился, слава Богу, в Милане. Найти его, однако, было непросто. Подъезд и подпись на звонке. Так-то!

Есть всякие местные подробности, которые хорошо бы знать. Если вы садитесь на поезд во Франции, билет нужно компостировать на платформе. Так как иначе он действует 2 месяца. То есть, если опоздал на поезд, то ничего страшного. Много полезной информации на сайте travel.ru.

Потом мы уже покупали билеты прямо на вокзалах. Из Гренобля в Женеву, потом из Женевы в Цюрих. Если вы не едете в моменты каникул-праздников и прочего, то обычно проблем с местами нет. Всегда всё можно купить у роботов без очереди. Далее можно исследовать эту тему до бесконечности. Можно, например, экономить, покупая особые направления в особые дни в разных странах и т.п.

И, конечно же, аэроэкспресс рулит. Это реальный пример победы общественного транспорта в России над такси и автомобилем. У робота нужно купить билет туда-обратно. Он работает во всех направлениях.

Планы на год

  1. Исследовать возможности альянсов авиакомпаний
  2. Исследовать возможности Рэйл Юроп

09.12.2011 firtree_right Пушкин что ли?

Разверну свою мысль. ЖЖ всё-таки для умных мыслей, а плюсик — для коротких.

Аспект 1. Из личного опыта. Безумно трудно найти хорошие кадры. При любом уровне безработицы очень трудно найти толковых ребят для выполнения даже несложной работы. Если нужна хотя бы капелька умения самостоятельно подумать, то задача поиска сотрудника становится практически неприподъёмной. Почти никто не хочет стараться, разбираться или вникать. Почти никто не любит свою работу, что бы он ни делал. Почти всем нужно чтобы дали денег и отъебались. Максимум почти для всех — это талантливо по теме помолоть языком. На деле — жалкие потуги.

Аспект 2. Из личного опыта. Очень мало кто рад видеть соотечественников, пересекаясь с ними за границей. И даже внутри границ — почти никто не рад. Нужно довольно долго первому здороваться со всем подъездом. Исключения — редкость. Группы людей которые взаимно рады друг друга видеть всегда очень маленькие. Обычно ограничиваются родственными связями или личными знакомствами. Единственное сильно чувство, способное распространяться на большие группы — это ненависть.

Аспект 3. Из личного опыта. Любой человек нарушит закон, если исполнение его очень сильно (или не очень) ущемляет его интересы. Он превысит скорость, выдаст (получит) чёрную зарплату, не вернёт долг и прочее. Просто из своего ощущения правильности, не заботясь о том, как это воспримет другая сторона (та, что снаружи группы людей, которую он рад видеть), или что говорит об этом закон.

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

И такие почти все. И никто не изменится в одночасье. Можно быть недовольным, как такой человек справляется с задачей, но заменить его пока можно только таким же.

03.10.2011 firtree_right Вакансия инженера-электронщика

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

09.08.2011 firtree_right Социальненько

Завёл себе ГуглПлюс. Можно меня круглить: https://plus.google.com/110926467496252906772 Всё такое новенькое и карамельное. Хочется лизнуть.

Последнее время никуда почти совсем не пишу. ЖЖ как-то требует серьёзности и осмысленности. Твиттер слишком легкомысленен. А ГуглПлюс где-то посередине. ФСБук очень не хочется заводить. (Можно это превратить в идейную позицию, и выстреливать ей при случае собеседнику в лицо.)

Хотел Лёше-парикмахеру рассказать, как мне было грустно, когда умерла Эми Вайнхаус, но он не стал поддерживать эту тему. Наверное, не очень хорошо говорить о грустном, когда стрижка. Хотя именно он Иру в своё время на неё подсадил. А у нас, как я говорил, за музыкальную составляющую отвечает супруга. Которая мне, кстати, сказала, что лучше как Кобейн, Моррисон и Джоплин, чем как Корнелюк рассекать на старости лет по подмосковным ДК. Это целая тема для пьяного спора. Есть куда бодрее старички.

Кстати, о пьяных спорах. Долгое время мне было наутро очень стыдно, если я с кем-то вообще разговаривал по пьяни накануне. Это даже более стыдно, чем читать свои высеры в жж двухгодичной и более давности. Я даже переставал встречаться и пить с друзьями. Счас как-то проходит эта ерунда. Иногда даже думаю, с кем бы новым забухать. :)

14.07.2011 firtree_right 20/80

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

Из тех, что не провалились, большая половина — крепкий середнячок. Нормальные изменения, нормальные результаты. И только совсем небольшая часть оказалась ощутимым прорывом. По крайней мере если мерить по моим ожиданиям. Похоже на старое правило, что 20% дел создают 80% фана.

Бывают, конечно, и супер-мега-прорывы.

28.06.2011 firtree_right Ловко

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

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

Подарил ребятам на новоселье колоды Magic: The Gathering. Как говорится, первая доза бесплатно, а потом будет куда ездить на товарищеские встречи под вино. Когда сели играть, вокруг нас образовался купол, и выпихнул остальных гостей из квартиры взашей. Было круто! И немного неловко.

Ира уехала получать загранпаспорт и сделала мне кастрюлю окрошки, и написала везде записочки, про сколько воды и когда наливать в цветы, сколько сахара класть в квас, и прочие милые глупости. Я читал и радовался. Окрошка быстро кончилась, кстати. И теперь я могу принимать троих гостей одновременно, а не двоих. И кстати, я и сам бы сходил в гости. Только неловко звонить или писать, кого давно не видел, потому что «с чего бы это вдруг? надо что-то?»

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

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

P.S. Оффтопик. Кстати, одно моё присутствие в комнате даёт +6 к безглючной работе компьютерной техники. И это ещё без возложения рук.

13.06.2011 firtree_right Вкратце

Периодически внутренний диалог складывается во что-то вроде поста в жж, но написать как-то руки не доходят. Поэтому коротко о главном.

♯♯♯

Уже давно написал статью в бложек про использование однострочников руби вместо grep, sed и прочего. Но до сих пор ссылку не запостил. А ведь тут есть те, кто регулярно смотрит там картинки.

♯♯♯

У нас в разгаре съёмочный сезон, и мы ищем молодых людей на вакансию оператора. Романтичная картика для привлечения внимания:

Эта работа — очень крутая. А с каждым днём она становится ещё круче, потому что те, кто отвечают за ПО (начиная с меня) заботятся о том, чтобы всё, с чем соприкасается оператор, было удобно и приятно.

18.05.2011 firtree_right Использование руби программ в качестве фильтров для поиска

Предыстория

Не далее как прошлой осенью я писал о том, как изнутри процесса определить, запущен ли он, используя инструмент grep. В комментариях мне посоветовали использовать pidof, но мне не удалось заставить его работать для руби, т.к. поиск происходит по имени запускаемого файла, а в случае руби-скрипта это всегда ruby. Но мне существенно удалось сократить получение списка запущенных процессов с таким же именем. Вместо:

`ps ax | grep #{File.basename(__FILE__)} | grep -v grep`.split("\n").map{ |l| l.strip.split(/\s+/)[0].to_i }.reject{ |pid| pid == Process.pid }

получилось

`pgrep -f #{File.basename(__FILE__)}`.chomp.split(/\s+/).reject{ |pid| pid.to_i == Process.pid }

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

ascannerdarkly

Командная строка руби

Руби имеет умеренное количество ключей командной строки. Кратко они описаны в выводе:

ruby --help

Нас в большей степени интересуют ключи -n и -p, которые создают цикл вокруг чтения из пайпа. Ссылка на подробности — в конце статьи.

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

ps axo "%p %z %c"

В которой собраны только необходимые данные (занимаемая виртуальная память и имя процесса без аргументов) и пид (ну а вдруг?). А теперь этот вывод отправим не грепу, а нашему родному руби:

ps axo "%p %z %c" | ruby -nae 'num ||= 0; num += $F[1].to_i if $F[2] =~ /chrome/; END{puts "total chrome virtual memory size #{num} Kbytes"}'

Что это означает? Ключ n означает, что вокруг нашего скрипта есть цикл вида:

while gets(); ... end

Ключ a означает, что вместо переменной $_, куда автоматически попадает результат gets, мы можем использовать $F, который есть суть $_.split. А END содержит блок, который выполняется после цикла.

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

#!/usr/bin/ruby -n

BEGIN {
  unless ARGV.size == 2
    puts "Usage: ./look_for <word> <path/to/file>"
    exit
  end
  str = ARGV.shift
}

next unless $_ =~ /#{str}/

printf "%6s%s", $., $_.gsub($&, "\e[31m#{$&}\e[0m")

Теперь, если сделать этот файл запускаемым и запустить его:

./look_for word /in/some/file

То можно увидеть неземную красоту. Кстати, обратите внимание на shift. Без него программа не работает, т.к. gets, который тут за кадром правит бал, пытается воспринимать все аргументы как пути к файлам, из которых непременно нужно что-нибудь прочитать.

Прочие прекрасные применения параметров командной строки руби я предлагаю пытливому читателю подсмотреть в ссылках ниже или найти самостоятельно.

Материалы для самостоятельного изучения

  1. Полный код статьи на гитхабе.
  2. Справочник по параметрам командной строки.
  3. То же, что и выше, но подробнее
  4. Множество прекрасных примеров (со ссылкой на источник).

30.03.2011 firtree_right Упёртые программисты упёрты

Отличная история одного бага в пересказе . Я довольно долго сам вёл себя как эти ребята, пока несколько раз не столкнулся с подобным поведением с другой стороны и не усвоил, что в действительности USERS DON'T CARE.

25.03.2011 firtree_right Во времени

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

♯♯♯

У нас в Универе было специальное тёплое и тихое место для фанатов Magic: The Gathering. Я даже слышал, что некоторые, увлёкшись этой игрой, вылетали из Бауманки почти так же быстро, как увлёкшиеся Counter Strike. Когда я их видел, то, конечно, хихикал над ними. Кто бы мог подумать, что спустя тринадцать лет я буду регулярно, почти каждую неделю, ходить на дружеские матчи по MTG под коньяк.

♯♯♯

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

А какие у вас произошли трансформации, о которых бы вы хихикая рассказали себе в прошлом?