среда, 2 февраля 2011 г.

Корея 2011

Попытаюсь наконец рассказать, что интересного видел в этой поездке в Корею.
Итак 23 января мы вылетели из Шереметьево прямым рейсом в Сеул. Точнее вылетели это как то легко звучит. Рейс сначала задержали на 1.5 часа по техническим причинам, потом когда всех запустили в самолет, какому то пассажиру стало плохо, его сняли с самолета и по этой причине нас всех попросили из самолета выйти по соображениям безопасности. Это всех очень удивило, по моему даже персонал, т.к. пассажиров время от времени высаживают, но при этом не гоняют туда сюда весь остальной народ. На следующий день, когда мы узнали о взрыве бомбы в Домодедово, возникла версия, что такие беспрецендетные меры безопасности были связаны с тем, что службы безопасности знали о готовящемся теракте в аэропорту, но не знали где и когда.
Таким образом нам пришлось ждать еще 1.5 часа. Но компания была хорошая, поэтому время пролетело незаметно.
По традиции немного расскажу про самолет и авиакомпанию.
Летели мы совместным рейсом Аэрофлота и Korean Air на Airbus A330-200, т.е. на таком же как мы летали в Токио. Разница только была в расположении кресел и мультимедиа. Кресла здесь оказались на мой взгляд не очень удобно расположены - 2-4-2, поэтому получилось что двое моих коллег сели у окна, а я в центральном ряду, да еще и немного смещен.

Вообще качество обслуживания на Korean Air на высоте! Пожалуй, лучшее что я видел. Стюардессы очень приветливые, отзывчивые. Кстати, поскольку рейс был совместным с Аэрофлотом, видимо для контраста там была одна русская стюардесса. Очень забавно было наблюдать за лицами корейских бортпроводниц, когда наша с яркой интонацией произносила "Мужчина! Я вашу сумку не трогала!". Это в ответ на замечание, что после возвращения на борт вещи были вытащены (видимо досматривали).
Перед вылетом я предварительно закачал на свой планшет много фильмов, думал буду смотреть в пути. Но я его почти не доставал, т.к. в самолете довольно неплохая мультимедийная система.
Она немного проигрывает системе, которая стояла на самолете, на котором мы летели из Новой Зеландии, т.к. здесь нет пульт совмещен с джойстиком, но по нему нельзя звонить. А кроме того на борту не было веб камер. Но с другой стороны было очень много фильмов, передач, радио. Фильмы кстати, как видно из фото довольно свежие. Многие из которых я еще даже не смотрел. Они правда на английском. Очень порадовала возможность играть в игры по сети самолета. Игры правда на уровне 8-битной приставки, но в реверси мы с Виктором порезались =)). Еще очень удобно было, когда дело пошло ко сну, одеть наушники, включить радио релакс и под него засыпать. Кстати, по началу я думал, что с местом мне не повезло, т.к. был чуть в стороне от коллег, но позже понял, что очень повезло, т.к. рядом со мной никого не сидело и я обложившись подушками лег спать на трех креслах, как в плацкарте =).
Прилетели в Сеул мы уже в районе полудня. Аэропорт очень понравился.
В аэропорту поменяли немного наличных. Курс у них очень удобный 1000 вон = 1 доллару. Кстати, наличка оказалась практически не нужна, абсолютно везде принимают карточки. Два раза я пользовался наличкой - чтобы вставить монетку в тележку в супермаркете и купить что-то в автомате. А в остальном даже такси принимают кредитки.
Очень непривычно первое время было - что ты в стране, где не то что английский не понимают, но даже догадаться по надписям ни о чем нельзя. Хотя язык мычания и жестов работает очень хорошо. Без особых проблем купили билеты на автобус и добрались до гостиницы. To be continued...

понедельник, 22 ноября 2010 г.

Python vs C# vs Matlab

Недавно начал изучать Pyhon. Изучение идет очень легко и приятно. Я бы даже сказал, что это похоже на общение с человеком, с которым ты во многом согласен. По ходу чтения постоянно возникают мысли "Да! Именно так и должно быть. Здорово!".
В принципе изучение основ заняло несколько часов, язык очень интуитивно понятен и логичен.
Но вот дело подошло к разработке реальной программы и начали возникать сравнения с теми языками на которых я раньше писал то же самое.
Итак, плюсы питона:
  • Поддержка кортежей, списков и словарей на уровне языка - круто!
  • duck typing - поначалу трудно перестроить свой мозг на такую концепцию, но это обещает быть полезным.
  • Простота и прямота синтаксиса.
  • Динамическая типизация.
  • Итераторы.
  • Бесплатный, платформонезависимый.
  • Очень многие вакансии в области Computer vision требуют знание питона.

А теперь, что не понравилось или что я пока не понял:
  • Отсутствие приватных членов класса. Жуть. Все члены публичные? А для обозначения приватности используется _? У меня имеется какая-то личная неприязнь к подчеркиванию в коде. Всегда предпочитал camel, pascal или hungarian notation, а код с большим количеством _ мне казался грязным. Уж не знаю как так получилось.
  • Отсутствие необходимости явного объявления полей класса это конечно плюс, но есть в этом и минус.

Вот пример объявления класса на c#:
class Layer
{
float[][] weights;
float[] biases;
bool isCuda;
public float[] Propagate(float[] inputs)
{
if(isCuda)
return CuPropagate(inputs);
else
return dot(inputs, weights) + biases;
}
private float[] CuPropagate(float[] inputs)
{
//...
}
}

* This source code was highlighted with Source Code Highlighter.
и то же на Python:
class layer:
propagate(
self, inputs)
if self.isCuda :
return self._cuPropagate(inputs)
else:
return dot(inputs, weights) + biases;

_cuPropagate(inputs):
//...

Выглядит более компактно , нет скобок - это плюс, правда везде нужно писать self - напрягает. Но! Пример на C# обладает преймуществами декларативного стиля. Из объявления класса мне понятно, что weights - это матрица float'ов, biases - вектор, что есть флаг isCuda. Прочитав только эти первые строки объявления класса и не видя имплементации мне уже почти все о классе понятно. Кроме того я не смогу вызвать по ошибке CuPropagate и обрушить программу, в случае если cuda непроинициализирована, поскольку метод приватный.
И еще момент. Если я попытаюсь в качестве inputs скормить double[], С ругнется еще на этапе компиляции, тогда как в питоне все нормально скомпилируется, а обнаружится уже тогда, когда видеокарта ругнется и скажет, что double не поддерживается.
  • Отсутствие продвинутой IDE. В C# я могу себе позволить называть функции длинными, осмысленными именами, поскольку знаю, что набирать потом буду всего 3-4 первых символа, дальше подскажет IntelliSence. В последних версиях VS intellisence очень крут. Если я пишу несколько строк подряд в таком виде:

this.visSettingsWindow.RefineButton.Click += new EventHandler(RefineButton_Click);
this.visSettingsWindow.UndoRefineButton.Click += new EventHandler(UndoRefineButton_Click);
this.visSettingsWindow.BorderBlocksButton.Click += new EventHandler(BorderBlocksButton_Click);
this.visSettingsWindow.OcclBorderButton.Click += new EventHandler(OcclBorderButton_Click);

* This source code was highlighted with Source Code Highlighter.
то я набираю th.vi.cl+="Tab""Tab"; следующую строку я уже набираю как th..un.+="Tab""Tab"
При этом я вижу описание каждого члена, данных, которые он хочет на входе и т.п.
Похожего удобства для питона я не знаю. Пробовал pydev для eclipse. Он конечно подсказывает, но крайне мало. Все приходится держать в голове.
  • По поводу консоли питона. Хотелось бы, что бы она была больше похожа на matlab консоль. Т.е. если я ввожу переменную a = rand(10, 5), у меня где-нибудь на панели отображалась информация об этой переменной, чтоб я не держал ее в голове. И еще история введенных команд где-нибудь в стороне.
  • Пока не понял как в питоне реализовать механизм аналогичный делегатам
  • Отсутствие чего-то похожего на LINQ. Бывало, что одна строчка на linq заменяет метод на несколько страниц.
  • Непонятно, можно ли делать вставки в критических по скорости местах на с++, по типу unsafe { } или что-то аналогичное
Хочу подчеркнуть, что это никоим образом не является наездом на питон. Он мне очень нравится, и я буду благодарен, если опытные питонисты мне укажут где я был не прав, или каких важных преимуществ питона не учел.

пятница, 12 февраля 2010 г.

Зацепил меня сегодня комментарий одного товарища на хабре, мол нейросети для распознавания вообще не используются и я налабал статью, правда немного о другом =)
Прошу присоединяться к обсуждению:

воскресенье, 20 сентября 2009 г.

Расширенная реальность



Расширенная реальность - augmented reality, помоему просто офигетельная вещь! Впервые я увидел это в Оклендском университете. Там AR использовалась для визуализации траекторий движения мобильных роботов. Но этот бильярд куда круче смотрится!

среда, 15 июля 2009 г.

Новые исследования зрительной системы

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

вторник, 23 июня 2009 г.

ГОСТы и новый блог

1. Очень доброе дело сделал walter_simons, выложив в свободный доступ полную базу ГОСТов.
2. Я открыл англоязычный блог в основном по тому, что опубликованный мною класс реализации сверточных нейронных сетей привлекает англоязычных ученых
и инженеров. Надеюсь будет время его поддерживать.

понедельник, 12 января 2009 г.

Пневматический мускул

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