Thursday, September 13, 2012

Как я провел...

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

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

Машинку оформили и отправились домой. Выезжать из Москвы долго и тяжело, вести новую красавицу доверили мне (!). Не подвел - ехал аккуратно и через несколько часов выехали на более или менее оперативные просторы, средняя скорость подросла с 31 до 47 км/ч (то до 120 разгонимся, то тащимся 20 + населенные пункты). Примерно после 350 км поменялись, руль достался хозяину. Около 23 часов проезжали мимо НН (ага, был совсем рядом) и свернули в солнечный Саранск. Вся дорога заняла ~10 часов.

Про авто: Mazda CX-5. Восхищению моему есть предел, но динамичный, легкий ход, мягкая подвеска, скрывающая неровности дорог, существенно отодвинули планку. Руль отдавать не хотелось совершенно. Машина с нулевым пробегом шла как хорошо обкатанная. Сравнивая с Honda CRV 1998, отличающейся потрясающим движком и великолепной коробкой-автоматом, - мазда выше всяких похвал. Нет проигрыша в динамике, огромный плюс в комфорте и функциональности. Акустика так вообще крышу снесла :) В следующий раз обязательно загляну под декоративные решетки - надо же узнать, что так звучит. Есть огромное количество опций и фич, из которых я и половины не знаю. По дороге машина напоминала нам, что неплохо бы залить омывающую жидкость и предупредила о возможном обледенении дороги (+4 и мы попали в туман).

Красивая, умная, много умеет - чего еще желать? Ой, о чем это я...

PS за прошедшие выходные + пн и вт проехал более 2000 км. Из них половину как водитель. Утомился, пойду уже спать...

Wednesday, September 12, 2012

... заиграет музыка

Edifier C200 несколько превзошли мои ожидания. Они большие! Нет, правда. Представлял их себе иначе. Хороший размер, как сказал парень, выдавший коробку.
Коробка (справа) в сравнении со стулом (слева).
На ультрабуке мало музыки. Ну очень мало. Песни с концерта Queen от 3 июля (в оригинальном исполнении, конечно), альбом J. Coulton'а с последней раздачи Humble Music Bundle и... все. Но я точно знал, что буду слушать в первую очередь: '39.
Рапсодия была второй, но при прослушивании хотелось визжать от восторга! Стоп. Визжать? Нет, я серьезный человек. Безмерно ликовать и радоваться? Подходит... для лемура. Не описать мне то состояние (вероятно, дело не только в колонках).
Как-то так теперь все и выглядит
Слух у меня так себе. И это еще я себя похвалил. Музыку выбираю так: нравится - слушаю, не нравится - не слушаю. Любимой группы просто нет, есть песни, которые нравятся. Направления в музыке не различаю, названия песен и групп не запоминаю. Альбомы могу слушать на шаффле. Могу перемешивать альбомы и исполнителей.
Из последних могу отметить только Rise Against - слушаю очень часто. Этому даже есть объяснение - от них легко отвлечься и уйти в работу. И приятно потом возвращаться. Когда меня спросили про наиболее зацепивший альбом, сказал, что такого нет. Это правда лишь от части: их на самом деле два (последних). Они постоянно есть в плейлисте. Но не уверен, что это именно то "зацепил", которое имелось ввиду.

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

Sunday, September 9, 2012

Дороги, колеса, огород

Дороги.
Все-таки дураки.

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

Огород.
Люблю я работать на земле. Копать, пахать, сажать... После офиса это лучший отдых. Но физически довольно тяжело. А картошку пора выкапывать. Площадь небольшая - каких-то 4 сотки. Копать под мотоблок быстро, но нагрузка на плечевой пояс солидная. На мотоблоке мы с отцом по очереди. Через полчаса половина выкопана. А вот и собиральщики.
Общий вид и мои любимые Зайцевы на горизонте
Теперь я как тузик бегаю с ведрами. Два двойных - два захода по два ведра, два двойных, два двойных, три двойных! Это две группы собиральщиков, идущих навстречу одна другой, встретились и дружно заполнили все ведра. Под конец сборов пошел дождь. "Это мираж, держать строй!" - мое словестное недержание. Закончили. Такой вот урожай:
Урожай средний, но на всех трудящихся хватит. Крупной не много, мелочи тоже. Но средний размер все же ниже среднего :) На зиму хватит. И ведь все свое, без ГМО.
А еще есть тыква. Много тыквы!

В детстве мы потрошили ее, вырезали страшные глаза и улыбку Джокера, внутрь вставляли свечку и выставляли эту прелесть на дороги. Машины объезжали, мотоциклисты обычно сбивали. Мы не унывали - тыквы-то много. А еще в тыкве прячутся очень вкусные семечки.

Внеплановое.
От Кемли до Саранска 60 км, можно доехать очень быстро. Но сейчас половина дороги в ремонте, а половина оставшейся половины без разметки, что позволяет оставить непозволительно низкие ограничения скорости. Двухлитровый хондовский двигатель так и подмывает притопить посильнее. Ограничение 40 км/ч. ОК, еду 60. Вот только спидометр у меня в милях. 80. А вот и ремонтные работы...
От Саранска до Кемли 60 км, можно доехать очень быстро. Хорошая штука круиз-контроль, позволяет жестко зафиксировать свою скорость. Осталось только руль автоматике доверить. Нет уж, я сам поеду. 95.

Кажется, о чем-то я так и не написал.

Friday, August 31, 2012

Когда мне нечего написать

Когда мне нечего написать, я не пишу. Даже если пишу о том, что не пишу, когда писать не о чем. Это ведь даже правильно - не писать, когда нет темы для написания. И я не пишу. Когда не о чем писать. Но сейчас-то ведь не тот случай, когда мне не о чем написать, и я не пишу? А может, это как раз случай, когда... Ну, вроде понятно уже.
Примерно такая каша в голове последнее время. Примерно так же выглядят мои последние тесты. Примерно... С трудом вспоминаю, что происходит в тесте, написанном чуть больше недели назад. Не работает то, что работать должно. То, что работать не должно, тоже не работает. Великий язык Перл. Ага, write-only language. Сегодня впервые про это услышал. Люблю Перл, когда пишу на нем. Ненавижу нас обоих, глядя на то, что понаписал больше месяца назад. Хотел именно про это и рассказать, кстати. И сегодня же попалась статья на эту тему. Бывают же совпадения. Не редко. Что-то, заинтересовавшее меня, может так или иначе проявляться в окружающем мире.
Будьте осторожны со своими желаниями, они осуществимы. Но детали решают все. Хотел отдохнуть от работы - неделю провалялся больной. Хотел написать статью - прочитал что-то похожее. Но написать важнее, так сам себе доказываю, что думать не разучился. А ведь первые обзацы шли с трудом...

Следующие две строчки делают одно и то же (спасибо начальнику за второй вариант):
my $var = $x > $y ? $x : $y;
my $var = ($x, $y)[$x < $y];

А это просто шутка:
sub first_and_last_quarters($) {
    my $arr_ref = shift;    
    return [@{$arr_ref}[0..($#{$arr_ref}/4)], @{$arr_ref}[(3*($#{$arr_ref}/4))..$#{$arr_ref}]];
}
Работать должно. Попробуйте теперь заменить $arr_ref на $_[0].

Friday, August 10, 2012

Парное программирование и музыка

Много мыслей в голове, а как начать пост - не знаю. Даже не знаю, о чем именно хочу написать. Расскажу, пожалуй, про музыку. Вот как было раньше? Услышал где-то песню, понравилась, услышал еще - не понравилось. На этом все и заканчивалось. Потом что-то поменялось (появился интернет): понравившаяся песня скачивалась, к ней скачивался альбом и дискография всей группы. Песни практически не слушались, просто занимали место на компьютере.
А что сейчас? Кажется, ничего не поменялось. Но это видимость. Последнее время за то, что я слушаю, отвечает она. Это она виновата в том, что я по-хорошему послушал Queen. Это из-за нее я прослушал всю дискографию Rise Against. Влюбился в Bohemian Rhapsody. Порадовался вместе с Сэло и люды и Тролль гнет ель. Плакал от '39. Восхищался Мельницей. Не останавливался вместе с Don't stop me now и Fat Bottomed Girls. И это не в прошедшем времени на самом-то деле.
Весь предыдущий абзац посвящен Willi. Так уж вышло.

А еще мы с Яськой практиковали парное программирование. Ну как парное: она пишет, я троллю. Хотя пару раз вырывал клавиатуру из ее уставших рук и писал сам. Сегодня решили поменяться ролями: выяснилось, что кодит она лучше, чем троллит.
Сама же практика парного программирования весьма хороша - код действительно получается качественне. И читаемее и правильнее. Кстати, я придумал, как нам сделать один совершенно неочевидный момент совершенно очевидным. Какая замечательная тавтология.

Получился какой-то ясин пост. Ну и пусть.

Thursday, August 2, 2012

doctorhead.ru

Если вы когда-нибудь будете гулять по Нижнему Новгороду и совершенно случайно рядом с вами окажется здание 6 по улице Ванеева, то не откажите себе в удовольствии зайти в уютный магазин doctorhead.ru. Два молодых человека помогут вам подобрать наушники под любимую вами музыку с учетом всех ваших требований. Если с собой у вас не окажется плеера, вам предложат местный - один из тех, что есть в магазине. Если вам очень повезет, то на плеере окажется часовая wav'ка с Classic Queen, где на 8-й минуте вы сможете оценить звучание любых наушников.

PS возможно, в магазине работают не два молодых человека (а больше)
PS' на 8-й минуте Bohemian Rhapsody (последние две минуты)
PS'' так и не смог определиться, но остановился на паре вариантов, обязательно зайду к ним еще

Wednesday, July 25, 2012

Без названия #1

Мне вдруг сегодня вспомнился один занятный случай из далекого прошлого. Дело было в летнем лагере, мне лет 13. В один из последних дней нам устроили глобальный тимбилдинг, как ныне говорят: всем выдали пачку порезанных ниток и пустые бусы с меленьким навесным замочком и парой ключиков. Один ключ, понятное дело, себе, другой - самому близкому человеку в лагере. А вот ниточки на бусы можно было повязывать кому угодно, только при этом надо было объяснить, с чего вдруг такая вольность в поведении. В тот день я чем-то отравился и довольно долго отлеживался в палате. В итоге бусы к концу дня бусы у меня пустые, ключа два, да еще и пучок ниток. Ну я и пошел всем доказывать, как они мне дороги и как я всем благодарен (сарказма нет, с ребятами из своего отряда я очень подружился). Подхожу к девушке, спрашиваю: "Где, мол, твои бусы?". А она как-то так обрадовалась, удивилась: "Ты хочешь мне повязать?!". Ниточку я успешно отдал, и даже взамен получил, кажется. А сейчас вот вспомнил тот случай и задумался: да что ж в этом было такого? Мы примерно 10 дней целыми сутками все вместе были, сплачивались по полной, а ниточку повязать - это уже слишком? Да я ж там всех любил примерно одинаково, мне это в радость было - дарить ниточки и теплые слова. Вывод тут какой: мы, люди, часто уделяем слишком много внимания совершенно незначительным вещам. А значительность определяем для себя сами.

Что-то затянулось вступление, я ж про другое хотел рассказать. Вот есть в мире масса языков программирования, многие из них очень широко распространены, некоторые я знаю. Больше всего мне приходится писать на Perl'е. Это восхитительно ужасный язык программирования. Столько всего можно сделать в одну строчку и получить от этого такой гиковский кайф, что захочется продолжать и продолжать. Но вот через неделю этот код проще переписать, чем прочитать...
Но если уж писать на перле, то извольте освоить сложные конструкции типа хэша хэшей хэшей. Вот о них и хочу рассказать.
Есть у нас хэш:
my %hash = (
    'first'  => 1,
    'second' => [1..10],
    'third'  => 'string here'
);
Второй элемент есть не что иное как ссылка на массив, т.е. общая структура чуть сложнее самой простой. Напишем простенькую функцию для распечатки такой структуры:
sub print_my_hash($) {
    my $ref = shift;
    map {
        if (ref($ref->{$_}) eq 'ARRAY') {
            print join(', ', @{$ref->{$_}}), "\n";
        } else {
            print $ref->{$_}, "\n";
        }
    } keys %{$ref};
    print "\n";
}
Если обнаруживаем ссылку на массив - обрабатываем отдельно. При распечатке получим вот это:







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

Вернемся к коду: все распечаталось как мы ожидали (я-то точно). Теперь скопируем наш хэш в другой:
my %copy = %hash;
Было не сложно, правда? Распечатаем и его:








Ура, отличий нет, копирование прошло успешно.
Теперь возьмем и поменям какой-нибудь элемент массива в новом хэше и распечатаем его:
$copy{'second'}->[4] = 100500;
print_my_hash(\%copy);




Все опять именно так, как ожидалось.

Внимание, сейчас будет развязка. Приготовились? Точно? Уверены? Вопросы уже достали? Ок, заканчиваю издеваться над теми, кто правдами или неправдами дочитал до этого момента: что находится в пятом элементе (индекс = 4) массива в первом хэше?
Вопрос выглядит совершенно по-идиотски, если вы пишете/писали на C. Он даже для опытных перлописцев слишком прост. Но прежде чем назвать меня профнепригодным представьте себе конструкцию из хэша с десятком полей, значениями которого могут быть и скаляры (в перле это и строки и числа), и хэши, и ссылки на массивы и хэши. Скажете, можно без этого? Наверно, но это же перл, это нормально. Правильный ответ, кстати, 100500.

К чему я это? Извольте: все современные фреймверки и языки программирования сильно абстрагируют обычного программиста (меня) от реально происходящих в машине событий. Ничто не заменит мяса в колбасе базовых знаний ОС, структур данных и умения работать с памятью.

Полный код и постскриптумы:
#!/usr/bin/perl

use strict;
use warnings;

sub print_my_hash($) {
    my $ref = shift;
    map {
        if (ref($ref->{$_}) eq 'ARRAY') {
            print join(', ', @{$ref->{$_}}), "\n";
        } else {
            print $ref->{$_}, "\n";
        }
    } keys %{$ref};
    print "\n";
}

my %hash = (
    'first'  => 1,
    'second' => [1..10],
    'third'  => 'string here'
);
print_my_hash(\%hash);

my %copy = %hash;
print_my_hash(\%copy);

$copy{'second'}->[4] = 100500;
print_my_hash(\%copy);

print_my_hash(\%hash);

PS: зачем я объединил два разных поста в один? Не знаю, само собой.
PPS: с описанным примером сталкивался в реальной работе дважды или трижды. Всегда все было не так очевидно, как в описанном здесь примере, и связано было, в основном, с перлофичами.
PPPS: код подсвечен с помощью этого: http://tohtml.com, а написан с помощью Sublim
PPPPS: убунта неприятно удивила, но в венду не перезагружусь
PPPPPS: в блогспоте мне не нравится - неудобно писать свои мысли, настраивать форматирование и пр.

Sunday, July 22, 2012

О чем вообще говорят мужчины

Вечер пятницы, офис маленькой никому неизвестной компании, уже пора бы домой. Но мы с Сашей не уходим - ждем. Звонок. Приехал Андрей. Выходим, едем ко мне. Надо бы закупиться разными гадостями, чтобы ударить ими по здоровью.
- Чем завтракать будем? Вообще что-то планируется?
- Яичницу пожарим. Надо только хлеба взять.
Из гадостей взяли колу и чипсов, все стандартно.
 - Вы есть-то хотите? Можем по-хорошему поужинать. Картошка, салатик.
 - Да!
Ох, студенты :) Веселая кассирша просит автограф и говорит, что будет плакать, если я не вернусь. Обещаю зайти еще и мы уходим.
 - Тут кухня, вот комната.
Моем картошку, огурцы, помидоры.
 - Огурцы попадаются горькие. Саш, ты должен их все попробовать. Андрей, вот сковорода, нож, картошка. Мы верим в тебя.
Режу салатик, Андрей помогает посолить, Саша твитит. В соседней комнате лежит зеркалка, но кому она нужна, если в телефоне есть камера?
 - Я не хипстер!
 - А сколько ты набрал в хипстер-тесте?
 - 100%.
 - Теперь скажи еще раз, что ты не хипстер.
Картошка готова. Салат тоже. Раскладываем по тарелкам, едим. Вкусно. Мы все молодцы.
 - Салат надо доедать. Саш?
- Ага, а то будешь потом голодными зимними вечерами вспоминать, что когда-то не доел.

- Посасывая палец...

- Чужой.
Теперь на столе персики, кола. Кажется, пора высыпать чипсы. Разработчики мы или нет?
 - Как же можно делать эти проектики? Надо разрабатывать комплекс! Лет на 20-30.
Ага. Разговор плавно и не очень перетекает с темы на тему. Как на личном?
 - Саш, ну хоть ты нас порадуй.
 - Я гей, мужики.
Время за полночь. Вторая двухлитровка колы открыта, пачка чипсов тоже не первая. Что там на счет комплексов-то?
 - В коде всегда надо оставлять только тебе известные баги. И писать его надо так, чтобы никто ничего не разобрал. Так станешь незаменимым сотрудником.
 - Убивать...
Нет, серьезно, что там с комплексом?
 - А комплекс неполноценности тебя не устраивает?
Почему бы не заняться исследованием влияние повышения температуры в районах, населенных сусликами, и последствиями этого повышения? Захват сусликами новых территорий... Бред.
 - В мире после атомной войны не будет коммуникаций. Приборы будут сломаны или просто бесполезны. Для передачи информации выжившие люди смогут использовать тараканов.
 - Перспективная разработка. Пару миллиардов на первые два года исследований можно смело закладывать. Плюс 30 лет по доработку. Вот тебе и комплекс.
Половина 5 утра. Отвозим Сашу до места его пребывания, едем обратно.
 - Мы с тобой спать-то вообще будем?
 - Ну не прям с тобой.
Тяжело засыпать, когда снаружи начинается день. В голове формируется текст, звучит Radio Ga Ga и фраза "двойной хлопок и ладони вверх".

Friday, February 10, 2012

Отдам плагин в хорошие руки

Есть такой замечательный редактор - Sublime Text 2. Даже несмотря на мою любовь к Notepad++ могу смело заявить: "Sublime лучше!". Кто не верит - проверяйте сами.
    Но речь не о самом редакторе. Я написал для него небольшой и никому не нужный плагин. Написал сам, используя все свои познания в Python'е и написании плагинов для Sublime. Плагин нужен для одной простой вещи: узнать кто написал строчку под курсором. Узнает он это из системы контроля версий Git. В целом даже работает.
    Так как выкидывать его жалко (я ж время потратил) а развивать его не планирую (он же никому не нужен!), то решил код опубликовать тут. Ну и сам файлик приложил.
    По вопросам копирайта: данным постом подтверждаю, что не претендую и в дальнейшем упоминаться автором приведенного ниже кода, не потребую никаких отчислений и прочей фигни (но если вы сможете заработать на этом, я вас, кем бы вы ни были, скорее всего прокляну. Шутка).


Вот код (подсвечено с помощью этого):
Copy Source | Copy HTML
  1. import sublime, sublime_plugin
  2. import os, re
  3. class GitWho(sublime_plugin.TextCommand):
  4.     def run(self, edit):
  5.         v = self.view
  6.         file_name = v.file_name()
  7.         line, col = v.rowcol(v.sel()[ 0].begin())
  8.         line += 1
  9.         cwd = os.getcwd() # save current work directory...
  10.         os.chdir(os.path.dirname(file_name)) # ... to use git ...
  11.         output = os.popen("git blame -L " + str(line) + "," + str(line) + " " + file_name).read()
  12.         os.chdir(cwd) # ... and reset it back
  13.         tmp = re.search('\((.*) (\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2} [+-]\d{4})', output)
  14.         if tmp:
  15.             author, date, time = tmp.group(1), tmp.group(2), tmp.group(3)
  16.             sublime.status_message('Changed by ' + author + ' on ' + date + ' at ' + time)
  17.         else:
  18.             sublime.status_message('Cannot blame this file')


Возможные проблемы в плагине:
  • неправильный номер строки: в редакторе они нумеруются с 1, а в Git'е? (это надо проверить, а мне уже не хочется)
Предлагаемые улучшения:
  • поддержка всех широко распространненых систем контроля версий
  • определения авторства не только строки под курсором, но и выделенного блока

Чтобы попробовать плагин нужно прочитать вот эту статью, чтобы научиться :)