Home
Lev Walkin [entries|archive|friends|userinfo]
Lev Walkin

[ website | My Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

ICFPC'09 и ускорение интерпретатора [Jul. 7th, 2009|12:42 am]
[Tags|]

Пользователь [info]thedeemon, шифрующийся от паблисити, пишет:

Несколько дней назад закончилось соревнование ICFP Contest 2009, мой небольшой отчет об участии в котором можно почитать здесь. Там в задании была описана несложная виртуальная машина, на которой запускались данные организаторами программы для моделирования орбитальной механики. Тут я расскажу, как, используя возможности функционального языка программирования, можно сделать интерпретатор быстрее, чем на С++.

Далее идёт несколько строчек кода на C++ и OCaml, и затем аналитика:

[C++] реализация на моей рабочей машинке 2,33 ГГц выполняет первую программу из 266 команд 377 000 раз в секунду. Но при участии в ICPFC я все писал на OCaml'e. [OCaml] работал несколько медленнее: только 263 000 итераций в секунду. Захотелось его ускорить, и были сделаны две оптимизации.

И вывод:

Оптимизированная программа подвергается описанной выше псевдокомпиляции, и скорость возрастает до 650 000 итераций в секунду, что в 1,7 раза быстрее варианта на С++ и в 2,5 раза быстрее исходного интепретатора на Окамле.

http://thedeemon.livejournal.com/1569.html

Вкусно!
Link9 comments|Leave a comment

Светлый волшебник [Jul. 6th, 2009|02:42 am]
Планируем следующий спринт в JS-Kit. Разговор:

— А давайте названия тикетов не по-английски говорить, а по-русски?
— Давайте. Какой у нас следующий тикет?
— Светлый Инсталляционный Волшебник.

Дима, you made my day! ;)
Link5 comments|Leave a comment

За Erlang могут задержать ФБР. [Jul. 5th, 2009|11:42 pm]
[Tags|]

http://zerohedge.blogspot.com/2009/07/is-case-of-quant-trading-industrial.html

Сергей Алейников был арестован ФБР в аэропорту за то, что креативно использовал Erlang/OTP для поддержки высокоскоростного автоматического трейдинга, и не смог с ним расстаться при увольнении. Или примерно за это. Вот кусок из его LinkedIn профиля:

Implemented a real-time monitoring solution for the distributed trading system using a combination of technologies (SNMP, Erlang/OTP, boost, ACE, TibcoRV, real-time distributed replicated database, etc) to monitor load and health of trading processes in the mother-ship and co-located sites so that trading decisions can be prioritized based on congestion and queuing delays.

А пока Goldman Sachs исчез из репортинга биржи NYSE. Был на первом месте, а теперь исчез, почти в связи с этим.

Russian immigrant living in New Jersey was being held on federal charges of stealing top-secret computer trading codes from a major New York-based financial institution—that sources say is none other than Goldman Sachs.
http://blogs.reuters.com/commentaries/2009/07/05/a-goldman-trading-scandal/

The job he took in Chicago, according to the criminal complaint, paid nearly three times more than his $400,000 salary at Goldman.

400k$/y за Эрланг, anyone?

UPD: http://www.puppetmastertrading.com/blog/2009/07/08/the-other-interesting-thing-about-the-serge-aleynikov-story/

One angle that I haven’t seen highlighted in all of the commentary is Mr Aleynikov’s choice of weapon. Seems that he was an erlang guy with an interest in ocaml. Choosing functional programming for algo trading systems is an interesting but not unique choice.

A few months back I’d seen Jane St’s Yaron Minsky give an interesting talk on OCAML in which he describes the virtues of ocaml as applied to the algo trading domain. You should watch it as he’s entertaining and clearly a “true believer.” The key argument he makes is that algo trading requires correctness, agility and performance and that ocaml provides a great set of tools for addressing these needs. Correctness and agility are supported by the rich type system while performance is just a happy feature of the language.
Link35 comments|Leave a comment

(no subject) [Jul. 1st, 2009|06:42 am]
— Мы начинаем учить программистов Хаскелю и даём им работу.

© IT-радио «ПРОМ.РАЗРАБОТКА» №4 via [info]belnetmon.

Вы всё ещё лабаете на императивном трэше? Бойтесь все! Срочно! Скоро вымрете, в молодости и рассвете сил, как динозавры. Или же эти Киевские IT-монстры вас сожрут. Будете тестерами. Нет, тестерами даже не будете: заменят вас на автоматическое тестирование через QuickCheck.
Link212 comments|Leave a comment

Человек и пароход [Jun. 24th, 2009|12:42 pm]
Выбираем имя ребёнку.

— А может Хаскель?
— Так ведь и уговоришь...
— А если девочка?
— Тогда Миранда. А если двойня — то Миранда и Хаскель.

P.S.:
http://en.wikipedia.org/wiki/Miranda_(programming_language)
http://en.wikipedia.org/wiki/Haskell_(programming_language)
Link28 comments|Leave a comment

ASN.1 trends [Jun. 16th, 2009|04:42 pm]
[Tags|]

Мой онлайновый компилятор ASN.1 собирает несколько попыток компилировать стандарты ASN.1 в неделю. Таких попыток у меня скопилось уже девять с половиной гигабайт.

В начале-середине двухтысячных народ компилировал стандарты на передачу сиквенсов генома в рамках проекта исследования человеческого генома «Human Genome Project». Потом пошли протоколы передачи данных телеметрии со спутников. Затем протоколы геолокации в сотовой телефонии: Alcatel, T-Mobile.

В этом году начался новый тренд: народ компилирует форматы сообщений транспортных систем: железнодорожники были первыми. Затем подошла ******. У ****** вообще интересная шняга: беспроводные протоколы общения автомобиля с центральной базой и между собой. Жутко интересно!

Игорь Свиридов [info]is39 подкинул замечательную идею: по тому, что пользователи пытаются скомпилировать, можно предсказывать тренды в телекоммуникационной индустрии, и, может быть, заранее вкладываться в акции тех или иных компаний.

Впрочем, может быть это всё иллюзии и народ активно слезает с ASN.1, а эти активности — последние вздохи праматери вечных форматов, перед финальным конвертированием всего в XML.

In the beginning was the Word, and the Word was ASN.1XML...
Link98 comments|Leave a comment

Erlang ports [Jun. 15th, 2009|01:42 pm]
[Tags|, ]

Тем, кому интересна была скорость работы с портами в эрланге. Вот простейший пинг порта, реализованного на окамле. Порт занимается десериализацией Erlang External Term Format и возвращает ответ. Впрочем, в этом случае там с гулькин нос десериализовывать, ибо {ping} он и есть {ping}. Зато видна базовая производительность работы с портами.

4> perftest:comprehensive(1000, fun() -> portserver:ping(comments_diff) end).
Sequential 100 cycles in ~0 seconds (12337 cycles/s)
Sequential 200 cycles in ~0 seconds (2456 cycles/s)
Sequential 1000 cycles in ~0 seconds (8602 cycles/s)
Parallel 2 1000 cycles in ~0 seconds (4304 cycles/s)
Parallel 4 1000 cycles in ~0 seconds (25219 cycles/s)
Parallel 10 1000 cycles in ~0 seconds (5513 cycles/s)
Parallel 100 1000 cycles in ~0 seconds (26553 cycles/s)
[8602,4304,25219,5513,26553]
5> perftest:sequential(100000, fun() -> portserver:ping(comments_diff) end).
Sequential 100000 cycles in ~11 seconds (9132 cycles/s)
9132
6> 


8-25 тысяч раунд-трипов в секунду, устойчиво 9k/s на одном потоке.

Если бы CPU занималось по полной, я бы не удивился — нормальные цифры. Но так как CPU было загружено далеко не полностью, понятно что где-то в районе евент-менеджмента собака зарыта. beam и ocaml грузят проц примерно поровну: 4-6% на каждого. Копать не буду, меня такие цифры устраивают.
Link5 comments|Leave a comment

Отвал виндов [Jun. 13th, 2009|03:42 am]
[Tags|]

Именно такое впечатление создалось от использования SuSE:) В очередной момент без видимой причины что-то совершенно обыденное вдруг начинает идти наперекосяк.


Сказал [info]guamoka здесь: http://metaclass.livejournal.com/376129.html.

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

Должно же что-то было от винды отвалиться за такой срок? Непременно должно было.

Ремоут десктоп сегодня утром отвалился.



Это скриншот окна RDS на маке, подконнектившегося к висте. На экране RDS кроме кнопки больше ничего нет. Нажатие кнопки вполне предсказуемо завершает сеанс RDS.
Link24 comments|Leave a comment

Галстуки как атрибут обслуживающего персонала [Jun. 12th, 2009|08:42 am]
Внезапно обратил внимание на то, что галстуки в силиконовой долине давно стали униформой продавцов. Зашёл к дилерам тойоты. Насчитал одиннадцать посетителей, ни на одном галстука не висело. Продавцы дилершипа — все с галстуками (и в дешёвых ролексах).
Link6 comments|Leave a comment

Google adaptive search [Jun. 10th, 2009|06:42 pm]
Если не будешь следить за своими компьютерными привычками, то Гугл имеет шанс сделать тебя тупее1.

По запросу «don» в гугле у всех нормальных людей выводится Donald Knuth на пятом месте, а у одного знакомого деятеля вся первая страница занята рулонами рулад звездулек из твиттера; только сегодня довелось увидеть.

Говорят, гугл усиливает твоё IQ. На самом деле, он усиливает тренд твоего IQ.

Будьте внимательны, ведь такая подстава!

1То же самое, политкорректно: наделить «альтернативной смекалкой».
Link33 comments|Leave a comment

К вопросу о винтах [May. 15th, 2009|04:42 am]
Чудеса современных технологий приводят к тому, что отдельных фиксированных носителей, пригодных для хранения информации, скоро уже не будет.

В продажах растёт сегмент RAID-решений, как встраиваемых в рэки ("серверных"), так и персонально-переносных. Мы с Олькой используем Netgear (быв. Infrant) ReadyNAS, к которому приложили руку. Существует куча других решений, с интерфейсами от Ethernet до USB, в разных ценовых диапазонах.

К чему это приведёт? Так как пользователи всё равно винты воткнут в RAID, собрав себе гарантию из ненадёжных компонентов, смысла делать надёжные железки уже не будет. Снизится MTBF, появится сначала категория "винтов для рейда" — дешёвых, ломких китайских девайсов, а затем все машины будут комплектоваться парами и четвёрками из таких дисков, чтобы обеспечить приемлемое время работы. Олд-таймеры будут хвастаться сохранившимися у них "правильными SATA", как сейчас ценят свои "быстрые SCSI".

Начало этого процесса мы уже видим: устройства типа Western Digital My Book Mirror Edition только и ожидают своих IBM DeathStar в качестве дисков для RAID-1 конфигурации.
Link42 comments|Leave a comment

Photo sensor pixel sizes [May. 15th, 2009|03:42 am]
[Current Mood | contemplative]

Олька с калькулятором просчитала параметры тысячи фотокамер, и наглядно показала, чем отличаются профессиональные камеры от компактов.

Так, профессиональные камеры имеют до пятидесяти тысяч пикселов на квадратный миллиметр поверхности сенсора...



...а компактные камеры — до четырёхсот тысяч пикселов на квадратный миллиметр.




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

Вкусную серию аналитики о параметрах современных и почивших фотоаппаратов, с картинками, найдёте здесь: http://oleyka.livejournal.com/tag/analytics. Френдинг поможет, ибо там будет ещё больше.
Link26 comments|Leave a comment

C++ dynamics [May. 8th, 2009|02:42 am]
[Tags|]

Не могу удержаться, ну такая конфета:

На BoostCon 2009 прошёл доклад некоего деятеля про итераторы в C++. Называется

Наверное, он ничего в C++ не понимает, раз так говорит. Пардон, а кто это? Да это же Александреску! Это несколько меняет дело, согласитесь.


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

Вот как выглядит аналогичный код на Хаскеле:
-- sort the two in lockstep
sort(zip vs vd)

Понятно теперь, куда C++ движется, вместе с лямбдами своими.


А ещё нашёл такую вкуснотищу:
  • "Я думаю, что объектная ориентированность это почти такой же миф, как Искуственный Интеллект..."
  • "Я нахожу ООП технически нездоровым..."
  • "Я нахожу ООП философски нездоровым. Он называет всё объектом. Даже если это так, это не очень интересно — сказать что всё есть объект, означает не сказать ничего"
  • "Я нахожу ООП методологически неправильным..."

Кто автор? Александр Степанов, отец STL и автор STLport.

Навеяно постом [info]yuridichesky
Link136 comments|Leave a comment

Art Director for web site and web applications [May. 1st, 2009|02:42 pm]
[Tags|, , ]

Вакансия Арт Директора в Ульяновске

Description

— Ensures polished look and feel of the JS-Kit.com website, based on branding directions, information architecture and feature requirements
— Defines common user interface visual design elements for JS-Kit webservice/widgets, taking the current branding direction to a polished, pixel-level implementation
— Create light visual design specs for developers

Tasks

— Design and produce the detailed design elements of all the pages of the
new JS-Kit.com website
— Help design the graphical user interface of the JS-Kit services
(commenting, rating, and polling widget, along with the feature-rich
administration dashboard)
— Review the integrity of the visual design elements developed by the
engineering team, to insure high quality of visual

Skills

— Strong visual design background, strong attention to details, fluent with
Photoshop and/or other designing packages
— Strong ability to design simple and usable user interface solutions
— Strong communication skills (ability to listen to feedback, iterate, and
communicate with development teams)
— Some technical knowledge of web-related technologies a plus (like CSS and
javascript), but it is not the focus of this job position

Experience

— Portfolio of web-based projects demonstrating strong visual design skills
(web sites, web applications, widgets...)
— Minimum of 3 years of Art Director position in an web company required
— Experienced with fast and ongoing iteration of projects, experience
working with web development team and technologists

Other

— Position located in Ulyanovsk (Russia) with the development team
— Good written English required for frequent interaction with strategy team (mostly through chat and email)

Пишите на jobs@js-kit.com, или задавайте вопросы прямо в комментах.
Link7 comments|Leave a comment

(no subject) [Apr. 29th, 2009|09:42 pm]
[...] Российская наука еще со времен железного занавеса отрезана от мировой науки. Русские ученые публикуются в журналах, которые никто не читает. В журналах на русском языке. [...] Язык общения в русской научной среде русский, а в международной – английский. Большой процент русских ученых не готов к интеграции в международную среду, потому что они не знают английского. [...]

Из пресс-конференции "уехавшего мозга", Артёма Оганова. http://www.lenta.ru/conf/oganov/

Что тут добавить?

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

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

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

[...] Вот вернусь ненадолго к вопросу о том, нужно ли вернуть русских ученых, ведь они и так вносят вклад в общую цивилизацию, да? А вот вы мне скажите, что важнее: футбол или интеллект?
Link60 comments|Leave a comment

OCaml LRU [Apr. 27th, 2009|04:42 am]
[Tags|]

The quality of programmers is a decreasing function of the density of GOTO statements in the programs they produce."
— Edsger W. Dijkstra
Никто уже давно не пишет нигде GOTO. В нашем репозитарии их всего четыре штуки, и те — во втащенном стороннем Perl'овском коде. Но зато велосипеды похожего порядка величины изобретаются сплошь и рядом.

Внезапно стал необходим LRU кэш на OCaml'е. LRU (Least Recently Used) кэш — это такая конструкция, которая обеспечивает хранение наиболее часто использующихся данных. Если данные не используются, добавление новых записей в LRU приводит к вымыванию наименее использовавшихся данных из конца гипотетического списка, отсортированного по уменьшению частоты использования.

(Предупреждаю вопрос "почему не memcached?": потому что значение по ключу у кэша для этой задачи измеряется в мегабайтах, да это и не простой бинарник а очень развесистая структура.)

Стандартно крохотные LRU кеши можно делать на односвязных списках [{key, value}] (O(1) вставка, O(N) поиск элемента),
на двусвязных списках (O(1) вставка, O(N) поиск, чуть-чуть более GC-friendly),
на двусвязных списках + какой-то быстрой структуре для поиска (O(1) вставка, O(D) поиск, где O(D) можно традиционно для хешей считать O(1)).

Последний раз LRU я писал на C (2002-2003?), сейчас нужно было на OCaml. Задача сама по себе элементарная. Если бы не одно "но": связные списки. Писать ещё один двусвязный список в эпоху ракет, летящих к марсу, было бы совсем неоптимальным расходом времени. Если это ещё имеет какой-то смысл в качестве задачи для студентов, то писать связный список опять, тем более, на функциональном языке, вызывает неприятный рефлекс.

Когда я ещё пилил в Netli, наш VP of Engineering однажды подошёл, увидел что я ковыряю <sys/queue.h> (в приличных операционках — man 9 queue), и посетовал: "везде, куда ни придёшь, все пишут свои, глючные linked lists".

Вообще, связные списки (двусвязные в большей степени, но даже односвязные) — это удивительная структура данных. Она относится к числу может быть самых стрёмных структур данных по отношению "баги в имплементации / на сложность концепции". Накосячить в doubly linked list — проще простого. Проще чем в имплементации Google Protocol Buffers, по отношению к объёму соответствующей теории. Проще, чем написать интерпретатор лиспа на хаскеле. Этот факт заслуживает отдельной медицинско-биологической работы на тему зависимости концентрации внимания от простоты задачи.

Проинтервьюировав множество соискателей работы, понимаешь, что в условиях стрессовой ситуации немногие могут "на салфетке" нарисовать какой-то нетривиальный алгоритм, так что базовое знание языка приходится проверять на вопросах типа "имплементируйте strdup(3)" или "имплементируйте двусвязный список". Процент безошибочно выполненных заданий стремится к нулю и в том и в том случае, но в случае с двусвязным списком я в конце концов даже перестал рассчитывать на то, что задание будет сделано правильно. Просто даёшь задание с целью посмотреть, конструктивен ли подход соискателя, или его взгляд сразу же тухнет.

Так вот, так как чего-то похожего на <sys/queue.h> в OCaml'е нет, то забив на NIH-синдром, я полез искать сразу код LRU. Думал, найду LRU — сэкономлю какой-то квант своего времени на имплементации.

Гугление на "lru ocaml" первым же своим ответом вынесло на соответствующую библиотеку Дастина Саллингса Lru.html, которую, к тому же, несколько раз рекомендовали в окамловских списках рассылки. Так как Дастин тоже живёт в Санта Кларе, стало очевидно что я должен использовать именно эту библиотеку.

Первый же тест функциональности модуля Lru с треском провалился.
[vlm@nala:~]> cat test.ml
let _ =
        let lru = Lru.create 42 in
        Lru.add lru "key" "value";
        Lru.remove lru "key";;
[vlm@nala:~]> ocamlopt -o test linkedlist.ml lru.ml test.ml && ./test
Fatal error: exception Out_of_memory
[vlm@nala:~]> 

Понятно, что проблема в lru.ml, ведь не может же быть так, чтобы косяк был в linkedlist.ml, на котором построен lru.ml? Ведь linked list, это элементарная структура данных даже на императивных языках, а уж на функциональных — и того проще! Не может же быть чтобы развесистая библиотека, развивавшаяся в течение нескольких лет и стабилизировавшаяся в районе 2004 года, имела проблему в двусвязных списках?

Или может?

Разобравшись, я отослал патч автору и позвонил ему, с целью поздравить с граблями.

linkedlist.ml.orig linkedlist.ml
@@ -126,7 +126,7 @@
        match l.l with
        None -> ()
        | Some el ->
-               if el = it then l.l <- Some el.next;
+               if el == it then l.l <- Some el.next;
                l.cnt <- l.cnt - 1;
                ()

Это как раз та ошибка, из-за которой программа валилась от Out of memory.

Вот мой квотинг и ответ Дастина:

> It turns out, the bug is not in the LRU library, but in the Linkedlist module. It used structural comparison (el = it) instead of physical comparison (el == it) and probably hit some GC-related timing issue in a newer OCaml version (I don't believe it did not ever work for you, so I presume it worked on some earlier OCaml version).

Hey, that's great. I was just getting that error in something I hadn't touched in a while and assumed for some reason that it was a bug in ocaml (since that was the only thing that changed).


То есть, компайлер сменился, и код двусвязного списка вдруг перестал работать.

В итоге, я потратил на то чтобы разобраться с проблемой и накатать этот пост больше времени, чем заняло бы создание собственной имплементации LRU. Всенепременнейше, со своими собственными багами.

[1] Evolutionary Trends of Programming Languages, 2003
[2] http://rosettacode.org/w/index.php?title=Doubly-Linked_List_(element)
Link44 comments|Leave a comment

Amazon EC2 Large vs. Small instances [Apr. 22nd, 2009|08:42 pm]
[Tags|, ]

Измерил разницу производительности "large" и "small" инстансов, используя Ant тест.

Small — это один виртуальный процессор AMD, 2.6 GHz (похоже, из двух процессоров в системе)
Large — это два виртуальных процессора AMD, 2.0 GHz (похоже, из четырёх процессоров в системе)

Test nameLarge, SMP, bytecodeLarge, single, bytecodeSmall, bytecodeПроизводительность small от large
Sequential ant589590342~58%
Parallel ant884728~31% если Large в SMP режиме, иначе ~59%


В Native режиме цифры small instance, соответственно, 365 и 28, а SMP эрланг на small смысла не имеет, поэтому на нём ничего не замерялось.

  1. К вопросу о быстродействии Erlang (2007-10-31)
  2. Обновил табличку (2007-11-15)
  3. JS-Kit, Erlang, Amazon EC2 (2009-03-10)

Link1 comment|Leave a comment

(no subject) [Apr. 22nd, 2009|07:42 pm]
Апрельский релиз Эрланга. R13B release notes:

    OTP-7894  The term_to_binary/1 BIF used to be implemented with
	      recursive C code, which could cause the Erlang emulator to
	      terminate because of a stack overflow.


Очень красиво — tail call optimization в C до сих пор прижимает хвосты функциональщикам.
Link10 comments|Leave a comment

(no subject) [Apr. 21st, 2009|03:42 pm]
Конечно, когда Сет Годин говорит "все маркетеры лжецы", он не имеет ввиду что описания продуктов и "аура" вокруг них должны напрямую вводить пользователя в заблуждение. Но некоторые маркетеры его воззвания понимают неправильно.

Возьмём, например, фитболы — спортивные шары, использующиеся в том числе для сидения на них, вместо офисных кресел. Олька имеет два таких шара (розовый и зелёный), и впечатления от его использования очень положительные.



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

"Около трех миллионов надувных шаров для фитнеса отозваны производителем после того, как Комиссия по безопасности товаров широкого потребления США признала их опасными для потребителей.", via [info]mr_sheriff.

http://medportal.ru/mednovosti/news/2009/04/20/balls/
http://www.medicalnewstoday.com/articles/146590.php

Читая названия марок этих шаров, начинаешь задумываться над мнемоничностью именования. Как вам лопнутый под вами шар фирмы EB Brands, называющийся Everlast?

Everlast? Где-то я это уже видел. Ах да! Батарейки, которые Олька использует в своих игрушках, имеют марку Ultralast. Их отличительной особенностью является то, что у них в коробках 33% брака. Так, если клавиатура требует три батарейки, то нужно взять три батарейки, принести к клавиатуре, вставить, убедиться что клавиатура не заработала, пойти в серверную, достать тестер, подойти назад к клавиатуре, протестировать, выкинуть две батарейки (Ultralast, однако...), взять две новых батарейки, вставить в клавиатуру, убедиться что она опять не работает, вынуть батарейки, протестировать, выкинуть одну, заменить, и только тогда она заработает.

Видимо, у маркетологов для таких случаев срабатывает какой-то компенсационный механизм. С лёгкостью представляется следующая ситуация. Сидит такой маркетолог, в очках и галстуке (галстук пережимает ток крови к голове, вы знаете), за дубовым столом. К нему приходят из отдела разработки, брякают на стол упаковку батареек, сто штук, десять копеек пучок, и говорят: паря, у нас тут такая ерунда с продакшном вышла. Никак не можем довести качество процесса до такого уровня, чтобы в прямо в каждой батарейке был до краёв залит алкалин. Иногда робот промахивается, проливает жидкий металл прямо нам в сапоги на ленту конвейера. Зато там, где не проливает, батарейки вроде бы работают и способны приносить пользу.

Так вот, маркетер отрывается от книжки Сета, поднимает ясные очи, тычет пальцем в коробень, и волит:
— Мы должны position ourselves as a market leader!
— ...innovate on value proposition!
— и вообще, play on our strengths! Хорошо работают батарейки, говоришь? Значит, называем Ultralast. В смысле, "какие выживают — те до старости живут!"

Примеров море.

Какой софт самый монстрообразный по размеру? Microsoft сразу всплывает. Пытался поставить Vista, диска не хватило.

Процессоры, которые не смогли тягаться на равных с интеловскими чипами? PowerPC. Они были так специально названы! Создали параллельную реальность, где процессоры становятся на каком-то синтетическом тесте быстрее, чем Pentium, просто потому что их назвали излучающим силу именем. UltraSPARC в ту же копилку. У меня один сервер до сих пор работает на УльтраСпарке. Пока он компилирует сиплюсплюсный hello world, в нашей семье расходуется кофе.

Самый тормозной браузер на маковской платформе? FireFox, который бывший FireBird. Животное в огне.

Слышите палёный запах? Это жгут маркетологи.
Link73 comments|Leave a comment

BSD License Fears [Apr. 19th, 2009|03:42 pm]
[Tags|]

Вопрос в треде Какая открытая лицензия нынче в моде? у [info]nolar.

Но тут интересный момент. Кто-то может включить твой код в закрытый проект, и тебя не упомянуть. И поди ты узнай что они лицензию нарушили. Как решаются вот такие случаи? То есть я понимаю что и в случае GPL они решаются (или не решаются) точно так же. Просто интересно.


Мой ответ не влез в лимит на размер коммента, так что заодно и сделаю блог-запись из него:

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

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

Моей тётушке её мама говорила, неодобрительно смотря как она прихорашивается перед свиданием:
— Встречают по одёжке, а провожают по уму.
— Мам, ну а если никто не встретит, кто провожать-то пойдёт?

Заменяем "одёжку" на "лицензию" и продолжаем вкуривать.

Для того, чтобы разговаривать о попадании твоего кода в закрытый продукт, надо заняться умножением вероятностей:
1. Вероятность того, что твой код кому-то нафиг сдался. Часто небольшая. У меня примерно 10 релизнутых опен-сорсных проектов (тех, в которые я вложил больше месяца труда, и посчитал интересными достаточно чтобы зарелизить в опен-сорс), из них только три получали фидбек в плане того, что они существенному количеству людей нужны. Статистика с остальных — это пыль, ошибка измерения.
2. Вероятность того, что твоему коду нет альтернатив с другими лицензиями, и что, если ты выкинешь какой-то финт ушами, они не заменят твой код на какой-то более бесплатный или с более сговорчивым автором. Так выкинули GIF из веба, например, потому что правообладатель взбрыкнулся.
3. Вероятность того, что кто-то решит использовать твой код в продукте, который приносит ему деньги. Ведь если код не приносит владельцу денег, то смысла думать об упущенной прибыли от того, что он "сможет" или "не сможет" включить твой код туда, нет. Все равно ты на этом не выиграешь материально.
4. Вероятность того, что зарабатывающий на продукте решит включить твой код и не написать об этом. Вероятность существует, она ненулевая, но часто "случайно-так-получилось-щаз-исправим". То есть, скорее всего они сами не подумали, что весь код, который они втащили в свой проект, нужно вписывать в свою документацию на продукт или иным способом удовлетворять требованиям лицензии. Я думаю, рано или поздно такие ситуации исправляются, особенно для тех проектов, которые получают или в какой-то момент начинают получать с этого какие-то нетривиальные бабки. В Cisco иногда происходила ревизия используемых в коде лицензий, о каком-то коде вспоминали только через несколько месяцев после того, как код втащили в репозитарий. Но вспоминали.


Личный пример. В начале 2007-го мне кто-то прислал видео с тизером "The Venice Project", на котором усмотрел мой копирайт!



Естественно, меня это заинтересовало, потому что к видео я отношения никакого не имел, и меня, конечно, никто не спрашивал, можно ли использовать моё имя в видео. Через какое-то время TechCrunch дал обьяснение феномену появления этого видео, указав что "The Venice Project" — это рабочее название, данное сервису Joost его основателями, Niklas Zennstrom и Janus Friis, которые известны тем, что они ранее основали Skype и продали его eBay'ю за два с половиной миллиарда долларов.

Я слегка прифигел по этому поводу. Зачем им меня было вписывать туда? Может они использовали какой-то мой софт? Какой именно? По годам копирайтов было похоже, что они использовали asn1c, но это не было абсолютно очевидно.

Решив разобраться в произошедшем, я в конце мая послал им email с просьбой обьяснить ситуацию. В течение нескольких дней ответили их адвокаты, сказали что "вау, у нас тут прокол такой, мы не соблюдаем условия лицензий того софта, который мы у себя использовали". И попросили таймаут. Через неделю переписки со мной и каких-то внутренних согласований они сделали страницу http://opensource.joost.com/, на которой описали вообще все лицензии и все продукты, которые они использовали в составе своего сервиса, примерно так (один из разделов):



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


Короче, произведение вероятностей говорит за то, что если у тебя нет каких-то религиозных предпочтений, лучше использовать BSD, ничего страшного не случится.
Link17 comments|Leave a comment

navigation
[ viewing | most recent entries ]
[ go | earlier ]

Advertisement