суббота, 21 апреля 2012 г.

Java object initializers

После перехода на Java очень не хватает различного синтаксического сахара, присущего C#, периодически даже можно впасть в тоску. В этот раз я хочу сказать кое-что о инициализаторах объектов.

Типичное создание объектов в Java:

 Person joe = new Person();  
 joe.setFirstName("Joe");  
 joe.setLastName("Doe");  
 joe.setAge(33);

В то время как в C# это выглядит так:

 var joe = new Person { FirstName = "Joe", LastName = "Doe", Age = 33 };  

Чуть проще, не правда ли?

Недавно в исходниках на работе я наткнулся на интересную конструкцию, которая привлекла моё внимание:

 Person joe = new Person() {{ setFirstName("Joe"); setLastName("Doe"); setAge(33); }};  

Хм, странно, конечно, двойные фигурные скобочки? Но уж очень мне это напоминает код на C#.

Я обрадовался — для меня это выглядит получше четырёхстрочной инициализации. Однако, немного разобравшись в смысле этой конструкции, моя радость быстро превратилась в... что-то вроде подозрения.

Что на самом деле происходит за кулисами?

среда, 18 апреля 2012 г.

GMail

Недавняя статья Джефа Атвуда о безопасности гмейла зацепила за живое. Я и так недавно задумывался о том, что многовато одинаковых паролей использую. Даже когда-то видел в LastPass инструмент для статистики по дубликатам и надёжности паролей, сейчас что-то уже не нашёл. У меня всё оказалось прямо таки так же плохо как и у людей о которых говорят в статьях по безопасности в лучшем случае "не делайте так".

Сегодня с утра я включил двух фазовую аутентификацию и распечатал пачку одноразовых кодов как для гмейла так и для ластпасса, отозвал авторизацию всех приложений, связанных с аккаунтом гугла, сменил в почте пароль на 20-ти значный параноидальный бред и судорожно стал его заучивать. Теперь куда не ткнусь — везде слетела авторизация. Ужасаюсь, как много доступа я раздавал.

Обезопасьте и свою виртуальную жизнь! 
Хорошего дня!

пятница, 13 апреля 2012 г.

Assume that...

Недавно правил интеграционные тесты, которые работали очень нестабильно как локально так и на CI сервере, что не давало скрипту запустить статический анализ кода долгое время. Модуль должен был взаимодействовать с базой и совершать некоторые блокирующие операции. Тест часто падал, потому что база была девелоперская и в ней постоянно кто-то ковырялся и задевал в частности и используемую тестом таблицу.

Это не выглядело правильным и мне пришло в голову во время выполнения игнорировать тест, если база находится в неподходящем состоянии.

NUnit позволяет это делать с помощью очевидно инструкции: Assert.Ignore()

The Assert.Ignore method provides you with the ability to dynamically cause a test or suite to be ignored at runtime.

Однако в JUnit я подобного не обнаружил. Поковырявшись ещё немного, я нашёл класс Assume:

A set of methods useful for stating assumptions about the conditions in which a test is meaningful. A failed assumption does not mean the code is broken, but that the test provides no useful information. The default JUnit runner treats tests with failing assumptions as ignored. Custom runners may behave differently.

То что надо! После рефакторинга вышло что-то такое:

assumeTrue(db.isNotLocked());
db.lock();
// do stuff with db

Работает, как и ожидалось: если база занята - тест пропускается, иначе - выполняется как следует.
Надеюсь, пригодится в написании интеграционных тестов.

Хорошего дня!

четверг, 12 апреля 2012 г.

Я переехал!

Погрязнув в настройках G+ и Blogger и собравшись с силами, я таки переехал. С сегодняшнего дня мой блог доступен по адресу:


Лёгкий шаблонный редизайн прилагается. Так же теперь можно поставить +1 к любому сообщению или ко всему блогу (сбоку всплывающая панель), а так же добавить меня в круги в Google+ (там же). Милости просим!

Спасибо!
Хорошего дня!

пятница, 6 апреля 2012 г.

Как получить загран. паспорт в МАИ

Из своего личного опыта, который был только что заработан, хотел бы выделить несколько полезных заметок для тех, кто захочет получить загран в МАИ.

Я не претендую ни на полноту, ни на актуальность. Но вы можете оставить свои замечания и обновления в комментариях, спасибо.

понедельник, 2 апреля 2012 г.

Кино: Голодные игры

Да, наученный опытом случайного удаления больших постов буду плодить маленькие.

Собственно, Голодные Игры
Ходили взамен Гнева Титанов, на которые не попали по времени. Осторожно, снизу может быть спойлер!