воскресенье, 6 апреля 2014 г.

Шарманка

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

пятница, 4 апреля 2014 г.

Неподдерживаемый протокол

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

Монахи и монахини с энтузиазмом спешили от одного аббатства к другому, останавливаясь только для того, чтобы увернуться от огромных сосулек, падаующих с уступов. Все их мысли обратились к традиционному празднованию Конца Длинного Пробела (Белого Пространства)*. Все виды фруктов и напитков были заказаны из окрестных деревень. Монахи клана Железных Костей даже установили веб-камеру поверх плоского монитора в Большом Зале, так что монахиня Жинг, боящаяся высоты и живущая в хижине гораздо ниже Храма, сможет удалённо присоединиться к торжеству.

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

Через несколько часов двери Большого Зала отворились и очень бледно выглядящая монахиня прошла через них. По всей толпе быстро разошлась новость, что монахиня Жинг пришла впервые за несколько лет.

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

Когда Жинг сделала большой глоток, Йывень сказала: "Тысяча извинений за моё любопытство, но почему Вы решили прийти сюда по крутой дороге, особенно коварной сейчас из-за тающего льда и скользких камней?"

"Поделиться важной новостью", - сказала Жинг. - "Наблюдая за вечеринкой, я обнаружила форму общения, которая не может быть передана через сетевое соединение".

Затем Жинг обняла Йывень и Хвайду, расцеловала их в щёки и обернулась поприветствовать остальных, окруживших их.


* Обычно сокращается до \s{99}\S.

Original: Unsupported Protocol

Электронное письмо

Обращался я тут с жалобой в ПетроЭлектроСбыт, а они мне письмо прислали. На двух страницах...

Я, конечно, понял, что они решили просто отмазаться от моего заявления, но прочитать вторую страницу я так и не смог, так как у них хитрый план:
1. написать письмо на компьютере,
2. напечатать несколько листов,
3. отсканировать пачку,
4. послать картинку.

Балама

Скатались сегодня на Лиговку за респираторами для школы. Хоть и потрёпанная "совковая" контора, но люди там душевные. Лёшка перемерил все выставочные противогазы, а ему ещё с собой старую маску подарили.

Кстати, там продаётся всё для занятий по Гражданской Обороне, но меня заинтересовал макет Калашникова. Жаль, что почти 12 тысяч стоит!

четверг, 3 апреля 2014 г.

Задне-обратная совместимость

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

"Ваши последние изменения в методе isHexNumber были ошибочны", - сказал Вангохан. - "И хотя документации нет, само название подразумевает, что метод будет распознавать только строки, содержащие одну или более шестнадцатеричных цифр. Однако, Ваше регулярное выражение не использует якоря и имеет неправильный квантификатор. Метод вернёт true для любой строки, в любом месте которой присутствуют ноль или более шестнадцатеричных цифр, т.е. для любой строки".

"Я убедился, что существующие модульные тесты прошли", - запротестовал младший монах. - "Отвергается null и принимаются все правильные шестнадцатеричные цифры".

Вангохан нахмурился: "Я Вам говорю, что картонная коробка не подходит для еды дочери Императора, а Вы мне отвечаете, что коза ей не подавится".



Вангохан вызвал старшего монаха, который отвечал за общую библиотеку и объяснил проблему.

"Мы не можем изменить реализацию", - сказал старший монах. - "В настоящее время этот метод используется во всём Храме. Если он вдруг станет отвергать ранее принятые строки, то может произойти катастрофа".

Вангохан ударил кулаком по столу монаха: "Я Вам говорю, что картонная коробка не подходит для еды дочери Императора, а Вы мне отвечаете, что ей может не понравиться вкус баранины и инжира".



Вангохан вызвал главного настоятеля клана Смеющейся Обезьяны и объяснил проблему.

"Я приму участие в этом обсуждении", - вздохнул настоятель. - "Должно же быть решение, удовлетворяющее все стороны".

В тот вечер Вангохан получил письмо от настоятеля, в котором утверждалось, что теперь метод должен работать точно как ожидается. Вангохан просмотрел код и обнаружил, что метод совсем не изменился, за исключением комментария сверху:
 /**
  * isHexNumber возвращает true для любой строки,
  * в любом месте которой присутствуют
  * ноль или более шестнадцатеричных цифр.
  */
Вангохан уронил голову на стол: "Очевидно, картонная коробка должна подходить для еды дочери Императора, ибо она присутсвует в Императорском меню".

Original: Ass-Backwards Compatibility

Плакать хочется

Яков Сироткин пишет о переводе стрелки часов:
Вчера я убрал в коде использование org.joda. time.LocalDate.toDateTimeAtMidnight(), знаете, почему этот метод deprecated? Он может бросить исключение, так как из-за перевода стрелок полночи может не быть.

среда, 2 апреля 2014 г.

JetBrains

Посетил офис одной известной компании и поговорил за жизнь. Через неделю узнаю, что они обо мне думают. Надеюсь, что не выглядел полным профаном. Я же щетину сбрил!

Есть позиция - на Swing писать IDEA, но озвучены такие проблемы, что без исправлений в JDK не обойтись. Надо узнать, нельзя ли сохранить эту позицию в OpenJDK. На вопрос, что улучшить в IDEA, я предложил доработать диаграмму классов. Больше ничего не придумал, ибо последняя версия мне очень понравилась.

Встретил старого знакомого. Очень старого! Лет 15 не виделись. Теперь мучаюсь, пытаясь вспомнить как зовут и где вместе работали. После всего с ГерМишем кофе попили. Обещает, что следующий раз не пропустит сборище STARичков. Особенно, если оно будет у него дома ;)

вторник, 1 апреля 2014 г.

Вкалывай как вол

Ещё одна олимпиадная задачка, что с Мишкой решали:
Садовод-любитель пропалывает свои грядки только по понедельникам, четвергам и нечётным числам. Какое наибольшее число дней подряд он может полоть?
Я даже и не догадывался, что решил неправильно, пока мне не сказали правильный ответ. Изрядно был удивлён!

Тонкий лёд

Монаха Джишина всё больше удручала работа над неясными проектами клана Одного Ботинка, далекого от суетной жизни Храма. Он обратился к учителю Банзену за более значимой работой.

Банзен сказал: "Я подумал об одном приложении, чей код всё сильнее и сильнее запутывался на протяжении многих лет, благодаря множеству авторов. Я подозреваю, что там скрыто много мусора, который может быть убран".

Когда Банзен изучил результаты рефакторинга Джишина, он обнаружил, что код стал хорошо организован и значительно упростился. Наиболее резким было сокращение числа классов DTO (объектов передачи данных).

"Я сохранил только те классы, которые напрямую соотносятся с таблицами базы данных", - гордо пояснил Джишин. - "Глядите, вот запрос, объединяющий таблицы Кампания, Солдат и Специализация, но загружающий только по две колонки из каждой. Раньше тут был DTO, единственной целью которого было вернуть шесть значений для каждой строки - позор! Теперь запрос возвращает список кампаний, каждая из которых содержит список солдат, каждый, в свою очередь, содержит список специализаций. Правда, уровень представления теперь должен получить эти объекты, но они являются общими для всего приложения и будут знакомы всем, кто с ней работает".

Банзен погладил бороду: "Вы избрали путь ORM (объектно-реляционного отображения) в разработанной Вами самим библиотеке. Я знаком с достоинствами этого подхода, но знаком и с его недостатками. Каждая из этих трёх таблиц имеет около двадцати столбцов; доменные объекты, соответствующие им, имеют тоже по двадцать полей. Так что теперь вместо загрузки шести столбцов на строку, Вы загружаете шестьдесят? Или выполняете запрос в три прохода? Или используете кеширование?"

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

Банзен вздохнул и потянулся за посохом.



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

Длинный шест был воткнут в землю у его ног. Посередине была привязана записка. Джишин развернул её.
Я приказал клану Одного Ботинка убрать весь мусор со свалки Храма. Разве тут сейчас не мило?

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

Смотри под ноги,
Б.

Original: Thin Ice

Crack down on ...

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

А когда вступит в действие закон о запрете курения в местах употребления пищи, то будет как в Бостоне, в 1999 году. Помню, Пунтиков сильно расстраивался, что пить надо внутри, а курить снаружи. Отстаём от США всего-то на 15 лет ;)

понедельник, 31 марта 2014 г.

Нет стабильности

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

воскресенье, 30 марта 2014 г.

Одуванчики

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

В пятницу днём на поляне было 17 жёлтых и 12 белых одуванчиков, а в воскресенье - 13 жёлтых и 9 белых. Сколько белых одуванчиков будет на поляне в среду следующей недели?

Проехали три сотни

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

Обратил внимание, что при одной и той же скорости на тахометре разные числа. Если я один, то где-то 2100 оборотов на 110 км/ч, а если в машине 7 человек, то - 2500.

Расход не измерить, так как бортового компьютера нет, а жаль. Есть подозрение, что круиз-контроль помогает экономить.

На танки

Сегодня к нам приехали гости и мы всемером на нашей машине скатались к Ладожскому мосту. Там мы погуляли и поели блинов.

Я обнаружил, что Лёшка боится высоты. Он и в детстве не очень любил ездить у меня на шее, а тут залезет на броню танка и боится пошевелиться.

Но он пытается бороться со страхом и всё равно просит помочь ему залезть.

пятница, 28 марта 2014 г.

Мёртвый язык

Учитель Суку путешествовала с тремя послушниками по заснеженным горам, направляясь к далёкому храму. Тропа головокружительно поднималась на огромную скалу, и, как только стало смеркаться, они осознали, что наступает долгая ночь, и начали искать место, которое дало бы им укрытие от ветра.

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

"Что вы видите?" - спросила Суку остальных.

"Пометки", - сказал первый послушник, - "сделанные камнем".

"Слова", - сказал второй, - "вырезанные мертвецом".

"Сообщение", - сказал третий, - "не предполагающее ответа".

Суку покачала головой, роясь в карманах своего пальто: "Это последняя просьба, предназначенная нам".

"Можете ли вы понять буквы?" - спросил первый послушник.

"Нет", - сказала Суку, достав свой сотовый телефон и направив ​​его камеру на царапины. - "Но я распаковывала исходники из многих дальних стран. И хотя форма в каждом месте разная, я ещё могу понять, когда что-то кричит ПРОЧТИ МЕНЯ".

Original: Dead Language

Велосипед изобрели

Судя по всему, для компиляции выражений в блоках лямбд используется самописный компилятор, в котором забыли про некоторые новые возможности языка Java. Например, свеженький баг показывает проблему с обработкой исключений, когда для одного try используются одновременно catch и multi-catch.

А вчерашний баг в лямбдах показывает, что проблема в реализации autoboxing/unboxing. Давайте напишем две лямбды на стандартных интерфесах из пакета java.util.function:
    ((IntConsumer) value -> {
        while (value > 0) {
            System.out.println(value--);
        }
    }).accept(10);

    ((Consumer<Integer>) value -> {
        while (value > 0) {
            System.out.println(value--);
        }
    }).accept(10);
В первом случае будет напечатаны числа от 10 до 1, как и ожидается, а во втором - от 9 до 0.

четверг, 27 марта 2014 г.

Ошибочка тут у нас

Неожиданное продолжение поста про лямбды.

Допустим, что есть интерфейс:
    interface I<T> {
        public T m(T value);
    }
и есть реализация этого интерфейса:
    I o = new I<Integer>() {
        @Override
        public Integer m(Integer value) {
            return value++;
        }
    };

IDEA подсветила выражение, предложив использовать лямбды. После чего, рефакторинг в одно нажатие изменил код так:
    I<Integer> l = value -> value++;

А теперь допустим, что в одном и том же методе существуют обе эти реализации. Как вы думаете, какие числа напечатаются?
    System.out.println(o.m(1));
    System.out.println(l.m(1));

Welcome to λ-hell!

Интерпретатор

Совместное нахождение под снегом долгие зимние месяцы - серьёзное испытание даже для самых близких друзей; Йывень и Хвайда не стали исключением из этого правила.

Хвайда была уже достаточно раздражена тем, что её долговязая соседка молча танцевала по каморке, размахивая руками и ногами перед самым носом Хвайды. Но её терпение закончилось в тот день, когда Йывень поставила электрический гучжэн* в центре комнаты и начала на нём играть. Точнее, начала неумело дёргать за струны, получая серию неблагозвучных, немелодичных, неритмичных звуков. Интерлюдия длилась минуту, после чего Йывень села и стала что-то записывать. Но потом она встала и повторила своё выступление.

После десятого подхода Хвайда швырнула сандалию прямо в спину Йывень, заставив девушку взвизгнуть и обернуться.

"Что", - прорычала Хвайда, - "ты делаешь?"

Несколько бумаг Йывень слетели на пол. Хвайда схватила их. Это были распечатки алгоритма быстрой сортировки, реализованного на разных языках: C, Lisp, Perl, и даже Prolog. На каждом из них красными чернилами были начертаны ноты.

"Тысяча извинений за мою грубость", - сказала Йывень. - "Я пыталась закодировать алгоритмы в виде движений в пространстве или записей в воздухе. Если этот результат не радует, то я сменю кодировку и попробую ещё раз".

"Зачем?" - спросила Хвайда.

"Чтобы увидеть, что я обнаружу, делая это", - ответил Йывень. - "Мы часто говорим о красоте или элегантности кода. Возможно, не зная об этом, мы уже составили хореографию танца по информации, и мы находим некоторые вещи приятными, так как они взывают к некоему глубокому эстетическому чувству, общему для других форм человеческого искусства. Если это так, то такое искусство можно добавить. Я ищу эту связь".

Хвайда задумалась.

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

В ответ Хвайда достала две ватных затычки из своей тумбочки и засунула их в уши. Йывень поклонилась и вернулась к своему инструменту. Таким образом, мир был восстановлен.


* Я полагаю, что гучжэн звучит примерно так.

Original: Interpreter

Переезд

Даже небольшой переезд с этажа на этаж - это хороший повод прибраться в труднодоступных местах, разобраться в хламе и повыкидывать ненужное. I like to move it, move it...

среда, 26 марта 2014 г.

Круиз-контроль

Покатался ночью по КАДу, потестировал круиз-контроль. Когда нет машин - удобно, но если несколько скапливается, то приходится давить педали. А при нажатии он автоматически отрубается.