Спасти рядовых козявочек
Полдня играл в миниклиповскую игрушку Scribble. По способности выдумывать затейливую живность разработчики не уступают самому Босху: тут и козявочки (на самом деле это кляксы), которых нужно провести через весь уровень, умудрившись не сжечь и не убить падением со слишком большой высоты, и ходячие груши, и коровы (?) взрывающиеся от приступа клаустрофобии и т.д., и т.п. Управление будто пришло из керлинга: точно так же требуется подправлять движение предметов (козявочек или врагов) и точно так же процесс выглядит совершенно не тривиальным.
Рекомендую.
Спасибо Фромму
Неожиданно для себя узнал, что был такой психолог Эрих Фромм. Он считал, что в основе человеческих взаимодействий лежат два типа алгоритмов: «иметь» и «быть». Эти две противоположные установки универсальны настолько, что объясняют практически все, что связано с развитием личности.
Действительно, можно до посинения коллекционировать лошадиные силы, гигагерцы, дистрибутивы Linux, сертификаты MS или ученые степени, но это не будет иметь ни малейшего отношения к самореализации…
Дауншифтинг, ныне часто обсуждаемый, заключается в отказе от накопления денег и «титулов» (установка «иметь») в пользу раскрытия своего потенциала (установка «быть»)…
И даже каббалистическое «кли» (модель желания, потребности) до исправления действует по плану «иметь», после исправления — по плану «быть».
Бубном по Active Directory
Legacy-контроллеры домена снова обрадовали неведомыми глюками. Сегодня — отказом службы репликации файлов. Нечеловеческими усилиями удалось найти рецепт, который помог. Краткое изложение оригинала:
1) выбираем контроллер, который инициирует процесс;
2) идем в HKLM\SYSTEM\CurrentControlSet\Services\NtFrs\Parameters\Backup/Restore\Process at Startup, меняем значение BurFlags на «d4».
3) грохаем содержимое C:\WINDOWS\SYSVOL\domain\NtFrs_PreExisting___See_EventLog
4) перезапускаем службу репликации («net stop ntfrs», «net start ntfrs»).
Убеждаемся, что в журнале событий отразились изменения к лучшему. Можно проверить работоспособность контроллеров с помощью dcdiag.
String.format(…)
Даже в Java (точнее JDK 1.5) можно писать лаконично. Задача: получить незанятый инвентарный номер из БД и вывести его в виде строки из 8 цифр (с ведущими нулями по необходимости):
// открываем транзакцию...
Transaction ta = session.beginTransaction();
// получаем последний занятый номер
Integer lastNumber = (Integer)session.createSQLQuery
("SELECT max(inumber) FROM assets")
.list().get(0);
// ...закрываем транзакцию
ta.commit();
// вот оно! форматируем а ля sprintf
out.print(String.format("%08d", ++lastNumber));
Мне бы такую способность
По-азиатски деспотичный провайдер «Уралсвязьинформ» непреклонен в своем стремлении согнать клиентов с дешевого и сердитого тарифа «Турбо 64K» на не слишком оправданный для дома «Ультра 128». Сначала поднимая цену, а теперь урезая 64K до фактических 56K. И ничего ему за это не будет.
РПЦ, СОШ и ОПК
Пока мы праздновали и бездельничали, аккурат под католическое Рождество, оказывается, случилось нехорошее:
С 1 сентября 2009 года во всех школах России будет введен предмет «Основы православной культуры», заявил глава Русской православной церкви Алексий II.
Лоббирование интересов ЗАО «РПЦ» в школе — устоявшаяся традиция. Проходили и псевдоскаутское движение, и окропление святой водой на первосентябрьских линейках. И на академиков с их открытыми письмами чихали. Впрочем, теорию Дарвина еще не заменили концепцией Разумного Замысла. Уже неплохо.
У церкви per se есть очень важная функция. Примерно та же, что у консервной банки: как можно дольше сохранять в неизменном виде то, что в нее положат. Другими словами, задача церкви — хранить тот образ жизни, образ мыслей, работоспособность которого давно подтверждена. Этот резервный lifestyle, разумеется, не самый оптимальный. Он просто проверенный. Как консервированная рыба: вариант не лучший, но приемлемый вкус гарантирован. В конце концов, запас на черный день не обязан быть свежим.
И хотя сейчас ничто не предвещает черного дня в каком бы то ни было смысле, «православный энзэ» уже достают со склада. А гендиректор Алексий обещает его развернуть. Увы.
Кабельный превед
Оператор кабельного ТВ балуется. Снято на телефон.

Модуль аутентификации к Jetty
Для написания своего Login Module документация по JAAS в Jetty отправляет к соответствующим исходникам и намекает, что нужно всего лишь накодировать метод getUserInfo. Это чистая правда, но пока врубишься что к чему, Jetty наплюет не один килобайт логов с ошибками. Итак, что получилось:
package levi.ainv;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.mortbay.jetty.plus.jaas.spi.AbstractLoginModule;
import org.mortbay.jetty.plus.jaas.spi.UserInfo;
import org.mortbay.jetty.security.Credential;
public class DBLoginModule extends AbstractLoginModule {
@Override
public UserInfo getUserInfo(String userName) throws Exception {
// в моем случае используется Singleton-объект Engine,
// который хранит хэшмап с юзерами
User user = Engine.itself().selectUser(userName);
// на нет и суда нет
if(user == null) {
return null;
}
// заливаем роли в список
List<String> roles = new ArrayList<String>();
Iterator<Role> userRoles = user.getRoles().iterator();
while(userRoles.hasNext()) {
roles.add(userRoles.next().getName());
}
// ключевой момент - возвращаем имя юзера,
// креденшл, изготовленный из простого строкового пароля, и список с ролями --
// дальше родительский класс сам сравнит пароли и роли,
// которые мы предоставили для заданного имени юзера и решит
// пущать или не пущать
return new UserInfo(userName, Credential.getCredential(user.getPassword()), roles);
}
}
То есть, нужно из своего супер-секретного-хранилища юзерских аккаунтов, где бы оно ни было, вытащить аккаунт с заданным именем, запаковать в объект UserInfo и return его. Больше ни о чем думать не требуется.
Кўсо живо
Поисковик по Unicode-символам убедительно доказал, что „устаревший“ иероглиф для японского слова «kŭso» (в перев. на англ. «shit») живее всех живых. Вуаля:
糞
Вполне потребно им ругаться. К примеру:
— 糞! Опять netsplit!
Groovy
Еще один язык в очереди на изучение. Скриптовая java — это страшная сила.