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!!!