Некоторое время назад Google представил свою разработку GWT, предназначенную для быстрой разработки web-приложений с использованием новомодной технологии AJAX.
Теперь они пошли ещё дальше. Они разрабатывают App Engine, который предоставляет API для инфраструктуры Google. А это распределённый хостинг на серверах Google, включающий доступ к базам данных. Теперь не надо думать о том, какой сервер купить, к какому провайдеру его поставить, как обеспечить надёжность сервера и её непрерывную работу, если что-то сломается...
Для меня тут один минус - движок на языке Python. Но кое-кто из вас, читающих мой блог, использует этот язык. Хороший шанс попробовать - попади в десятку (тысяч ;) зарегестрировавшихся первыми!
четверг, 10 апреля 2008 г.
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 должно быть простым делать всё правильно и должно быть сложным или невозможным делать неправильно.
Подписаться на:
Сообщения (Atom)