buka

Разделительная полоса

TL;DR Не допускайте перехода за разделительную полосу.

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

Первый класс, просветленных существ, это те русские, которые на себе вытягиваю карму нижних миров современной России. Те кто очент тонко чувствует всеми фибрами своей души весь тот пиздец который творится в Росиии и которые не могут молчать, просто потому что они настоящие люди с живым умом. Это и стихи Ефремова, и Шендерович, из моих френдов это в первую очередь Доржо Дугаров и Влад Патрышев. Это настоящие русские бодхисаттвы, которые своим мышлением и связью с русскими, не могут молчать и постоянно не останавливаются в своей медитации о России и Украине. Вообще сейчас время такое, что если хочешь самого скорейшего просветления достаточно просто почаще думать об России и Украине. Это верхний мир русских, выше таки русских, нет никаких русских. Такие люди как бутдо бы чувствуют всем своим существом несправедливость и пытают образуметь одной свой мыслью всь свору демонов тусующеюся вокруг мордорского портала. Такой вклад в информацинное пространсво стоит больших усилий и достоин большого уважения, так как даже иногда я себя ловлю на слове, что моя Бодхичитта не настолько развита как у эти людей, которые постоянно думаю и переживают о судьбах не только Украины, но и о существах которые живут в России.

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

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




Четвертый класс существ расчерчивает грань между людьми и не людьми, дальше идут существа которые, вцелом похожи на адекватных, но как только речь заходит об Украине включается распределенная демоническая ватная сеть и ЦНС этих существ полностью подпадает под влияние в том или ином видет под разсличного класса демонов и провокаций. Такие существа сами не понимают того, зачем они сруться про Украину и Россию и устраивают так называемых "хохлосрачи". Этих существ отличает чрезвычайний цинизм, обесценивание человеческой жизни и возвышение над проблемами России и Украины. Они полностью отрицают важность и значение медитативного дискурса в этом вопросе. Это просто вата.

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

Шестой класс существ это просто долбоебы которые идут воевать. Степень негативной медитации этих людей достигла апогея и они полностью передали управление своей ЦНС другим более могущественным существам. Такие люди живут не долго.

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

У меня есть друзья из первого класса, и даже если мы по каким-то причинам не разговариваем с ними или даже не владах и посорились или расфрендились, такие друзья навеки остануться в моем сердце. Друзья которые числятся во френдах но которые уровнем пониже никогда не будут мне настоящими друзьями, потому что на примере первого класса существ я знаю что такое настоящая сердечная дружба. Это трансперсональная дружба, это общая энергия и карма нашего сострадательного резонанса, которая присуща каждому живому существу.
Buy for 10 tokens
Buy promo for minimal price.
buka

LING on bare metal Raspberry Pi

Друзья, то что завещали нам Алан Кей, LMI и Symbolics свершилось. Эрланг без Linux на голом железе, который проходит OTP test suite. Теперь наконец вы сможете писать веб-морды на N2O к вашим IoT которые хостятся прямо там же :-)



Напоминаю что минимальные требования LING это 20МБ ОЗУ и скажем 8МБ дискового пространства для LING имаджа со Skyline приложением на базе N2O и Synrc стека, которое успешно работает на LING.

P.S. За кадром -- автор LING, Максим Харченко, CTO Cloudozer, LLC.
buka

KnitDecor.com (http://KnitDecor.com)

Мой новый бизнес, пряжа из шерсти мериноса и изделия которые мы успешно претестировали на Драгобрате при минус 10°C.

Изделия из пряжи австралийского мериноса 100% шерсть:
- шапки
- снуды
- кердиганы
- варежки
- повязки
- сумки
- пледы для детских колясок
- пледы для больших кроватей

buka

Haskell Web Project Wanted

Попросил накидать мне крутых проектов на Хаскеле, которые разрабатывали крутые Хаскелисты, пока два самых крутых это FP Complete IDE сделаный на смеси Fay (частично) и jQuery, который компилирует вот такую простую страницу:



В такое вот:

https://d2icfh559qjvma.cloudfront.net/combined/lQD8xJ4M.js

И второй проект это https://bazqux.com Володи Шабанова, но там как бы Haskell на бекенде, а сам веб не на Хаскеле, а на UrWeb, и вот я захожу и вижу такое: https://github.com/bazqux/bazqux-urweb/blob/master/main.ur

pageNoBody' "https://bazqux.com" <xml/> m.Subject <xml>
           <body class="{Css.msgContents}"><div class="post">
             {case m.AuthorPic of
                | None => <xml/>
                | Some u => <xml><div class="{Css.authorPic}">
                  <div class="authorPicCenter">
                    <img class="authorPic" src="{u}"></img>
                  </div>
                </div></xml>}
             <div class="msgBody">
               <div class="msubject">{textWithLink m.Link (txt m.Subject)}</div>
               {case m.Tags of
                  | [] => <xml/>
                  | t => <xml><div class="mtags">{["tags: " ^ intercalate ", " t]}</div></xml>}
               {if m.Author <> "" then <xml><div class="mauthor">{textWithLink m.AuthorUri (txt m.Author)}</div></xml>
                else <xml/>}
               <div class="mtextPad"></div>
               <div class="mtext">{t}</div>
             </div></div>
           </body></xml>


У нас тоже можно DTL шаблоны использовать, и писать в них эрланг код, но мы до такого обычно не доходим.

Есть еще крутые Хаскель веб проекты? Эти меня что-то не сильно впечатлили, хочется вот так чтобы как Clojure вштырила, есть такое на Хаскеле?
buka

Internet of Things

Меня как то спросили что я думаю по поводу Internet of Things, пришлось подумать. Я как-то не слишком понимаю что можно хорошего и удобного придумать с громоздкими эвалуейшин бордами. Все равно потом для запуска в производтво нужно все переделывать. Я как-то не очень люблю переделывать. Поэтому очень скептически относился ко всем платформам типа Arduino, Raspberry и других, в основном из-за несовместимости, отсуствии стандартов и устаревшем программном обеспечении (Linux, real-time embedded OS, C lib).

Если бы что-то и было интересно то я бы взял компьютерный модуль Raspberry, это такая штука в виде планки SODIMM планки на которой находится ROM, RAM и CPU, и которая в ставляется в версию платы с SODIMM сокетом. И сделал бы на этой штуке что-то типа Lisp машины только на эрланге. Где нет ничего кроме ARM Xen, Erlang on Xen, OTP, текстового редактора Pie, и нашего стека. Весь имадж с ling и нашими приложениями в ROM, а файловая система на внешней SD карте. Такой себе аналог Amiga, Atari или BeOS. Из нынешних -- Atari ColdFire Project на плате FireBee. Возможно даже какой-то фреймбуфер для эрланговских wx приложений.

Но это не Internet of Things, это просто свой компьютер со своими приложениями для разработки других эрланг приложений :-) А для Internet of Things нужно переделывать гораздо больше. Хочеться чтобы компьютеры были супер-маленькие что-то вроде Edison или даже меньше и что-бы там не было этих ужасных Bluetooth и WiFi стеков и протоколов, потому как оверхед там значительный, чтобы среда радиоканала была что-то типа CDMA, и чтобы эти мини-роботы общались по радиоканалу и вместе могли динамически создавать разные устройства, выстраиваясь и стыкуясь определенным образом. Здесь я вижу неплохой плацдарм для тестирования распределенных алгоритмов и шлифовка протокола который бы позволял организовывать синхронную работу значительного количества таких магнитных микро-роботов. Вот как в Big Hero Six.

А тем временем пока мы тут раздумываем над IoT, Microsoft анонсировала вот это: http://www.engadget.com/2015/02/02/windows-10-is-coming-to-the-raspberry-pi-2/?ncid=rss_truncated :-)
buka

Bitset nature of Erlang guards

What would you say if you'd see following code:

-define(IS_ALPHA(C),
  (C =:= $a) or (C =:= $b) or (C =:= $c) or (C =:= $d) or (C =:= $e) or
  (C =:= $f) or (C =:= $g) or (C =:= $h) or (C =:= $i) or (C =:= $j) or
  (C =:= $k) or (C =:= $l) or (C =:= $m) or (C =:= $n) or (C =:= $o) or
  (C =:= $p) or (C =:= $q) or (C =:= $r) or (C =:= $s) or (C =:= $t) or
  (C =:= $u) or (C =:= $v) or (C =:= $w) or (C =:= $x) or (C =:= $y) or
  (C =:= $z) or
  (C =:= $A) or (C =:= $B) or (C =:= $C) or (C =:= $D) or (C =:= $E) or
  (C =:= $F) or (C =:= $G) or (C =:= $H) or (C =:= $I) or (C =:= $J) or
  (C =:= $K) or (C =:= $L) or (C =:= $M) or (C =:= $N) or (C =:= $O) or
  (C =:= $P) or (C =:= $Q) or (C =:= $R) or (C =:= $S) or (C =:= $T) or
  (C =:= $U) or (C =:= $V) or (C =:= $W) or (C =:= $X) or (C =:= $Y) or
  (C =:= $Z)
).
 


The first thought comes in the mind is to replace this macro with one-liner:

(X > $a andalso X < $z) orelse (X > $A andalso X < $Z)


And really when you put this macro in the body

is_alpha_cow(X) -> ?IS_ALPHA(X).
is_alpha_bull(X) -> (X >= $a andalso X =< $z) orelse (X >= $A andalso X =< $Z).


you receive predicted numbers:

1> sample:mbull().
{119,<<>>}
2> sample::mcow().
{1598,<<>>}


Having measuring functions as follows:

mcow() -> Bin = crypto:rand_bytes(1000), timer:tc(sample,measure_cow,[Bin]).
mbull() -> Bin = crypto:rand_bytes(1000), timer:tc(sample,measure_bull,[Bin]).
measure_cow(<<>>) -> <<>>;
measure_cow(<>) -> is_alpha_cow(B), measure_cow(Bin).
measure_bull(<<>>) -> <<>>;
measure_bull(<>) -> is_alpha_bull(B), measure_bull(Bin).


However when you put macro inside the guards:

is_alpha_cow(X) when ?IS_ALPHA(X) -> true;
is_alpha_cow(X) -> false.
is_alpha_bull(X) when (X >= $a andalso X =< $z) orelse (X >= $A andalso X =< $Z) -> true;
is_alpha_bull(X) -> false.


you receive not only better result than in body, but also the best result of [{guard,body}x{cow,bull}] measurement:

3> sample:mbull().
{104,<<>>}
4> sample:mcow().
{64,<<>>}
buka

Duality of Union and Intersection Type Systems

Algebra encoding in metalanguage for formal definition of ADT:

            terminal C = C
      multiplication C = functor C C
            addition C = functor C C
             algebra C = sum 3 terminal C
                               multiplication C
                               addition C


Consider semantic of multiplication is a fixed for algebraic types
and treates as nominal, while addition semantic is non-nominal
and may vary in inferer both as Union and Intersection.

Here is simple example:

            list T = sum nil product T list T
            tree T = sum nil product 3 tree T T tree T


In Intersection case:

          [ intersection = addition,
            addition list X tree Y = sum 3 nil product X list X product 3 tree Y Y tree Y ]


In Union mode we have this system of equations:

          [ union = addition,
            addition list T tree T = sum list T tree T ]


In this example we treated sum addendums as an poset and
perform usual union/intersection operation on it.

More structural example. E.g. let's say we have two modules/categories
defined in concrete language:

         functor F X = [ fmap = fun 2 fun A B F A F B ]
           monad M X = [ fmap = fun 2 fun A B F A F B, mu = fun M M A M A, eta = fun A M A ]


We could apply same condideration to morphism like for addendums.
In Intersection case the:

                              intersection = addition
            addition functor F X monad M X = monad M X


while in Union mode

                                     union = addition
            addition functor F X monad M X = sum functor F X monad M X


Statement: The intersection here is the product in the poset of subobjects,
and union is the coproduct of the subobjects.


___________
[1]. http://www.cs.cmu.edu/~rwh/theses/pierce.pdf
[2]. http://ncatlab.org/nlab/show/subobject
[3]. http://www.doc.ic.ac.uk/~svb/CL&C14/submissions/clc14_submission_8.pdf
[4]. http://www.cs.cmu.edu/~joshuad/819-intersections-unions.pdf
buka

Мифы про WebSockets

-- В каком году началась вторая мировая война?
-- Што?




Многие люди, которые хотят попробовать N2O, пишут мне о том, что их клиенты якобы сомневаются в том, что WebSocket протокол достаточно матурный и поддерживается браузерами и ИТ сообществом. Просят помощи в разъяснении, что к чему. Я лично никого не заствляю писать на Эрланге и использовать Вебсокеты, так как и так клиентов у меня больше чем я успеваю обслуживать. Но ко мне обратились очень влиятельные люди, и очень корректно попросили помощи в разяснении этого вопроса.

И почему-то все эти люди которые мне пишут, пишут мне из России. Количество вопросов которые предъявляются к технологии WebSockets примерно соотвествует количеству заявлений о взятии Донецкого Аэропорта:

1. WebSocket's дырявый, я читал в инетренте, что там был секюрити Issue, не помню какой, но мне говорил об этом очень влиятельный человек.

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

2. Я читал что в Зимбабве, стране стратегическом партнере России, вебсокеты не проксируются у мобильного оператора ZIMBCELL

Такое могло наблюдаться только в том случае, если в каких-то дешевых сетях, криворукие админы, не смогли разобраться в топологии сети. Конечно при появлении Вебсокетов нужно было качать nginx модули, впиливать их пересобирать, но сейчас WebSocket прокси работает с nginx, HAProxy из коробки, я не знаю ни одного известного сетевого продукта, где бы не было вебсокетов. Если вы знаете какой-то расскажите мне.

3. Я слышал что WebSockets работают только по TLS, а не по TLS не работают

Это связано с предыдущим мифом, так как некоторые сети могут что-то непроксировать, то люди, чтобы обойти эту проблему а не написать письмо на NIC, устанавливают wss:// по TLS, и естественно по шифрованому трафику ничего не проксируется и якобы обходтся мифическое ограничение. При этом не приводятся доказательства случаем неработоспособности Вебсокетов по зимбабвийским и приднестровским каналам.

4. Если я включу TLS, чтобы работали вебсокеты, все будет очень медленно

nginx умеет терминацию SSL, SPDY работает только по TLS, фейсбук перешел на TLS, гугл и все остальные, у вас 80% приложений в мобилке работает по TLS. Но при этом люди продолжают думать что SSL это меделнно, нехватает ресурсов, потому-то что когда-то было прочитано что 1.66MHz процессор с последней OpenBSD на VAX генерировал PKI ключи 2 дня. Я настоятельно рекомедую использовать TLS во всех приложениях, также рекомендует Илья Григорик, и это не связано с неработающими сетями в Приднестровье и медленными датацентрами ДНР и ЛНР. А связано с тем, что это позволит обеспечить хоть какую-то защиту данных ваших пользователей и кукисов.

5. Я слышал что хайп по вебсокетам утих

Хайп утих и по поводу дифференциального исчисления бесконечно малых, и быстрого преобразования Фурье. Если вы пойдете на HN то я бы не сказал что WebSocket хайп утих, возможно вцелом локальное снижение есть, но глобально технология работает даже на SDPY и будуем HTTP/2. Заявления о том, что Вебсокеты прекратят свое существования со дня на день примерно соотвествует заявления о том что Виндовс загнется и Майкрософт станет банкротом. Впрочем это объект обсуждения другого калифорнийского мифа, просто хипстеры Сан-Франциско не в курсе что Haskell родился в Microsoft и благодаря Microsoft.



6. Никто из больших компаний не используют вебсокеты.

Да, это правда, Google+, Facebook все это работает на XHR полинге. Но это не связано с вебсокетами, а с тем, что весь джаваскрипт этого говна генерируется фремворками, типа GWT которые были написаны задолго до Вебсокетов. Эти компании страдают от своей инертности, но при этом эти же компании проводят пиар компании по популяризации SPDY, WebSockets и быстрого интернета, троля себя же и сайти монстры типа NY Times и Bloomberg. Коменты которых сервятся по XHR. Можно перечислять десятки стартапов которые использует WebSockets включая Disqus и другие, но это все делать бессмысленно, для тех кто слеп.

7. Никто не предосталяет графики нагрузочного тестирования вебсокетов.

Это связано с очень плохим качеством утилит нагрузочного тестирования. Единственная утилита, написанная на С, которая может создать рельный шторм вебсерверу которой я тестировал N2O, это wrk, но она не поддерживает вебсокеты. Возможно эта ситуация исправится, и я найду время дописать поддержку вебсокетов в wrk, но пока я осталю пропускную способность ranch, TCP-сервера, на основе которого вебсокеты работают в самом быстром веб-сервере для Erlang:



8. Я слышал что вебсокеты медленные.

Тут тоже есть картинки. Эта картинка говорит о том, что для бизнес приложений на N2O можно рисовать мультики, которые будут показываться как видео, 50 кадров секунду, причем сюда входит не только доставка сгененерированных HTML/JS форм вместе с валидациями и всем, что нужно энтерпрайзу по вебсокетам, но также сюда входит время рендеринга DOM в браузере.



Тут рендерится 33 формы, Your website is faster than 100% of all tested websites Здесь как видно 28 запросов! Без минификации и без компрессии!

9. Докажи мне, что я должен испльзовать WebSockets

Когда я начинал заниматься разработкой N2O, WebSockets их еще не было, были экспериментальные версии протоколов HyBi. Я почитал у Джо Армстронга в блоге, что Вебсокеты это круто, и ничего не знаю о вопросе решил поставить весь свой бизнес на эту технологию. Пока остальные писали свои REST микро фреймворки (которых у нас тоже в изобилии), патча свои рельсы, мы вкидывались в технологию, которая еще не поддерживалась браузерами.



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

10. У нас умный сервер, мы его настроили чтобы он рубил вебсокеты и у нас не работают вебсокеты. Поэтому вебсокеты говно, потому что у нас они не работают

Смотрите пункт 2.

11. Я СТО очень большой компании и протестировал ваши вебсокеты на сайт http://www.websocket.org/echo.html и там у меня вебсокеты не работают на 80 порту!

Для таких людей мы сделали N2O промо сайт, http://skyline.synrc.com/chat там вы можете попробовать зайти с любого устройства и любой сети и убедиться, что вебсокеты у вас работают на 80 порту. А websocket.org писали криворукие хипстеры из Сан-Франциско.

РЕЗЮМЕ


Что я хочу сказать. Не используйте вебсокеты, пишите на XHR, используйте whatever you fucking want только не говорите больше, что вы не читали этот текст. Этот текст написан для лодей у кого есть мозг, чтобы услышать friendly advise.

Максим
Иститут времени, Москва, Украина, 2045 год.