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

Java Puzzle 74: Identity Class

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

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

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

Java Puzzle 73: Your Privates Are Showing

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

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

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

JavaFX

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

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

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

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

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