Как вы думаете, чем может заняться человек, приехавший в 5 утра из Москвы? До открытия метро - 40 минут. Японские кроссворды кончились, новых ещё не продают. Батарейка на телефоне почти села, так что не поиграться...
Физкультпоход!
Сначала по Лиговскому проспекту до метро, там по улице Константина Заслонова выходим на набережную Обводного канала, по которой пилим до Лермонтовского проспекта. По нему уже доходим до офиса. Итого 5 километров, пройденные ровно за 1 час.
Романтика!
Вспомнилось время, когда я пешком ходил из общаги на Московский вокзал поезд встречать. И как мы со Стасом возвращались из кафе Визит, что в районе Чернышевской, на проспект Большевиков. Забавно...
понедельник, 21 апреля 2008 г.
Логично
Пока шли в гараж, я увидел Форд Фокус и говорю: Форд Фикус. Мишке понравилось и он стал трындеть: Фикус, Фикус...
Ну я ему объясняю, что я пошутил, что машина - это Фокус, а Фикус - это такое растение. На что Мишка вполне логично заметил машина - растение. И засмеялся...
Ну я ему объясняю, что я пошутил, что машина - это Фокус, а Фикус - это такое растение. На что Мишка вполне логично заметил машина - растение. И засмеялся...
Питер - Москва
Выехали в пятницу в 18:00, хотя планировали в пять. Подъезжаем к КАДу и видим, что вантовый мост стоит. Решили объехать под КАДом, выехать на Дунайский, а затем на Витебский. Пока ехали удивлялись: почему это на КАДе машин так мало и все едут. Потом только по РОКСу сказали, что авария на съезде с Вантового и, соответственно, там пробка. Так что могли мы и не объезжать, только время потеряли.
Съезд с Дунайского прост: направо и под мост развернуться. А в iGO, видимо, опечатка. Он честно сказал принять правый ряд, но, почему-то, кричал резко свернуть налево. Послушай дурака...
Там, где Московское шоссе сужается, началась пробка. Долго ехали до Пушкина. Дальше свободно. Мы привязались за джипом Volvo и ехали как он достаточно долго, пока он не свернул. Видимо испугался. Причём он ехал честно: тормозил в населённых пунктах, разгонялся вне их. Правда один раз он пытался от нас уйти, но мы на 175 его догнали. Ну а связку двух машин обогнать по правой полосе довольно сложно, пытался там один фольксваген, но потом отстал...
Часа через 3 уже были в Новгороде. Ещё светло было. Переезжали малый Волховец, так он ни разу не "малый". Такое море! Правда мелкое, скорее всего. Видели там лебедей много. Выехали из Новгорода на трассу - там ремонт ещё не закончен. Как раз на узкое место попадаешь. Надо было ехать через Пролетарий.
282-ой километр от дома. Там находится самая южная Neste. Всегда там заправляемся, так как скидка есть, во-первых. А во-вторых, там просто душевное место и кофе варят неплохой. Пока мы там отдыхали, продавщица выдала Мишке фломастеры и он там рисовал.
Ещё через 220 километров (уже в Тверской области) дорога - просто мясо. Там мы пробили колесо. Не было знака никакого, что ведутся работы, а асфальт срезан. Кусками срезан. Суки! 10 метров срезан на глубину сантиметров в 5, дальше полоса в метр. Ещё срезан, и опять полоса. И таких ям штук 10! Ну почему бы не срезать всё сразу? Прошлый раз (на Матизе ещё) мы там в резонанс попали. Раскачало не по-детски. А в этот раз влетели в яму и переднее колесо пробили. Меняли в темноте. По-хорошему надо было вызывать ГИБДД, оформлять ДТП и вину на дорожников. Тогда бы по страховке починились. Но кому охота несколько часов тусоваться в ночи в какой-то глуши, а потом общаться с гайцами и терять пол дня на это? И так 13 часов ехали...
Поэтому приехали в 7 утра. Всего проехали 750 км со средней скоростью 60 км/ч. Потратили 60 литров, т.е. 8 литров на 100 километров.
Съезд с Дунайского прост: направо и под мост развернуться. А в iGO, видимо, опечатка. Он честно сказал принять правый ряд, но, почему-то, кричал резко свернуть налево. Послушай дурака...
Там, где Московское шоссе сужается, началась пробка. Долго ехали до Пушкина. Дальше свободно. Мы привязались за джипом Volvo и ехали как он достаточно долго, пока он не свернул. Видимо испугался. Причём он ехал честно: тормозил в населённых пунктах, разгонялся вне их. Правда один раз он пытался от нас уйти, но мы на 175 его догнали. Ну а связку двух машин обогнать по правой полосе довольно сложно, пытался там один фольксваген, но потом отстал...
Часа через 3 уже были в Новгороде. Ещё светло было. Переезжали малый Волховец, так он ни разу не "малый". Такое море! Правда мелкое, скорее всего. Видели там лебедей много. Выехали из Новгорода на трассу - там ремонт ещё не закончен. Как раз на узкое место попадаешь. Надо было ехать через Пролетарий.
282-ой километр от дома. Там находится самая южная Neste. Всегда там заправляемся, так как скидка есть, во-первых. А во-вторых, там просто душевное место и кофе варят неплохой. Пока мы там отдыхали, продавщица выдала Мишке фломастеры и он там рисовал.
Ещё через 220 километров (уже в Тверской области) дорога - просто мясо. Там мы пробили колесо. Не было знака никакого, что ведутся работы, а асфальт срезан. Кусками срезан. Суки! 10 метров срезан на глубину сантиметров в 5, дальше полоса в метр. Ещё срезан, и опять полоса. И таких ям штук 10! Ну почему бы не срезать всё сразу? Прошлый раз (на Матизе ещё) мы там в резонанс попали. Раскачало не по-детски. А в этот раз влетели в яму и переднее колесо пробили. Меняли в темноте. По-хорошему надо было вызывать ГИБДД, оформлять ДТП и вину на дорожников. Тогда бы по страховке починились. Но кому охота несколько часов тусоваться в ночи в какой-то глуши, а потом общаться с гайцами и терять пол дня на это? И так 13 часов ехали...
Поэтому приехали в 7 утра. Всего проехали 750 км со средней скоростью 60 км/ч. Потратили 60 литров, т.е. 8 литров на 100 километров.
четверг, 17 апреля 2008 г.
ZFS is Smashing Baby
вторник, 15 апреля 2008 г.
Magic Pen
Отличная головоломка:

Написана, естественно, на Flash. Но именно такие демки надо сейчас писать на JavaFX. Они тогда просто взорвут JavaOne!
Написана, естественно, на Flash. Но именно такие демки надо сейчас писать на JavaFX. Они тогда просто взорвут JavaOne!
суббота, 12 апреля 2008 г.
четверг, 10 апреля 2008 г.
App Engine
Некоторое время назад Google представил свою разработку GWT, предназначенную для быстрой разработки web-приложений с использованием новомодной технологии AJAX.
Теперь они пошли ещё дальше. Они разрабатывают App Engine, который предоставляет API для инфраструктуры Google. А это распределённый хостинг на серверах Google, включающий доступ к базам данных. Теперь не надо думать о том, какой сервер купить, к какому провайдеру его поставить, как обеспечить надёжность сервера и её непрерывную работу, если что-то сломается...
Для меня тут один минус - движок на языке Python. Но кое-кто из вас, читающих мой блог, использует этот язык. Хороший шанс попробовать - попади в десятку (тысяч ;) зарегестрировавшихся первыми!
Теперь они пошли ещё дальше. Они разрабатывают App Engine, который предоставляет API для инфраструктуры Google. А это распределённый хостинг на серверах Google, включающий доступ к базам данных. Теперь не надо думать о том, какой сервер купить, к какому провайдеру его поставить, как обеспечить надёжность сервера и её непрерывную работу, если что-то сломается...
Для меня тут один минус - движок на языке Python. Но кое-кто из вас, читающих мой блог, использует этот язык. Хороший шанс попробовать - попади в десятку (тысяч ;) зарегестрировавшихся первыми!
Java Puzzle 82: Beer Blast
Переходим от нитей (Thread) к процессам (Process). Что напечатает следующая программа? А что она напечатает, если при запуске указать параметр командной строки
Авторы говорят, что в первом случае программа зависает. Однако у меня она выводит:
Авторы говорят, что класс Process - это пример плохого API. С хорошим API должно быть простым делать всё правильно и должно быть сложным или невозможным делать неправильно.
slave?public class BeerBlast {
private static final String COMMAND = "java BeerBlast slave";
public static void main(String[] args) throws Exception {
if ((args.length == 1) && (args[0].equals("slave"))) {
for (int i = 99; i > 0; i--) {
System.out.println(i + " bottles of beer on the wall");
System.out.println(i + " bottles of beer");
System.out.println("You take one down, pass it around,");
System.out.println((i - 1) + " bottles of beer on the wall");
System.out.println();
}
}
else {
Process process = Runtime.getRuntime().exec(COMMAND);
int value = process.waitFor();
System.out.println("exit value = " + value);
}
}
}Авторы говорят, что в первом случае программа зависает. Однако у меня она выводит:
exit value = 1, хотя по идее должно быть 0. Видимо, компиляторщики что-то пофиксили. Но проблема всё равно остаётся. Чтобы добиться значения 0, надо очистить поток вывода процесса, который можно получить с помощью метода process.getInputStream(). В JDK 5 для этого добавили класс ProcessBuilder. Рекомендуется использовать его, вместо показанного в программе подхода.Авторы говорят, что класс Process - это пример плохого API. С хорошим API должно быть простым делать всё правильно и должно быть сложным или невозможным делать неправильно.
вторник, 8 апреля 2008 г.
Java Puzzle 81: Charred Beyond Recognition
Следующая программа делает обычные вещи необычным способом. А вы догадаетесь, что она напечатает?
А вот ничего и не напечатает! Всё дело в том, что
Авторы рекомендуют всегда использовать привычные шаблоны где только возможно.
public class Greeter {
public static void main(String[] args) {
String greeting = "Hello world";
for (int i = 0; i < greeting.length(); i++) {
System.out.write(greeting.charAt(i));
}
}
}А вот ничего и не напечатает! Всё дело в том, что
System.out - это буферизованный поток вывода. Многие думают, что этот поток автоматически очищает буфер и выводит данные на консоль. Несмотря на комментарии в классе PrintStream об автоматическом очищении буфера, на практике можно обнаружить, что в этом классе есть единственный метод, который не очищает буфер. Это метод write(int).Авторы рекомендуют всегда использовать привычные шаблоны где только возможно.
понедельник, 7 апреля 2008 г.
Двое других

Вчера ходили на комедию "Двое других". Денди, ловелас и остроумец Подходцев (Андрей Ургант) знакомится на улице с приезжим Громовым (Максим Леонидов), которого чуть не задавил извозчик Подходцева. Чуть позже в квартире Подходцева спасается от ревнивого мужа любовник замужней дамы Клинков (Алексей Кортнев). Эти приключения становятся началом большой дружбы. Они сталкиваются с различными персонажами, попадают в смешные ситуации, влюбляются, ссорятся, куролесят. Постоянно друг друга подкалывают, как мы в общаге ;)
Ургант, отец чудика рекламирующего Актимэль, играет достойно. Его герой лишний раз не суетится и умеет "держать удар". Леонидов как-то не зажёг. Кортнев играет этакого клоуна, появившись на сцене в семейных трусах. Весь спектакль он трындит, и трындит, и трындит...
Очень понравилось как играет Александр Шаврин. За ним все мужские роли второго плана. Перевоплощается очень убедительно. Зачёт!
Сходить рекомендую - отдохнёте на славу. Хотя пара неприятных моментов есть. Во-первых, спектакль идёт 3 часа 20 минут. Неожиданно долго. Во-вторых, шуток запоминающихся нет. Хорошо, что буклет купили:
В беллетристике застой:
Странный Мережковский,
Глупый Горький, злой Толстой,
Лысый Маяковский.
А Есенин, просто - хам!
Выкинь к чёрту этот хлам!
А ещё мы в первый раз за два с лишним года выходили в свет одни, без Мишки. Огромное спасибо Тане, что согласилась посидеть с ним полдня. Стрёмно, конечно, было. Переживали. Но всё получилось хорошо. Мишка особенно и не переживал по этому поводу...
Sun Tech Days
Jim Highes разбивает 2 жестких диска 8 дисковой системы, после чего она восстанавливает данные на дисках и продолжает работать.
Оказывается, кое-где было забавно...
Оказывается, кое-где было забавно...
Lake Of Tears
пятница, 4 апреля 2008 г.
Азбука - А
Решил тут посочинять стишки для азбуки:
Вот аист, что живёт на крыше.
Но альбатрос летает выше.
Живёт акула под водой...
Ты на её пути не стой!
Ну и про Смешариков можно:
Лосяш - известный астроном.
Он знает всё на свете!
Копатыч - знатный агроном,
Копает на рассвете.
Вот аист, что живёт на крыше.
Но альбатрос летает выше.
Живёт акула под водой...
Ты на её пути не стой!
Ну и про Смешариков можно:
Лосяш - известный астроном.
Он знает всё на свете!
Копатыч - знатный агроном,
Копает на рассвете.
четверг, 3 апреля 2008 г.
Java compiler лажает
Запустите следующую программу:
Скомпилировали? Словили NullPointerException?
С какого рожна компилятор решил, что null может быть приведён к типу Boolean? Чтобы запустить auto-unboxing? Это всё зло!
public class BooleanTest {
public static void main(String[] arg) {
System.out.println(1 == 2 ? false : null);
}
}Скомпилировали? Словили NullPointerException?
С какого рожна компилятор решил, что null может быть приведён к типу Boolean? Чтобы запустить auto-unboxing? Это всё зло!
вторник, 1 апреля 2008 г.
Те Ещё Дни
Завтра начинаются SunTechDays в Питере. Я там вечером буду, с пяти и до упора. В четверг и тяпницу - не поеду. Лениво. Надо ведь ещё и в пятничный преф поиграть ;)
Регистрация закрыта, так как мест больше нет. Но в связи с бешеным спросом наши организаторы попытаются выделить ещё несколько мест для тех, кто не успел зарегистрироваться. Я за Рустика замолвил словечко, может и ему входной билет достанется. А вечером я планирую попить пивка У Рудольфа вместе с моим коллегой из Москвы. Вместе работали в Люксофте.
Я, как и прошлый раз, буду стоять на будке JavaSE. Постараюсь выложить демки на JavaFX, надо которыми сейчас работаю. Хотя на сегодняшний момент это ещё очень глючная вещь. Я в пятницу оставил демку с летающими буквами, а в понедельник обнаружил, что программа упала, а система показала сообщение о том, что память кончилась и ей поплохело. Пришлось завести баг...
Регистрация закрыта, так как мест больше нет. Но в связи с бешеным спросом наши организаторы попытаются выделить ещё несколько мест для тех, кто не успел зарегистрироваться. Я за Рустика замолвил словечко, может и ему входной билет достанется. А вечером я планирую попить пивка У Рудольфа вместе с моим коллегой из Москвы. Вместе работали в Люксофте.
Я, как и прошлый раз, буду стоять на будке JavaSE. Постараюсь выложить демки на JavaFX, надо которыми сейчас работаю. Хотя на сегодняшний момент это ещё очень глючная вещь. Я в пятницу оставил демку с летающими буквами, а в понедельник обнаружил, что программа упала, а система показала сообщение о том, что память кончилась и ей поплохело. Пришлось завести баг...
понедельник, 31 марта 2008 г.
Соседи
У нас на этаже - 5 квартир. Мы с краю, а бижайшие к нам соседи - странные люди. С некоторого момента тётка с нами вообще не разговаривает. Почему - не знаю. Невоспитанная, видимо. Вот сегодняшний пример...
Выходим с утра с Мишкой, а Юля пока одевается в квартире. Ну Мишка уже к лифту подходит, а я пока дверь закрываю. Тут соседке приспичило и она решила выйти, а так как дверь её квартиры открывается наружу, то она её попала по мне. Я с ней, как это полагается, поздоровался, а она даже не извинилась. Я пошёл к Мишке. Стоим у лифта, ждём Юлю. Выходит эта тётка в халате и общую железную дверь на распашку оставляет. К соседям, видимо, собралась. Мишка (сам, причём) решает, что дверь надо закрыть, и захлопывает её. Тётка тут напряглась, видимо, и позвонила к себе в квартиру (в звонок). Вглядывает её сын и она кричит ему, чтобы он открыл дверь. Ну он дёрнул было замок, а дверь-то открыта. Ну он её приоткрыл и в непонятках ушёл в квартиру. А тётка поехала на лифте к соседям.
Я не знаю, что она хотела этим сказать мне, но если бы она не вернулась раньше, чем Юля вышла, то я бы всё равно закрыл дверь на ключ. И ей пришлось бы опять звонить сыну, вытаскивать его в общий тамбур, чтобы дверь открыть. Не в моих правилах дверь нараспашку открытой держать.
Остальные соседи более-менее нормальные люди. Даже сын этой тётки. По крайней мере он здоровается при встрече. А она от нас вызывающе так нос воротит. Почему - не знаю. И такие соседские отношения немного напрягают Юлю. Мне то что! Я пуленепробиваемый. Я на эту тётку давно положил 8===Э
Выходим с утра с Мишкой, а Юля пока одевается в квартире. Ну Мишка уже к лифту подходит, а я пока дверь закрываю. Тут соседке приспичило и она решила выйти, а так как дверь её квартиры открывается наружу, то она её попала по мне. Я с ней, как это полагается, поздоровался, а она даже не извинилась. Я пошёл к Мишке. Стоим у лифта, ждём Юлю. Выходит эта тётка в халате и общую железную дверь на распашку оставляет. К соседям, видимо, собралась. Мишка (сам, причём) решает, что дверь надо закрыть, и захлопывает её. Тётка тут напряглась, видимо, и позвонила к себе в квартиру (в звонок). Вглядывает её сын и она кричит ему, чтобы он открыл дверь. Ну он дёрнул было замок, а дверь-то открыта. Ну он её приоткрыл и в непонятках ушёл в квартиру. А тётка поехала на лифте к соседям.
Я не знаю, что она хотела этим сказать мне, но если бы она не вернулась раньше, чем Юля вышла, то я бы всё равно закрыл дверь на ключ. И ей пришлось бы опять звонить сыну, вытаскивать его в общий тамбур, чтобы дверь открыть. Не в моих правилах дверь нараспашку открытой держать.
Остальные соседи более-менее нормальные люди. Даже сын этой тётки. По крайней мере он здоровается при встрече. А она от нас вызывающе так нос воротит. Почему - не знаю. И такие соседские отношения немного напрягают Юлю. Мне то что! Я пуленепробиваемый. Я на эту тётку давно положил 8===Э
пятница, 28 марта 2008 г.
Java Puzzle 80: Further Reflection
Что напечатает следующая программа, которая создаёт новый экземпляр объекта используя reflection?
Программа напечатает Exception stack trace. А всё потому, что для вложенных (не статических!) классов не действует правило создания конструктора без параметров. В этом случае автоматически добавляется параметр, имеющий тип внешнего класса. Перепишем метод правильным образом:
Обратите внимание, что в этом случае можно создать вложенный класс, для которого не установлен экземпляр внешнего класса. Надо только передать
Тут автор ссылается на раздел 18 своей предыдущей книги Эффективное программирование: старайтесь использовать статические члены класса, когда это возможно.
public class Outer {
public static void main(String[] args) throws Exception {
new Outer().greetWorld();
}
private void greetWorld() throws Exception {
System.out.println(Inner.class.newInstance());
}
public class Inner {
public String toString() {
return "Hello world";
}
}
}Программа напечатает Exception stack trace. А всё потому, что для вложенных (не статических!) классов не действует правило создания конструктора без параметров. В этом случае автоматически добавляется параметр, имеющий тип внешнего класса. Перепишем метод правильным образом:
private void greetWorld() throws Exception {
Constructor c = Inner.class.getConstructor(Outer.class);
System.out.println(c.newInstance(this));
}Обратите внимание, что в этом случае можно создать вложенный класс, для которого не установлен экземпляр внешнего класса. Надо только передать
null вместо this. Автор рекомендует вообще не использовать reflection для создания экземпляров вложенных классов. Я бы сказал по другому: не используйте то, в чём не разбираетесь.Тут автор ссылается на раздел 18 своей предыдущей книги Эффективное программирование: старайтесь использовать статические члены класса, когда это возможно.
Java Puzzle 79: It's a Dog's Life
Следующий класс моделирует жизнь домашнего животного. В самом задании забавная игра слов: обычно собаки бегают на заднем дворе (run in the backyard), а наша будет выполняться в фоновом режиме (run in the background). Что программа напечатает?
Компилятор найдёт метод с именем
public class Pet {
public final String name;
public final String food;
public final String sound;
public Pet(String name, String food, String sound) {
this.name = name;
this.food = food;
this.sound = sound;
}
public void eat() {
System.out.println(name + ": Mmmmm, " + food);
}
public void play() {
System.out.println(name + ": " + sound + " " + sound);
}
public void sleep() {
System.out.println(name + ": Zzzzzzz...");
}
public void live() {
new Thread() {
public void run() {
while (true) {
eat();
play();
sleep();
}
}
}.start();
}
public static void main(String[] args) {
new Pet("Fido", "beef", "Woof").live();
}
}Компилятор найдёт метод с именем
sleep в классе Thread и перестанет искать дальше. А так как метод sleep должен принимать параметры, то компилятор тут и ругнётся. Эта проблема называется затенением (shadowing) и описана в спецификции (JLS 6.3.1). Почему так было сделано - история умалчивает. Чтобы программа скомпилировалась можно самому разрезолвить этот метод: Pet.this.sleep(). Но в данном случае лучший совет - не переопределяйте класс Thread, а реализуйте интерфейс Runnable и используйте его для создания нити: public void live() {
new Thread(new Runnable() {
public void run() {
while (true) {
eat();
play();
sleep();
}
}
}).start();
}
Великий Пост
Несколько дней назад покупали в Карусели кисель для Мишки. А на нём наклейка, что продукт рекомендуется в великий пост. Я ещё пошутил, что написали бы, что освящено...
И что бы вы думали! Сегодня Юля в магазине купила упаковку морской капусты, на которой круглая наклейка с надписью: Освящено священником Александром из церкви Св. Вмч. Георгия Победоносца в Купчино. Во дают!
И что бы вы думали! Сегодня Юля в магазине купила упаковку морской капусты, на которой круглая наклейка с надписью: Освящено священником Александром из церкви Св. Вмч. Георгия Победоносца в Купчино. Во дают!
четверг, 27 марта 2008 г.
Michael Pinnella

Вот и ещё один альбом был куплен только потому, что в Кайласе НЕТ свежих дисков: Enter By The Twelfth Gate (2004). Это инструментальный альбом клавишника группы Symphony X. В нём отсутствуют какие бы то ни было элементы хэви-метал. После первого прослушивания альбом оставил какие-то непонятные впечатления. Я даже решил убрать его подальше, но послешав его ещё пару раз почувствовал, что альбом очень и очень неплох. Слушать его приятно, а какие-то претензии могут возникнуть лишь к звуковому решению. И программированные барабаны не слишком портят впечатление от пластинки.
Подписаться на:
Сообщения (Atom)
