Category: it

Проект Haven: система управления Docker



Шо это было?: Полагаю, не секрет что кроме хобби (которому посвящен сей блог), у меня есть еще и работа 8) Вот на это самой работе, я участвую в создании различного программного обеспечения. Сегодня как раз и пойдет речь об одном таком изделии.
Для меня оно выделяется тем, что это первый продукт который публично доступен. Да, нужен сей инструмент лишь узкому кругу специалистов: некоторым разработчикам, да системным администраторам (не буду писать про DevOps и т.п.).

Проект Haven построен над стеком технологий Docker. Предназначен как для управления кластерами (основанными на swarm) так и отдельными нодами. Имеет веб-интерфейс.
Collapse )

Достались тут мне занятные штуки, зажимы от Урал-альп: 10.21 Мышка и 10.20 Мини

зажим Урал-альп 10.21 Мышка и 10.20 Мини
Скажу сразу, к альпинизму, скалолазанию и всем подобным дисциплинам я имею крайне опосоредованное отношение. Тем не менее у меня есть кой какое снаряжение, а недавно оно пополнилось двумя изделиями от фирмы Урал-Альп (иногда они также упоминаются как AlvoTitanium) и так как в интернете даже фотографий сих предметов почти нет, то я решил заполнить сей пробел и непного описать сии штуки.

Collapse )

Проектирование настольных приложений.

Многие начинают разработку с "открыл дизайнер форм, кинул кнопку, кликнул на ней - начал писать код который загружает дынные" - этот подход многие заучили как единственно верный еще в с таких платформ как Borland Delphi (C++ Builder) и последующих приемников на C# и Java.
После чтения всяческих умных статей про паттерны и необходимость тестирования новички открывают свой код и думают: это все хорошо, а как это применить к нашим кнопочкам?
Один подход к организации внутренней архитектуры который решит эту задачу я сейчас и поведаю в данной статье.
Collapse )

suicide.txt - Файл который может изменить рунет.

Гдето года два назад или больше рОССИЙСКИХ пользователей интернета начали защищать от всяческой плохой информации.

В этом году прикрыли сайты оппозиции.

И вот эпическая вещь, закрытие одного из популярнейших среди программистов сайтов GitHub. За то что на нем расположили файл suicide.txt (думаю нетрудно догадатся о содержимом).

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

Ждем следуюущего этапа, блокировку google, у них также есть этот файл:
https://www.google.ru/search?q=cache:https://github.com/Anakros/objidlib/blob/master/suicide.txt

Немного о том где хранить sql запросы в программах.

Многие начинающие разработчики при проектировании очередного ПО задумываются, куда разместить такой объект как текст SQL запроса. Очевидное решение: в исходном коде программы (а то и в виде статических полей какогонить объекта), видится наиболее простым, особенно в купе с поддержкой со стороны некоторых IDE, множество недостатков такого подхода даже обсуждать не стоит, ибо там всего одно достоинство - макароны SQL кода перемешан с макаронами кода программы, блюда на любителя. Другой более продуманный подход: хранить в файлах, порождает вопрос "в каких?", на что просвещенный интернет заявляет "в XML". Казалось бы что ту можно обсуждать?
Но, тем не мене, предлагаю хранить запросы там где им самое место... в SQL файлах:Collapse )

Почему python отстой.

Не, языки с динамической типизацией гуд, но иногда они позволяют выстрелить себе в ногу через висок.
На днях ковырял pymag для генерации карт, столкнулся с замечательной ошибкой: в методе проводится побитовый XOR чисел с плавающей точкой, есесно что интерпретатор питона охренел от такого и выругался нецензурно. Оказалось все феерично донизя:
class CellElement
  def __init__(self, coords): 
      self._coords = coords ## Discrete coordinates
  @property
  def coords(self):
      return self._coords

и есено везде наивно полагается что координаты целочисленные, но... в одном месте в дочернем классе, туда попадет float, и все работает отлично до тех пор пока мы не станем их XOR-ить, епт, еслиб это была java то такая бы проблема в принципе не возникла бы!
Кроме того в питоне, типы имеют "вирусную" особенность (вообще это какбы нормально, но имеет неприятный побочный эффект именно в языках с динамической типизацией), если вы сложите 1.0 + 1 то получите число с плавающей точкой, так как никто не проверяет результат, то достаточно в одном месте появится float, как везде начнут расползаться float-ы и вся программа начнет скрипеть и кидаться исключениями, причем найти откуда полезла зараза, оченно трудно.

linux: AMD E-350 (zacate) + cpuinfo = fail

Не так давно приобрел я себе таки нетбук, asus 1215b с новым и чудным процессором amd e-350, и озаботился втыканием на него линукса.

И все хорошо, и wifi поднялся и bluetooth завелся, и даже кнопка отключения вайфая заработала (правда перед этим пришлось зарегить на ЛОРе очередной акк., но там нихрена не помогли, мабуть не торт он уже) - пришлось ставить ядро из unstable. Но вот фокус с постоянно высокой частотой проца мне не понравился...
Решение простое: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=627811
тамже и патч к скрипту.

Long в JavaScript - максимальное целое значение 2⁵³

Как то по работе я писал простенький JSON сервис для выгрузки некоей инфы из базы, инфа состояла из объектов, а объекты обладали айдишниками типа java.lang.Long (сервер написан на яве кто не понял), максимально значение которого long - 2⁶³. Посредством библиотечки GSON объекты сериализовалися в JSON и приходили веслому жабаскрипту кой их раскидывал на страничке. Во время тестирования я обнаружил, что айдишники округляются до сотен, что весьма и весьма меня обрадовало, легкостью поиска ошибки.
Изучение документации к Number показало что он может хранить числа гораздо больше 2⁵³, и хранит, но нигде не написано (я во всяком случае не нашел где) в каком виде хранит, школьный курс информатики любому (да, это стеб) подскажет что наилучший кандидат под представление Number - это double 64-х битный, а значение там хранится в мантиссе, размер коей 53 бита. Вот и получается, что при превышении некоторой величины с виду целое число перестает быть таковым и порождает это кучу подводных камней.
Вот пример из консоли firebug:
> ++v
9007199254740991
> ++v
9007199254740992
> ++v
9007199254740992
Что мы видим? Видим что превысив заветное числе инкремент не происходит, это раз, а второе видим что число с плавающей точкой визуально представляется как целое, что меня и попутало в свое время.
На мой взгляд это баг. Будьте внимательны, ибо простой и понятный for возьмет и зациклится:
> v-=1
9007199254741000
> v-=1
9007199254741000
> v-=2
9007199254740998
Собственно про этот баян все, тем более что во всех вменяемых библиотеках сериализации в JSON уже есть методы обхода сего фокуса.

Обсуждение сего чуда можно почитать тут, но зачем?