среда, 12 марта 2008 г.

Google Pages: No JNLP

Хотел использовать Google Pages, чтобы размещать на нём свои Java-приложения, включая пресловутую Reversy. Однако, они отображают JNLP файлы, как текстовые XML.
Обнаружил способ, как заставить сервер понимать JNLP - надо в папку положить файл .htaccess, в котором есть следующая строка:
AddType application/x-java-jnlp-file .jnlp
Это прекрасно сработало на локальном сервере, но не работает с Google! Этот файл автоматически переименовывается при загрузке - убирается точка. Надо писать в службу поддержки, хотя я год назад писал туда сообщения о багах, но мне так ничего и не ответили...

Bloc at SillyBull

Хорошая головоломка, но короткая...

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

Kellermann Center

Сейчас офис Сан в Питере расположен в офисном центре, фасад которого вы можете видеть на шестикилограммовом торте:

Тут ещё есть...

Авангард разгоняется

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

А так выглядит скорость до Сан Франциско:

Ускорения нет! Более внимательное прочтение новости показало, что это касается всех абонентов, кроме выбравших тарифные планы 300К и 600К.
Блин! Надо посчитать деньги и переоформиться что-ли...

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

Java Puzzle 74: Identity Class

Как определить класс Enigma, что бы следующая программа выдавала false? Переопределять метод equals нельзя!
public class Conundrum {
public static void main(String[] args) {
Enigma e = new Enigma();
System.out.println(e.equals(e));
}
}

А подсказка в том, что перегружать можно ;)
class Enigma {
public boolean equals(Enigma e) {
return false;
}
}

Если два перегруженных метода принимают разные параметры, то они должны иметь идентичное поведение! И ещё, эта головоломка была бы не возможна, если бы переменная e была бы типа Object:
    Object e = new Enigma();

Java Puzzle 73: Your Privates Are Showing

Идея этой головоломки - дать понять, что private члены класса не настолько приватные, как принято думать. Например, при использовани сериализации по-умолчанию все private поля класса становятся частью экспортируемого API. Ну и задача состоит в том, чтобы написать в некоторой библиотеке что-нибудь приватное так, чтобы перестал компилироваться клиент, который использует эту библиотеку. Авторы предлагают раскомментировать строчку в следующей программе:
package library;
public final class Library {
// private static class String {}
public static String newString() {
return new String();
}
}
package client;
import library.Library;
public final class Client {
private String str = Library.newString();
}

Ну или в следующей:
package library;
class AbstractLibrary {
public static final int ANSWER = 42;
}
public final class Library extends AbstractLibrary {
// private static final int ANSWER = 6 * 7;
}
package client;
import library.Library;
public final class Client {
private int answer = Library.ANSWER;
}

Вывод: переиспользование имён опасно, избегайте сокрытия и затенения...

JavaFX

В Sun разработали JavaFX Script. И делают сейчас JavaFX. Это некая сборка, которая включает в себя полноценный JRE и скрипт. Основная фишка в том, что бы был аналогичный пакет JavaFX Mobile, способный работать на телефонах и встраиваемых устройствах. Сейчас существует open-source версия, которая работает как интерпретатор. В разработке находится компилятор, но по синтаксису он отличается от интерпретаторной версии, так как сильно не доработан. Да и технические проблемы есть...
К чему это всё? Так меня попросили писать демки для JavaOne именно для компиляторной версии. Сколько я матюков сложил, пока не вкурил эту разницу в синтаксисе. Документации ещё нигде нет. Приходится идти по этому минному полю, где шаг вправо или шаг влево - exception. Сейчас портировал вот эту демку под JavaFX. У меня она выглядит почти так же, но Дюк летает медленнее. И задержки при появлении элементов нет. Но для обучения - сойдёт. Сейчас работаю над демо для Java Media Component, который Кирилл разрабатывает под Linux. Ну и пытаюсь сделать Reversy, как всегда при изучении нового языка. Только я понял, что этот скрипт не предназначен писать программы. С его помощью можно быстро наваять GUI, а вот логику придётся писать на Java.
Кстати, JavaFX Script базируется на Scene Graph, достаточно мощной библиотеке для создания GUI с использованием двумерной графики. Демки, созданные с использованием Scene Graph можно посмотреть тут. Swing-компоненты можно легко вращать, трансформировать и масштабировать. Хоть это никому в GUI не нужно, зато какой WOW эффект!

Медицина, панимаиш

Сегодня с утра ездили в отделение клиники семейной медицины, чтобы оформить карту для детского сада. За полчаса прошли всех врачей, сдали анализы. Отношение к посетителям - просто супер! Даже бахилы бесплатно. Однако пришлось отдать 2000 р.
Расположены они на пр. Большевиков, д. 22, кор. 5. Дом находится на задворках Бонча, там где должны были построить информационный центр, а построили несколько жилых домов, под названием "Изумрудный город". Въезд с Большевиков, через пустырь и, далее, шлагбаум.

В среду ездили к аллергологу на Суворовский пр., д. 4. Детская поликлиника №19 (по корпоративной страховке от УралСиб). Врач оказался хороший, несмотря на то что мы опоздали на полчаса. Но регистратура!..
Сначала я им позвонил из пробки на ПлАНе, что мы встряли и задерживаемся. Мне грубо так сказали, что придётся стоять в общей очереди. Ладно. Но когда мы приехали и отмечались в регистратуре, на нас наехали, что мы опоздали. На оправдание, что пробки в центре, нам сказали, что все так отмазываются. И что сейчас к аллергологу толпа детей придёт, а мы должны по очереди всех пропускать. Но никто так и не пришёл за тел полчаса, что Юля провела у доктора. Мы с Мишкой были там всего пару минут и пошли шляться по клинике. Короче, страховая медицина стала теперь напоминать обычную бесплатную. Хотя не везде. Наш доктор, что к Мишке с рождения приписан, вполне нас устраивает...

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

пятница, 29 февраля 2008 г.

Реклама GMail

Лучшие люди

Видимо ФСБ надоело, что кто-то тусуется на одноклассниках, кто-то в контакте, а кто-то вообще непонятно где. Ну и было решено завести надстройку над блогосферами, социальными сетями и т.д.
Встречайте - BestPersons. Продукт пока сырой, но разработчики быстро отвечают на глупые вопросы и, я так думаю, будут активно решать возникающие проблемы. Страничка используется для указания тех мест в сети, где люди тусуются. Вот, например, моя страница.
А еще можно информер использовать. Это такой набор иконок, ведущий сразу на все персональные страницы. Эти иконки можно видеть у меня в правом верхнем углу. Поначалу были проблемы с цветом ника, но мне подсказали авторы, что надо использовать следующий код:
<style>.bp_nick {color:#aa77aa!important;}</style>
<script language="javascript" src="http://www.bestpersons.ru/service/info?u=2125" type="text/javascript"></script>

Java Puzzle 72: Final Jeopardy

Рассмотрим следующую программу. Какое поведение вы ожидаете от неё или от компилятора?
class Jeopardy {
public static final String PRIZE = "$64,000";
}
class DoubleJeopardy extends Jeopardy {
public static final String PRIZE = "2 cents";
}
public class Main extends DoubleJeopardy {
public static void main(String[] args) {
System.out.println(PRIZE);
}
}

Дело в том, что поведение модификатора final для поля и метода отличаются. Модификатор final для метода означает, что его нельзя переопределить или скрыть. А для поля он означает, что значение этого поля нельзя изменить. И всё!
Я рекомендую хранить ваши статические константы в отдельном классе. Ну а нестатические поля класса должны быть private. И не спорьте. ;)

Java Puzzle 71: Import Duty

Проверка знаний о статическом мпорте, появившемся в JDK 5. Что напечатает следующая программа?
import static java.util.Arrays.toString;
class ImportDuty {
public static void main(String[] args) {
printArgs(1, 2, 3, 4, 5);
}
static void printArgs(Object... args) {
System.out.println(toString(args));
}
}

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

Авангард DSL

Мне тут прислали ссылку, что интернет дома станет быстрее. Надо будет проверить...

Проверь антивирус

Хотите проверить, насколько хорошо ваш антивирус справляется со своими обязанностями? Это очень просто. Для этого откройте любой текстовый файл и вставьте туда эту строчку:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Как только вы попытаетесь сохранить его, то антивирус должен его переварить и предупредить. У меня корпоративный Symantec тут же спрятал этот файл в карантин.

Школьный портал

Говорят, что у нас открыли Школьный портал. Потратили на это дело 15 миллионов рублей, а результат пока слабенький. Если бы не группа энтузиастов, то может его и не стали дорабатывать, а так - приходится...
(смотреть по порядку: один, два, три и четыре)

четверг, 28 февраля 2008 г.

Я спросил у консула

Консул мне ответил, что "после присоединения Эстонии к правовому пространству Шенгена на основании вида на жительство в Эстонии можно поехать в любую страну Шенгена."
Может слетать в Прагу, пивка попить? ;)

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

среда, 27 февраля 2008 г.

Death Track

Узнал тут, что в прошлом году вышла игра Death Track: Возрождение. Интересно, насколько она соответствует духу оригинала. Помню, как в 341 аудитории отрывались...

понедельник, 18 февраля 2008 г.

Одноклассники

Первого февраля встречались с одноклассниками. Фотографии можно найти тут.

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

Потом переместились в Каспи. Кормят там неплохо, да и цены низкие. Особенное, если сравнивать с питерскими. Перед выходом из школы решил зайти в туалет. В мужском сидели пара девчёнок и парни. Курили и не только. Не удалось :(

Одна одноклассница напомнила, что на контрольной по математике послала мне записку с просьбой о помощи. А я, скотина редкая, в ответ написал: ждите ответа. Говорит, что до сих пор ждёт ;)

Corbina

Домашний интернет от Корбины Телеком. Вроде безобидная флэшка: нажми кнопку (i) - навалит газет, на конверт - писем, а на кнопку (%) - денег. Но тут есть "пасхальное яйцо". Перетащите мышкой кнопку (i) на кнопку (%) и наслаждайтесь ;)

На машине в Таллинн

Решили мы с коллегами поехать в Таллинн на выходные. Планировали ехать на Форд Фокус, но в последний день там вытек тосол. Пришлось ехать на двудверной Тойота Королла. Таможенники были удивлены, когда из неё вылезло 5 мужиков.
Для въезда на таможню нужно предъявить приграничный талончик, который можно получить на автозаправке где-то тут. На обратном пути надо заехать на эту стоянку грузовиков. Страховку на автомобиль (green card) можно купить прямо перед таможней у шлагбаума. Там по обе стороны есть домики разных страховых компаний, причём одна из них работает круглосуточно . Хотя можно нарваться там на получасовой перерыв около 9 вечера. Таможенную декларацию на временный вывоз автомобиля можно заполнить на таможне или заранее, распечатав её из сети.
До границы дорога разбита и лишь немного лучше объездной вокруг Новгорода. Все населённые пункты помечены белым знаком, т.е. надо снижать скорость. По ту сторону границы ехать очень просто: асфальт ровный, на обочине светоотражающие столбики, а населенных пунктов мало (одни синие знаки).
У GPS навигатора iGo есть проблема - он не знает про границу в Нарве и предлагает объезжать Чудское озеро. Пришлось прокладывать маршрут два раза. Но это мелочь.
Но в Duty Free меня обсчитали почти на 6 евро. И это из 20 возможных!!! Внимательнее надо быть, особенно, когда цены в одной валюте, а платишь в другой. Рублями там можно расплачиваться.

Рабочие новости

Sun Microsystems заработает на флоте Японии. Надеюсь, что после этого наши акции пойдут вверх?

Выздоровел

После поездки в Эстонию и по России я немного приболел. Температуры вроде не было, но глаза слезились и нос тёк. Врачиха посоветовала лечиться Фервексом и фигню в нос капать. Я, в основном, проспал несколько дней. Сейчас отошёл и попытаюсь описать, что было до болезни. Если вспомню ;)

вторник, 12 февраля 2008 г.

Проверка паспорта

Федеральная миграционная служба России ФМС открыла возможность проверки подлинности документов. Достаточно занести в строку поиска серию и номер паспорта, и программа определит, является ли удостоверение личности действительным. Если программа сообщает, что паспорт недействителен, это может означать, что этот документ существовал, но его владелец либо потерял его, либо истек срок действия. А если система пишет, что отсутствуют данные, можно говорить о том, что паспорт поддельный и с такой серией и номером никогда не выпускался. Никаких личных данных система не выдает, что позволяет сохранить тайну фамилии.
У меня проверить паспорт не получилось, так как мне ни разу не удалось правильно ввести проверочный код. Может они так собирают базу e-mail адресов?

понедельник, 11 февраля 2008 г.

Поездатые поезда

В Москве на ж/д станции видел плакат:
    Прыгнешь в поезд на ходу -
    Наживёшь себе беду!

Там такие же рифмоплёты работают как я ;)

Кстати, сочинился стишок в стиле вредных советов:
    Поезд по рельсам поедет быстрее,
    Если на рельсы налить массу клея...

Narbacular Drop

Пару лет назад группа студентов выпустила бесплатную трёхмерную головоломку Narbacular Drop. Идея игры настолько впечатлила Valve, что они решили поставить эксперимент, выпустив Portal в оранжевой коробке. Игру создавала та же команда и приглашённый сценарист Marc Laidlaw, который связал мир Portal со вселенной Half-Life. Ходят слухи, что лаборатория Aperture Science и её сумасшедшие изобретения станут основой сюжета Half-Life 2: Episode Three. Интересно, как Гордон Фримен справится на этот раз?

Google-калькулятор

Есть у Google отличный встроенный калькулятор. Я удивился, что он знает про 38 попугаев, 5 мартышек и 2 слонёнка. Но я не пойму, почему слонёнок в кубе чуть больше 15-ти кубометров! Почему не слон или слоник? Почему именно слонёнок?
Кажется я понял! Они одну мартышку приравняли к метру. Забавная арифметика: а вы знаете, сколько литров в одном кубическом удаве?

Советская музыка

Советская музыка звучит очень патриотически. Тексты доступны. И ещё её можно скачать!
Я тут Прощание Славянки послушал...

Мир тесен

Ещё одна социальная сеть: Мир тесен:

Из плюсов - привязка по местности с использованием Google Maps и регистрация с использованием Open ID. А по сути - то же самое, что и другие социальные сети: В контакте, Однокласники, Orkut и Linked In.
Такое чувство, что Большой Брат всё ближе и ближе...

Portal

Очень интересная часть оранжевой коробки. Для прохождения уровня надо с помощью портальной пушки ставить связанные между собой порталы (синий и оранжевый):

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

Располагать порталы можно где угодно, хоть на потолке, но нельзя на стёклах и керамической плитке:

А давайте прыгнем в эту бездонную яму:

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

четверг, 31 января 2008 г.

Уезжаю на неделю

Сегодня еду в Таллинн. На машине. Впятером. Выходные буде гидом для коллег. Потом они поедут на работу, а я - в Москву. Заберу Юлю с Мишкой и поедем в Чебоксары к моим родителям. Вернёмся числа 10-го

О'Кей - не О'Кей

Покупал продукты и решил расплатиться карточкой. А сегодня день нелётный и мне было отказано. Чек об отказе они себе приберегли. Хорошо, что хоть ксерокопию дали. Будет чем в банке махать, если всё-таки произойдёт заморочка с деньгами...
А может и Сбербанк виноват. Вроде он обслуживает О'Кей. Чем ему карта Райффейзена не понравилась?

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

HL2: Episode Two

Хорошая игра, только короткая. Комбайн воюет всё лучше и лучше, особенно используя охотников. Деталей всё больше и больше, как будто фильм смотришь. Единственная проблема - суть непонятна. Я, конечно, понимаю, когда мне говорят сделать то или это, но когда они трепаться начинают - непонятно. Игру-то локализовали, ну почему перевода нет?
Вот ещё прикол нашёл. В какой-то лаборатории принтер печатал, а бумага сразу в шредер уходила. Вечный двигатель:

понедельник, 28 января 2008 г.

Лена всех достала

Сегодня мне с номера +7(909)588-40-03 пришла СМС: "привет положи 500р на 89095884003 Лена". Погуглив по телефонному номеру, я нашел статью "Не отдавайте деньги "Лене"". А ведь им ещё как-то обналичить надо, если кто-то клюнет...

Java Puzzle 70: Package Deal

Тут распространяться особенно не стоит. Авторы создали два класса в разных пакетах (один является подклассом другого). В суперклассе есть метод без модификаторов видимости, т.е. package-private. Они его перекрывают в подклассе и спрашивают, что будет.

Метод пакетной видимости не может быть переопределен методом в другом пакете (JLS 8.4.8.1). Если бы классы были в одном пакете - другое дело...

Java Puzzle 69: Fade to Black

Допустим, что у вас нет возможности менять классы X и C из предыдущей головоломки. Можете ли вы, не используя reflection, получить значение поля Z в классе X.Y?

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

public class FadeToBlack1 {
    public static void main(String args []) {
        System.out.println(((X.Y) null).Z)
    }
}
public class FadeToBlack2 {
    static class XY extends X.Y {
    }
    public static void main(String args []) {
        System.out.println(XY.Z)
    }
}
public class FadeToBlack3 { // for Java 5 and later
    public static <T extends X.Y> void main(String args []) {
        System.out.println(T.Z)
    }
}

Эпидемия


Отличная метал-опера с продолжением от группы Эпидемия: Эльфийская рукопись (2004) и Сказание на все времена (2007). Первый диск мне больше нравится, так как ребята в него вложили душу. Не смотря на все огрехи многие песни действительно цепляют. Зато второй диск сделан на более высоком уровне. Очень чисто сведен звук. А еще мой проигрыватель от Sony распознаёт на нём названия песен. Последовательный сюжет, ровная динамика повествования, красивая лирика, отличные аранжировки и качество записи материала бесспорны. Рекомендую!

Жаль меня не будет в городе 9-го февраля. В Петербургском СКК пройдёт большое постановочное шоу, где будут исполнены оба альбома. Обещают, что все зрители попадут в настоящую сказку еще задолго до начала самого концерта. На улице их будет ждать сюрприз от Spirit Of Fire, а в фойе СКК - настоящие рыцари, принцессы и эльфы, сошедшие прямо со страниц романов современного фэнтези. Цена билетов от 500 до 1500 р.

суббота, 26 января 2008 г.

Постер из 2008 фотографий

Перед Новым Годом у Sun Microsystems SPb поменялся директор. На прощание Ане подарили большой плакат A3 с её изображением, сделанным из фотографий сотрудников:

Для создания такого постера использовалось свободное ПО. То, что получилось, это максимум, на что способна AndreaMozaic. Интерфейс у неё очень неказистый, но то что надо она делает. Народ прислал кучу фотографий, для кадрирования которых использовался ImageCropper. В получившейся мозаике более 4000 кусочков, составленных из 2008 (с новым годом) различных фотографий.
Постер печатался в Ярком Мире на Некрасова, 1.

The Orange Box

Купил лицензионный комплект от Valve. В него входит Half-Life 2, Half-Life 2: Episode One, Half-Life 2: Episode Two, Team Fortress 2 и невероятный Portal. В связи с этим, так как у меня уже есть HL2 и HL2EO, программа Steam, которая следит за лицензиями и обновлениями, предложила передать эти игры (вместе с лицензией) друзьям (они называют это словом gift).
Если кому надо - пишите. А ты прошёл Half-Life 2?

Knicker Picker

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

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

Форд Фокус Покус

Заказали мы Мишке шведскую стенку. Планировали на Рено Сценик довезти, но Юля с Мишкой уехали на месяц к маме/бабушке. А мне позвонили из фирмы и попросили забрать побыстрее, чтобы у них проход не занимала. Договорился с Петром - у него Форд Фокус.

Лестница, длиной 250 см, вошла впритирку. Но оказалось, что в его машине заднее сиденье состоит из двух частей: первая (пошире) за водителем слева, а вторая (поуже) справа. Если бы было, как у нас, 3 складывающихся спинки, или хотя бы 2, но справа была бы пошире, то я бы поместился. А так пришлось ехать по КАДу согнувшись в позе лотоса на сложенном заднем сиденье. Никакой безопасности. И ноги затекли. Как приехали, Петр меня сфотографировал вылезающего:

Java Puzzle 68: Shades of Gray

Рассмотрим следующую программу. В классе X две декларации с одинаковым именем. Что программа напечатает? Black или White? Это, вообще, допустимый код?
public class ShadesOfGray {
    public static void main(String[] args) {
        System.out.println(X.Y.Z);
    }
}
class X {
    static class Y {
        static String Z = "Black";
    }
    static C Y = new C();
}
class C {
    String Z = "White";
}
Вполне легальный код. Он даже в спецификации описан: когда переменная и тип с одинаковым именем находятся в одной области видимости, то имя переменной имеет предпочтение (JLS 6.5.2). Т.е. программа напечатает White. Аналогичным образом, имена переменных и типов могут перекрывать имена пакетов.
Хорошо, что программы, использующие соглашения по именованию, практически никогда не столкнутся с такой проблемой.

Java Puzzle 67: All Strung Out

Что не так в следующем классе?
public class StrungOut {
    public static void main(String[] args) {
        System.out.println(new String("Hello world!"));
    }
}
class String {
    private final java.lang.String s;
    public String(java.lang.String s) {
        this.s = s;
    }
    public java.lang.String toString() {
        return this.s;
    }
}
Всё компилируется, но вот запускаться не хочет. Говорит, что нет метода main. Вот оно! Они в параметрах метода main используют свой String, а не тот, который ожидает VM. Надо было написать так:
    public static void main(java.lang.String[] args)

Микробит

Зашёл сегодня в сервис-центр Микробит. Сказали, что надо притащить ноут, чтобы оценить повреждения. Мне Мишка кое-какие кнопки повынимал, так я их вставил все, кроме одной. Если окажется, что повреждено металлическое крепление к корпусу, то придется менять всю клавиатуру. Однако, в лучшем случае, ремонт обойдется в копейки.
Спросил про замену батарейки. Новая стоит 8000 р. Дешевле будет новый ноут купить, а этот оставить Мишке на растерзание...

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

S.T.A.L.K.E.R.

Прошел за неделю. Днем - работа, ночью - вылазки в зону. Сейчас пора отсыпаться...

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

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

пятница, 18 января 2008 г.

Test message

Пытаюсь послать сообщение по почте. Жаль, что непонятно как установить метку.

среда, 16 января 2008 г.

пятница, 11 января 2008 г.

Serenity


Заехал в Кайлас сегодня имея на руках список кучи новых альбомов разных групп. Но там ничего такого нет, все старое лежит. Вот и купил, что под руку подвернулось. А им оказался альбом группы Serenity: Words Untold & Dreams Unlived (2007): великолепный образец прогрессив-пауэра. Отличный вокал великолепно сочетается как с мелодичными гитарами, так и с приятной клавишной подложкой. В общем, рекомендую!

среда, 9 января 2008 г.

Manowar

Новогоднее поздравление от старого доброго Manowar.

Что-то "старички" активизировались. Альбом новый выпустили:

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

Кроме того, они организуют фестиваль Magic Circle, который будет проводиться ежегодно, и первой датой станет фестиваль 9-12 июля 2008 года. Планируют отыграть свои первые шесть альбомов, начиная с "Battle Hymns" и заканчивая "Kings of Metal".

Рождество

Всех православных - с праздником!
На Новый Год был под Москвой, у тещи. Там температура была до 26 мороза. Замерз как цуцик.
На Рождество приехал в Таллинн, к бабушке. Там - до 5 мороза, а как снег пошел, так около нуля стало. Совсем как в Питере...
Соответственно, сочинился стишок для Мишки:
    Одеваемся гулять.
    Собираемся копать.
    Вот - лопатка, грузовик...
    Но копать я не привык.
Ну не застал Мишка снег в Питере! Зато сейчас в подмосковье копается...

Ayreon

Вот новый клип группы Ayreon для нового альбома 01011001:

Клип доступен вполне легально на официальном сайте.
Очень нравится этот проект. Для каждого альбома Arjen Lucassen приглашает известных (и не очень) музыкантов. Мне больше всего нравится альбом Universal Migrator (2000). После 25 января посмотрим, что они сотворили на этот раз...

In Flames

26 января в клубе Порт: In Flames. Билеты по 1200р.
Осталось найти того, кто составит мне компанию...

Polar Peril

Красивая игрушка: медведь-попрыгун.

Новый Год

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

суббота, 29 декабря 2007 г.

Google Mail

Случайно обнаружил внизу страницы надпись:
You are currently using 197 MB (3%) of your 6111 MB.
А ведь год назад 2GB было! Растём...

пятница, 28 декабря 2007 г.

Масяня

Куваев выпустил очередную серию.
Ну почему он Бо не продолжает!!!

Чапаев

Помнится в дедстве играли...

среда, 26 декабря 2007 г.

Стихи

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

С Новым Годом!

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

Вроде и в ладоши хлопал, но всё это с таким серьёзным выражением лица. Ждал Деда Мороза, так как много о нём наслышан. Любит получать от него подарки ;)
У него Дед Мороз - любимая мягкая игрушка.

По пути заехали за семьёй моего начальника (на Маршала Казакова). Протестировали съезд с КАД на Таллинское шоссе. В общем, теперь знаем, что до Пашки ехать 30-40 минут. Есть два узких места: две полосы на КАД от Рыбацкого до Московского и очень узкое Таллинское шоссе. Оттуда поехали по Стачек и на Старо-Петергофском встряли. Добрались до офиса за 15 минут до начала. Обратно ехали тем же маршрутом, но без пробок. Въезд на КАД с Таллинского шоссе только со стороны области. Пришлось разворачиваться.

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

понедельник, 24 декабря 2007 г.

Manowar

17-го декабря на официальном сайте группы появилось сообщение: Фаны давно просили нас придумать какие-нибудь товары с нашей маркой. Мы услышали эти просьбы и сделали презервативы MANOWAR. Теперь вы можете не только сказать Fuck The World, но и сделать это!
Интересно, на что они намекают? На глобус???

среда, 19 декабря 2007 г.

У Рудольфа II

Вчера с бывшим коллегой по Борланду сидели в этом ресторане. Он приехал на некоторое время из штатов, где сейчас драйвера пишет для Nvidia.
Заведение резко подорожало, несмотря на то, что порции уменьшились. Мы выпили по литру пива, топинки и вяленую свинину на двоих и по порции основного блюда. А заплатили 2000 р.
Обслуживание всё такое же медленное. Крушовицы - нет! Пришлось пить Килкенни. Скрипач теперь скрипит не один, а с женой. Она - на синтезаторе. На выходе взял журнальчик Гамбринус, который рекламирует чешские пивницы в Питере, а там на развороте тетка в одних трусах. И подпись: мисс ноябрь, официантка ресторана У Рудольфа II. Там же приведен Топ-10 питерской осени по пиву, так на первых местах фигня типа Козела. И только на 10-м Кельт черное, которого нет! Крушовица совсем отсутствует в списке.
Короче, НЕДОВОЛЕН.

Java.net blog post

Таки написал очередную статью...
Пишите комментарии!

понедельник, 17 декабря 2007 г.

Luminara

Это простая игра-крошилово...

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

пятница, 14 декабря 2007 г.

С Новым Годом!

Сегодня вечером у нас корпоративная пьянка по поводу...
Если не протрезвею, то до встречи в новом году!

Стихи

Когда Мишку одеваем на улицу и надо завязать шапочку под подбородком, мы его обычно спрашиваем: что у нас на потолке? Мишка уже привык отвечать: мухи! Хотя мухи были только летом на даче...
Вот я на днях ему стишок сочинил:
    - Мухи, мухи, где вы там?
    - Мы сидели по домам!
    - Почему вы не летали?
    - Потому что нас не звали...
Юля говорит, что Агния Барто отдыхает... ;)

четверг, 13 декабря 2007 г.

Чайник "Витёк"

Купили себе в МедиаМаркт новый чайник Aquamarine. Уж больно дизайн понравился. И еще есть функция поддержки температуры, которая в принципе, нафиг не нужна...

Показывал Мишке как вода кипит. Заинтересовался.

Воспитание детей

Юля читает соответствующую книжку. Ну а там разные советы:
- Попросите ребенка достать головкой плеча...
- Пусть потрогает ушком стул...
Чувствую, что мысли у меня не в ту сторону думают ;)

среда, 12 декабря 2007 г.

Гироскоп в руке

У нас в Сане сейчас бум на кистевые тренажеры PowerBall. В нашей комнате валяется такая модель (со счетчиком). Я долго был рекордсменом (11604 об/мин), но Леонид побил мой рекорд буквально 5 минут назад (11880 об/мин). Надо дальше тренироваться...
Хороший подарок на Новый Год. Мне, например, такая модель нравится.

Одноклассники

Пили пиво со школьными друзьями: Сергей Шумский, Алексей Матц и Алексей Разницын. Не виделись лет 15!
Хорошо посидели. Выпили весь Guinness в кабаке Медведь. Много о чем поболтали. Собираемся собрать побольше народу на февральский слет выпускников, так как, говорят, что наша классный руководитель последний год работает. Надо бы успеть повидаться. Интересно, что некоторые не поменялись совсем, а других никак не узнать.

День выборов

Выборы! Выборы! Кандидаты - ...
Второго декабря я был в Таллинне. Известная проблема, что половина населения Эстонии - русские, половина из которых - граждане России. Голосовать я в Таллинне не мог, так как зарегистрирован в подмосковье. Но очереди видел.
Первая очередь от консульства России на улице Лай доходила до олененка, поворачивала в сторону улицы Пикк, по которой уходила в даль. Вторая - от гостиницы SAS, что за Домом Торговли, мимо здания парковки уходила в даль по улице Рявала. Концов этих очередей я не видел - было не по пути. Народ, в основном, пожилой. Молодых напрягает стоять в очередях по несколько часов.

Java Puzzle 66: A Private Matter

Что напечатает следующая программа?
class Base {
    public String name = "Base";
}
class Derived extends Base {
    private String name = "Derived";
}
public class PrivateMatter {
    public static void main(String[] args) {
        System.out.println(new Derived().name);
    }
}
Программа не скомпилируется. Дело в том, что поля класса не могут переопределять поля суперкласса как, например, методы. В данном случае класс Derived скрывает поле name класса Base (JLS 8.3). Это корректно, но нерекомендуется, так как противоречит принципу Лискова: если что-то можно делать с базовым классом, то то же самое должно быть возможно делать с его потомком. Чтобы решить проблему с доступом к полю name класса base надо переписать код так:
public class PrivateMatter {
    public static void main(String[] args) {
        System.out.println(((Base) new Derived()).name);
    }
}

Java Puzzle 65: A Strange Sage of a Suspicious Sort

Всю программу приводить не буду. Приведу пример неправильной реализации компаратора, из-за которого вся программа сортировки работает неправильно.
class IntegerComparator implements Comparator {
    public int compare(Integer i1, Integer i2) {
        return i2 - i1;
    }
}
Идиома, лежащая в основе этой имплементации, известна с ранних дней UNIX (1970). Поэтому многие уже не помнят, а остальные не знают, решение этой проблемы. Помните, что компьютерная математика отличается от обычной. И при вычитании большого положительного числа из большого отрицательного числа можно получить положительное, а не отрицательное. Это называется - переполнение разрядной сетки...
Вот правильная имплементация:
class IntegerComparator implements Comparator {
    public int compare(Integer i1, Integer i2) {
        if (i1 > i2) return -1;
        if (i1 < i2) return 1;
        return 0;
    }
}
После анализа кода становится ясно, что этот компаратор предназначен для сортировки в обратном порядке. Так что не надо городить своих классов. Используйте компаратор, входящий в состав библиотеки коллекций:
Collections.reverseOrder()

четверг, 29 ноября 2007 г.

Завтра в Таллинн

Раньше вторника обновлений не ждите!

Тяжело быть безработным

Вот такие новости: Вчера в Юго-западном округе столицы у 38-летней москвички, которая все еще не может найти работу, угнали автомобиль Porsche Cayenne. По словам женщины, в период со 2 по 8 ноября она отсутствовала дома и когда пришла в свой гараж на улице Дмитрия Ульянова, то обнаружила пропажу дорогостоящей иномарки, которая, кстати, была оснащена спутниковой сигнализацией.

суббота, 24 ноября 2007 г.

Tarja Turunen


Не дождавшись похода в магазин загрузил послушать свеженький альбом Тарьи My Winter Storm (2007). Да, блин, это вам не Nightwish. Голос у Тарьи, конечно, шикарный, но вот музыка на альбоме... Странная какая-то музыка. Медленная и печальная. А вот то как она перепела Poison Элиса Купера мне совсем не понравилось.
Короче, музыка под настроение. Слушать долгими зимними вечерами, в одиночестве уставившись в потолок...

Тест: москвич или петербуржец?

Судя по этому тесту мы с Юлей из Питера. Ну я то - понятно, а она от меня, видимо, словечек нахваталась ;)
Может, вы и живете в другом городе, но у вас язык истинного петербуржца
И пусть они там смеются над "курой-гриль" и хрестоматийным "поребриком" — вы выше этого. Вы навсегда — житель культурной столицы, даже если сейчас вы далеко от дома.
Пройти тест

пятница, 23 ноября 2007 г.

Java Puzzle 64: The Mod Squad

Следующая программа генерирует гистограмму чисел по модулю 3. Что она напечатает?
int[] histogram = new int[3];
int value = Integer.MIN_VALUE;
do {
    int index = Math.abs(value) % 3;
    histogram[index]++;
} while (value++ != Integer.MAX_VALUE);
for (int i = 0; i < 3; i++) {
    System.out.println(histogram[i]);
}

Считай - не считай... Но эта программа сгенерирует исключение ArrayIndexOutOfBoundsException: -2
Проблема в том, что метод Math.abs возвращает неотрицательное число всегда, кроме одного случая когда аргумент равен Integer.MIN_VALUE. В этом случае результат тоже равен Integer.MIN_VALUE. А при получении остатка от деления отрицательного числа получается отрицательный остаток. А ведь мы используем его в качестве индекса массива...

Java Puzzle 63: More of the Same

В этой задаче приводится программа, аналогичная предыдущей, но вместо IdentityHashMap используется HashMap:
public class MoreNames {
    private Map map = new HashMap();
    public void MoreNames() {
        this.map.put("Mickey","Mouse");
        this.map.put("Mickey","Mantle");
    }
    public int size() {
        this.map.size();
    }
    public static void main(String[] args) {
        MoreNames map = new MoreNames();
        System.out.println(map.size());
    }
}

Ну почему он возвращает 0? А потому, что первый метод не является конструктором. Случайно добавив возвращаемый тип к декларации конструктора можно долго искать эту ошибку. Аккуратнее! ;)

Traveler IQ Challenge

Забавный тест на знание географии:

Я дошел до седьмого уровня:

четверг, 22 ноября 2007 г.

Квартира

Через год после ремонта наша квартира выглядит вполне обжитой.

Java.net blog post

Таки написал очередную статью...
Пишите комментарии!

Клуб 2м

В одном из магазинчиков нам выдали рекламку "Клуб 2м". Добрались мы до торгового центра Neo на Ладожской. Гуляем, ищем его...
Тут видим - висят джинсы длиной с меня. Вот оно! Этот магазин, в отличии от Богатыря, Больших размеров и т.п., создан не для жырных, а для высоких. Купил куртку с нормальными рукавами! Также купил футболку с длинными рукавами:

Кроме того, в честь открытия подарили еще одну футболку.

среда, 21 ноября 2007 г.

88 минут

Купили недавно новый фильм с Аль Пачино: 88 минут (2007). Очень понравилось! Сюжет закручен очень лихо и мне напомнил фильм Рекрут (2003). Детали раскрывать не буду, но настоятельно рекомендую посмотреть! Аль Пачино очень шикарный актер! Не подкачал...

Обратил внимание, что сейчас готовится видеоигра Схватка (2009) по мотивам фильма Схватка (1995).

Java Puzzle 62: The Name Game

Что напечатает следующая программа и почему?
Map map = new IdentityHashMap();
map.put("Mickey", "Mouse");
map.put("Mickey", "Mantle");
System.out.println(map.size());

Напечатает 1, но почему? IdentityHashMap в отличии от HashMap сравнивает объекты по равенству указателей, не вызывая метода equals, а по спецификации (JLS 15.28) два строковых литерала равны не только по значению, но и по ссылке (interned). Однако, следующая программа покажет возможную проблему:
StringBuilder sb = new StringBuilder("Mickey");
map.put(sb.toString(), "Mouse");
map.put(sb.toString(), "Mantle");
System.out.println(map.size());

Используйте IdentityHashMap очень осторожно, так как этот класс не является имплементацией общего назначения интерфейса Map.

Java Puzzle 61: The Dating Game

Следующая программа использует основные возможности классов Date и Calendar. Что она напечатает?

import java.util.*;

public class DatingGame {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        c.set(1999, 12, 31); // year, month, day
        System.out.println(c.get(Calendar.YEAR));

        Date d = c.getTime();
        System.out.println(d.getDay());
    }
}

Думаете, что программа напечатает 1999 и 31? А вот и нет! Она напечатает 2000 и 1. Думаете, что нашли проблему 2000 года (Y2K)? А вот и нет! Все гораздо хуже...

Первая ошибка в вызове "c.set(1999, 12, 31);". Классы Date и Calendar представляют года и дни начиная с 1, а вот месяцы - с нуля. Таким образом, тут устанавливается 31 день тринадцатого месяца. Но ведь в календаре всего 12 месяцев и должна быть ошибка типа IllegalArgumentException? Календарь просто пересчитывает дюжины и добавляет 1 за каждую к годам. Хреновая ошибка. Если 12 исправить на 11, то для программы все будет хорошо, но не для того, что читает и сопровождает код! Для человека 11-й месяц - это ноябрь.

Это объясняет почему мы получили 2000 вместо 1999, но почему 1 вместо 31? Читайте документацию: метод getDay возвращает не день месяца, а день недели (0-воскресенье, 1-понедельник и так далее). На что у нас выпадает 31 января 2000 года? На понедельник! Обратите внимание, что соответствующий метод Calendar.get(DAY_OF_WEEK) возвращает значения, начиная с 1, а не с 0.

Будьте очень осторожны, когда используете Date и Calendar. Всегда уточняйте поведение по спецификации!

Попов vs Маркони

Всем в России известно, что радио изобрел Попов. На западе считают, что радио изобрел Маркони. Старая разборка между коммунистами и капиталистами. Но вот появились новые "рассекреченные" данные. И не надоело им пинаться...

Е в рот сеть

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

Day off

Вчера брал отгул. В субботу отработаю...

В прошлый четверг Юле пришла повестка явится в суд... в среду! Специально они что-ли? Ну она позвонила и ей сказали приехать в ГИБДД на Цимбалина. Приемные часы: вт/чт с 15 до 18. Мы приехали туда и ей сказали, что суда еще не было и надо ехать к мировым судьям на бульваре Красных зорь. А там сказали, что суда еще не было и нам нужно придти в 10 утра в следующую среду.

Так мы и катались через улицу Народную, на которой доблестные парни в желтых накидках регулировали движение. Зеленый включали секунд на 30, а красный - минут на 10. Я, конечно, понимаю, что они разгружали Ивановскую/Народную/Славы, так как на КАДе (на вантовом мосту) пробка была из-за аварии. С каждым годом на дорогах все хуже и хуже...

И что самое обидное. У нас права отобрали на трассе Москва-Питер за превышение (на трассе!). А в самом Питере народ носится - и ничего. Мало того, еще и нам бибикает, что мы тащимся со скоростью 60 км/ч (нам GPS напоминает о превышении... зануда:). Например, Шлиссельбургский проспект вечером переходить просто опасно. Даже днем народ умудряется пролетать на красный свет.

понедельник, 19 ноября 2007 г.

Android SDK

Google представила документацию и набор для разработки программного обеспечения (SDK) к своему основанному на Linux стеку для мобильных телефонов Android, а также объявила о начале конкурса для программистов с призовым фондом 10 миллионов долларов. С помощью предложенного SDK разработчики могут создавать приложения для платформы Android на языке программирования Java и запускать их в среде виртуальной машины Dalvik, предназначенной для встраиваемого использования и работающей поверх ядра Linux.

Объявленный конкурс для разработчиков призван стимулировать Open Source-сообщество создавать программное обеспечение для Android. Задача для участников — создать свое любимое приложение для мобильных телефонов. Принимаются программы любого типа, однако приветствуется инновационность и, конечно, полезность разрабатываемых приложений. Среди областей, с которых можно начинать разработку приложений для конкурса Android, выделены такие, как социальные сети, работа с информацией различного типа (например, фотографиями), email/IM/календарь, игры, новости, переосмысление традиционных пользовательских интерфейсов.

Сдается мне, что скоро для мобильников от Google будет гораздо больше ПО, чем сейчас для Window Mobile...

суббота, 17 ноября 2007 г.

Crematory


Недавно купил диск Klagebilder (2006), что переводится как "Картины плача". В отличии от большинства дисков группы альбом на немецком языке. На мой взгляд, это - плюс. Альбом достаточно сильный, обладающий должной хитовостью. Проходных песен, похоже, нет совсем. Даже смена гроула Феликса и чистого вокала гитариста Маттиаса неплохо вписывается. Рекомендую!

пятница, 16 ноября 2007 г.

Java Puzzle 60: One-Liner

Этот вопрос проверяет знание API. Для каждой мини-задачки необходимо написать метод, содержащий только одну строку. Тестируется знание новый фич Java 1.4 и 5. Авторы утверждают, что знание библиотек может сэкономить много времени и увеличить скорость и качество программ. Насчет качества - несомненно, но вот насчет скорости...

A. Напишите метод, принимающий список элементов и возвращающий список элементов в том же порядке, но без дубликатов. Например, передаем список {"spam", "sausage", "spam", "spam", "bacon", "spam", "tomato" и "spam"}, а получаем список {"spam", "sausage", "bacon" и "tomato"}.

Тут необходимо вспомнить про полезный класс LinkedHashSet, базирующийся на классе LinkedHashMap, который сохраняет порядок добавления записей. Метод будет выглядеть следующим образом:
static <E> List<E> noDups(List<E> list) {
    return new ArrayList<E>(new LinkedHashSet<E>(list));
}

B. Напишите метод, принимающий строку, содержащую 0 или больше токенов, разделенных запятой, и возвращающий массив строк, содержащий токены в том порядке, как они встречаются во входной строке.

Если вы подумали про StringTokenizer, то вы очень давно программируете на Java, как и я. В версии 1.4 была добавлена поддержка регулярных выражений (java.util.regex). Давно пора их выучить, так как размер кода существенно сокращается:
static String[] parse(String string) {
    return string.split(",\\s*");
}

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

Тут авторы прикололись. Такой метод уже есть в JDK: Arrays.deepToString(Object[]). Кроме него есть еще пара полезных методов: Arrays.deepEquals(Object[],Object[]) и Arrays.deepHashCode(Object[]). И хотя в этом методе не одна строка, наш метод может просто вызывать библиотечный:
static String toString(Object[] array) {
    return Arrays.deepToString(array);
}

D. Напишите метод, принимающий два целых числа и возвращающий true, если у них установлено одинаковое количество бит.

Для целочисленных типов (Integer и Long) в Java 5 были добавлены методы работы с битами. Воспользуемся методом Integer.bitCount(int), который возвращает количество установленных бит в целом числе:
static boolean equals(int one, int two) {
    return Integer.bitCount(one) == Integer.bitCount(two);
}

Java Puzzle 59: What's the Difference?

В задачке используется массив предопределенных значений. Суть задачки не важна, так как сконцентрировавшись на ее решении можно упустить очевидное. Я натыкался на такие проблемы, когда начинал изучать Java. Вот массив значений каждое из которых меньше предыдущего на 111:
int[] values = {
        789, 678, 567, 456,
        345, 234, 123, 012 };
Или нет?

Согласно JLS 3.10.1 целочисленные литералы, начинающиеся с 0 интерпретируются как числа, записанные в восьмеричной системе счисления. Таким образом, последние значение равно 10. Авторы рекомендуют никогда не выравнивать целочисленные литералы с помощью 0. А так хочется иногда иметь красивую табличку в коде!

Тяжелое наследие Fortran и C...
Неужели сейчас кто-то использует восьмеричную систему?

Gmail поддеживает IMAP

Google добавил поддержку IMAP в почтовый сервер. Знаю многих любителей этого дела, но я сам сторонние почтовые клиенты теперь не люблю. Метки рулят!

среда, 14 ноября 2007 г.

Helloween


Перед поиском и покупкой нового альбома решил послушать предыдущий: Keeper of the Seven Keys: The Legacy (2005). Альбом двойной, но общей продолжительностью 76 минут. Половина песен только удалась и переплюнуть первых двух Хранителей им не удалось. Лучше бы склепали однодисковый вариант, выкинув отстойные композиции, которые очень мешают прослушиванию. Музыканты разошлись по разным группам, типа, Gamma Ray и Masterplan. Вроде бы и играют профессионально, но нет у них хороших композиторов и поэтов-песенников...

iGO

Пытаемся пользоваться GPS приемником с помощью iGO. Он все время пытался нас вытащить на Невский, даже когда тот на ремонте был.
Но вчера с утра он повез нас к моему офису (точнее, в центр вакцинации на Фонтанке) через Цимбалина. Доехав до перекрестка Седова-Цимбалина, мы обнаружили, что там все стоит и двигаться не собирается. Я стал командовать, как доехать дворами до Московского вокзала. Там по Невскому он нас довез до Аничкова моста. Там поворота налево нет и он нам порекомендовал ехать через Садовую. Но зная как там забито, мы развернулись на Фонтанке через мост у цирка и по прямой доехали нормально.
Выводы:
1. Короткий путь, обычно, не самый быстрый.
2. Надо найти программу, которая поддерживает информацию о пробках через GPRS.
Кажется, Серега Александров что-то подобное показывал, но она платная для PPC.

Пробки

Брал вчера day off. Надо было свозить Мишку на вакцинацию, записать в детский садик, поменять резину на зимнюю и за посылкой смотаться. Пробки везде!
Мы в обед час простояли пытаясь въехать с Октябрьской набережной на Володарский мост. После того, как свернули с набережной, я вышел, перешел мост, сходил в РОНО, написал анкету для детского садика и вернулся. А Юля только-только на мост въехала...
Потом ехали из дома на Хасанскую через КАД. Вроде все нормально, но встречка стоит. Несмотря на то, что въезды с Мурманского шоссе закрыты.
Вечером час простояли на съезде с моста Александра Невского на набережную, чтобы домой ехать. Тоже мясо.

Quazatron

Я уже писал про Head Over Heels, но вот, пока собирался билд, попробовал Quazatron.
Слишком быстро для меня. Постарел я, постарел...

Эрудит ПК и КПК

Как я уже писал, есть такая игра как Эрудит. Так вот, недавно обнаружил, что версия для ПК обновилась. Кроме того, появилась версия для КПК. Хочу попробовать...
А еще в клубе Scarlett есть еще игры.

понедельник, 12 ноября 2007 г.

Java Puzzle 58: Making a Hash of It

В этой задаче (продолжение предыдущей) авторы добавили метод hashCode(), однако поменяли тип параметра метода equals() с Object на имя класса, используемого в качестве элемента множества HashSet. Естественно, что никакого переопределения не происходит, а происходит перегрузка методов.

В языке Java перегрузка разрешена, но приводит к ошибкам и неразберихе. Читаем секцию 26 все той же необходимой к прочтению книги Effective Java. Начиная с версии Java 5 появилась аннотация @Override, которую авторы рекомендуют использовать. Я, например, включил в IDEA опцию, которая автоматически добавляет эту аннотацию при переопределении метода. Если в супер классе метод поменяет сигнатуру (всякое бывает), то не возникнет скрытого бага - проект просто не скомпилируется и вы найдете проблему за 5 секунд.

Java Puzzle 57: What's in a Name?

Задачка довольна простая. Некий объект используется как элемент множества HashSet. Метод equals() переопределен, а про метод hashCode() забыли.

В общем, автор напоминает 8 секцию его предыдущей книги Effective Java. Я уверен, что эта книга должна быть прочитана каждым Java-программистом, поэтому останавливаться здесь не будем. Скажем просто: переопределяйте метод hashCode() всегда, когда переопределяете метод equals().

Solid State Disk

Такое чувство, что в моем ноуте начинает сыпаться винт. Очень неприятно. Поэтому стал смотреть, на что бы такое его можно заменить...
Оказывается, уже вышел Solid State Disk от Samsung. Правда - дорого пока. Зато, блин, не посыпется, если в дороге стукнешь. А Toshiba начала выпускать ноуты с такими дисками. Но из-за SSD диска цена тоже зашкаливает все разумные пределы.