?

Log in

No account? Create an account

Заповедник репрессивной психиатрии

Entries by category: литература

Доставайте голангистов из гробов
metaclass
Есть вопросы по языку для интеллектуального большинства:
1) Если я форкаю чужую библиотеку, а она унутре себя ссылается на сама себя - как с этим работать? SO советует сначала делать go get оригинальной, затем подключать git remote свою репу и потом править. Т.е. на всех других рабочих местах нужно будет повторять то же самое. По идее, это должен менеджер зависимостей делать в конечном итоге?

2) Что за херня с логгерами и обработкой в этом вашем голанге? В большинстве либ обработка ошибок сводится к log.Println(err) где err - строка в стиле "у вас произошла херня", без объяснений что, где и как, причем способа привязать логгер к пакету я чо-то не нашел.

Python back
metaclass
Я уж думал, один я такими постановками задач в стиле "окружению доверять нельзя, приложение ставится у клиентов где только можно в ужасных условиях" страдаю.
Правда, я до сих пор пытаюсь придумать - на каком компилируемом языке со статик типамисделать удобный для мозга сервер приложений для таких же целей. C#+F#, конечно, почти идеально, но это же микрософт, с них станется завтра закрыть дотнет, дон сайма выгнать на мороз, F# выкинуть из студии, а C#/CLR превратить в подобие ада COM, которое они пытались изначально сделать, из чего получился дотнет.

Originally posted by levgem at Python back
В 2006 я без сожаления променял питон на рельсы, потому что это было реально круто. Так до 2011, когда я эти ваши рельсы бросил.

Сейчас мы встали перед дилемой: на чем писать приложение, которое отгружается пользователям. Тут есть важный момент: это ставится пользователям, а следовательно мы не можем раздувать инструкции по установке и доверять окружению. Все что нужно (кроме глибц) мы пакуем с собой.


Факторов при выборе поатформы много: удобство написания бизнес-логики и работы с бд, размер инсталяции, потребление ресурсов.

Эрланг в этом месте выбросили из-за необходимости много работать с бд, а эта задача эрлангом решается плохо.

Джава не рассматривалась потому что лютый ад и бешеный размер пакета.

Read more...Collapse )

nanomsg, zeromq и ассерты
metaclass
Продолжаю вникать в легковесные MQ библиотеки и ужасаюсь одной всепроникающей идее - ассерты в релизном коде, буквально на каждый возможный косяк.
С одной стороны, fail-fast это правильный подход, пусть супервизор процессов разбирается что дальше делать.
С другой - abort или RaiseException на виндах кидают messagebox, а messagebox в виндосервисе, если нет чек-бокса "разрешить взаимодействие с десктопом", это гамон, такой процесс можно только убить, он больше не подчиняется указаниям от сервис-контроллера. То же самое - запуск процессов из task scheduler, этот мессаджбокс будет "где-то висеть" в гребенях сессии в которой запущены сервисы.

Далее, нормальная методика при обработке ошибок: try {} catch(exception) { log(сообщение, параметры вызова, exception);throw}. Т.е. я по крайней мере, по логам узнаю, что привело к исключению (за исключением совсем плохих вещей, типа полной нехватки памяти, умершего железа или выдернутого езернет-провода).
В случае же assert - у меня процесс сдыхает (и не дай бог в соседних потоках писать на диск или работать с железом), причем если супервизор, который может прочесть stderr и скопировать сообщение в свой лок,отсутствует - сообщение об ошибке уйдет в никуда.

Судя по тому, как друг на друга псят Martin Sustrik и Pieter Hintjens, отзывам про либы и тому бардаку, который творится в коде nanomsg(например, комментарий вида: /* For some reason simple CancelIo doesn't seem to work here. We have to use CancelIoEx instead. */ в коде, из-за которого nanomsg вообще не запускается на 2003 и xp), ситуация с этими либами откровенно нехорошая.

Спросонья лезет в голову всякий бред
metaclass
Охранный амулет от паттернов, ORM, хипстерства, NoSQL и "духа стартапов":
фигурка крокодила в казачьем костюме с томиком русской классики в одной руке и книжкой по СУБД в другой.

scala spray slick restful ад заборы коровники коворкинги хипстеры
metaclass
В целях недопущения упрощения жизни, а так же чтобы псить, при необходимости, со знанием дела, осиливаю скалу.
Причем начал практически с конца - клепаю RESTful сервис на основе spray с всякими json-маршалингами внутри через имплициты и прочую адову содомию.
При достаточном количестве type-level магии оно выглядит, конечно, так же просто, как какое-нибудь руби, или как лиспы без скобок и с инфиксной записью, но внутренняя сложность, по-моему, зашкаливает. "Импортируй себе немножечко имплиситов и получи на халяву сериализаторы в json для всего", "Оберни маршруты в директивы логгера" и прочее такое.

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

Завести то я это чюдо заведу, но вот что с ним дальше делать, не совсем понятно. На данный момент картина выглядит так: Clojure проще, но скобки и стектрейсы компилятора отпугнут новых пользователей, Scala дико сложнее, но поначалу она выглядит как "почти жаба", обработка ошибок более читабельна и есть шансы, что в эту западню попадутся и желающие новеньких языков и любители сойти с ума на почве вычислений на типах.
Tags: ,

Scala
metaclass
Читаю книжку Одерского, до основной шизы еще не добрался, но такое ощущение, что в скале чрезмерно много синтаксического сахара. Типа "тут вы можете скобки опустить, а тут вместо скобок использовать фигурные скобки, а тут мы прямо в параметрах класса сделаем их полями, а в multiline string literal вы можете сделать отступ и stripMargin" и прочая и прочая в том же духе.
Основное из этого, видимо - function literals и вызов методов в стиле a methodName b, без точек и скобок, что делает код более лаконичным, одновременно позволяя при желании превратить код в нечитабельный ад.

Заодно по наводке jdevelop глянул на http://spray.io/ https://github.com/spray/spray/wiki
Примеры там, конечно, знатный abuse возможностей языка и вычислений на типах, типа extraction-директив с HList в качестве параметра типа.

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

PS: Вот, к примеру:
https://github.com/spray/spray/blob/master/docs/documentation/spray-routing/code/docs/HttpServiceExamplesSpec.scala

В SimpleService HttpResponse реализован как html-код написанный прямо внутри скала-кода. Сижу уже 30 минут ищу, где это преобразование реализовано и как. Т.е. не видя отдельных литералов и их типов (которые без загрузки всего оного кода с зависимостями в IDE/интерпретатор еще и не увидишь), с ходу догадаться, что происходит, достаточно сложно. XML literals, встроенные в язык и где-то implicit для конверсии.

PPS: implicit evidence:
http://jim-mcbeath.blogspot.com/2008/11/scala-type-infix-operators.html
http://stackoverflow.com/questions/3427345/what-do-and-mean-in-scala-2-8-and-where-are-they-documented

По-моему, это уже достаточно сложно, чтобы увлечь психов и стать новыми крестиками. Вот xeno_by еще приделает макросы - и совсем хорошо станет.
Tags: ,

Динамическая типизация, или статическая типизация для ленивых
metaclass
Вчера juan_gandhi сделал замечание что я, пользуясь динамически типизированной кложурью, при этом требую, чтобы в Java проверяли входные параметры на валидность. (Если что, проверка валидности в дотнете есть на каждом шагу, а объяснения вида "экономят циклы и не делаю проверки" в контексте жабы, тяжелого железа, JIT и прочего звучат крайне странно).
Собирался на эту тему устроить срач с утра, но thedeemon уже начал, так что я продолжу :)

Так вот, динамически типизированными языками мы пользуемся от бедности - нету статически типизированных языков, которые давали бы ту же функциональность.

Например, я хочу использовать кортеж с именованными полями (потому что позиционные кортежи нихера нечитабельны и их тип вида int*string*smallint*money*bool*Chervie ни о о чем не говорят). От входа в F# при этом нужно:
1) объявить этот чертов record где-то
2) сослаться на модуль с объявлением везде где он нужен
3) создавать экземпляры рекорда кривопачвярными конструкциями, причем оставить поля значениями по умолчанию нельзя.
4) паттерн матчинг с декомпозицией вроде не работает с рекордами.

Хаскель сразу закапываем - там на каждый случай имеется 3-4 расширения и 10 пакетов в hackage различной степени недоделанности, идиоматический подход - писать в point-free style, чтобы коллеги не разобрались, а работать в продакшене можно только с теми сторонними библиотеками, которые я могу сам починить.

При этом, у меня при работе с оперденями постоянно ситуации вида: есть запись с тремя полями, полученная из БД, мне нужно произвести обработку этой записи и добавить результат обработки в виде четвертого поля, получив новый тип записи.
Я НЕ хочу объявлять каждый раз такое руками и в Clojure это делается элементарно, добавлением нового ключа в map в функции-обработчике записей.

При этом РЕАЛЬНО динамическую типизацию я не использую. Она мне почти не нужна, потому что единственная ситуация, где вменяемый человек будет на одном цикле биндить к имени число, на втором строку, на третьем - список записей - это когда по условию задачи нужна, например, EAV-модель во все поля. И то - обычно EAV делается от безысходности, потому что пользователь не может нормально работать со схемой БД, а задача требует чего-нибудь вроде "добавить к части записей атрибут "фаза луны в которую производилась приемка товара"". В норме должны быть зависимые типы и миграции и пользователи бы пользовались той же системой типов что и разработчик.
Т.е. нормальный вывод типов - это когда программа берет типы из тут же описанного SQL-запроса, а рекорды расширяемые и объявлять их не нужно.

Второй use-case, где "вроде бы динамическая типизация" - это когда я делаю документы в виде кложурных структур данных, подгоняя комбинации списков-мапов-массивов-множеств под предметную область. В кложуре же это делается в лоб, а в хаскеле в один список не положишь три разных по структуре(типу) раздела документа. Но на самом деле, то что я делаю в кложури - это просто алгебраический тип данных "для бедных", без объявления заранее и без явно выделенных-именованных конструкторов данных. Если бы была возможность делать расширяемые и объявляемые по месту типы данных (чтобы каждый раз при разработке не переключаться между объявлением типа и конструированием данных по этому типу) - то было бы то же самое что в кложури - но статически типизированное.

PS: На ту же тему: http://justy-tylor.livejournal.com/190153.html

Свежий айсед-срач
metaclass
Про чтение книг по программированию.
http://theiced.livejournal.com/145249.html

Сразу скажу: я читаю книги про то, чего не знаю. С охуенным удовольствием прочел Эккеля "Философию Java", потому что там _базовые сведения_. Не "установите себе вижуал-студию-100500х и положите мышой кнопочку", а конкретно базовые данные, почти без воды.
Прочел "JavaScript The Good Parts", 170 страниц концентрированной информации.
Но блин, читать книжку про WCF или WPF или ASP.NET или MVC или еще какому-нибудь частному случаю частного фреймворка? Это же трындец.
Как можно использовать технологию, которая настолько антилогична, что требует 1000 страниц бумажного описания, при этом нормально ей пользоваться без этого, как минимум, затруднительно.
Т.е. кривая обучения выглядит как "за 15 минут написали хелловорлд, за месяц сделали прототип, а потом начались тонкости и приходится стоять враскоряку в гамаке годами". Это, имхо, ненормально.

PS: https://plus.google.com/u/0/108215660845587965071/posts/hNJVKKgUaHw
Еще один момент на тему тех же современных фреймворков.
"Внезапно оказывается, что не работает именно то, что тебе нужно".
Зато свистоперделок - выше крыши.

Сказка про злого доктора Айболита
metaclass
Злой доктор Айболит получил у фармацевтической компании непроверенные лекарства и поехал в африку испытывать их на зверях. Там 20% зверей умерли от того, что лекарства были неправильные, после чего его поймали местные спецслужбы и начали пытать. Он пытался сбежать на орле, но орла засекли местные средства ПВО и сбили из зенитных орудий, а доктора приговорили к 25 годам тюремного заключения.

ЧУМА!!!
metaclass
В детстве часто бывал в медицинских учереждениях, где в мрачных темных коридорах на стенах висели плакаты по гражданской обороне и описания болезней. С тех пор дико радуюсь всяким литературным произведениям и фильмам, где основная идея - биологическая угроза, вроде "Штамм "Адромеда"", некоторые шпионские произведения, игрушки вроде Splinter Cell Pandora Tomorrow, итд

В свете этого порадовался вот такому:
А вы знаете что скважины дариды распложены на территории бывшего скотомогильника?

:)))

Доработался.
metaclass
Цитата с форума по Axapta:


Поддерживаю, в российском учете есть оба аналогичных понятия (красное и черное сторно). Черное сторно (реверс или обратная проводка) увеличивает обороты по счетам.

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


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

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

Все таки 8-летнее общение с бухгалтерами меня свело с ума окончательно.

Юрий Петухов
metaclass
Отзывы:

Этот человек - Юрий Петухов, историк, писатель, издатель и просто е****ый ублюдок. Да, да, это он издавал некогда печатный орган Вселенского Разума - газету "Голос Вселенной", это он написал Справочник-классификатор "Инопланетные пришельцы" и проч. Он совершенно е****ый. Но читать его надо. Это ЗНАКОВЫЙ писатель.

Основную аудитория его личной газеты "Голос Вселенной" составляли две социальные группы: взрослые шизофреники с параноидальным бредом и молодые любители психофармакологии

В детстве пытался прочесть первую книгу из цикла "Звездная месть". Мой мозг сломался на этапе прохождения главного героя третий раз по одному и тому же участку "системы". То бишь, я окончательно перестал понимать, о чем идет речь и забил читать дальше :)

"Справочник-классификатор" - готовый набор концепт-арта для монстров в компьютерных играх.