?

Log in

No account? Create an account

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

Entries by category: it

Уведомления для CI задом наперед
metaclass
Столкнулся тут с очередным порождением сумеречного хипстерского гения - CI сервер drone.io.
Сам сервер живет внутри докер-образа, собирает и тестирует софт тоже внутри докера - т.е. к одной хипсторятине добавляется еще и вторая - докер.
Далее, если я правильно понял из просмотра документации краем глаза - чтобы узнавать про изменения в репозиториях, этой софтине нужно зарегистрировать "приложение" в гитхабе, которому надо дать доступ к репозиториям и оно на них настроит хуки, которые будут дергать оный сервер за торчащий в интернет http-endpoint. Т.е. запустить его внутри локалки - это надо заниматься пробросом портов, а еще надо бы выяснить какими средствами аутентификации оно прикрыто (вроде OAuth, но с ходу во всей это конструкции из гитхаба, докеров, приложения и хипстософта непонятно, кто есть кто).

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

Типы данных для телеметрии
metaclass
В процессе пиления датчика co2 столкнулся с такой фигней: если датчик сам не передает тип данных - то каждая доработка софта на контроллере датчика вынуждает дорабатывать и парсер его сообщений, чего делать совершенно нет желания.

Поначалу данные в udp-пакетах с датчика выглядели так: 2016-10-29T21:26:40.990599,ff8601e440402eb92e
Потом вот так, чтобы сразу видеть концентрацию: 2016-10-29T23:48:35.310594,ff86027840042e305e,632

А потом я решил это дело засунуть сразу в эластик с кибаной, чтобы рисовать графики, причем у нас туда данные (мониторинг нашего софта) идут в виде json-объектов в сообщениях через mq-сервер. Наиболее прямой путь такое делать - это поля от датчика разложить в виде полей json-объекта, тогда эластик автодетектит типы полей и все становится сразу доступным для запросов и графиков.
Но прога, которая транслирует udp-пакеты в mq сообщения - вообще говоря, тестовый/отладочный клиент от моей mq-либы и впихивать в нее прибитые гвоздями имена полей от одного конкретного датчика - лютый грех, такой код должен быть универсальным, очевидно.
Поэтому формат пакета превратился в: "utc=2016-10-30T12:04:08.740605,hex=ff8602db40402e30bf,co2=731", а программа просто конвертирует это в json и добивает служебными полями от себя (уникальный идентификатор ноды, тип сообщения, и прочее такое). В таком варианте я смогу, например, добавить еще пакетов от других датчиков - давления, освещенности, влажности, радиации и температуры, не переделывая транслятор.

Фактически, это структурный тип данных - смысл данных определяется тем, какие в нем есть поля. Это очень удобно для обобщенной обработки.

При этом, когда я работаю с чужими железками, там почти всегда типы данных прибиты гвоздями - начиная от просто упакованных бинарных структур, заканчивая csv с позиционным назначением полей или бинарным массивом из кучи бинарных пакетов с CRC и прочим.
Понятно, что так сильно экономится GPRS-трафик для телеметрии и байтики в прошивке, но почему бы этим устройствам сразу после подключения по TCP не передавать метаданные протокола, которые можно было бы грузить в парсер и он автоматом бы становился совместимым с тем, что устройство будет передавать после этого.
Т.е. хотя бы передавать csv заголовок для csv-форматов, или массив "тип, имя, длина" для бинарных структур или еще что-нибудь в том же духе.

Сказочный мир поней
metaclass
http://ru-sysadmins.livejournal.com/2560263.html?thread=47788807&style=mine#t47788807
"На месяц труда более-менее квалифицированного специалиста, понимающего, что происходит на уровне СУБД, можно взять гигов 128 оперативки. Если не больше - я несколько не в курсе текущих цен."

Покажите мне, где такое бывает, а? Пока все что я вижу - это 1-2 месяца на согласование с заказчиками "нужно докинуть памяти/дисков/процессоров", а потом еще 1-2 месяца на то, чтобы это дошло до одминов, а потом еще и истерики с их стороны "почему у вас память на 100% не используется и почему у вас бэкапы на СТРАШНО ДОРОГОМ И БЫСТРОМ диске, а не на внешнем говносторадже". И это у тех заказчиков, где есть деньги на "докинуть еще памяти", а то у большинства белорусских госконтор истерика начинается уже на этапе "надо купить нормальный сервер".

PS: Расходимся, нас наебали: "Серьезно - вы знаете, проблемы SMB мне не интересны. Пусть идут в SAAS".

"Асинхронный" http api
metaclass
Вчера был на тусовке junolab, где их главные гуру рассказывали, как у них бекенд устроен.
В частности, на входе у них стоят гейтвеи с обычным http протоколом и минимальным набором фич - валидация, проверка авторизации по токенам и прочее такое, которые перекидывают запрос в MQ (nats.io).

При этом, насколько я понял, асинхронность там реализована поверх обычного http, без всяких http2, веб-сокетов и прочих не везде работающих протоколов - т.е. клиент api сначала делает запрос к гейтвею, ему сразу говорят - 200 ок, а потом он должен, по идее, дальше опрашивать гейтвей, пока для него из MQ придет ответ от микросервисов. Или у них там ответы от сервера бесконечно идут, я сходу не понял (т.е. ответ без content-length и соединение просто ждет пока придет что-нибудь, не помню, как эта техника называется).

В принципе, если keep-alive и соединение не обрывается - то реализация дуплексного протокола поверх синхронного http вроде приемлемая. Единственное, что в случае бесконечного ответа - если сервер и клиент долго ничего друг другу не говорят - промежуточные NAT и прочая сетевая муть могут соединение забыть, причем пока TCP keep-alive не проснется (а это два часа по умолчанию, вроде) - это обнаружено той стороной, которая молчит и ждет, не будет. Но теоретически это какие-то heart-beat слать можно со стороны сервера и запросы со стороны клиента.

Postgresql в убере
metaclass
https://eng.uber.com/mysql-migration/
http://postgresql.nabble.com/Why-we-lost-Uber-as-a-user-td5913417.html

Занятное чтиво про заморочки MVCC и реализации индексов в postgresql.
Все бы это хорошо, но я не понимаю один момент - почему они сравнивают только физическую репликацию (передачу изменений в страницах БД) и репликацию передачей исполняемых запросов?
Есть же вариант "передавать логические изменения в во всех измененных записях в порядке их коммита". Т.е. в таком варианте проблемы с недетерминированным выполнением запросов отсутствуют, но размер передаваемых данных заметно меньше, чем в случае "передавать весь WAL".

Праздник SQL запросов
metaclass
Если по-хорошему, то деноминация должна проводиться по велению задней левой пятки руководителя государства и заключаться в вызове SQL консоли и вводе запроса: "все поля с типом "сумма денег" поделить на коэффициент который сегодня пришел в голову". Конечно же, все базы данных должны быть с нормальной типизацией, а не так, что в поле numeric(18,4) хранится все, что в придет в голову, начиная от суммы, заканчивая координатами и размерами сисек.

И при этом должны меняться сразу все ценники (электронные) в магазинах, все 1С, SAP R/3 и прочие поделия адептов 4 действий арифметики.
И стоить это должно сугубо == стоимости электроэнергии потраченной на преобразование :)

Accept-Modality: header
metaclass
По мотивам просмотра вот этого http://www.artlebedev.ru/erlyvideo/process/ пришло в голову, что в браузерах должна быть опция "предпочительное представление" с вариантами "исходный код, текст, картинки, звук, видео" которая транслируется в специальный хидер, согласно которому меняется представление заглавной страницы сайта.

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

Вендекапец, наконец-то?
metaclass
https://www.facebook.com/sloneus/posts/636050909879742?comment_id=636074829877350&reply_comment_id=636385283179638&comment_tracking=%7B%22tn%22%3A%22R%22%7D

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

PS: соседний псто http://ru-sysadmins.livejournal.com/2524542.html: "Из минусов - Всё крутится на 2003 и 2008 виндах. Полувоенная организация со всеми вытекающими".
Ну и кому верить?

UX-пидарасы на службе у клоунов
metaclass
https://bugs.chromium.org/p/chromium/issues/detail?id=477424
В хроме нет API, которое позволило бы сделать расширение с вертикальными табами (не в отдельном окне, не в попапе, а в основном, рядом с контентом).
Попытку обсудить его реализацию закрыли WontFix с резолюцией "In the end we decided that the WontFix resolution was more in keeping with Chrome's core value of simplicity"

Т.е. мнение пользователей - по сараю полностью, главное чтобы как можно меньше фич и кода было. Жрите что дают.

ἀνάθεμα ἀνάθεμα ἀνάθεμα
metaclass
А те, кто пишет в фейсбук про программирование - прокляты будут во веки веков и адские гиены огненные будут лизать их исходный код своими смердящими языками.

Вымышленный мир криптографии
metaclass
Прочел про очередную блокчейн технологию: https://en.wikipedia.org/wiki/Ethereum
Ничего не понял, зачем это.

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

Т.е. все фантазии анархистов, интернет-военов и криптопараноиков превращаются в тыкву в момент "ну ок, обсудили в супер-защищенном OTR мессенджере с perfect forward secrecy через TOR и VPN планы захвата мира, а теперь надо где-то взять бабло и купить тонну автоматов калашникова и патронов к ним".

Я думаю, на украине и в ДНР/ЛНР всем сепаратистам и правым секторам было похер на крипто, зато были контакты с правильными прапорщиками и спонсорами-олигархами, которые их кормили, пока они тренировались в страшных фашыстских тренировочных базах в лесу.

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

И про голанг
metaclass
https://www.facebook.com/alexclear/posts/10206939303546236 (извините за говно-фейсбук)

>"Go это новый PHP. Сделаем дизайн языка говно потому что ничего не умеем, оправдания придумаем постфактум (мы уважаемые чуваки, стояли рядом когда Си разрабатывали, поэтому слушайте нас мы знаем как правильно). Авторы PHP вон честно писали в рассылке, что "дизайн языка такой, потому что мы в процессе учились писать парсеры и вообще не настоящие сварщики")."

>"типов нормальных нет (потому что не умеем) потому что это слишком сложно, исключений-продолжений нет (потому что не умеем) потому что они там что-то стоят в рантайме, синтаксис с припиздью (потому что дебилы?) потому что ???"

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

golang
metaclass
Вы тащемта, как хотите, но golang - это современный Delphi, настолько же простой и пригодный для промышленной разработки.
Надеюсь, гугл не проебет все полимеры, как борланд, а всякие олдфаги со своими C, C++ и жабой будут задвинуты на задворки истории и всех нас нахрен уволят на мороз за то что overqualified и заменят выпускниками БГУИР, которые будут клепать на go микросервисы в докерах.

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

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

Попривыкали, блядь, к "читай код и маны и git reflog" и прочему подковыванию блох, а потом ни один кусок кода или либу в продакшен втащить без переделки наполовину невозможно, потому что вместо обработки ошибок - стектрейсы, коредампы и подземный стук в SO.

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

Репликация таблицы БД с помощью очередей
metaclass
Я тут, как обычно, подумываю, как бы заменить прямое обращение к БД из сервисов на хождение мессаг по очередям и посетила меня такая мысль: можно ли с помощью очереди, гарантирующей доставку "один раз или больше" реплицировать одну таблицу в БД, если у нее есть естественный ключ?

Мне что-то мерещится, что такая таблица является вариантом CRDT (если я воще правильно понимаю, что это такое) и можно гарантировать, что изменения с одной стороны, попавшие в очередь, дойдут до второй стороны и содержимое таблиц в конце-концов сойдется.

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

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

Обычно я делаю распределенную транзакцию с двухфазной фиксацией с двумя БД и передаю данные лога транзакций и изменений между БД, пока оно работает как положено, за исключением того, что это прибивает гвоздями решение к протоколу Firebird, в котором эти распределенные транзакции предусмотрены и, например, убрать прямое обращение к БД и гонять данные по http(s) между сервисами не получается. Было бы интересно, опять же, рассмотреть вариант репликации данных между разными СУБД.

Файловые системы и базы данных
metaclass
Поэтому после оптимизации будут тесты, которые будут имитировать типичные проблемы файловых систем - в основном, это переупорядочение запросов и, поэтому, возможна ситуация, когда информация о commit уже записана, а данные ещё нет.

Это вообще как? Без write barrier вроде же такое никак не вылечить (ну, не считая вуду механизмов в стиле "считаем диск одной из нод распределенной системы, наворачиваем консенсусы и безнадежно воюем с CAP теоремой")

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

Снова про прогресс.

iOS, rdp, ssh и приватные ключи
metaclass
В честь того, что все приложения для управления коптерами у dji только под iOS я разрешил купить себе iPad mini 4 и последние несколько дней занимаюсь тем, что настраиваю его.
Девайс и iOS, конечно достаточно забавные в плане юзабилити - особенно отсутствие кнопки Back выносит мозги, когда непонятно, "как вернуться". Поиск в appstore странноватый, если заранее не почитать в интернете про приложения, выбрать из аппсторе, что подойдет, затруднительно.
Сегодня провел полдня, настраивая ssh, smb и rdp клиенты. Задача была в том, чтобы добраться до виндового сервера по rdp, с помощью порт-форвардинга через ssh, с аутентификацией по ключу с пассфразой. Или прочитать файлы с виндового сервера в той же сети, что и iPad.

Для rdp я сначала поставил родной клиент микрософта, проверил, что оно все работает (и таки оно заметно удобнее, чем на андроиде), затем начал разбираться с порт-форвардингом. Из ssh клиентов я поставил prompt2 и cathode. Никто из них не умеет в порт-форвардинг. Более того, похоже iOS убивает приложения на фоне за 10 минут и соответственно, фоновое приложение с форвардингом портов долго не проживет.
В процессе поисков нашел Nulana Remotix RDP - который умеет в ssh форвардинг, но не умеет сам генерировать ключи. Ключи ему надо скопировать из iTunes. Сгенерировать ключ из клиентов умеет только Prompt2, но он не умеет их сохранять в файлы - только в клипбоард.
Я наверно час искал, как перенести содержимое клипбоарда в файл так, чтобы его увидели iTunes - это просто ад, ни в одной программе не написано "умеет ли она создавать файлы, видны ли эти файлы в iTunes и умеет ли она в clipboard". В итоге оказалось, что второй ssh клиент (cathode) именно это и умеет - вставить ключи из клипбоарда и они станут видны в iTunes. Оттуда я их забрал и перенес в Remotix RDP, после чего все заработало.

Для smb я не нашел ни одного клиента, который мог бы увидеть скрытые/админские шары на винде, с вводом пароля. Приложения эти живут в своей рабочей папке, файлов других приложений оно не видит и в них файлы передавать не может, от чего почти каждый клиент содержит в себе свой корявый просмотрщик-редактор файлов, плеера и прочее такое.

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

Генераторы сериализаторов-десериализаторов.
metaclass
Меня немного удивляет существование protocol buffers, и еще больше удивляет, когда кроме них изобретают еще и Apache Thrift, а потом еще и https://capnproto.org/ и https://google.github.io/flatbuffers/.

Все эти протоколы подразумевают, что система разрабатывается одной и той же командой (или двумя тесно взаимодействующими) с обоих сторон, что типы передаваемых меняются достаточно синхронно, т.е. что протокол за 2-3 итерации не превратится во что-нибудь вроде "у нас тут 100 опциональных полей на каждый случай жизни".

А вот генератора парсеров на случай "протокол дали ембеддеры-психи, засунув в 8 бит 2 флага и 2 поля по 3 бита с длиной дополнительных данных в пакете" или "обвязка протокол описана в виде ABNF в RFC, а в payload опять поселились эмбеддеры с бинарными форматами" я чего-то не видел.

Убивай программистов, у них руки не оттуда растут
metaclass
Сегодня в банке, стоя в очереди, наблюдал сцену "наша система не позволяет ввести букву, которая есть в вашем имени в украинском паспорте". Длилась минут 20, со звонками во все биологические обработчики исключений, предусмотренные (что само по себе уже чудо!) в этом банке.
В итоге, клиента отправили восвояси, не могут они ввести какой-то чудо-умляут украинский в поле ввода.

К сожалению, идеи о том, что надо сделать с людьми, писавшими ТЗ и валидацию в АБС этого банка, подпадают под множество законов, от кармических и уголовных, до определяемых международным правом, как преступления против человечности, поэтому я их оставлю при себе :)

Rust
metaclass
Кажется, сабжу до продакшена еще очень долго.
Очевидные фичи вроде "показать тип переменной в IDE" https://github.com/RustDT/RustDT/issues/45 - зарепорчены только месяц назад.
С учетом того, что там нет REPL, язык компилируемый и почти все полезные фичи реализованы в виде системы типов - анализатор времен жизни, трейты, input/output типы, мутабельность и прочее, а либы представляют собой трэш из очень генерик кода на трейтах - без типовыводилки и ссылок из IDE на документацию и исходники типов пользоваться языком достаточно сложно.

Вот, например: https://github.com/hyperium/hyper/blob/master/src/net.rs#L67
Чтобы понять, что здесь написано - надо почитать трейт Into, структуру Box, найти что такое NetworkStream (чуть выше) увидеть что он наследуется от Read + Write + Any + Send + Typeable, осилить еще и эти трейты, перечитать реализации всех трейтов дальше по коду, разобраться, какой из них из std, какой локальный и прочая, прочая и прочая.

Меня смущает вот эта "нелокальность" языков, когда для того, чтобы понять происходящее, надо идти не в базовую либу, документацию и класс-предок, а облазить пол-интернета, кэши пакетных менеджеров, исходники либ на гитхабе и половину stackoverflow и гуглогрупп разработчиков языка

Кроме того, вот в этой либе для http совершенно неработоспособен выход из программы под виндой. Если сделать серверу close - оно с равной вероятностью секунд 15 выкидывает в каждом рабочем потоке по os error (без объяснений, что за ошибка, где и зачем) либо просто молча виснет и начинает жрать все (иногда одно) ядра процессора в цикле.

И да, поддержки отладочных PDB символов пока нет, т.к. сборка делается llvm и mingw - т.е. windbg на продакшене не используешь. mingw gdb же умирает с ошибкой, если запустить под ним тестовую софтину http-сервер.

Bit rot, часть вторая
metaclass
Отдеплоили сегодня утром заведомо работающую базу данных Firebird одному клиенту.
В 2 часа мониторинг внезапно взвывает - "ошибка в логе сервера БД, повреждение данных".
Начинаю втыкать - ну да, одна из таблиц при чтении определенной записи вызывает исключение вида "decompression overran buffer", бэкап не проходит. Забираю копию файла БД себе, у клиента чиню стандартными средствами firebird (gfix -mend, затем бекап-ресторе). Благо, запись эта не особо нужная и я ее восстановить могу - gfix -mend такие записи помечает как ошибочные и бэкап их игнорирует.

Поскольку я в отпуске и спешить мне некуда, у меня есть эталонная работающая копия базы до ошибки, сами данные в базе почти целиком append-only и база очень мелкого размера - решаю разобраться, что ж все-таки за херня-то произошла (такие ошибки за последние лет 10 несколько раз встречались у разных клиентов).
Читаю описание формата файла бд: http://www.firebirdsql.org/manual/fb-internals.html

Нахожу с помощью запроса вида select rdb$db_key, убитая_таблица.* from убитая_таблица where (фильтр для пропуска битой записи) расположение записей по страницам бд. rdb$db_key состоит(на данный момент) из номера страницы и номера записи на странице.
Затем начинаю копаться в структурах собственно файла - нахожу страницу указателей на страницы таблицы БД, нахожу реальный номер и адрес нужной страницы, достаю страницу из хорошей и плохой БД и сравниваю.
Зашибись - в плохой БД ровно один бит в записи вместо 0 установлен в 1, что вырывает мозги RLE упаковке записей, вызывая ошибку сервера. Меняю его руками на 0, читаю запросом, делаю бэкап - все работает, база исправлена.

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

Хаскель и среднее арифметическое
metaclass
Вот я хаскель использовал только пару раз и практически его не знаю, но в чем проблема с неэнергичным foldl - помню. Про то, что нужны банг-паттерны внутри тупла - краем уха слышал, но не вникал.
Стеб же на эту тему людей, которые слышали звон, да не знают, где он, меня очень сильно огорчает.
Ладно, айсед критикует - он хотя бы писал на этом и понимает, о чем речь идет. А так - это выглядит как "разработчики на клиппере критикуют SQL за то, что теория множеств".

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

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

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


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

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

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

Read more...Collapse )

Религиозные предрассудки
metaclass
Сижу потиху втыкаю в stm32 микроконтроллеры и одна из неприятных особенностей - большое количество IDE разной степени невменяемости и платности.
Собственно, платку с контроллером я уже запустил и проверил с помощью serial bootloader, пока под руками st-link не было, а сейчас вкуриваю весь этот сатанизм в виде мейкфайлов, линкер-скриптов, ассемблерных вставок, CMSIS и прочего StdPeriph_Driver
И таки заставить себя сделать обычным образом - скачать первую попавшуюся условно-бесплатную IDE с жабоэклипсом внутри, создать проект визардом и тупить в него, я не могу - бесит, когда ради 128 кб прожки надо скачивать 50 мб непонятно чего, с гуями, визардами и прочей хренью, запускать инсталляторы, изучать куда оно это все ставит и как запускает.
А уж тем более бесит, когда для скачивания демо-версии IDE нужно заполнить форму на N экранов, где указать размер обуви, фотографию жопы и унитаза, девичью фамилию матери и воинское звание.
Скачать и распаковать gcc-arm-embedded под винду и воткнуть stm32flash на линукс иди там openocd какой гораздо гуманнее для мозга, чем все это bloatware.

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

Опять белорусское ИТ-безумие
metaclass
У одного клиента не работают назначенные задания, для бэкапа БД. Никто из саппорта не осилил, поэтому я решил посмотреть лично что там такое.
Пишет "запуск не удался". Причем только для cmd/bat файлов, exe запускаются как положено.
Запускаю procmon и туплю в действия svchost.exe. Оказывается - на cmd.exe были убраны разрешения на запуск от имени SYSTEM. Зачем - а хрен его знает зачем, очередная фантазия на тему безопасности или еще что-нибудь такое.