суббота, 26 июня 2010 г.

[prog] Несколько фактов из статьи The NoSQL Alternative

В конце мая в Dr.Dobb’s Journal появилась статья The NoSQL Alternative, в которой вкратце рассказывается о хранилищах данных, не использующих SQL.

Сама по себе статья меня не тронула, поскольку с альтернативами реляционным базам – тогда это были объектно-ориентированные базы – я познакомился даже раньше, чем с самими реляционными БД. Поэтому меня не удивляет, что в определенных областях NoSQL рвут SQL как тузик грелку :)

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

  • на март 2010 года в хранилище Amazon Dynamo находилось порядка 102 миллиардов объектов;
  • сервис YouTube использует BigTable для хранения около 100 миллионов видеороликов общим объемом в 600TB;
  • сервис Twitter со временем перешел от MySQL к комбинированному хранилищу, включающему в себя MySQL/memcahed и 45 узлов, на которых работает хранилище Cassandra. Это комбинированное решение позволяет обрабатывать около 50 миллионов твитов ежедневно;
  • Facebook с помощью Cassandra обрабатывает около 60 миллионов новых фотографий в неделю;
  • в сервисе Digg хранилище Cassandra хранит порядка 3TB данных;
  • исследователи из Yahoo использовали Hadoop MapReduce на 3800 узлах для сортировки петабайта данных. Сортировка заняла 16.25 часов.

пятница, 25 июня 2010 г.

[sport.darts] Ну вот, опять хвастаюсь: три в утроение :)

В продолжение к предыдущему достижению, на этот раз уже с фото:

Опять же, целенаправленно бросал в t13, в результате засадил все три дротика подряд. Горд собой и счастлив неимоверно :)

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

Поэтому мой совет тем, кто хочет приобщиться к дартсу – закупайте сразу запасные хвостовики, перья (желательно не бумажные и не дешевые пластиковые) и защиту для перьев. И побольше! :) Все это будет очень быстро расходоваться.

[prog] В завершение темы об ошибках в программе, unit-тестах и системах типов

Созрел до заключительного поста в поднятой несколькими заметками (первая и вторая) ранее теме.

Ошибки в программах – это плохо. Даже если они не досаждают пользователям и не отваживают клиентов от производителей ПО, все равно ошибки обходятся дорого. Главным образом за счет времени и ресурсов, которые направляются на их обнаружение и исправление. Замечу, что на обнаружение и исправление, а не на предупреждение. Поскольку наиболее распространенные способы обеспечения качества ПО (читай: различные формы тестирования) обеспечивают, в лучшем случае, хороший отлов ошибок. Уже внесенных в ПО ошибок.

Более выгодно было бы иметь средства предупреждения ошибок. Тогда и тестировать нужно было бы меньше.

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

Не буду пытаться оспорить эти тезисы. Пусть даже все это так и есть. На мой взгляд, если всем этим заветам следовать, то программирование должно превратиться в математическую дисциплину. Что невозможно, поскольку программирование – это не математика. Именно поэтому огромный объем полезного и успешно работающего кода ежедневно и ежечасно пишут люди вообще не имеющие математического образования.

Но, если формализованные и заматематизированные методы программирования не пройдут, то что же останется?

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

  • строгая типизация;
  • статическая типизация;
  • модульность и инкапсуляция;
  • исключения;
  • сборка мусора и отсутствие адресной арифметики;
  • статически-типизированные шаблоны и генерики (в таких языках как Ada, C++, Eiffel, Java, D, C#, Scala);
  • void safety в языке Eiffel;
  • паттерн-матчинг, который приходит в мейнстрим благодаря Scala, OCaml и Haskell;
  • иммутабельность данных, на которой делается акцент в OCaml, Haskell, D. В зачаточном виде привнесена в мейнстрим C++ным const-ом;

Это, я бы сказал, крупные, очень заметные изменения. А есть и менее заметные, очень обыденные, но не менее эффективные. Например, запрещение присваиваний внутри оператора if. Или появление в Java специального оператора for. Мелочи, но изрядный объем неприятных ошибок они устранили как класс.

Я думаю, что в дальнейшем мейнстримовые языки программирования будут вбирать в себя разнообразные техники из различных более-менее маргинальных языков. Каждое новшество (которое может быть совсем не новшеством в своем исходном языке) будет бороться с каким-то определенным классом ошибок. И так, потихоньку, шаг за шагом, разработчики языков будут лишать программистов возможности совершать хорошо известные нам сейчас ошибки (например, присваивание вместо сравнения в операторе if). Наверняка при этом будут возникать какие-то новые типы ошибок, сейчас неведомые.

Подчеркну, что я говорил только об очень узком классе ошибок. Можно разбить причины возникновения ошибок на три класса:

  • ошибки по недомыслию. Не додумались разработчики, что старый код нельзя использовать в новых условиях – Ариан 5 взорвался на старте;
  • ошибки по незнанию. Не знали программисты одного отдела, что программный модуль, разработанный в другом отделе, будет выдавать координаты в другой системе счисления – потерялся марсианский спутник;
  • ошибки по невнимательности. Забыл программист при выделении буфера добавить один байтик для завершающего ноль символа и…

Так вот, все о чем я говорил выше касается только ошибок по невнимательности. Языки программирования, к счастью, становятся все более и более дуракоустойчивыми bulletproof-естыми. Что есть хорошо, ибо чем меньше возможности разработчику допустить случайную, глупую ошибку – тем лучше.

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

четверг, 24 июня 2010 г.

[work] Рейтинг RSDN таки намазывается на хлеб?

Несколько раз я говорил, что “рейтинг RSDN на хлеб не намазывается”. В том смысле, что приятно быть где-то в топе (а в парочке форумов я до сих пор на первом месте, что странно), но размер доходов от этого не зависит.

Но не так все однозначно ;) Cегодня я получил письмо с предложением о сотрудничестве от Сергея Архипенкова (насколько я знаю, это широко известная в определенных кругах личность). Сергей пишет, что нашел меня как раз по рейтингу RSDN-а. Так что вынужден признать, что мое заявление было излишне категоричным :)

Кстати, сам факт поиска людей по рейтингам профильных форумов, имхо, показателен. Получается, что не смотря на кризис, хороших разработчиков найти тяжело. Что, в принципе, логично. Компании, которые сокращали персонал, явно не увольняли самых лучших. С другой стороны, кризис не дает возможности просто так поменять работу – нет того выбора, как раньше, лучше пересидеть на теплом месте. Поэтому хорошие разработчики не стремятся сейчас что-нибудь менять. Отсюда и интересная ситуация – вроде бы и народу безработного немало вокруг, а толковых людей нет. Впрочем, это мое впечатление, возможно ошибочное.

PS. Очень лестно получать предложения о работе. Пару лет назад со мной это происходило регулярно. Потом, видимо из-за моих постоянных отказов, поток иссяк. Поэтому было приятно получить предложение вновь. Даже отказываться было неудобно, но нужно :)

среда, 23 июня 2010 г.

[prog] Простая штука, за которую я очень благодарен Pascal-ю

В языке Pascal есть хорошая штука: с помощью блока type можно назначать имена своим типам

type
   TicketsArray : array[0..10] of Ticket;

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

Причем, насколько я помню, стиль программирования на Pascal не только поощрял подобное использование секции type, но и даже требовал этого. По крайней мере благодаря книжкам (среди которых замечательная тонкая книжица за авторством Вильвачева и Крисевич по Паскалю) и Лубочкину Александру Васильевичу, читавшему нам на первом курсе предмет “Языки программирования и конструирование программ”, я стал постоянно использовать этот прием.

В C/C++, к счастью, есть очень похожая возможность. Это старый добрый typedef. А вот в Java, например, typedef-а нет. Поэтому я на Java и не программирую ;) И в Eiffel так же typedef-а нет, и на Eiffel я так же не программирую ;) Но это уже “Остапа понесло” :)))

Так вот, к сожалению своему, приходится наблюдать, как многие C++ программисты игнорируют существование такой замечательной штуки, как typedef :(

Не могу я понять, как можно писать вот столько кода:

std::map< ticket_key_t, ticket_t > tickets;

void f( const std::map< ticket_key_t, ticket_t > & tickets )
   {
      std::map< ticket_key_t, ticket_t >::const_iterator oldest =
            find_oldest_ticket();
      for( std::map< ticket_key_t, ticket_t >::const_iterator
            it = tickets.begin() ... )
         ...
   }

Когда можно написать и меньше, и понятнее:

typedef std::map< ticket_key_t, ticket_t > ticket_map_t;
ticket_map_t tickets;

void f( const ticket_map_t & tickets )
   {
      ticket_map_t::const_iterator oldest = find_oldest_ticket();
      for( ticket_map_t::const_iterator
            it = tickets.begin() ... )
         ...
   }

Видимо, у этих C++ников не было опыта программирования на нормальном Pascal-е в молодости. Не было той школы. К сожалению.

Ну ничего, будем бить по рукам и приобщать к хорошему :)

вторник, 22 июня 2010 г.

[life] Жизнь внутри пузыря :(

Преамбула.

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

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

Впечатление было очень сильное. Но едва оно успело утратить свою остроту, как подкралась амбула.

На амбулу я наткнулся сегодня в ЖЖ ibigdan: Чужой среди своих.

Собственно, к чему я привожу эту ссылку?

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

Вдумайтесь! Живы и здоровы!

Ну так что, жизнь все еще дерьмо?

[prog] Ссылки на несколько отчетов об ICFP Programming Contest 2010

Каждый год под эгидой ICFP (International Conference on Functional Programming) проводится соревнование по программированию. Команды со всего мира в течении нескольких дней в режиме non-stop пытаются решить поставленную организаторами задачу. С 18-го по 21-е июня проходил очередной конкурс ICFP Programming Contest 2010.

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

Таблица результатов: http://icfpcontest.org/icfp10/score/teamAll

Что меня в этом всем удивляет – так это откуда у людей столько энтузиазма, времени и сил заниматься подобными вещами. Я вот, вроде как, люблю программирование, но не в лошадиных дозах ;) Поэтому мне проще понять как люди участвуют, скажем, в суточных забегах. Но вот что толкает людей тратить три дня на программирование ради программирования… Тайна сия велика есть.

PS. Еще забавно, что участники соревнования не стеснялись тырить решения у других команд :)

понедельник, 21 июня 2010 г.

[sport.darts] Похвастаюсь: загнал три дротика в сектор утроения! :)

Увлечение дартсом продолжается, хотя и с большим напряжением. Очень уж своеобразная игра – вроде вот она мишень, в трех шагах от тебя. Но попасть именно туда, куда хочешь, да еще несколькими дротиками подряд – фигушки. И прогресс в игре идет ну очень неспешно. Иной раз кажется, что за прошедшие две (три, четыре) недели вообще никуда не продвинулся. А потом БАЦ! ;)

Поскольку я учусь сам, каких-либо пособий или учебных курсов под рукой нет, то придумываю сам себе задачки. То бросаю в один сектор до тех пор, пока 10 дротиков подряд в него не всажу, то устраиваю “Раунд” по удвоениям, то “Раунд” по утроениям, то в “Диаметр” пытаюсь играть…

Сегодня решил бросать поочередно в сектора утроения до тех пор, пока не наберется три попадания. Дошел в конце-концов до сектора 14. Где-то за 20 бросков попал в утроение всего один раз. Зато потом – все три дротика подряд в t14! Я аж афигел от собственного везения собственной крутизны :))) Жалко, что фотоаппарата под рукой не было. И жалко, что это был t14, а не t20 ;)

Ну ничего, посмотрим, что будет после еще 3 месяцев тренировок :)

[life.blog] Зарегистрировался на карте блоггеров

Собственно, вот: Карта Блоггеров или просто http://www.blog-map.ru/b/eao197.blogspot.com

Кому не лень, присоединяйтесь. Не знаю, есть ли в этом какой-то практический смысл, но прикольно :)

[prog] Еще один success story для Scala: Guardian’s “Open Platform”

В мае журнал The Guardian анонсировал выход своей новой Open Platform – платформы, с помощью которой можно получать доступ к огромному архиву материалов The Guardian. Подробнее о назначении этого дела и его бизнес составляющей можно ознакомиться вот в этой презентации: Publisher To Platform: How The Guardian Used Content, Search, and Open Source To Build a Powerful New Business Model.

Язык Scala был использован в реализации этой открытой платформы. Подробности в презентации ниже:

Имхо, Scala обрастает весьма серьезными историями успеха. Тем интереснее будет посмотреть, как будут развиваться события после выхода Java 7, в которой таки собираются добавить лямбда функции.

PS. Когда я смотрел первую презентацию про бизнес составляющую Open Platform я с горечью осознал, что нифига подобного не могло бы возникнуть сейчас в странах бывшего СССР. Т.е. спецов, которые бы это все придумали и сделали, предостаточно (я надеюсь). Но нет у нас, я думаю, бизнес необходимости для такой штуки. Т.е. нет рыночной необходимости, нет востребованности собственных подобных технологий, нет и самих технологий. Печально.

воскресенье, 20 июня 2010 г.

[life.sport] По горячим следам матча Бразилия-Кот д'Ивуар

Пора, пора футболу перенимать практику просмотра видеоповторов в спорных моментах, как в хоккее. Или же нужно разрешать игру руками. И мордобой... PS. А бразильцы сыграли так, как они когда-то хвастались: "Нам забъют сколько смогут, а мы -- сколько захотим" :)

[life.photo] Пейзажи Игоря Фрида

Сегодня в рубрике “Знакомство с фотомастером” снимки Игоря Фрида. Рассматривая которые лично я очень сильно жалею, что это не я оказался в нужное время в нужном месте :) (В комментариях к своим карточкам Игорь Фрид иногда дает ссылки на музыкальные произведения, которые способствуют получению нужного настроения у зрителей – я постарался скопировать эти ссылки)


Blue Valentine.
(Музыкальная тема)


В предгорьях Альп.


Бог есть Свет.
(Музыкальная тема)


Legend Of A White Stupa.
(Музыкальная тема)


Этюд 2.
(Музыкальная тема)


Time to Say Goodbye.
(Музыкальная тема)


Первый снег, первый след.


В полях.


Домик на отшибе 3.


Воспоминание об Осени.

К сожалению, photoline.ru не позволяет просто так вставлять снимки в блог (чем он в худшую сторону отличается от photosight.ru), то я смог опубликовать у себя только маленькую часть понравившихся мне фотографий. Поэтому настоятельно рекомендую ознакомиться с работами Игоря Фрида на photoline.