воскресенье, 16 сентября 2007 г.

В чем разница

Как произносится C#?
Программист: Си шарп
Музыкант: До диез

Может подколоть кого-нибудь, например, ГерМиша:
"И как тебе на До диезе программируется?"

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

Московская площадь

Возвращаясь в четверг из кабака шли с Кэпом к метро. И тут приспичило. Ну Кэп сказал, что знает выход: на площади построили туалеты. Ну мы и пошли...
Блин, как давно я там не был! Площадь отремонтировали, сделали фонтанный комплекс, скамеечки поставили, туалеты сделали с двух сторон площади. Облагородили короче. Теперь это любимое место молодежи, катающейся там на скейтбордах и роликах, так как там есть горки и препятствия разные. Короче, стоит съездить посмотреть.
Знай и люби свой город!

Java Puzzle 44: Cutting Class

Рассмотрим следующие классы:
public class Missing {
    public Missing() {
    }
}
public class First {
    public static void main(String[] args) {
        try {
            Missing m = new Missing();
        } catch (NoClassDefFoundError error) {
            System.out.println("Got it!");
        }
    }
}
public class Second {
    public static void main(String[] args) {
        Missing m;
        try {
            m = new Missing();
        } catch (NoClassDefFoundError error) {
            System.out.println("Got it!");
        }
    }
}
Если скомпилировать все три класса, а затем удалить файл Missing.class, то можно обнаружить, что программы First и Second выполняются по разному. Одна из них генерирует исключение NoClassDefFoundError, а вторая печатает Got it!
Можете определить и объяснить, как выполняется каждая из программ?

Программа First содержит удаленный класс только внутри блока try, поэтому можно ожидать, что исключение NoClassDefFoundError будет перехвачено и программа напечатает Got it! Программа Second содержит удаленный класс вне блока try, поэтому можно ожидать, что исключение NoClassDefFoundError не будет перехвачено. Однако, если запустить обе программы, то можно убедится, что они ведут себя совсем наоборот!

Проблема заключается в небольшой разнице в скомпилированном коде. А если необходимо определить, что класс пропал, используйте reflection:
public class Third {
    public static void main(String[] args) {
        try {
            Object m = Class.forName("Missing").newInstance();
        } catch (ClassNotFoundException exception) {
            System.out.println("Got it!");
        }
    }
}
Но самый главный совет: не перехватывайте Error или его подклассы. Эти исключения зарезервированы для проблем, после которых невозможно восстановиться...

Java Puzzle 43: Exceptionally Unsafe

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

Солдат

Пока сидели зашел разговор о фильме Солдат. Оказалось, что Кэп его не видел.
Пересмотрел сейчас. Классный боевик. Каждый раз считаю сколько солдат завалил Курт Расселл и каждый раз сбиваюсь со счета. Из 20 возможных он убил 21 или 22 солдата. Забавно. Ляп на ляпе, но смотрится на одном дыхании. И не один раз. А как они с пареньком мелким играют! Без слов друг друга понимают...
На IMDB пишут, что среди мусора на планете-свалке американский корабль Франклин Рузвельт, самолет F-117X Remora из фильма Executive Decision (1996) и агрегат из фильма Blade Runner (1982). А так же много других приколов, типа карты московского метрополитена...
У меня еще перевод хороший, одноголосый. Мне больше нравится, чем перевод на DVD, который я видел.
- Почему они это делают?
- Они выполняют приказ, сэр.
- Сколько их?
- Осталось 17, сэр.
- Один против 17-ти. Что вы будете делать?
- Я их всех убью!

четверг, 13 сентября 2007 г.

Хорошо посидели

День программиста мы отпраздновали, посидев в неплохом кабачке на площади Конституции. Были Пашка и Кэп. Ринат обещал, но не доехал.
Гиннесс наливают по 170 рублей. Кажется самое дешевое место в городе. Еще есть Килкенни и Крушовице. Народу мало - не то что в центре.
Литр Гиннесса - это пять! А сейчас - спать...

С праздником!

Сегодня 256-й день года. И что из этого следует?
Это же наш профессиональный праздник - День программиста!
Поздравляю всех друзей и коллег!
Да поможет вам F1!
Да сохранит вас F2!
Во имя Ctrl, Alt и Del - RESET!

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

Пожар в Рыбацком

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

Korpiklaani

Прикупил тут их альбомчик Voice Of Wilderness (2005). Очень забавный Folk Metal, сочетающая в себе гитарные партии, ударные, флейту, скрипку, клавишные и прочие фолк инструменты. Атмосфера в музыке очень позитивная. Очень удачно выходят у них припевы.
Слушать ее лучше всего попивая пивко в кабаке и танцуя время от времени, как мы это делали в Визите под Lucky Sharks. Расслабляйтесь!

Java Puzzle 42: Thrown for a Loop

Тут авторами была написана большая программа, которая обходила все массивы, содержащиеся в другом массиве. Приводить я ее не буду, расскажу вкратце...
Обход массива был сделан с помощью бесконечного цикла, выход из которого осуществлялся при отлавливании ArrayIndexOutOfBoundsException. И программа работала непонятным образом, так как все такие исключения втихую пропускались. Это первый совет: никогда не используйте исключений для управления циклом, а используйте исключения только для обработки исключительных условий. Этот совет, кстати, был еще в книге Блоха "Эффективное программирование на Java", Item 39.
Второй проблемой в программе было использование оператора & для логического выражения: (3 <= array.length) & (array[2] == 3)
При таком использовании второе выражение вычисляется несмотря на то, что первое имеет значение false. И, естественно, происходит исключение...

Java Puzzle 41: Field and Stream

Копируем содержимое файла. При окончании процесса копировани закрываем потоки. Или нет?
static void copy(String in, String out) throws IOException {
    InputStream input = null;
    OutputStream output = null;
    try {
        input = new FileInputStream(in);
        output = new FileOutputStream(out);
        byte[] array = new byte[1024];
        int count;
        while ((count = input.read(array)) >= 0) {
            output.write(array, 0, count);
        }
    } finally {
        if (input != null) input.close();
        if (output != null) output.close();
    }
}
Ну да! Как и ожидалось при возникновении ошибки при закрытии первого потока второй закрыт не будет. Главный урок этой задачи: обрабатывайте любые проверяемые исключения, которые могут произойти в блоке finally.

Предвыборная суета

Путин принял отставку правительства Михаила Фрадкова. Фондовые рынки просели в ответ на отставку. Блин! А не ожидает ли нас очередной дефолт?

Гонка вооружений

Наши испытали новую авиабомбу объемного взрыва. "Папа всех бомб", как прозвали это чудо наши СМИ, делает "маму всех бомб" по всем параметрам. Тут есть видеозапись, показанная по первому каналу. После таких приколов становится понятно, почему НАТО пугается при приближении наших самолетов, начавших патрулировать воздушное пространство.
Ждем ответный ход американцев. Новая "холодная" война? Или начнется "горячая"?

Apocalyptica in Tallinn

Apocalyptica устраивает тур в поддержку своего нового альбома Worlds Collide (2007). Из турфирмы Визит пришла рекламка на их концерт в Хельсинки, но выйдет дороже, так как еще гостиницу оплатить надо, да и саму турфирму не обделить. Есть вероятность, что мы с Юлей и Мишкой в это время будем гостить у бабушки в Таллинне. Надо попробовать выделить время на концерт.

System Shock


Зашел вчера в Кайлас. Искал чего-нибудь послушать. Случайно увидел диск группы System Shock. Название привлекло тем, что когда-то была такая компьютерная игра. Интересная. Послушал альбом Arctic Inside (2004). Понравилось. Решил взять...
Вечером слушал дома. Наслаждался. Несколько первых песен и последняя очень даже зацепили. Альбом короткий, минут на 40. Надоесть не успевает. Добротный мелодичный death от шведов. Гитарный саунд достаточно тяжёлый, но при этом очень мелодичный. Вокал - стандартный гроулинг, но не напрягающий.
Понравилось настолько, что хочу найти их второй альбом Escape (2006). Говорят он еще лучше первого...

Масяня

Что-то Куваев размахнулся. Новый мульт на 7 метров выпустил. Самый длинный, говорит...

вторник, 11 сентября 2007 г.

Opeth


Купил альбом Ghost Reveries (2005). На этом альбоме снова появляется превосходный глубокий гроул и сочные гитарные риффы. Так же слух радует наличие лирических акустических вставок. Воистину мастерское владение каждого участника группы своими инструментами разбавляют и вносят в каждую песню неповторимые и разнообразные ходы. Альбом богат всяческими переходами и измененем звучания практически в каждой композиции. Еще бы! Там 4 композиции из 8 продолжительностью более 10 минут.
Пожалуй, на данный момент это наиболее интересный диск Opeth. Здесь нет легко запоминающихся мелодий и рефренов. Есть профессионализм и мастерство, высочайший уровень техники исполнения и нестандартность музыкального мышления. Супер!

Java Puzzle 40: The Reluctant Constructor

Вот, блин, навернули:
public class Reluctant {
    private Reluctant instance = new Reluctant();
    public Reluctant() throws Exception {
        throw new Exception("I'm not coming out");
    }
    public static void main(String[] args) {
        try {
            Reluctant r = new Reluctant();
            System.out.println("Surprise!");
        } catch (Exception e) {
            System.out.println("I told you so");
        }
    }
}
А StackOverflowError получить не желаете? Дело в том, что поля класса инициализируются перед исполнением содержимого конструктора. Вот так и зацикливаемся...
Обратите внимание, что конструктор должен декларировать все проверяемые исключения, которые могут возникнуть не только в теле конструктора, но и в процессе инициализации полей класса.

Java Puzzle 39: Hello, Goodbye

Что напечатает следующая программа?
try {
    System.out.println("Hello");
    System.exit(0);
} finally {
    System.out.println("Goodbye");
}
System.exit останавливает выполнение текущего потока и всех других в текущей позиции. Даже finally блок не имеет права продолжать работу. Если очень надо, чтобы программа выполняла некоторые действия при завершении работы виртуальной машины - используйте shutdown hooks:
System.out.println("Hello");
Runtime.getRuntime().addShutdownHook(
    new Thread() {
        public void run() {
            System.out.println("Goodbye");
        }
    }
);
System.exit(0);

Хайям о нас

Мир я сравнил бы с шахматной доской:
То день, то ночь. А пешки? – мы с тобой.
Подвигают, притиснут, – и побили,
И в темный ящик сунут на покой.