13.02.13

ASCII Image of the day

Combining latest rocket science and 30 years old Internet protocol together for fun.

This small project is inspired by Star Wars Episode 4 via DNS of which you probably heard. Unfortunately this nice trick is no longer available, but it will be remembered in our hearts.

So when I saw this traceroute output I thought "Wow", that's cool. Can I do something at least somewhat cool too? Obvious idea was to use something to do something, what this first something was not intended to do. Like reverse DNS lookup was not intended to show intro of Star Wars, Episode IV.

So I came up with the idea to combine ancient service from the times when Internet was young and NASA's Image of the day.

27.10.12

Последняя осень


Прошлые выходные были, наверное, последними теплыми выходными в этом году. В парках под каждым желтым деревом собирались толпы желающих сфотографироваться. Ну да, осень то последняя, в декабре конец света, потом желтых деревьев уже не будет.




Бурундуки все куда-то подевались. Раньше они увидев человека с орешками выскакивали откуда-то из кустов и бесстрашно бросались вперед и не останавливались ни перед чем, чтобы завладеть орешком. Но в это воскресенье их не было. Наверное улетели в теплые края.
Теперь над парком безраздельно влавствуют белки, радостно занимая оставленные бурундуками звенья пищевой цепочки.




А сегодня идет дождь. И завтра будет идти дождь. И холодно. Видимо лето закончилось совсем. Впереди только зима и конец света, конечно. Будет что вспомнить в следующем году.



25.08.12

Отпуск 2012

Вот и закончился отпуск. 4800 км от Торонто до Новой Шотландии и обратно. Уставшая задница болит, как будто все это время ехал на велосипеде.
Машина поломалась еще на полпути от Торонто к Монреалю и капала маслом откуда-то из-под впускного коллектора куда-то на выхлопную трубу. Но это не помешало нам проехать еще больше 4-х тысяч км.

24.03.12

Еще слайды

И снова после долгого перерыва пришло время посмотреть на фотографии с телефона.


Начнем с гигантской моли.







27.11.11

Слайды - 3



Количество интересных фотографий на телефоне становится все меньше. Видимо я тут уже привык и не замечаю забавностей. А может погода испортилась и я стал меньше ходить, а из машины много не на фотографируешь.

Как бы там ни было, вот очередная серия "слайдов" с мобильного.





20.11.11

Индикатор для CI сервера своими руками

Состояние с процессами разработки на моем текущем месте работы в лучшем случае можно охарактеризовать как «плачевное». К счастью один из коллег не готов с этим мириться и пытается сдвинуть все с мертвой точки, приводя в порядок код, настраивая сервер для continuous integration, и по мере своих возможностей убеждая всех и каждого, что надо что-то менять.
Я, со своей стороны, решил помочь ему, чем могу и собрал простейший индикатор состояния билда из пластиковых бутылок, мотка веревки, пластилина и проволочки Arduino, детской машинки, python'a и джаббера. Правда и тут часть кода он успел написать :)

21.10.11

Слайды - 2

Продолжаем публикацию картинок с телефона. В этот раз все больше о себе и об окружающей среде.

05.10.11

Человек и аверс

Желание моей жены собрать как можно больше разных монеток, а так же те факты, что:
а. На канадских монетках изображена канадская королева
б. Королева стареет
сподвигли меня провести небольшое нумизматическое исследование. Попутно выяснилась еще пара интересных фактов, но о них позже.

02.10.11

Слайды

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

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


22.08.11

Обыкновенные люди...квартирный вопрос только испортил их

Немного о недвижимости и о том, что она из себя представляет в Миссиссаге.

Практически весь город - низкая застройка, 2-3 этажа. Это отдельные дома, таунхаусы и комплексы-кондоминиумы. Высоток относительно немного и это апартаменты и опять таки кондоминиумы.

Отдельные дома - это, понятное дело, здорово, но, к сожалению, про них практически ничего не смогу рассказать, поскольку стоимость их аренды выходила за пределы моего скромного бюджета. Агенты называли мне стоимость порядка 1600 – 1800 долларов в месяц + коммунальные услуги. Для сравнения стоимость квартиры с 2-мя спальнями в центре города колеблется от 1200 до 1600 долларов с оплатой всех услуг, за исключением электричества и кабельного ТВ.

12.08.11

Губит людей не пиво

Одной из неожиданных сторон жизни в Онтарио для меня оказалось то, что тут нельзя просто так придти в магазин и взять себе пивка, чтобы расслабиться вечером. Практически весь алкоголь можно купить только в магазинах LCBO. Есть еще сеть Beer Store, которая продает, как понятно из названия, пиво, да в некоторых супермаркетах есть отделы по продаже вина.

Вот такое тяжкое наследие сухого закона, который действовал в Канаде в конце XIX - начале XX века. В Онтарио сухой закон отменили в 1927 году, и тогда же организовали государственную компанию, которая взяла на себя тяжкий труд снабжения населения бухлом.

Уже почти 85 лет прошло, а ничего тут не изменилось.

07.08.11

Колеса


Завершаем наш экскурс в автомобильный мир Онтарио. Начало.

Итак, автомобиль выбран, пора уже и покупать его.

Если вы покупаете сертифицированный автомобиль у дилера, поздравляю. Все что надо сделать - занести денег и забрать машину с номерами и стикером. Без стикера, наклеенного на номер ездить нельзя. Стикер выдается на год.
Если покупаете машину "как есть", то процедура несколько усложняется - дилер наклеит вам на номер временный стикер, с которым можно ездить 10 дней. За это время надо пройти тест безопасности, получить сертификат и получить стикер.
Если же машину покупаете у хозяина, то процедура примерно такая же. Надо зарегистрировать покупку, пройти тест безопасности заплатить за стикер и номера.

26.07.11

Автовладелец радуется два раза - когда покупает машину и когда ее продает

А я даже старые машины не люблю. Понимаешь, мне неинтересно. Лучше бы я себе завёл лошадь, чёрт побери. В лошадях хоть есть что-то человеческое. С лошадью хоть поговорить можно…
Я, в отличие от Холдена Колфилда, люблю машины, а не лошадей. Поэтому, получив права, озадачился вопросом приобретения железного коня. Отсутствие машины отрицательно сказывается на возможностях посмотреть окресности (а в городах тут смотреть нечего), грузоподъемности в магазинах, и вообще возможности перемещаться. На небольших улочках часто не предусмотрены тротуары. Вообще. Выработав железную аргументацию, подводящую теоретическую базу под свое желание и успокоив таким образом жабу, можно переходить к реализации этого самого желания.

20.07.11

Каждый человек... и т.д. Дополнение

В дополнение к посту про вождение.
Это моя бумажка с вождения, в ней отмечены все сделанные мной ошибки.

18.07.11

Каждый человек имеет право. Часть вторая. Вождение

Итак, теория сдана, деньги за вождение заплачены, дата определена. Самое время пойти и взять пару уроков сдачи экзамена. Да-да, именно сдачи экзамена, а не вождения. Водить любой дурак может и примеров этому — тысячи. И все вокруг нас.
Но вернемся к вождению. Стоит хотя бы раз проехаться с инструктором в районе где будет проходить сдача теста и выполнить все те действия, которые будут на экзамене. Так я и сделал. Заодно понял, что опыт вождения не гарантирут сдачу экзамена. Главное на экзамене — крутить головой (показательно, чтобы экзаменатор видел), контролировать скорость и парковаться на расстоянии от 15 до 30 сантиметров от бровки :)
Я взял два урока — один раз просто так, а второй раз — непосредственно перед сдачей.
На сдачу вождения надо приехать на своей машине. Поскольку моя осталась на расстоянии в семь с половиной тысяч км, пришлось искать другой вариант. Это кстати еще один повод взять уроки — инструктор легко, баксов за 100-120, предоставит вам свой пепелац для сдачи экзамена.
Во время экзамена рядом сидит скучный экзаменатор и бубнит “turn left on a next street”, “change lane to the left and back” и т.д. И все записывает. Не проверил слепую зону при перестроении — галочка в списке ошибок, не посмотрел по сторонам проезжая перекресток — галочка, превысил скорость — галочка, едешь 50 при ограничении 60 — галочка. Всего можно набрать до 29 галочек. Правда если сделать более двух однотипных ошибок — все, экзамен не сдан. Спасает то, что ошибки однотипные, но в разных разделах теста. И если в первый раз не проверил слепую зону при перестроении на хайвее, а второй раз — при парковке в жилой зоне, то эти две однотипных ошибки считаются разными.
В общем 12 ошибок из 29, congratulations, you have passed the test и я иду к стойке получать права. Права выдают временные, напечатанные на листике, пластиковая карточка прийдет по почте недели через полторы. Права выдаются на 5 лет. Через пять лет надо будет пойти сфотографироваться, заплатить денежку и получить новую карточку на следующие 5 лет.

Каждый человек имеет право

Расскажу про то, как я получал канадские права. Еще раз отмечу, что мой опыт относится к провинции Онтарио, в других местах все может быть по другому.
Прежде всего о системе категорий. Для права управления легковыми автомобилями, водитель должен иметь категорию G. Получить ее просто так нельзя. Сначала надо сдать Written Test, по-нашему - теорию. После этого выдаются права категории G1, с которыми уже можно ездить. Но при этом в машине рядом с водителем должен находиться другой водитель с правами категории G и минимум 4 годами стажа. Ну и на самого водителя накладывается куча ограничений, где и как он может ездить.
Проездив таким образом год, можно сдавать вождение - G1 exit test. Сдав его, молодой водитель получает категорию G2. С ней уже, наконец, можно ездить самостоятельно. По прежнему нельзя ни капли спиртного и нельзя сажать в машину больше пассажиров, чем есть ремней безопасности. Проездив год с категорией G2, можно опять сдавать вождение - G2 exit test. Тут проверят еще умение ездить по хайвею. Сдав и этот тест, наконец-то получаешь вожделенные права категории G.
Если вы в Онтарио понаехали уже с родными правами то можно себе жизнь упростить. Если в правах все написано по английски или французски, ну или если права перевести в консульстве, то вождение можно сдать сразу и сразу получить G2. Если еще взять из консульства бумажку, подверждающую немеряный опыт управления самодвижущимися повозками в этих ваших странах, то можно сдавать сразу на G.
Мои старые украинские права (картонка в ламинате) не проканали, пришлось их переводить. Новые, пластиковые, проканывают. Еще один нюанс - если имя в правах и в паспорте написано по разному, то придется еще брать из консульства справку про то, что вы - это вы, как бы вас не писали.
Сам экзамен довольно прост. Состоит из двух частей по 20 вопросов. В каждой части можно сделать до 4-х ошибок. Самые на мой взгяд поганые вопросы - про наказания за нарушения. Но их всего 4 или 5 в билете, так что применяя здравый смысл и везение, довольно легко уложиться в 20% ошибок. Я к теории практически не готовился, прочитал скачанный PDF с правилами вечером перед экзаменом.
Вся процедура с регистрацией, тестом зрения и оплатой заняла минут 40. Но это потому, что я пришел за пол-часа до открытия центра и был первый в очереди.

В следующий раз - про сдачу вождения.

Держим в банко миллионо...

Один из важных пунктов для начинающего гастарбайтера - банковский счет, на который благодарный работодатель сможет перечислять честно заработанное бабло.
Открыть счет просто — идете в любой банк, который нравится и говорите, что хотите счет. Через минут 30-40 у вас будет счет (даже два — chequing и savings) , несколько чеков и дебитная карточка. Вариантов разных тарифов довольно много, возможно для начала будет достаточно того, что предложат в банке.
Пара вещей, не очевидных для граждан, прибывших из стран, в которых банковская система ориентирована на то, что люди тратят те деньги, которые у них есть. Первое - транзакции по дебитной карте — платные. Обычно в пакет входит некоторое количество бесплатных транзакций в месяц, за остальные придется отдавать свои кровные денежки. Стоимость транзакции можно уменьшить, если положить на счет какую-то сумму, например не менее 3000 долларов. Второе — дебитная карта не годится для использования в интернете. Она не принадлежит ни к какой платежной системе, ее номер может состоять не из 16 цифр, а из, к примеру, 19 и на ней нет ни имени владельца, ни CVV2 кода.
В любом случае, лучше всего сразу получать кредитную карту — это поможет в создании кредитной истории, без которой могут быть сложности со снятием жилья, покупкой чего-либо в кредит и т.д.
Но без кредитной истории вам кредитную карту просто так не сделают. Вот такой замкнутый круг получается. Чтобы этот круг разорвать потребуются деньги. Вы эти деньги кладете на свой savings счет, и банк их там замораживает как гарантию того, что вы погасите кредит. Банк выдаст вам кредитную карту с лимитом равным сумме, замороженной на счету. Это называется secured credit card. Через какое-то время (зависит от банка — у меня это 2 года), когда банк убедится, что вы исправно погашаете кредит, вы сможете получить unsecure credit card, а деньги вам вернутся.
Кредитную карту так же можно получить в каком-нибудь крупном магазине, типа Wal-Mart. Ее предлагают всем, но могут не выдать, если им не понравится ваша кредитная история. Так что лучше начать с банковской кредитки, а волмартовскую получить месяца через три-четыре. У магазинной кредитки есть также бонус в виде скидки на покупку в этом магазине.
Так же стоит сразу же при получении карты заказать чековую книжку. Она понадобится при съеме квартиры. Обычно, снимая жилье, вы платите за первый и последний месяц, на остальной срок выдаете хозяину 10 чеков, датированные каждым последующим месяцем. Если вы не закажете чековую книжку, то у вас будет только несколько (в моем банке 4,  в других может отличаться) чеков, чего явно не достаточно. Учитывая, что чековая книжка придет к вам по почте через 7-10 дней после заказа, не стоит с этим затягивать.

Где находится Канадá?

Канада в данный момент находится вокруг меня. В основном на север, немного на восток и много на запад.
Вообще-то нифига я не планировал писать про Канаду. Хотел обойтись фотками. Однако в Greater Toronto Area особых красот за прошедшие две с половиной недели я не обнаружил, а вот экспириенса в плане гастарбайтерства немного получил.
Поэтому когда в очередной раз надоело читать книжку в отеле, я решил попробовать чего-нибудь написать. Поделиться, так сказать, опытом. Just for lulz.
Канада, как вы все безусловно помните по школьным занятиям географией, является конфедерацией. Я нахожусь в провинции Онтарио, возможно в других провинциях все на самом деле по другому, я не знаю.

23.04.11

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

Вчера получил это:
Congrats! Be Informed that, £1,500,000 British Pounds has been Awarded to your Email held in April, 2011;
Fill Form;
Name....
Address...
Country...
Tel...
We await your Response

А сегодня этот шедевр лаконичности:
Your email address have won 2.5 million pounds.Names:Address:Country:Age:
Измельчали, измельчали

10.04.11

Андроид: Поддержка нескольких языков и переключение их из настроек приложения.

Нелегкая судьба андроид-программиста заставила меня принять участие в Контесте андроид-разработчиков, проводимом HTC.

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

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

А еще хотелось, чтобы пользователь мог переключать язык из настроек приложения.

Cyanogenmod поддерживает возможность установки украинской локали. Однако, по понятным причинам, не стоит ожидать, что жюри в конкурсе HTC будет использовать устройства с цианогеном.

Я остался перед выбором:

  • в качестве языка по умолчанию использовать украинский. После окончания конкурса заменить его на английский, а русский и украинский оставить тем, у кого включена соответствующая локаль.
  • забыть про системные средства локализации, сделать свой менеджер локализации. 

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

Поэтому я остановился на 1-м варианте. Но не сразу. Я таки сделал маленький mock-менеджер локализации и попробовал как он работает. Получилось отвратительно. Но! Благодаря этому я получил в настройках приложения опцию Language, которую мне не хотелось выбрасывать.

И я стал думать дальше. В процессе размышлений я дошел до класса Locale и его метода setDefault().  Сам по себе он не помог, поскольку менеджер ресурсов андроида использует локаль из своих настроек. Но и эти настройки можно изменить.

Итак, что я сделал.
В ресурсы я добавил два массива для окна настроек:

<string-array name="languages">
    <item>English</item>
    <item>Українська</item>  
    <item>Русский</item>
</string-array>
 
<string-array name="language_values">
    <item>en</item>
    <item>uk</item>
    <item>ru</item>
</string-array>

GUI для выбора языка я поместил в стандартное PreferenceActivity.
Моя PreferenceActivity реализует интерфейс OnSharedPreferenceChangeListener . В метод onSharedPreferenceChanged помещаем следующий код:

String lang = prefs.getString(key, Consts.DEFAULT_LOCALE);
Utils.setLocale(this, lang);
Const.DEFAULT_LOCALE - это просто строка "en".
И вот в методе Utils.setLocale() и происходит волшебство, размером всего в 5 строчек кода.

public static void setLocale(Activity a, String lang) {
    Locale locale2 = new Locale(lang);
    Locale.setDefault(locale2);
    Configuration c = new Configuration(a.getBaseContext().getResources().getConfiguration());
    c.locale = locale2;
    a.getBaseContext().getResources().updateConfiguration(c, a.getBaseContext().getResources().getDisplayMetrics());
}
locale2 - это наша новая локаль, создаваемая с переданным кодом языка. Код берется из массива language_values. Сперва мы устанавливаем ее как локаль по умолчанию для Java, а затем изменяем конфигурацию менеджера ресурсов андроида. Благодаря этому при загрузке ресурсов будут использоваться ресурсы, соответствующие новой локали. Все активити, созданные после этого будут использовать ресурсы в только-что установленной локали. Правда, все активити, которые уже созданы не поменяются.

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

Ах, да. Самое главное. В основной активити, которая запускается первой (ну и вообще в любой активити, которая может быть запущена интентом) я вызываю следующий метод в onCreate(), сразу после super(): Utils.setLocale(this);. Это перегруженный метод setLocale, который берет текущий язык приложения из SharePreferences. Выглядит он так:

public static void setLocale(Activity a) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(a);
    setLocale(a, prefs.getString(Consts.PREF_LOCALE, Consts.DEFAULT_LOCALE));
}
Теперь мое приложение поддерживает локализацию на три языка - английский, украинский и русский, использует только стандартные средства системы андроид и позволяет пользователю менять язык приложения на лету через окно настроек. PROFIT!!!