четверг, 27 сентября 2007 г.
Growl Karaoke
Если вам нравится петь караоке и вы уважаете тяжелый рок, то попробуйте Growl Karaoke. Даже если вы знаете, что такое Growl, текст может вас очень удивить. Лично меня это караоке на хи-хи пробивает...
среда, 26 сентября 2007 г.
Приехали
Вот мы и приехали из Москвы. Доехали за 12 часов. Получается все быстрее и быстрее. Правда, у Юли права под Тверью поменяли временное разрешение за превышение скорости на 65 км/ч. Дорога только что отремотирована, тачка хорошая, временный знак с ограничением видно плохо...
Автомобильный холодильник температуру держит нормально несмотря на то, что один раз выдернули из розетки и не сразу обнаружили. На обогрев его не тестировали, хотя и такая фишка в нем есть.
Жаль теперь не получится в Таллинн поехать на машине. Или же придется ждать прав месяц. А ведь погода не улучшается...
Автомобильный холодильник температуру держит нормально несмотря на то, что один раз выдернули из розетки и не сразу обнаружили. На обогрев его не тестировали, хотя и такая фишка в нем есть.
Жаль теперь не получится в Таллинн поехать на машине. Или же придется ждать прав месяц. А ведь погода не улучшается...
пятница, 21 сентября 2007 г.
четверг, 20 сентября 2007 г.
Java Puzzle 50: Not Your Type
public class Type1 {
public static void main(String[] args) {
String s = null;
System.out.println(s instanceof String);
}
}
Тут все просто. Оператор instanceof определен так, чтобы возвращать false, когда его левый операнд null. Этим многие пользуются, чтобы не делать дополнительных проверок на null.
public class Type2 {
public static void main(String[] args) {
System.out.println(new Type2() instanceof String);
}
}
Тут задачка посложнее и я пропустил тот факт, что оператор instanceof требует, чтобы оба операнда имели такой тип, чтобы один был подтипом другого. А программа не скомпилится.
public class Type3 {
public static void main(String[] args) {
Type3 value = (Type3) new Object();
}
}
Опять подколка. После предыдущей задачи можно решить, что программа не скомпилится. Так оно и было бы, если бы создавался объект типа String. Но в программе создается Object, наследником которого являются все классы, включая Type3. Однако, при попытке выполнения произойдет исключение ClassCastException.
public static void main(String[] args) {
String s = null;
System.out.println(s instanceof String);
}
}
Тут все просто. Оператор instanceof определен так, чтобы возвращать false, когда его левый операнд null. Этим многие пользуются, чтобы не делать дополнительных проверок на null.
public class Type2 {
public static void main(String[] args) {
System.out.println(new Type2() instanceof String);
}
}
Тут задачка посложнее и я пропустил тот факт, что оператор instanceof требует, чтобы оба операнда имели такой тип, чтобы один был подтипом другого. А программа не скомпилится.
public class Type3 {
public static void main(String[] args) {
Type3 value = (Type3) new Object();
}
}
Опять подколка. После предыдущей задачи можно решить, что программа не скомпилится. Так оно и было бы, если бы создавался объект типа String. Но в программе создается Object, наследником которого являются все классы, включая Type3. Однако, при попытке выполнения произойдет исключение ClassCastException.
Java Puzzle 49: Larger Than Life
Что напечатает следующая программа?
public class Person {
private final int age;
private static final Person PERSON = new Person();
private static final int YEAR
= Calendar.getInstance().get(Calendar.YEAR);
public Person() {
this.age = YEAR - 2000;
}
public static void main(String[] args) {
System.out.println("age = " + PERSON.age);
}
}
А программа напечатает не 7, а -2000!
Программа показывает, что можно наблюдать final static поле до того, как оно будет проинициализировано. И чтобы это исправить надо изменить порядок следования полей: поставить YEAR перед PERSON, так как создание экземпляра Person требует проинициализированной переменной YEAR.
public class Person {
private final int age;
private static final Person PERSON = new Person();
private static final int YEAR
= Calendar.getInstance().get(Calendar.YEAR);
public Person() {
this.age = YEAR - 2000;
}
public static void main(String[] args) {
System.out.println("age = " + PERSON.age);
}
}
А программа напечатает не 7, а -2000!
Программа показывает, что можно наблюдать final static поле до того, как оно будет проинициализировано. И чтобы это исправить надо изменить порядок следования полей: поставить YEAR перед PERSON, так как создание экземпляра Person требует проинициализированной переменной YEAR.
Русский сайт Лема
Когда будет сконструировано устройство, которое по желанию сможет понизить или повысить интеллект любого человека, то появится спрос на понижение интеллекта, раз утверждают, что самые счастливые - идиоты. С. Лем
Стройка
Рядом с нашим офисом уже год как строится новое здание центральной налоговой инспекции. Что самое забавное, его строят какие-то южные гастарбайтеры, которые живут прямо в бараках на этой стройке. Наверняка налогов не платят ;-)
Ну а их биотуалеты, видимо, исчерпали свой ресурс и воздух не озонируют...
Ну а их биотуалеты, видимо, исчерпали свой ресурс и воздух не озонируют...
Пробки
Что-то сегодня на Володарском мосту и в округе офигенная пробка. Видимо из-за того, что на КАДе грузовики покрытие повредили и осталась одна полоса. От дома до налоговой ехал 50 минут. За это время можно было дойти до метро, проехать пару станций и там еще пешочком пройтись. Обратно я так и делал.
Забавный способ объезда пробки по встречке видел. Разворачивается машина на встречку и по ней сдает задо до перекрестка. Там снова разворачивается и впихивается в поток. Уроды!
Забавный способ объезда пробки по встречке видел. Разворачивается машина на встречку и по ней сдает задо до перекрестка. Там снова разворачивается и впихивается в поток. Уроды!
Налоговая
Сегодня с утра пытался подать документы на налоговые вычеты. После всех остальных попыток я думал, что эта будет последняя. Фиг!
Мне сказали, что я заполнил все правильно, но они не принимают мое заявление, так как я должен подавать его по месту постоянной прописки, а не временной регистрации. Так лениво в Одинцово ехать, а бабла-то хочется...
Мне сказали, что я заполнил все правильно, но они не принимают мое заявление, так как я должен подавать его по месту постоянной прописки, а не временной регистрации. Так лениво в Одинцово ехать, а бабла-то хочется...
среда, 19 сентября 2007 г.
Я сделаю для тебя ночь
Видимо, в Microsoft работают любители барона Мюнхгаузена. Они активировали черный экран тьмы, который включается после часа работы на нелицензионной Vista.
Балтийский вокзал
Говорят, что Балтийский вокзал перекрыли - ищут бомбу. Народ возвращается в офис, так как на маршрутки не сесть - безумная давка. Оказалось, что один бдительный страж порядка принял за бомбу кипу журналов. Это, конечно, хорошо. Только пассажиры в час пик, я думаю, были очень недовольны. У нас, например, многие из Петергофа работают.
Java Puzzle 48: All I Get Is Static
Тут рассматривается другая прописная истина: статические методы не виртуальны. Авторы перекрывают статический метод класса в его потомке, приводят экземпляр потомка к типу родительского класса и вызывают статический метод. Естественно, что вызывается метод родительского класса. Для избежания таких проблем - никогда не перекрывайте статические методы! А я еще заявлю, что профессионалы никогда не вызовают статический метод используя экземпляр класса. Я бы вообще запретил это на уровне языка.
Java Puzzle 47: Well, Dog My Cats!
Ну про эту задачку я и писать ничего не хочу. Авторы завели в базовом классе статический метод, а в классах-потомках его вызывают и удивляются, почему счетчик увеличивается для обоих экземпляров класса. Естественно! Каждое статическое поле едино как для самого класса, так и для его потомков.
Das Experiment
На NoName пробежала ссылка - поставил качаться.
вторник, 18 сентября 2007 г.
Фантазии из песка
Наткнулся на забавный сайт. Там можно скачать несколько интересных видеосъемок, как Ilana Yahav рисует песком раличные картины. Особенно радует динамика - то что постепенно картины меняются...
Nissan Quest
Недалеко от Казанского собора видел новенький Nissan Quest. Очень длинный минивэн. Я бы даже сказал макровэн - машинка явно не для крупных городов...
Бабье лето
Погода нынче отличная. Сегодня ездил в Городской Ипотечный банк за справкой. Это на набереной Мойки рядом с Исакиевским. Оттуда по каналам и мостам шел пешком на работу: Мойка, Грибанал и Фонтанка. Порадовало, что многие старые дома ремонтируют. Минус такой прогулки один: местные собачники заминировали все набережные...
Java Puzzle 46: The Case of the Confusing Constructor
Что делает следующая программа?
public class Confusing {
private Confusing(Object object) {
System.out.println("Object!");
}
private Confusing(double[] array) {
System.out.println("Array!");
}
public static void main(String[] args) {
new Confusing(null);
}
}
Это вопрос по спецификации. Первый из раздела "классические головоломки". Программа скомпилируется и выполнится конструктор, напечатающий Array. В приведенном выше примере оба конструктора можно вызвать, но по спецификации выбирается тот, который более конкретный. Это второй конструктор, так как каждый массив - это объект, но не каждый объект - массив. Для принудительного вызова необходимого конструктора нужно привести аргументы к типу, определенному в списке формальных параметров:
public static void main(String[] args) {
new Confusing((Object) null);
}
Обратите внимание, что если поменять тип первого конструктора в примере на Double (например), то программа не скомпилируется. В идеале, лучше избегать перегрузки конструкторов и методов.
public class Confusing {
private Confusing(Object object) {
System.out.println("Object!");
}
private Confusing(double[] array) {
System.out.println("Array!");
}
public static void main(String[] args) {
new Confusing(null);
}
}
Это вопрос по спецификации. Первый из раздела "классические головоломки". Программа скомпилируется и выполнится конструктор, напечатающий Array. В приведенном выше примере оба конструктора можно вызвать, но по спецификации выбирается тот, который более конкретный. Это второй конструктор, так как каждый массив - это объект, но не каждый объект - массив. Для принудительного вызова необходимого конструктора нужно привести аргументы к типу, определенному в списке формальных параметров:
public static void main(String[] args) {
new Confusing((Object) null);
}
Обратите внимание, что если поменять тип первого конструктора в примере на Double (например), то программа не скомпилируется. В идеале, лучше избегать перегрузки конструкторов и методов.
Java Puzzle 45: Exhausting Workout
Проверяются знания рекурсии. Что делает следующая программа?
public class Workout {
public static void main(String[] args) {
workHard();
System.out.println("It's nap time.");
}
private static void workHard() {
try {
workHard();
} finally {
workHard();
}
}
}
Забавно, но если метод будет вызывать сам себя, то вы достаточно быстро получите StackOverflowError. Но если использовать блоки try-finally, как в примере, то на ожидание StackOverflowError уйдет 10291 лет. Можно сказать
public class Workout {
public static void main(String[] args) {
workHard();
System.out.println("It's nap time.");
}
private static void workHard() {
try {
workHard();
} finally {
workHard();
}
}
}
Забавно, но если метод будет вызывать сам себя, то вы достаточно быстро получите StackOverflowError. Но если использовать блоки try-finally, как в примере, то на ожидание StackOverflowError уйдет 10291 лет. Можно сказать
понедельник, 17 сентября 2007 г.
Ленинградское настроение
Контрабас не попадает
Гитарист всегда лажает
Барабанщик мимо кассы
И не слышно марокасов
Наше шоу - это говно
Но оно такое одно
Но оно такое, такое одно
Гитарист всегда лажает
Барабанщик мимо кассы
И не слышно марокасов
Наше шоу - это говно
Но оно такое одно
Но оно такое, такое одно
Подписаться на:
Сообщения (Atom)