понедельник, 30 июня 2008 г.

Deus Ex: продолжение

Наконец-то дошли руки и я таки прошёл Deus Ex: Invisible War. Очень интересная идея круглого интерфейса:

Главый герой может использовать нанотехнологии для улучшения своих возможностей. Например, можно видеть сквозь стены:

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

ApostleCorp - Великое Продвижение:


Illuminati - Век Света:


Omars - Выжженная Земля:


Более подробно на Википедии. Кроме того, рекомендую почитать про мир игры Deus Ex. А по мне так это достойный продолжатель игр System Shock и Deus Ex. Ждём теперь Deus Ex 3!
Вся история человеческой расы состоит из длительных последовательностей заговоров. Обманывая себя, люди называют заговорщиков правительствами
- Stanton Dowd, Deus Ex.

Авангард DSL

Вчера наткнулся на список тарифов на ADSL. Я уже писал про увеличение скоростей, но не знал, что это так прилично. За те же деньги можно увеличить скорость в 5 раз! У меня был тариф 600K за 985р. (вместе с телефоном), а теперь будет - 3500K за 925р.
Поехал сегодня на ПлАН, чтобы переключиться. Заполнил заявление, но оператор мне сказала, что переключение произойдёт с 1 августа, так как заявку нужно подавать за 2 рабочих дня до конца месяца. Блин! Ещё месяц тормозить... ;)

Viva la España

Да здравствует Испания! Единственная команда, которой Россия проиграла на турнире УЕФА. В финале я болел за них, точнее за их вратаря Касильяса, который просто шикарно играл против Италии: два пенальти поймал, а в остальных просто угадывал полёт мяча. И победили они заслуженно! Как классно атаковали ворота немцев в финале...
Но и наша команда рулит! Обыграли всех кого можно, кроме Испании. Ну не дотянули до их уровня просто. Частый короткий и точный пас испанцев - лучшая тактика на нынешнем чемпионате.
И Аршавин попал в десятку лучших игроков чемпионата, а если бы он не пропустил првые два матча, то мог бы стать самым лучшим!
Вот кого не хватает нашеё сборной!

воскресенье, 29 июня 2008 г.

В рот мне ноги

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

Warfare Transporter

Простая, но прикольная игрушка:

Цель игры - провести транспорт, кидая глубинные бомбы по подводным лодкам противника и сбивая его авиацию:

Но и противник тоже стреляет. И мне не удалось провести транспорт через линию фронта:

Москва - Питер

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

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

Удобные полочки, чтобы положить сумочку или мелочь из карманов:

Причём на верхней полке тоже:

Задняя спинка опускается и сидячее место превращается в лежачее, причём в питерском поезде всё было застелено уже:

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

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

Ещё в вагоне выдают коробочку с едой. В билете написано, что она стоит 400р. Я так прикинул - 300% навара. Опять принуждают! Если бы их продавали у проводника, а не с билетом, то просто никто бы не брал. Булочки не свежие: одна "дорожная", а вторая "аппетитная". Видимо первая неаппетитная. Желе растаявшее - один желатин. Кусочек сыра и несколько кусочков колбасы. Кто-то не хило бабла с этого имеет! И производители этого барахла, и в РЖД, наверняка, кто-то на откаты живёт...

Питер - Москва

Выехали в пятницу в 11:30. Решили ехать днём, как в прошлый раз. КАД стоит... Володарский мост стоит... Целый час добирались до выезда на Московское шоссе. Хорошо, что там до Пушкина пробки не было, так как дачники ещё на работе были. Следующий раз поедем не на КАД, а через Колпино.
Ехали медленнее, чем прошлый раз, так как все дороги ремонтируются (видимо дорожникам бабла перепало). По объездной вокруг Новгорода ездить стрёмно, поэтому поехали через него. Опять промахнулись мимо Пролетария, но это теперь не важно, так как дорога в Москву после обычного выезда на трассу уже отремонтирована. А вот через некоторое время возле Первомайского попали в пробку. Повезло, что постояли всего минут 20. Потом нас менты пустили по встречке и мы с первого захода её преодолели. Остальные полосы ремонтируются где-то километр. Потом километров 6-7 ехали вдоль очереди из Москвы. Поняли, что нам ещё повезло. Забавный прикол: стоит знак, что кончается деревня, рельсы и надпись Переезд. А это оказывается деревня Переезд, в которой возле ментов стояло аж 3 машины, ведь превышать-то нельзя. Нас пронесло, ведь нам скорость по GPS рекомендуют. Ещё одну потенциальную пробку проскочили на A107. Там ремонтируется мост через Истру и половину моста просто разобрали. Но руководят не менты, а стоит нормальный светофор. Прикольно было ехать по узкому мосту шириной в одну полосу. Говорят там тоже стоят часами, но в полночь мы проехали достаточно быстро. Решили, что из-за этого ремонта не будем возвращаться в Питер через месяц, а сразу поедем в Таллинн. Разведаем дорогу...
Приехали в 0:30. Где-то час потратили на остановки и прогулки. По бортовому компьютеру проехали 771 км (20 км по Питеру накрутили) со средней скоростью 66 км/ч. Потратили 66 литра, т.е. 8,5 литров на 100 километров.

среда, 25 июня 2008 г.

Ремонт Невского

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

Desktop Tower Defense

Оказывается уже вышла более красивая версия 1.5, причём на официальном сайте, а я то играл на 1.2:

В отличии от многих других игр подобного жанра эта - наиболее простая: с первого раза на Easy набрал 2515 очков и на 49-ом уровне срезался. Симпатичная игрушка! Гораздо лучше, чем пасьянс раскладывать...

Прототип

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

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

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

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

Гусар вышел на ближайшей станции, добрался до трубы и только на месте обнаружил, что труба да дровяной сарай - единственные сооружения на <<рудниках>>, а чтобы труба дымила, специально обученный человек разжигает в топке огонь, как раз в то время, когда мимо идет поезд. Разгневанный Шульц поспешил вернуться в Петербург и прямо с вокзала направился к прокурору...

вторник, 24 июня 2008 г.

Вот как надо!

Россия-Голландия. Версия известного дагестанского комментатора Рамазана Рабаданова (урезанная):

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

понедельник, 23 июня 2008 г.

воскресенье, 22 июня 2008 г.

Россия - вперёд!

Посмотрели вчера игру нашей сборной. Аршавин сделал игру! Все три гола на его счету. Сначала он отдал голевой пас Павлюченко, затем навесил к воротам Турчинскому, а когда никого не оказалось рядом - сам забил.
А вот если бы Павлюченко не сыграл рукой у наших ворот, то голландцы могли бы нам и не забить со штрафного. Игра была зачётной. Браво, Арш!

среда, 18 июня 2008 г.

Ayreon


Купил альбом с программерским названием 01011001 (2008). Долго думал, что это значит. Оказалось, что это код буквы Y. Так называется первый из двух дисков. Второй называется Earth. Это эпическое произведение повествует об истории планеты Y и борьбе за эмоциональное выживание в эру высоких технологий, а также о человеческой зависимости от них.
Музыкальная часть довольно противоречива. С одной стороны - идеальный звук, яркие мелодии, интересные ходы. С другой - всё-таки недостаточно для Ayreon. Меньше запоминающихся моментов, чем в Universal Migrator (2000), но всё равно захватывающе.
Рекомендую! (для семейного прослушивания)

вторник, 17 июня 2008 г.

Далеко ли до Таллинна

У нас были длинные (аж 4 дня) выходные в честь дня России. Ну и решили мы скататься на машине в Таллинн: отдохнуть и бабушку проведать. Как только погрузились Мишка нас просто убил, напомнив известный анекдот:

Дорога до границы раздолбана. Ехать больше 60-ти реально страшно. Машину кидает на выбоинах из стороны в сторону. Доехали часа за три, как как ещё на Таллиннском шоссе стояли, пытаясь выехать из Питера. На границе купили талончик и встали в очередь на таможню. Очередь живая. Каждые 10 минут надо заводиться и проезжать метров по пять. Почему за этот талончик деньги отдали - не понятно. Только одно объяснение - мы в России, чувак! Стояли 4 часа, да потом час таможню проходили...
После границы все куда-то рассосались: то ли в Нарве остались, то ли в Тарту поехали. Ну а мы поехали в Таллинн. Дорога ровная и, в основном, прямая, а ближе к Таллинну - широкая. В Эстонии правила никто не нарушает, водители вежливые и всегда пропустят, если ты поздно решил перестроиться. Никто не подрезает, по городу не летает, а если на дороге разрешена скорость больше обычной, то знаки об этом после каждого перекрёстка. Обратная дорога тоже была приятной. Все едут оптимально и ровно. Разрешено 100 - все едут 100, надо сбросить до 50 - все едут 50. Обгонов практически нет, только на подъезде к Нарве нас стали обгонять с превышением скорости. И что не удивительно - у все номер питерский, 78-го региона.
В Нарве таможня практически в центре города. Поэтому там есть специальная стоянка на окраине (Rahu 6). Туда приезжаешь, ждёшь своей очереди, получаешь талончик (бесплатно!) и едешь на таможню. Мы зарегистрировались под номером 228 в то время как проходили номера 90-100. Погуляли, узнали про льготную очередь для водителей с детьми до 3-х лет и инвалидов и встали в неё. Из этой очереди одну машину пропускают после пяти машин обычной очереди. Прождали часа три, так как на таможне с 7 до 8 пересменка. Уехали вместе с номерами 160-170, а ведь могли в общей очереди ещё три часа простоять:

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

вторник, 10 июня 2008 г.

Google Mail Labs

Компания Google выкатила на тестирование большой набор расширений для почты. Кое-что я даже подключил и использую:
Superstars
Теперь помечать письма можно звёздочками разных цветов, а также галочкой в зелёном кружке и восклицательным знаком в красном.
Hide Unread Counts
Поставил, так как надоело видеть количество непрочитанных писем. Название метки начинает слегка колбасить, особенно когда оно длинное.
Pictures in chat
Я подключил эту возможность, но ещё не заценил, так как и дома и на работе использую Google Talk, в котором эта возможность уже сто лет в обед...
Muzzle
Ещё одно расширения для web-чата. Только я ещё с ним не разобрался.
Пока нареканий нет...

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

Amorphis

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

Альбом Silent Waters (2007) мне понравился. Хотя мне он показался более неровным, чем предыдущий Eclipse (2006). И хотя отдельные композиции очень интересные и разнообразные альбом в целом не воспринимается как альбом. Просто набор отличных композиций, объединённых общей темой из их народного эпоса Калевала: легендой о бесстрашном Лемминкяйнене и прекрасном лебеде Туони. Рекомендую! Кажется, Amorphis потихоньку возвращается к своим корням...

понедельник, 9 июня 2008 г.

Аэрография

Забавный у них капот:

Гляжу, что сейчас много машин появилось с аэрографией. Мода такая что ли?

Первая гроза

Сегодня ночью была первая гроза в этом году. В этом году я молний ещё не видел. Да и громыхало прилично...
А с утра Юля Мишку нашла в необычном месте. Обычно он ранним утром приходит из детской и ложится Юле под боочок. Но сегодня утром он уснул пока залазил на нашу кровать. Так и спал свесив ноги ;)

суббота, 7 июня 2008 г.

Fallout 3

Bethesda приготовила коллекционное издание Fallout 3, на которое уже сейчас можно оставить заказ:

Кроме самой игры Vault-Tec Lunch Box ("ядрённый" чемоданчик для обедов) содержит много дополнительных вещей: Vault Boy Bobblehead (моделька главного героя), The Art of Fallout 3 (стостраничный фолиант с концепт-артами и комментариями от художников), The Making of Fallout 3 (комментарии команды о процессе создания игры). Но я не уверен насчёт футболки и напитка:

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

Ждать осталось недолго...

P.S.: Только бы ничего не испортили. Тьфу! Тьфу!! Тьфу!!!

четверг, 5 июня 2008 г.

Питерский зоопарк

Ходили в зоопарк, который рядом с Петропавловской крепостью. Посмотрели как резвятся маленькие белые медвежата, а жираф нам показал свой язык:

Однако Мишка постоянно твердил (особенно внутри помещений): "Чем воняет? Зачем они какают и писают? Зачем у них нет туалета? Пойдём отсюда!"
В Таллинне раньше тоже был такой же маленький и вонючий зоопарк почти в центре города. А в питерском Мишке понравилось только в той части, где не было животных:

Освободите Джимми!

Гоблин рекламирует мультфильм для взрослых, который сам же и переводил:

После просмотра захотелось купить, например, на ОЗОНе.

среда, 4 июня 2008 г.

DayMare Town

Своеобразно нарисованный и очень интересный квест. Я играл сразу во второй, так как в первом, говорят, сплошной pixel hunting:

Посмотрел таблицу рекордов - 41 монетка, а я только 21 набрал. Вот народ пробивается...

вторник, 3 июня 2008 г.

Java Puzzlers

Вот и всё. Прочитал. За полтора года ;)

Странные ощущения остались. Большинство головоломок отлавливаются на этапе набора кода практически любой IDE. А остальные, я думаю, маловероятны после прочтения Effective Java. Зато Java Puzzlers удобно использовать на собеседованиях...

Ждём продолжение. Говорят, Блох над ним работает.

Java Puzzle 95: Just Desserts

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

public class ApplePie {
public static void main(String[] args) {
int count = 0;
for (int i = 0; i < 100; i++); {
count++;
}
System.out.println(count);
}
}

Эта головоломка по мотивам бага 4157460 напечатает "1".

import java.util.*;
public class BananaBread {
public static void main(String[] args) {
Integer[] array = {3, 1, 4, 1, 5, 9};
Arrays.sort(array, new Comparator() {
public int compare(Integer i1, Integer i2) {
return i1 < i2 ? -1 : (i2 > i1 ? 1 : 0);
}
});
System.out.println(Arrays.toString(array));
}
}

Эта головоломка по мотивам бага 4763901 напечатает "[3, 1, 4, 1, 5, 9]". Хотя, технически, результат неопределён, так как зависит от реализации в конкретной JVM.

public class ChocolateCake {
public static void main(String[] args) {
System.out.println(true?false:true == true?false:true);
}
}

Эта головоломка напечатает "false". При синтаксическом разборе кода компилятор не учитывает пробелы - они никак не влияют на последовательность операторов. Скобки спасут отца русской демократии ;)

Урок этой головоломки, да и всей книги в целом: не кодируй как мой младший брат (Don't code like my brother).

Властелины времени


А вы помните этот мульт? У нас в офисе только один из десяти помнит его. В дедстве смотрел в кинотеатре. Очень тащился...

Тут можно посмотреть финал:

μTorrent уже раскочегарен ;)

Метровая карта

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

понедельник, 2 июня 2008 г.

Наступило лето

В районе Балтийской появились первые цыганки. Автомобилей столько, что на Лермонтовском дышать нечем. Такой он, центр культурной столицы...

воскресенье, 1 июня 2008 г.

Luca Turilli


Купил для коллекции диск The Infinite Wonders of Creation (2006). Мне очень нравился ранний Rhapsody (Of Fire нынче), да и сам Люка. Однако, последние альбомы были какие-то однообразные. Но тут...
Тут всё начинается с пения птичек, которых через считанные секунды сносит ураганом. На альбоме два вокала: высокие мужской и женский. Голоса довольно приятны слуху, причём по ходу альбома они то чредуются, то идут параллельно, а то и вовсе сливаются в единое целое. Мелодии красивые и местами очень сильно цепляющие. Аж до дрожи! Темп несколько ниже, чем на ранних работах, но всё равно очень круто.
Рекомендую! Шикарный альбом!

Subterfuge

Забавная позиционная игра, разработанная Diffusion Games. Они опубликовали игру на Armor Games, но там, кажется, битая флешка. Приходится запускать отсюда:

Цель игры - убить вражеского главаря (Leader) и защищать своего всеми силами. Самый крутой воин (Enforcer) убивает всех кроме минёра. Победить его может только только такой же воин или убийца. Убийца (Assassin) также легко убивает всех кроме минёра, но побить его легко. Обычный наёмник (Mercenary) уже погибает при нападении на крутого. Скауты (Scout) легко обезвреживают минёров, а погибая сообщают, от чьеё руки. Минёры (Bomb) сами нападать не могут. Тут главное перехитрить соперника и подставиться под удар кого-нибуть крутого. Ну а главарь может незаметно поменяться с кем-нибудь. Не самое полезное времяпрепровождение.

Жаль на шестом уровне игра зависла: зациклился, считая как выиграть двумя фигурами ;)

четверг, 29 мая 2008 г.

Java Puzzle 94: Lost in the Shuffle

Рассмотрим метод перемешивания содержимого массива. Хорош ли он? Если нет, то как его исправить?
import java.util.Random;
public class Shuffle {
private static Random rnd = new Random();
public static void shuffle(Object[] a) {
for (int i = 0; i < a.length; i++) {
swap(a, i, rnd.nextInt(a.length));
}
}
private static void swap(Object[] a, int i, int j) {
Object tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}

Aвторы доказывают, почему он не достаточно хорош, и рекомендуют использовать библиотечный класс java.utul.Collections, у которого есть метод shuffle. В принципе, достаточно изменить метод так:
  public static void shuffle(Object[] a) {
for (int i = a.length; i > 1; i--) {
swap(a, i - 1, rnd.nextInt(i));
}
}
}

Говорят, что надо читать Кнута. А я у него только второй том осилил ;)

Java Puzzle 93: Class Warfare

Это головоломка тестирует знания совместимости классов. Авторы приводят два класса. В одном определены статические поля, а второй эти поля использует. После компиляции программы авторы предлагают переопределить эти поля в первом классе и перекомпилить его, не компилируя при этом второй. Естественно, результат работы второго класса не изменится.
Это одна из особенностей языка, которые я не люблю: ссылки на константы резолвятся во время компиляции (JLS 13.1). Из-за этого большие проекты приходится перекомпилировать целиком, чтобы не наступить на грабли.

Однако в этой головоломке скрыта другая. Одна из констант в первом классе - null, а согласно JLS 15.28: null не является константой во время компиляции и ссылка на неё резолвится во время исполнения.
Обратите внимание, что enum-константы, введённые в Java 5, не являются константами времени компиляции, т.е. не надо перекомпилировать классы, использующие эти enum-константы, если они поменяются.
Для всех бы констант так!

среда, 28 мая 2008 г.

Ride The Sky


Прикупил первый диск очередного проекта Uli Kusch, бывшего барабанщика Helloween и Masterplan - Ride The Sky: New Protection (2008). Достаточно интересная смесь power и progressive. Мелодии разнообразны и интересны. Исполнение тоже на уровне. Единственное, что меня напрягает, так это барабаны, которые звучат немного громче ожидаемого.
Добротный альбом. Жаль, что Helloween уже не тот. Один Michael Weikath остался...

Tetris

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

Вот тут можно скачать sed-скрипт для игры тетрис, а также sh-скрипт для его запуска. Под cygwin даже работает. Респект!

вторник, 27 мая 2008 г.

Пицца

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

Несмотря на то, что коржи были магазинные, пицца была очень вкусной. Всё-таки, всё дело в начинке. Это как в анекдоте "не жалейте заварки"!

The Dark Room

Отличная головоломка The Dark Room. Точнее, это 7 головоломок в одной:

Настраивается кнопками Red, Green и Blue. Разные комбинации дают доступ к разным головоломкам. Я прошёл R, G, B, RG и RB. Осталось ещё две - GB и RGB. Доиграть можно потом, так как игра загружает последнее состояние при запуске:

У неё есть продолжение - The Dark Complex, может потом когда-нибудь поиграю...

Русский язык

"Все побежали, и я побежал..." (C)
Прошёл тест по русскому языку, и вот что мне написали:

Вы дали 8 из 8 - Поздравляем, вы - вымирающий вид россиянина, отлично знающего свой родной русский язык. Вы один из немногих носителей элитарного знания, доступного в наше время единицам (7% от общего числа опрошенных). Второй вариант: вы - выпускник, которого хорошо натаскали на сдачу экзамена по русскому языку. Третий вариант: вы – репетитор. Или просто закончили филологический факультет, и пошли работать не по специальности.

Сходи, проверься!

Всё гораздо проще: я учился в СССР!

понедельник, 26 мая 2008 г.

Евровидение

Футбол - взяли, хоккей - взяли. Теперь еще и Евровидение. Кранты стабфонду...
Тут на БОР думали, что же всё-таки подарили Медведеву на инаугурацию: кольцо Всевластья, Мел Судьбы или золотой шар из Зоны кто-то принёс? Сошлись на цветике-семицветике...

Жаль, что финны против Билана опять Lordi не выставили. Зато теперь Билану помогали Евгений Плющенко (без коньков, зато известная фигура) и венгерский скрипач Эдвин Мартон (ничего, что не русский, зато Россия выиграла):

Чтобы улучшить впечатление от песни, народ даже наложил правильный саундтрек. Вы только посмотрите, как Билан на 14-й секунде "ы-ы-ы-ы" тянет:

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

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

пятница, 23 мая 2008 г.

Бой без правил

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

Это классический шутер, в котором герой неимоверно крут и легко справляется с толпами врагов:

Если прямо не попасть, то можно закинуть гранату. И не смотрите, что на скриншоте глюк. Это винды снимают не в конце генерации кадра:

Коллега на работе прошёл её и ему показало картинки, созданные на этапе разработки игры:

Мне лично не справиться с управлением, дае если его поменять. Но игрушка сделана с душой. Очень прикольно!

Java Puzzle 92: Twisted Pair

Следующая программа выполняет неестественное действие с анонимным классом. Что она напечатает?
public class Twisted {
private final String name;
public Twisted(String name) {
this.name = name;
}
private String getName() {
return this.name;
}
private void reproduce() {
new Twisted("reproduce") {
private void print() {
System.out.println(getName());
}
}.print();
}
public static void main(String[] args) {
new Twisted("main").reproduce();
}
}

Сначала я подумал, что она совсем не скомпилируется. Потом подумал, что по логике должно напечатать "reproduce". Но и тут чувствуется подвох...
Так было бы, если бы getter не был бы private. Согласно спецификации (JLS 8.2) приватные члены класса никогда не наследуются. Следовательно, из метода print будет вызван метод внешнего (outer) класса, т.е. того класса, экземпляр которого мы создали с именем "main". Соответственно, будет напечатано "main".
Авторы напоминают совет из головоломки 6: если вы не можете с первого взгляда сказать, что делает некая программа, то возможно она делает совсем не то, что вы от нее хотите.

Java Puzzle 91: Serial Killer

А вот объясните-ка, почему сериализация не работает в следующей программе?
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class SerialKiller {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Sub sub = new Sub(666);
sub.check();

ByteArrayOutputStream bos = new ByteArrayOutputStream();
new ObjectOutputStream(bos).writeObject(sub);

ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
Sub copy = (Sub) new ObjectInputStream(bis).readObject();
copy.check();
}
}
class Super implements Serializable {
final Set set = new HashSet();
}
class Sub extends Super {
private int id;
Sub(int id) {
this.id = id;
set.add(this);
}
void check() {
if (!set.contains(this))
throw new Error("invariant");
}
public int hashCode() {
return id;
}
public boolean equals(Object object) {
if (object instanceof Sub) {
Sub that = (Sub) object;
return that.id == this.id;
}
return false;
}
}

Вкратце: если необходимо сериализовать HashSet, HashMap или Hashtable, то надо убедиться в том, что их содержимое (элементы, ключи или значения) не содержат прямых или косвенных ссылок на эти коллекции.
И ещё: если вы разрабатываете сериализуемые классы, то в методах readObject или readResolve избегайте прямого или косвенного вызова методов объектов, которые десериализованы.

Beatallica


В прошлом году скачал MP3 этой группы. Много смеялся. Жуткая смесь музыки и текстов The Beatles и Metallica. Кстати, псевдонимы у музыкантов - такая же смесь: Jaymz Lennfield, Grg Hammetson, Kliff McBurtney и Ringo Larz.
Сегодня увидел в Кайласе - не мог не купить. Это их первый альбом: Sgt. Hetfield's Motorbreath Pub Band (2007). Говорят, в этом году вышел ещё один их альбом: All You Need Is Blood (2008). В нём у них всего одна песня, но исполняется на разных языках, включая русский.
Если нравятся мэтры, а тексты и музыка давно в крови, то рекомендую заслушать этот альбом. Стёбно!

среда, 21 мая 2008 г.

Метро

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

воскресенье, 18 мая 2008 г.

Москва - Питер

Выехали в субботу в 13:30. Решили ехать днём, так как ямы на дороге лучше видно. Правда сложнее было с Мишкой, так как он не спал. Приходилось останавливаться и гулять. В Клину заехали в МакДональдс: купили ему картошки, а себе - мороженое. Погуляли на солнышке. Ещё на какой-то заправке остановились погулять и пофотографироваться на фоне леса. Ну и на Neste опять фломастеры выпросили порисовать. Поэтому ехали долго...
Приехали в 0:50. Всего проехали 753 км со средней скоростью 78 км/ч. Гораздо быстрее, чем в прошлый раз. Потратили 64 литра, т.е. 8,4 литра на 100 километров. Данные по бортовому компьютеру. Он не считает время, пока мы гуляем, а двигатель выключен...

Пятнично

В прошедшую пятницу у нас в конторе проходил очередной beer bash. Раз в месяц пива разливного привозят, в основном от частных пивоварен. Пиво на вкус было слишком кислым для меня, но и не те помои, что обычно в магазинах продают. По крайней мере после трёх литров голова с утра не болела. Единственный минус, что после поехал в Москву за семьёй и в поезде забыл жилетку. На пьянке наша команда оккупировала караоке и тупо орала песни. Я тоже орал... ;)
Перед всем этим были конкурсы, типа, кто быстрее пива выпьет. Так один парень прямо в горло заливал. Секунд за 5 бутылку усосал ;)
Ещё, оказывается, в приглашении говорилось, что будет конкурс стихов и надо написать что-нибудь. А я это прозевал. Зато чел из нашей команды отличился (mr. JFileChooser):

    Сан. Пятница. Коллеги. Пиво.
    Бессмысленный и мощный гвалт.
    Всего лишь месяц перерыва -
    И снова так. Тому я рад!

    Уедешь в отпуск - как тоскливо!
    И будут сниться по ночам
    Гвалт, разливные реки пива,
    Коллеги, пятница и Сан.

Мне аж завидно стало. Какой талантище! Как верно всё подметил. Ну я и написал в ответ, хотя и не так круто, зато тоже правдиво:

    Леонид отжёг сегодня -
    Стих забавный написал.
    Ну а я забыл про конкурс
    И, конечно, опоздал...

четверг, 15 мая 2008 г.

Crematory


Прикупил альбом Pray (2008). Офигеть! Стало ещё лучше предыдущего альбома. Одни сплошные хиты, даже не знаю, что выделить. Наверное надо отметить композицию Sleeping Solution, которая мне каждый раз напоминает Tears os Time. Но и остальные не подкачали...
Отличные, хорошо запоминающиеся мелодии. Гроулинг Феликса идеально сбалансирован с чистым вокалом Маттиаса. Много клавишных, но, как обычно, жёсткие гитарные риффы.
Мне даже сложно выбрать любимый диск. Раньше это был альбом Illusions (1995) однозначно. Теперь я уже сомневаюсь...
Категорически рекомендую!

среда, 14 мая 2008 г.

Java Puzzle 90: It's Absurd, It's Pain, It's Superclass

Следующая программа очень простая и ничего не делает. Но к ней есть два вопроса: почему она не компилируется и как это исправить?
public class Outer {
class Inner1 extends Outer {}
class Inner2 extends Inner1 {}
}

Проблема в том, что при создании класса вызывается "конструктор по-умолчанию", который создаётся автоматически и содержит вызов конструктора суперкласса, а этот вызов выглядит так: this.super(). Теперь становится понятно, почему компилятор ругается "cannot reference this before supertype constructor has been called". Это запрещено согласно спецификации (JLS 8.8.7.1). А исправить можно добавив конструктор без параметров в класс Inner2:
public class Outer {
class Inner1 extends Outer {}
class Inner2 extends Inner1 {
Inner2() {
Outer.this.super();
}
}
}

Такая конструкция уже компилируется, хотя и выглядит очень странно. Кстати, парсер IntelliJ IDEA продолжает показывать ошибку в этом месте.
Авторы предлагают решение лучше и советуют: Когда вы пишете вложенный класс спросите себя, действительно ли нужен доступ к членам класса, в который вы его вкладываете? Если нет, то делайте вложенный класс статическим. Я вообще не люблю вложенные классы. Они усложняют работу с наследованием, а так же с generics и reflection.

Java Puzzle 89: Generic Drugs

В предыдущей задаче мы поняли, что не надо использовать raw type. Написали программу, расставив везде нужные декларации. Что напечатает следующая программа?
public class LinkedList {
private Node head;
private class Node {
E value;
Node next;
Node(E value) {
this.value = value;
this.next = head;
head = this;
}
}
public void add(E e) {
new Node(e);
}
public void dump() {
for (Node n = head; n != null; n = n.next)
System.out.print(n.value + " ");
}
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add("world");
list.add("Hello");
list.dump();
}
}

А она не хочет компилиться! Дело в том, что типы E разные для класса LinkedList и класса Node. Избегайте затенения параметра типа. Авторы говорили об опасности затенения в головоломках 71, 73 и 79. После этого сразу видно, что надо добавить второй параметр конструктору класса Node и слегка изменить метод add:
public class LinkedList {
private Node head;
private class Node {
F value;
Node next;
Node(F value, Node next) {
this.value = value;
this.next = next;
}
}
public void add(E e) {
this.head = new Node(e, this.head);
}
public void dump() {
for (Node n = head; n != null; n = n.next)
System.out.print(n.value + " ");
}
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add("world");
list.add("Hello");
list.dump();
}
}

Блин, с этими generics, как по минному полю ходишь. Хотя с template классами в C++ тоже не так всё просто...

вторник, 13 мая 2008 г.

Vintersorg


Заглянул сегодня в Кайлас, а там дисков прибыло. Не всё, конечно, что я хотел купить, но хоть кое-что. Сегодня это был альбом Solens Rötter (2007), что в переводе со шведского означает "Корни Солнца".
Во-первых, меня очень порадовало возвращение к шведскому языку. На мой взгляд это язык №1 для тяжёлой музыки. Сразу вспоминаются их ранние работы Till Fjälls и Ödemarkens Son.
Во-вторых, они закончили с непонятными экспериментами в последних работах и альбом лишь слегка не дотягивает до ранних работ, но музыка, всё-равно, совершенно волшебная! Очень рекомендую!!!

воскресенье, 11 мая 2008 г.

День Победы

Мишка ходил на праздник к памятнику. Впечатлился. Марширует, как солдат. Честь отдаёт. Постоянно поздравляет всех с Днём Победы. Где бы ему такую одёжку найти:

Поубивал бы гадов

Хорошо, что я был с бабушкой. Какая-то сука позвонила: мама, мама, я человека насмерть сбил, денег надо, бла-бла-бла...
Бабушку аж трясёт всю. Я-то сразу заподозрил неладное, когда она мне трубку стала передавать, на том конце отсоединились. Блин! Её до вечера колбасило.
Я, конечно, быстро папу набрал, проверил, что всё в порядке. Бабушку как мог успокоил. Позвонил в полицию, а там говорят, что такие случаи последнее время участились. За день до этого, мы сидели на кухне и новости по радио слушали. Там тоже об этом говорили. Спрашивали в полиции, не знаю ли я телефона, с которого мне звонили. Но на домашнем нет автоответчика, а сами они проверить, кто мне звонил, видите ли, не могут.
Хорошо, что я был с бабушкой. Теперь то она готова к таким звонкам, но а если бы она была одна? Сабж!

Крутые парни

Жаль, что обычно не таскаю с собой фотоаппарат.
Приезжаю сегодня на Балтийский вокзал. 7 утра. Солнце слепит. Машин практически нет. Лепота...
А по Обводному проезжают два мотоциклиста полной защите. Все в чёрном. И только одна деталь портит всю картину. У каждого мотоцикла нелепая жёлтая крыша с надписью ОХРАНА. Повеселило ;)

пятница, 9 мая 2008 г.

С Днём Победы

Поеду в Таллинн на праздник. Если бабушка будет в состоянии, то дойдём до памятника. Вы же можете возложить цветы виртуально.


Джентльмены! Поздравляю вас с победой!

понедельник, 5 мая 2008 г.

Java Puzzle 88: Raw Deal

Что напечатает следующая программа?
import java.util.Arrays;
import java.util.List;
public class Pair<T> {
private final T first;
private final T second;
public Pair(T first, T second) {
this.first = first;
this.second = second;
}
public List<String> toArray() {
return Arrays.asList(
String.valueOf(this.first),
String.valueOf(this.second));
}
public static void main(String[] args) {
Pair pair = new Pair<Object>(23, "skidoo");
for (String str : pair.toArray()) {
System.out.println(str);
}
}
}

Удивлены? Я тоже. Она просто не скомпилируется. Несовместимость типов в строке:
    for (String str : pair.toArray()) {

Что происходит? Ведь метод toArray всегда возвращает список строк! Проблема в том, что локальная переменная pair использует raw type. А это означает, что все поля и методы тоже будут использовать raw types. Т.е. метод toArray в таком случае возвращает просто список List. Бороться с этим просто. Измените декларацию переменно таким образом:
    Pair<Object> pair = new Pair<Object>(23, "skidoo");

или ещё более просто:
    Pair<?> pair = new Pair<Object>(23, "skidoo");

И запомните, что тип List (raw type) отличается от List<Object> (parametrized type).

А для меня, как разработчика пакета JavaBeans, который в полный рост использует reflection, это знание ОЧЕНЬ важно. Я вышел на новый уровень понимания generics!

Java Puzzle 87: Strained Relations

Тут задачка на равенства. Отношение равенства должно быть рефлексивным (reflexive), транзитивным (transitive) и симметричным (symmetric). Это в теориии...
А в Java определяет ли оператор сравнения == отношение равенства для значений примитивных типов? Если нет, то какое из трёх свойств оно нарушает?

В головоломке 29 мы узнали, что оператор сравнения не рефлексивный, так как Double.NaN == Double.NaN возравщает false.

Головоломка 35 поможет понять, что оператор сравнения не транзитивный. При сравнении двух числовых значений сначала осуществляется приведение типов. Но аккуратнее, конвертация int или long в double может привести к потере точности. А это чревато!
public class Transitive {
public static void main(String[] args) {
long x = Long.MAX_VALUE;
double y = (double)Long.MAX_VALUE;
long z = Long.MAX_VALUE - 1;
System.out.println(x == y);
System.out.println(y == z); // surprise!
System.out.println(x == z);
}
}

Haluz

Хороший on-line квест, продолжающий традиции Samorost 1 и 2. И тоже двухсерийный...

воскресенье, 4 мая 2008 г.

Опять в Таллинн

На выходные собираюсь поехать в Таллинн, встретить с бабушкой праздник. Осознал, что ОЧЕНЬ хочу, чтобы из нашего окна звучала патриотическая музыка. Надо качать!
Тут, тут и тут...

Opeth


3 июня на лейбле Roadrunner Records выходит новый диск группы Opeth: Watershed (2008). Очень люблю их творчество, особенно альбом Morningrise (1996), который слушаю прямо сейчас.
Я чего бучу поднял раньше времени. Они сняли клип на песню Porcelain Heart. Съёмки проходили в замке Bogesund (Vaxholm, Швеция), построенном в 1640 г. И клип красивый, и песня клёвая!
А вот так развлекаются настоящие фанаты:

среда, 30 апреля 2008 г.

Мороженое

Катался в Таллинн на днях. Видел там мороженое фирмы Premia. Фишка в том, что у них появилось мороженое в стиле ретро. В старые добрые советские времена оно по 20 копеек, кажется, было. Я даже не удержался - купил попробовать. Вкусно! И ностальгия...

пятница, 25 апреля 2008 г.

Java Puzzle 86: Poison-Paren Litter

Можете ли вы придумать корректное выражение, которое превращается в некорректное, если входящее в него выражение взять в скобки?

Обычно добавление пары скобок используется для улучшения читаемости кода. Однако, существует два случая, когда это не так (вспомните задачки 33 и 64).

int i = -2147483648; - корректно
int i = -(2147483648); - некорректно

long l = -9223372036854775808L; - корректно
long l = -(9223372036854775808L); - некорректно

Java Puzzle 85: Lazy Initialization

Следующему классу лень инициализировать себя обычным путём, поэтому он делает это на фоновом потоке. Что программа напечатает? Гарантируется одинаковый результат для каждого запуска?
public class Lazy {
private static boolean initialized = false;
static {
Thread thread = new Thread(
new Runnable {
public void run() {
initialized = true;
}
}
);
thread.start();
try {
thread.join();
} catch (InterruptedException ie) {
throw new AssertionError(ie);
}
}
public static void main(String[] args) {
System.out.println(initialized);
}
}

Кажется, что программа должна каждый раз печатать true, но нет! Она просто виснет.
Симпатичный deadlock. Попробую объяснить.
Понятно, что при обращении к методу main JVM начинает инициализировать класс. И только когда инициализация закончится будет вызван метод main. Во время инициализации запускается метод run. Однако, этот метод перед установкой initialized в true делает тоже проверку на то, что класс уже проинициализирован. Таким образом получается, что основной поток ждёт завершения фонового потока для завершения инициализации, а фоновый поток ждёт завершения инициализации. Вуаля!

Guitar Heroes


Скачал в интернете Guitar Heroes: Album (2007). Чисто инструментальный альбом, записанный известными финскими гитаристами:
    Timo Tolkki from Stratovarius
    Alexi Laiho from Children Of Bodom
    Roope Latvala from Children Of Bodom
    Emppu Vuorinen from Nightwish
    Esa Holopainen from Amorphis
    Nino Laurenne from Thunderstone
    Mr Crab from Bleak
    Mikko Salovaara from Kiuas
    Tuomo Louhio from Impaled Nazarene
    Sakari Hietala from Tarot
    Euge Valovirta from Godsplague
Некоторые песни очень даже цепляют. Например, Hellbilly. Впечатления, в основном, положительные. Теперь думаю, где бы диск купить. Кайлас совсем испортился...

Без очереди

Пришёл в банк погасить задолженность по кредитной карте. Там, как обычно, большая очередь. Напрягает стоять. Даже думал получить код для управления своим счётом через Интернет, хотя мне эта идея не очень нравится. Но один из сотрудников банка сказал, что при наличии паспорта и кредитной карты счёт можно погасить без очереди. Это радует...