Вот тут можно скачать sed-скрипт для игры тетрис, а также sh-скрипт для его запуска. Под cygwin даже работает. Респект!
среда, 28 мая 2008 г.
Tetris
Все знают, зачем нужен SED. Но я ещё не слышал, чтобы его использовали для разработки игр:

Вот тут можно скачать sed-скрипт для игры тетрис, а также sh-скрипт для его запуска. Под cygwin даже работает. Респект!
Вот тут можно скачать 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, может потом когда-нибудь поиграю...
Настраивается кнопками Red, Green и Blue. Разные комбинации дают доступ к разным головоломкам. Я прошёл R, G, B, RG и RB. Осталось ещё две - GB и RGB. Доиграть можно потом, так как игра загружает последнее состояние при запуске:
У неё есть продолжение - The Dark Complex, может потом когда-нибудь поиграю...
Русский язык
"Все побежали, и я побежал..." (C)
Прошёл тест по русскому языку, и вот что мне написали:
Вы дали 8 из 8 - Поздравляем, вы - вымирающий вид россиянина, отлично знающего свой родной русский язык. Вы один из немногих носителей элитарного знания, доступного в наше время единицам (7% от общего числа опрошенных). Второй вариант: вы - выпускник, которого хорошо натаскали на сдачу экзамена по русскому языку. Третий вариант: вы – репетитор. Или просто закончили филологический факультет, и пошли работать не по специальности.

Сходи, проверься!
Всё гораздо проще: я учился в СССР!
Прошёл тест по русскому языку, и вот что мне написали:
Вы дали 8 из 8 - Поздравляем, вы - вымирающий вид россиянина, отлично знающего свой родной русский язык. Вы один из немногих носителей элитарного знания, доступного в наше время единицам (7% от общего числа опрошенных). Второй вариант: вы - выпускник, которого хорошо натаскали на сдачу экзамена по русскому языку. Третий вариант: вы – репетитор. Или просто закончили филологический факультет, и пошли работать не по специальности.
Сходи, проверься!
Всё гораздо проще: я учился в СССР!
понедельник, 26 мая 2008 г.
Евровидение
Футбол - взяли, хоккей - взяли. Теперь еще и Евровидение. Кранты стабфонду...
Тут на БОР думали, что же всё-таки подарили Медведеву на инаугурацию: кольцо Всевластья, Мел Судьбы или золотой шар из Зоны кто-то принёс? Сошлись на цветике-семицветике...
Жаль, что финны против Билана опять Lordi не выставили. Зато теперь Билану помогали Евгений Плющенко (без коньков, зато известная фигура) и венгерский скрипач Эдвин Мартон (ничего, что не русский, зато Россия выиграла):

Чтобы улучшить впечатление от песни, народ даже наложил правильный саундтрек. Вы только посмотрите, как Билан на 14-й секунде "ы-ы-ы-ы" тянет:
А, вообще, правильно Владимир Соловьёв пишет на своём блоге. В предыдущие года на нашем телевидении все орали, что Евровидение всё куплено, что там голосуют не качество песни, а за страну и обижались, что какие-то непонятные финны порвали горячо любомого Димочку как Тузик грелку. Сейчас, почему-то, всё это забыто и говорится о каком-то мастерстве нашего исполнителя. Хотя теперь возмущаются британцы.
А вот что было в прямом эфире. Артемий Троицкий аккуратно так (чтобы фанатки не порвали) сказал, что в принципе исполнение было отстойным:
Май в этом году был победный. Россия брала первые места в самых неожиданных местах. Видимо, во всём мире оценили наш парад Победы и решили не рисковать. На всякий случай...
Тут на БОР думали, что же всё-таки подарили Медведеву на инаугурацию: кольцо Всевластья, Мел Судьбы или золотой шар из Зоны кто-то принёс? Сошлись на цветике-семицветике...
Жаль, что финны против Билана опять Lordi не выставили. Зато теперь Билану помогали Евгений Плющенко (без коньков, зато известная фигура) и венгерский скрипач Эдвин Мартон (ничего, что не русский, зато Россия выиграла):
Чтобы улучшить впечатление от песни, народ даже наложил правильный саундтрек. Вы только посмотрите, как Билан на 14-й секунде "ы-ы-ы-ы" тянет:
А, вообще, правильно Владимир Соловьёв пишет на своём блоге. В предыдущие года на нашем телевидении все орали, что Евровидение всё куплено, что там голосуют не качество песни, а за страну и обижались, что какие-то непонятные финны порвали горячо любомого Димочку как Тузик грелку. Сейчас, почему-то, всё это забыто и говорится о каком-то мастерстве нашего исполнителя. Хотя теперь возмущаются британцы.
А вот что было в прямом эфире. Артемий Троицкий аккуратно так (чтобы фанатки не порвали) сказал, что в принципе исполнение было отстойным:
Май в этом году был победный. Россия брала первые места в самых неожиданных местах. Видимо, во всём мире оценили наш парад Победы и решили не рисковать. На всякий случай...
пятница, 23 мая 2008 г.
Бой без правил
Бравый экшн про похождения во Вьетнаме. Спасаемые очкарики бывают полезны: дают новое оружие или помогют переправиться через реку:

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

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

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

Мне лично не справиться с управлением, дае если его поменять. Но игрушка сделана с душой. Очень прикольно!
Это классический шутер, в котором герой неимоверно крут и легко справляется с толпами врагов:
Если прямо не попасть, то можно закинуть гранату. И не смотрите, что на скриншоте глюк. Это винды снимают не в конце генерации кадра:
Коллега на работе прошёл её и ему показало картинки, созданные на этапе разработки игры:
Мне лично не справиться с управлением, дае если его поменять. Но игрушка сделана с душой. Очень прикольно!
Java Puzzle 92: Twisted Pair
Следующая программа выполняет неестественное действие с анонимным классом. Что она напечатает?
Сначала я подумал, что она совсем не скомпилируется. Потом подумал, что по логике должно напечатать "reproduce". Но и тут чувствуется подвох...
Так было бы, если бы getter не был бы
Авторы напоминают совет из головоломки 6: если вы не можете с первого взгляда сказать, что делает некая программа, то возможно она делает совсем не то, что вы от нее хотите.
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 Setset = 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 километров. Данные по бортовому компьютеру. Он не считает время, пока мы гуляем, а двигатель выключен...
Приехали в 0:50. Всего проехали 753 км со средней скоростью 78 км/ч. Гораздо быстрее, чем в прошлый раз. Потратили 64 литра, т.е. 8,4 литра на 100 километров. Данные по бортовому компьютеру. Он не считает время, пока мы гуляем, а двигатель выключен...
Пятнично
В прошедшую пятницу у нас в конторе проходил очередной beer bash. Раз в месяц пива разливного привозят, в основном от частных пивоварен. Пиво на вкус было слишком кислым для меня, но и не те помои, что обычно в магазинах продают. По крайней мере после трёх литров голова с утра не болела. Единственный минус, что после поехал в Москву за семьёй и в поезде забыл жилетку. На пьянке наша команда оккупировала караоке и тупо орала песни. Я тоже орал... ;)
Перед всем этим были конкурсы, типа, кто быстрее пива выпьет. Так один парень прямо в горло заливал. Секунд за 5 бутылку усосал ;)
Ещё, оказывается, в приглашении говорилось, что будет конкурс стихов и надо написать что-нибудь. А я это прозевал. Зато чел из нашей команды отличился (mr. JFileChooser):
Сан. Пятница. Коллеги. Пиво.
Бессмысленный и мощный гвалт.
Всего лишь месяц перерыва -
И снова так. Тому я рад!
Уедешь в отпуск - как тоскливо!
И будут сниться по ночам
Гвалт, разливные реки пива,
Коллеги, пятница и Сан.
Мне аж завидно стало. Какой талантище! Как верно всё подметил. Ну я и написал в ответ, хотя и не так круто, зато тоже правдиво:
Леонид отжёг сегодня -
Стих забавный написал.
Ну а я забыл про конкурс
И, конечно, опоздал...
Перед всем этим были конкурсы, типа, кто быстрее пива выпьет. Так один парень прямо в горло заливал. Секунд за 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
Следующая программа очень простая и ничего не делает. Но к ней есть два вопроса: почему она не компилируется и как это исправить?
Проблема в том, что при создании класса вызывается "конструктор по-умолчанию", который создаётся автоматически и содержит вызов конструктора суперкласса, а этот вызов выглядит так:
Такая конструкция уже компилируется, хотя и выглядит очень странно. Кстати, парсер IntelliJ IDEA продолжает показывать ошибку в этом месте.
Авторы предлагают решение лучше и советуют: Когда вы пишете вложенный класс спросите себя, действительно ли нужен доступ к членам класса, в который вы его вкладываете? Если нет, то делайте вложенный класс статическим. Я вообще не люблю вложенные классы. Они усложняют работу с наследованием, а так же с generics и reflection.
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. Написали программу, расставив везде нужные декларации. Что напечатает следующая программа?
А она не хочет компилиться! Дело в том, что типы
Блин, с этими generics, как по минному полю ходишь. Хотя с template классами в C++ тоже не так всё просто...
public class LinkedList{
private Nodehead;
private class Node{
E value;
Nodenext;
Node(E value) {
this.value = value;
this.next = head;
head = this;
}
}
public void add(E e) {
new Node(e);
}
public void dump() {
for (Noden = head; n != null; n = n.next)
System.out.print(n.value + " ");
}
public static void main(String[] args) {
LinkedListlist = new LinkedList ();
list.add("world");
list.add("Hello");
list.dump();
}
}
А она не хочет компилиться! Дело в том, что типы
E разные для класса LinkedList и класса Node. Избегайте затенения параметра типа. Авторы говорили об опасности затенения в головоломках 71, 73 и 79. После этого сразу видно, что надо добавить второй параметр конструктору класса Node и слегка изменить метод add:public class LinkedList{
private Nodehead;
private class Node{
F value;
Nodenext;
Node(F value, Nodenext) {
this.value = value;
this.next = next;
}
}
public void add(E e) {
this.head = new Node(e, this.head);
}
public void dump() {
for (Noden = head; n != null; n = n.next)
System.out.print(n.value + " ");
}
public static void main(String[] args) {
LinkedListlist = 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 утра. Солнце слепит. Машин практически нет. Лепота...
А по Обводному проезжают два мотоциклиста полной защите. Все в чёрном. И только одна деталь портит всю картину. У каждого мотоцикла нелепая жёлтая крыша с надписью ОХРАНА. Повеселило ;)
Приезжаю сегодня на Балтийский вокзал. 7 утра. Солнце слепит. Машин практически нет. Лепота...
А по Обводному проезжают два мотоциклиста полной защите. Все в чёрном. И только одна деталь портит всю картину. У каждого мотоцикла нелепая жёлтая крыша с надписью ОХРАНА. Повеселило ;)
пятница, 9 мая 2008 г.
С Днём Победы
Поеду в Таллинн на праздник. Если бабушка будет в состоянии, то дойдём до памятника. Вы же можете возложить цветы виртуально.
Джентльмены! Поздравляю вас с победой!
Джентльмены! Поздравляю вас с победой!
понедельник, 5 мая 2008 г.
Java Puzzle 88: Raw Deal
Что напечатает следующая программа?
Удивлены? Я тоже. Она просто не скомпилируется. Несовместимость типов в строке:
Что происходит? Ведь метод
или ещё более просто:
И запомните, что тип
А для меня, как разработчика пакета JavaBeans, который в полный рост использует reflection, это знание ОЧЕНЬ важно. Я вышел на новый уровень понимания generics!
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 мы узнали, что оператор сравнения не рефлексивный, так как
Головоломка 35 поможет понять, что оператор сравнения не транзитивный. При сравнении двух числовых значений сначала осуществляется приведение типов. Но аккуратнее, конвертация
А в 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);
}
}
воскресенье, 4 мая 2008 г.
Опять в Таллинн
Opeth
3 июня на лейбле Roadrunner Records выходит новый диск группы Opeth: Watershed (2008). Очень люблю их творчество, особенно альбом Morningrise (1996), который слушаю прямо сейчас.
Я чего бучу поднял раньше времени. Они сняли клип на песню Porcelain Heart. Съёмки проходили в замке Bogesund (Vaxholm, Швеция), построенном в 1640 г. И клип красивый, и песня клёвая!
А вот так развлекаются настоящие фанаты:
среда, 30 апреля 2008 г.
пятница, 25 апреля 2008 г.
Java Puzzle 86: Poison-Paren Litter
Можете ли вы придумать корректное выражение, которое превращается в некорректное, если входящее в него выражение взять в скобки?
Обычно добавление пары скобок используется для улучшения читаемости кода. Однако, существует два случая, когда это не так (вспомните задачки 33 и 64).
Обычно добавление пары скобок используется для улучшения читаемости кода. Однако, существует два случая, когда это не так (вспомните задачки 33 и 64).
int i = -2147483648; - корректноint i = -(2147483648); - некорректноlong l = -9223372036854775808L; - корректноlong l = -(9223372036854775808L); - некорректно
Java Puzzle 85: Lazy Initialization
Следующему классу лень инициализировать себя обычным путём, поэтому он делает это на фоновом потоке. Что программа напечатает? Гарантируется одинаковый результат для каждого запуска?
Кажется, что программа должна каждый раз печатать true, но нет! Она просто виснет.
Симпатичный deadlock. Попробую объяснить.
Понятно, что при обращении к методу
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. Впечатления, в основном, положительные. Теперь думаю, где бы диск купить. Кайлас совсем испортился...
Без очереди
Пришёл в банк погасить задолженность по кредитной карте. Там, как обычно, большая очередь. Напрягает стоять. Даже думал получить код для управления своим счётом через Интернет, хотя мне эта идея не очень нравится. Но один из сотрудников банка сказал, что при наличии паспорта и кредитной карты счёт можно погасить без очереди. Это радует...
вторник, 22 апреля 2008 г.
The Sniper
На flash делают уже вполне достойные игры. Например, Снайпер. Интересная игра про высадку союзных войск в Нормандии.
И вот дают нам очередную миссию:

Вот в прицел мы видим фрицев:

Смотреть можно не только в прицел:

Крестиками помечаются трупы, так что искать придётся всё равно через прицел.

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

А вот и мой результат.
И вот дают нам очередную миссию:
Вот в прицел мы видим фрицев:
Смотреть можно не только в прицел:
Крестиками помечаются трупы, так что искать придётся всё равно через прицел.
Между миссиями пишут разные сообщения, сопровождая их прикольными картинками:
А вот и мой результат.
Java Puzzle 84: Rudely Interrupted
В этой задаче мы пытаемся прервать исполнение текущего потока, а затем проверяем удалось это или нет. Что напечатает следующая программа:
Вы удивитесь, но она напечатает "Interrupted: false"
Но почему? Дело в том, что вызов метода
public class SelfInterruption {
public static void main(String[] args) {
Thread.currentThread().interrupt();
if (Thread.interrupted()) {
System.out.println("Interrupted: "
+ Thread.interrupted());
} else {
System.out.println("Not interrupted: "
+ Thread.interrupted());
}
}
}Вы удивитесь, но она напечатает "Interrupted: false"
Но почему? Дело в том, что вызов метода
Thread.interrupted() всегда очищает состояние флага interrupted текущего потока. Ну мы и получили, что первый вызов вернул true, а второй - false. Для решения проблемы нужно вызывать метод Thread.currentThread().isInterrupted(), который не изменяет состояние флага interrupted.
Java Puzzle 83: Dyslexic Monotheism
Однажды один мужик режил что он единственный такой исключительный пёс. И тогда он написал класс, думая что написал singleton:
Но он ошибался. Во всём. Сможете ли вы создать второй экземпляр класса
Ну тут надо сообразить, что класс
А иначе при десериализации вы получите другой экземпляр.
public class Dog extends Exception {
public static final Dog INSTANCE = new Dog();
private Dog() {
}
public String toString() {
return "Woof";
}
}Но он ошибался. Во всём. Сможете ли вы создать второй экземпляр класса
Dog не используя reflection?Ну тут надо сообразить, что класс
Exception является Serializable. А дальше всё просто. Эта проблема и её решение были описаны в книге Effective Java: singleton, который имплементирует интерфейс Serializable должен определять readResolve метод, который возвращает единственный экземпляр:public class Dog extends Exception {
public static final Dog INSTANCE = new Dog();
private Dog() {
}
private Object readResolve() {
return INSTANCE;
}
public String toString() {
return "Woof";
}
}А иначе при десериализации вы получите другой экземпляр.
понедельник, 21 апреля 2008 г.
Москва - Питер
Как вы думаете, чем может заняться человек, приехавший в 5 утра из Москвы? До открытия метро - 40 минут. Японские кроссворды кончились, новых ещё не продают. Батарейка на телефоне почти села, так что не поиграться...
Физкультпоход!
Сначала по Лиговскому проспекту до метро, там по улице Константина Заслонова выходим на набережную Обводного канала, по которой пилим до Лермонтовского проспекта. По нему уже доходим до офиса. Итого 5 километров, пройденные ровно за 1 час.
Романтика!
Вспомнилось время, когда я пешком ходил из общаги на Московский вокзал поезд встречать. И как мы со Стасом возвращались из кафе Визит, что в районе Чернышевской, на проспект Большевиков. Забавно...
Физкультпоход!
Сначала по Лиговскому проспекту до метро, там по улице Константина Заслонова выходим на набережную Обводного канала, по которой пилим до Лермонтовского проспекта. По нему уже доходим до офиса. Итого 5 километров, пройденные ровно за 1 час.
Романтика!
Вспомнилось время, когда я пешком ходил из общаги на Московский вокзал поезд встречать. И как мы со Стасом возвращались из кафе Визит, что в районе Чернышевской, на проспект Большевиков. Забавно...
Логично
Пока шли в гараж, я увидел Форд Фокус и говорю: Форд Фикус. Мишке понравилось и он стал трындеть: Фикус, Фикус...
Ну я ему объясняю, что я пошутил, что машина - это Фокус, а Фикус - это такое растение. На что Мишка вполне логично заметил машина - растение. И засмеялся...
Ну я ему объясняю, что я пошутил, что машина - это Фокус, а Фикус - это такое растение. На что Мишка вполне логично заметил машина - растение. И засмеялся...
Питер - Москва
Выехали в пятницу в 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. В нём отсутствуют какие бы то ни было элементы хэви-метал. После первого прослушивания альбом оставил какие-то непонятные впечатления. Я даже решил убрать его подальше, но послешав его ещё пару раз почувствовал, что альбом очень и очень неплох. Слушать его приятно, а какие-то претензии могут возникнуть лишь к звуковому решению. И программированные барабаны не слишком портят впечатление от пластинки.
Нет вдохновения
Что-то я давненько ничего не сочинял. В голове один мотив про бегемота из Смешариков, которые Мишка ежедневно смотрит. Вот на этот мотив и сочинилось:
Если ты хочешь стихи сочинять,
То для начала учись рифмовать.
Выбери тему стиха и мотив...
И начинай сочинять креатив!
Или позитив. Кому как нравится...
Если ты хочешь стихи сочинять,
То для начала учись рифмовать.
Выбери тему стиха и мотив...
И начинай сочинять креатив!
Или позитив. Кому как нравится...
Культурный тест
Раз уж и Стас и Юля прошли тест, то и я тоже попытался. Забавно, что у нас совершенно разные результаты:
| Поздравляем!!! Вам ближе славянская культура |
| Вы по-настоящему русский человек! Вам вполне комфортно в России, и это очень хорошо, когда человек живет в обществе, ценности которого разделяет. |
| Пройти тест |
Supaplex
Помнится в общаге любил играть в Supaplex. Это такая игра под DOS в стиле Boulder Dash. Но потом, при переходе на Windows NT я забыл про эту игру, так как не работает она под Win32 API. И вот выясняется, что есть ещё фанаты, которые портировали её под Windows XP. Встречайте - WinPlex:

Кроме того, на этом сайте можно скачать редактор и кучу уровней к игре, которые до сих пор создаются фанатами...
Кроме того, на этом сайте можно скачать редактор и кучу уровней к игре, которые до сих пор создаются фанатами...
среда, 26 марта 2008 г.
Blizzard
Вчера вечером возвращался домой - была суровая метель. Очень сильный ветер с мелкими ледяными градинами. Получил хороший крио-массаж лица.
С утра шёл на работу - сугробы подтаяли. Под ними организовались огромные лужи, которых не видно, так как сверху всё ещё снег лежит. Пока дошёл до работы промочил ноги. Лучше промочить горло, чем ноги!
Ветер днём был не сильный. Говорят, что в Москве он был гораздо сильнее. Коты выпали осадками...
Ну а сегодня вечером опять ударил мороз и везде был лёд. Еле до дому дошёл. Заносило на поворотах ;)
Автомобилистам хреново. У нас на работе один коллега уже успел переобуться в летнюю резину. Вот ему удовольствие будет ехать в Финляндию на выходных...
С утра шёл на работу - сугробы подтаяли. Под ними организовались огромные лужи, которых не видно, так как сверху всё ещё снег лежит. Пока дошёл до работы промочил ноги. Лучше промочить горло, чем ноги!
Ветер днём был не сильный. Говорят, что в Москве он был гораздо сильнее. Коты выпали осадками...
Ну а сегодня вечером опять ударил мороз и везде был лёд. Еле до дому дошёл. Заносило на поворотах ;)
Автомобилистам хреново. У нас на работе один коллега уже успел переобуться в летнюю резину. Вот ему удовольствие будет ехать в Финляндию на выходных...
понедельник, 24 марта 2008 г.
Java Puzzle 78: Reflection Infection
Рассмотрим простое применение refletion. Что напечатает следующая программа?
Нашли, блин, чем меня удивить! Я с такими проблемами в JavaBeans регулярно сталкиваюсь. Несмотря на то, что метод определён как
import java.lang.reflection.*;
import java.util.*;
public class Reflector {
public static void main(String[] args)
throws Exception {
Setset = new HashSet ();
set.add("foo");
Iterator it = set.iterator();
Class type = it.getClass();
Method method = type.getMethod("hasNext");
System.out.println(method.invoke(it));
}
}
Нашли, блин, чем меня удивить! Я с такими проблемами в JavaBeans регулярно сталкиваюсь. Несмотря на то, что метод определён как
public, он определён в private классе. И у пользователя просто нет прав, чтобы его вызвать. Приходится рекурсивно проходить по иерархии классов и интерфейсов и искать его пототип, который действительно разрешён к использованию. Обратите внимание, что еcли метод получить другим образом, то он будет работать: Method method = Iterator.class.getMethod("hasNext");
Java Puzzle 77: The Lock Mess Monster
Разберитесь-ка, как работает следующая программа:
Беглый анализ показывает, что где-то через секунду программа напишет
Фундаментальная причина ошибочного поведения класса
import java.util.*;
public class Worker extends Thread {
public static void main(String[] args)
throws InterruptedException {
final Worker worker = new Worker();
worker.start();
Timer timer = new Timer(true);
timer.schedule(
new TimerTask() {
public void run() {
worker.keepWorking();
}
}, 500);
sleep(400);
worker.quit();
}
private volatile boolean stop = false;
public void run() {
while (!stop) pretendToWork();
System.out.println("Beer is good!");
}
private void pretendToWork() {
try {
sleep(300);
}
catch (InterruptedException exception) {
}
}
synchronized void keepWorking() {
stop = false;
}
synchronized void quit() {
stop = true;
join();
}
}
Беглый анализ показывает, что где-то через секунду программа напишет
Beer is good! и завершит свою работу. Но на самом деле она зависает! Проблема в том, что внутренняя реализация метода join вызывает метод wait на экземпляре класса Thread, который должен быть присоединён. А вызов метода wait снимает блокировку!Фундаментальная причина ошибочного поведения класса
Worker - использование блокировки по экземпляру (synchronized методы). Не полагайтесь на поведение библиотеки - делайте собственные объекты блокировки, которые не доступны никому другому. Это напоминает раздел 15 книги Эффективное программирование Джошуа Блоха.
воскресенье, 23 марта 2008 г.
Снеговики
Вчера вечером, возвращаясь из гаража, зашли в магазин. Юля пошла за продуктами, а мы с Мишкой остались на улице лепить снеговика. Мишку это очень зацепило. Видимо, по снегу соскучился...
Сегодня с утра ездили к зубному на профилактический осмотр. Пока Юлю осматривали, я с Мишкой слепили двух снеговиков (большого и маленького). Мишка вовсю лепил носы, щёки, уши (они же руки;). Потом они с Юлей третьего снеговика слепили, пока меня доктор осматривал. Мишка спросил Юлю: "А почему мама такая маленька вышла?". Просёк, что большой снеговик - папа, маленький - Мишка, ну а чуть побольше - мама:

А из клиники улыбаясь за нами наблюдали охранник, гардеробщица и девчонки с рецепшн. Наши снеговики прямо напротив входа стоят на Комендантском, 17. Надеюсь, мы народу настроение хорошо подняли!
Сегодня с утра ездили к зубному на профилактический осмотр. Пока Юлю осматривали, я с Мишкой слепили двух снеговиков (большого и маленького). Мишка вовсю лепил носы, щёки, уши (они же руки;). Потом они с Юлей третьего снеговика слепили, пока меня доктор осматривал. Мишка спросил Юлю: "А почему мама такая маленька вышла?". Просёк, что большой снеговик - папа, маленький - Мишка, ну а чуть побольше - мама:
А из клиники улыбаясь за нами наблюдали охранник, гардеробщица и девчонки с рецепшн. Наши снеговики прямо напротив входа стоят на Комендантском, 17. Надеюсь, мы народу настроение хорошо подняли!
суббота, 22 марта 2008 г.
Погода
С утра была замечательная солнечная погода. Мы даже заехали на автомойку, но там была толпа автолюбителей. Ну мы и поехали грязными, так как надо было съездить по делам к определённому времени. Пока Юля занималась делами, мы с Мишкой сопели в машине на солнышке. Потом поехали к Паше с Ирой в гости, где Мишка показывал высший пилотаж в Paint:

Вечером, когда вышли от Пашки, обнаружили, что выпал снег. Машинку хорошо так залепило снегом. Мы почистились и поехали. Хорошо, что не помылись...
На обратном пути видели несколько аварий на Кольцевой. В одной аварии аж 5 машин было. Аккурат за знаком ограничения скорости 80. Народ-то подумал, что зима кончилась, и шины поменял на летние. Ну и огрёб...
Вечером, когда вышли от Пашки, обнаружили, что выпал снег. Машинку хорошо так залепило снегом. Мы почистились и поехали. Хорошо, что не помылись...
На обратном пути видели несколько аварий на Кольцевой. В одной аварии аж 5 машин было. Аккурат за знаком ограничения скорости 80. Народ-то подумал, что зима кончилась, и шины поменял на летние. Ну и огрёб...
среда, 19 марта 2008 г.
Alice Cooper
Заехал в Кайлас на днях, а там опять ничего нового. В этот раз мне под руку подвернулся альбом Dirty Diamonds (2005).
Не стареют душой ветераны! Вот и старина Элис Купер до сих пор пишет песни, хотя ему скоро стукнет 60 лет. Это его 24-ый альбом, но уж больно он напоминает старые диски. Сразу ностальгия охватывает...
Однако, нельзя сказать, что диск занудный. Он очень разноплановый, хотя и спокойный. Весьма позитивный и слегка старомодный. Что-то в нём есть такое...
суббота, 15 марта 2008 г.
четверг, 13 марта 2008 г.
Тестируем замену Skype
Написал мне тут мой бывший коллега, который проработал в STAR семь с половиной лет. Попросил потестировать его текущий проект. Можно звонить по межгороду с компа практически на любой номер. Говорит, что Эстония тоже поддерживается...
Позвонив на домашний телефон я обнаружил, что качество связи хромает, чем немало удивил его. Завтра потестирую связь с Таллинном...
Если будете тестировать - пишите результат: откуда звонили, с какого провайдера, в какой город, на домашний или мобильный, ну и про качество связи не забывайте. Говорить можно, пока, минуту. Потом связь останется бесплатной, но за просмотр рекламного ролика...
Позвонив на домашний телефон я обнаружил, что качество связи хромает, чем немало удивил его. Завтра потестирую связь с Таллинном...
Если будете тестировать - пишите результат: откуда звонили, с какого провайдера, в какой город, на домашний или мобильный, ну и про качество связи не забывайте. Говорить можно, пока, минуту. Потом связь останется бесплатной, но за просмотр рекламного ролика...
Java Puzzle 76: Ping Pong
Следующая программа содержит синхронизированные статические методы. Что она напечатает? Гарантируется ли её результат от запуска к запуску?
Начнём с того, что синхронизировав статические методы мы добились того, что результат программы гарантируется от запуска к запуску. Но почему она пишет
Типичная ошибка и простая невнимательность. Для запуска отдельного потока надо вызывать метод
Будьте внимательны!
public class PingPong {
public static synchronized void main(String[] args) {
Thread thread = new Thread() {
public void run() {
pong();
}
};
thread.run();
System.out.print("Ping");
}
static synchronized void pong() {
System.out.print("Pong");
}
}Начнём с того, что синхронизировав статические методы мы добились того, что результат программы гарантируется от запуска к запуску. Но почему она пишет
PongPing вместо PingPong?Типичная ошибка и простая невнимательность. Для запуска отдельного потока надо вызывать метод
start, а не метод run. В нашем случае всё действие происходит на одном потоке.Будьте внимательны!
Java Puzzle 75: Heads or Tails?
Поведение приведённой ниже программы меняется при переходе на Java 5. Почему? Как будет себя вести программа на версиях 1.4 и 5?
Начнём с версии 1.4 - программа не скомпилируется. Поведение условного оператора (
После версии 5 стало дозволено немного больше. Результат условного оператора имеет наиболее общий класс (в нашем случае -
Надо будет проверить ещё с примитивными типами. Будет ли работать auto-boxing?
Авторы рекомендуют всегда использовать последний релиз Java-платформы, так как в последние релизы включены многие улучшения, делающие жизнь программистов легче.
А вот о новых багах, особенно регрессиях, авторы молчат... ;)
import java.util.Random;
public class CoinSide {
private static Random rnd = new Random();
private static CoinSide flip() {
return rnd.nextBoolean()
? Heads.INSTANCE
: Tails.INSTANCE;
}
public static void main(String args) {
System.out.println(flip());
}
}
class Heads extends CoinSide {
private static Heads INSTANCE = new Heads();
public String toString() {
return "heads";
}
}
class Tails extends CoinSide {
private static Tails INSTANCE = new Tails();
public String toString() {
return "tails";
}
}
Начнём с версии 1.4 - программа не скомпилируется. Поведение условного оператора (
?:) раньше было более ограничивающим. Он требовал, чтобы обе части были одинакового класса или один класс был бы подклассом другого. А в нашем примере это не так.После версии 5 стало дозволено немного больше. Результат условного оператора имеет наиболее общий класс (в нашем случае -
CoinSide). В большинстве случаев все классы имеют общий тип - Object.Надо будет проверить ещё с примитивными типами. Будет ли работать auto-boxing?
Авторы рекомендуют всегда использовать последний релиз Java-платформы, так как в последние релизы включены многие улучшения, делающие жизнь программистов легче.
А вот о новых багах, особенно регрессиях, авторы молчат... ;)
среда, 12 марта 2008 г.
Google Pages: No JNLP
Хотел использовать Google Pages, чтобы размещать на нём свои Java-приложения, включая пресловутую Reversy. Однако, они отображают JNLP файлы, как текстовые XML.
Обнаружил способ, как заставить сервер понимать JNLP - надо в папку положить файл
Это прекрасно сработало на локальном сервере, но не работает с Google! Этот файл автоматически переименовывается при загрузке - убирается точка. Надо писать в службу поддержки, хотя я год назад писал туда сообщения о багах, но мне так ничего и не ответили...
Обнаружил способ, как заставить сервер понимать JNLP - надо в папку положить файл
.htaccess, в котором есть следующая строка:AddType application/x-java-jnlp-file .jnlpЭто прекрасно сработало на локальном сервере, но не работает с Google! Этот файл автоматически переименовывается при загрузке - убирается точка. Надо писать в службу поддержки, хотя я год назад писал туда сообщения о багах, но мне так ничего и не ответили...
Bloc at SillyBull
Хорошая головоломка, но короткая...

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

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

Ускорения нет! Более внимательное прочтение новости показало, что это касается всех абонентов, кроме выбравших тарифные планы 300К и 600К.
Блин! Надо посчитать деньги и переоформиться что-ли...
А так выглядит скорость до Сан Франциско:
Ускорения нет! Более внимательное прочтение новости показало, что это касается всех абонентов, кроме выбравших тарифные планы 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 эффект!
К чему это всё? Так меня попросили писать демки для 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 (по корпоративной страховке от УралСиб). Врач оказался хороший, несмотря на то что мы опоздали на полчаса. Но регистратура!..
Сначала я им позвонил из пробки на ПлАНе, что мы встряли и задерживаемся. Мне грубо так сказали, что придётся стоять в общей очереди. Ладно. Но когда мы приехали и отмечались в регистратуре, на нас наехали, что мы опоздали. На оправдание, что пробки в центре, нам сказали, что все так отмазываются. И что сейчас к аллергологу толпа детей придёт, а мы должны по очереди всех пропускать. Но никто так и не пришёл за тел полчаса, что Юля провела у доктора. Мы с Мишкой были там всего пару минут и пошли шляться по клинике. Короче, страховая медицина стала теперь напоминать обычную бесплатную. Хотя не везде. Наш доктор, что к Мишке с рождения приписан, вполне нас устраивает...
Кстати, насчёт пробок. В выходные нам нужно полчаса, чтобы добраться от Рыбацкого до Суворовского. А в эту среду мы ехали полтора часа. Встали в пробке на Бакунина и пешком добежали пару кварталов. В общем, утром в рабочий день в центр на машине соваться не стоит...
Расположены они на пр. Большевиков, д. 22, кор. 5. Дом находится на задворках Бонча, там где должны были построить информационный центр, а построили несколько жилых домов, под названием "Изумрудный город". Въезд с Большевиков, через пустырь и, далее, шлагбаум.
В среду ездили к аллергологу на Суворовский пр., д. 4. Детская поликлиника №19 (по корпоративной страховке от УралСиб). Врач оказался хороший, несмотря на то что мы опоздали на полчаса. Но регистратура!..
Сначала я им позвонил из пробки на ПлАНе, что мы встряли и задерживаемся. Мне грубо так сказали, что придётся стоять в общей очереди. Ладно. Но когда мы приехали и отмечались в регистратуре, на нас наехали, что мы опоздали. На оправдание, что пробки в центре, нам сказали, что все так отмазываются. И что сейчас к аллергологу толпа детей придёт, а мы должны по очереди всех пропускать. Но никто так и не пришёл за тел полчаса, что Юля провела у доктора. Мы с Мишкой были там всего пару минут и пошли шляться по клинике. Короче, страховая медицина стала теперь напоминать обычную бесплатную. Хотя не везде. Наш доктор, что к Мишке с рождения приписан, вполне нас устраивает...
Кстати, насчёт пробок. В выходные нам нужно полчаса, чтобы добраться от Рыбацкого до Суворовского. А в эту среду мы ехали полтора часа. Встали в пробке на Бакунина и пешком добежали пару кварталов. В общем, утром в рабочий день в центр на машине соваться не стоит...
пятница, 29 февраля 2008 г.
Лучшие люди
Видимо ФСБ надоело, что кто-то тусуется на одноклассниках, кто-то в контакте, а кто-то вообще непонятно где. Ну и было решено завести надстройку над блогосферами, социальными сетями и т.д.
Встречайте - BestPersons. Продукт пока сырой, но разработчики быстро отвечают на глупые вопросы и, я так думаю, будут активно решать возникающие проблемы. Страничка используется для указания тех мест в сети, где люди тусуются. Вот, например, моя страница.
А еще можно информер использовать. Это такой набор иконок, ведущий сразу на все персональные страницы. Эти иконки можно видеть у меня в правом верхнем углу. Поначалу были проблемы с цветом ника, но мне подсказали авторы, что надо использовать следующий код:
<style>.bp_nick {color:#aa77aa!important;}</style>
<script language="javascript" src="http://www.bestpersons.ru/service/info?u=2125" type="text/javascript"></script>
Встречайте - 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));
}
}
Программа не скомпилируется, так как члены класса в области видимости имеют преимущество перед статическим импортом. Поэтому не рекомендуется их использовать, так как появление в классе-родителе метода с таким же именем приведёт к порой незаметному изменению работы программы.
Проверь антивирус
Хотите проверить, насколько хорошо ваш антивирус справляется со своими обязанностями? Это очень просто. Для этого откройте любой текстовый файл и вставьте туда эту строчку:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Как только вы попытаетесь сохранить его, то антивирус должен его переварить и предупредить. У меня корпоративный Symantec тут же спрятал этот файл в карантин.
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 учеников, хотя в наше время было тысячи полторы. Многие учителя уже не работают. Директор старый умер. Хороший мужик был.

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

Одна одноклассница напомнила, что на контрольной по математике послала мне записку с просьбой о помощи. А я, скотина редкая, в ответ написал: ждите ответа. Говорит, что до сих пор ждёт ;)
Сначала встретились в школе. Надежда Ивановна еще работает, но говорят, что последний год. В классе было три её выпуска: старшие, мы и младшие. Куча цветов. В классе теперь маленькие парты - на одного человека рассчитаны. В школе всего 300 учеников, хотя в наше время было тысячи полторы. Многие учителя уже не работают. Директор старый умер. Хороший мужик был.
Потом переместились в Каспи. Кормят там неплохо, да и цены низкие. Особенное, если сравнивать с питерскими. Перед выходом из школы решил зайти в туалет. В мужском сидели пара девчёнок и парни. Курили и не только. Не удалось :(
Одна одноклассница напомнила, что на контрольной по математике послала мне записку с просьбой о помощи. А я, скотина редкая, в ответ написал: ждите ответа. Говорит, что до сих пор ждёт ;)
Corbina
Домашний интернет от Корбины Телеком. Вроде безобидная флэшка: нажми кнопку (i) - навалит газет, на конверт - писем, а на кнопку (%) - денег. Но тут есть "пасхальное яйцо". Перетащите мышкой кнопку (i) на кнопку (%) и наслаждайтесь ;)
На машине в Таллинн
Решили мы с коллегами поехать в Таллинн на выходные. Планировали ехать на Форд Фокус, но в последний день там вытек тосол. Пришлось ехать на двудверной Тойота Королла. Таможенники были удивлены, когда из неё вылезло 5 мужиков.
Для въезда на таможню нужно предъявить приграничный талончик, который можно получить на автозаправке где-то тут. На обратном пути надо заехать на эту стоянку грузовиков. Страховку на автомобиль (green card) можно купить прямо перед таможней у шлагбаума. Там по обе стороны есть домики разных страховых компаний, причём одна из них работает круглосуточно . Хотя можно нарваться там на получасовой перерыв около 9 вечера. Таможенную декларацию на временный вывоз автомобиля можно заполнить на таможне или заранее, распечатав её из сети.
До границы дорога разбита и лишь немного лучше объездной вокруг Новгорода. Все населённые пункты помечены белым знаком, т.е. надо снижать скорость. По ту сторону границы ехать очень просто: асфальт ровный, на обочине светоотражающие столбики, а населенных пунктов мало (одни синие знаки).
У GPS навигатора iGo есть проблема - он не знает про границу в Нарве и предлагает объезжать Чудское озеро. Пришлось прокладывать маршрут два раза. Но это мелочь.
Но в Duty Free меня обсчитали почти на 6 евро. И это из 20 возможных!!! Внимательнее надо быть, особенно, когда цены в одной валюте, а платишь в другой. Рублями там можно расплачиваться.
Для въезда на таможню нужно предъявить приграничный талончик, который можно получить на автозаправке где-то тут. На обратном пути надо заехать на эту стоянку грузовиков. Страховку на автомобиль (green card) можно купить прямо перед таможней у шлагбаума. Там по обе стороны есть домики разных страховых компаний, причём одна из них работает круглосуточно . Хотя можно нарваться там на получасовой перерыв около 9 вечера. Таможенную декларацию на временный вывоз автомобиля можно заполнить на таможне или заранее, распечатав её из сети.
До границы дорога разбита и лишь немного лучше объездной вокруг Новгорода. Все населённые пункты помечены белым знаком, т.е. надо снижать скорость. По ту сторону границы ехать очень просто: асфальт ровный, на обочине светоотражающие столбики, а населенных пунктов мало (одни синие знаки).
У GPS навигатора iGo есть проблема - он не знает про границу в Нарве и предлагает объезжать Чудское озеро. Пришлось прокладывать маршрут два раза. Но это мелочь.
Но в Duty Free меня обсчитали почти на 6 евро. И это из 20 возможных!!! Внимательнее надо быть, особенно, когда цены в одной валюте, а платишь в другой. Рублями там можно расплачиваться.
Рабочие новости
Sun Microsystems заработает на флоте Японии. Надеюсь, что после этого наши акции пойдут вверх?
Выздоровел
После поездки в Эстонию и по России я немного приболел. Температуры вроде не было, но глаза слезились и нос тёк. Врачиха посоветовала лечиться Фервексом и фигню в нос капать. Я, в основном, проспал несколько дней. Сейчас отошёл и попытаюсь описать, что было до болезни. Если вспомню ;)
вторник, 12 февраля 2008 г.
Проверка паспорта
Федеральная миграционная служба России ФМС открыла возможность проверки подлинности документов. Достаточно занести в строку поиска серию и номер паспорта, и программа определит, является ли удостоверение личности действительным. Если программа сообщает, что паспорт недействителен, это может означать, что этот документ существовал, но его владелец либо потерял его, либо истек срок действия. А если система пишет, что отсутствуют данные, можно говорить о том, что паспорт поддельный и с такой серией и номером никогда не выпускался. Никаких личных данных система не выдает, что позволяет сохранить тайну фамилии.
У меня проверить паспорт не получилось, так как мне ни разу не удалось правильно ввести проверочный код. Может они так собирают базу e-mail адресов?
У меня проверить паспорт не получилось, так как мне ни разу не удалось правильно ввести проверочный код. Может они так собирают базу 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.
Такое чувство, что Большой Брат всё ближе и ближе...
Из плюсов - привязка по местности с использованием Google Maps и регистрация с использованием Open ID. А по сути - то же самое, что и другие социальные сети: В контакте, Однокласники, Orkut и Linked In.
Такое чувство, что Большой Брат всё ближе и ближе...
Portal
Очень интересная часть оранжевой коробки. Для прохождения уровня надо с помощью портальной пушки ставить связанные между собой порталы (синий и оранжевый):

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

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

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

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

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

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

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

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

