• Trafaret как парсер. Реализация JSON Schema

      Intro


      Есть такой шаг в развитии языка, когда его компилятор написан на нем же.
      Чтобы доказать крутость библиотеки trafaret я тоже решил сделать что-то такое же
      рекурсивненькое, где надо идти глубже.


      Напишем на трафарете парсер Json Schema, который на выходе вернет
      готовый трафарет для проверки документов в соответствии с данным описанием.


      То есть некий объект типа Trafaret, если ему скормить корректный документ json schema
      на выходе вернет объект типа Trafaret, которому можно кормить документы
      соответствующие описанию.


      Как вообще такое сделать библиотекой валидации? Ну библиотекой валидации никак, а вот универсальным трансформером запросто. Trafaret это парсер данных, точнее комбинаторный парсер. Только те парсеры про которые вы наслышаны такие как parsec и funcparserlib парсят строки, а Trafaret парсит все что под руку подвернется, и на что у автора талантов хватит закодировать.


      Json Schema описывается как водится пачкой документов из которых самый близкий народу пожалуй этот — http://json-schema.org/latest/json-schema-validation.html
      Тут описание множества ключевых слов с помощью которых вы можете описать критерии корректности документа, а вот замечательный и зубодробительный в реализации $ref всего в одном месте вскользь.

      Читать дальше →
    • Backslant – шаблонизатор в стиле slim

        Захотелось мне сделать шаблонизатор, чтобы как slim, теги чтобы автоматом закрывались и прочее. Красиво же так:
        html
          head
            title
                - yield "Плюшка!" + " Чашка чаю!"
        


        Но и этого мне мало, хочу чтобы не было своего недоязыка, хочу чтобы просто питоновские конструкции. А кто захочет себе в ногу стрельнуть и бизнес логики в шаблоны навалить, то это проблема начинашек, мне зачем мучаться размазывая код вьюх в папки типа utils, template_tags и прочее?

        А и еще можно кстати угореть так уж угореть — а пусть шаблоны через новый механизм импорта в python 3 тянутся. И если надо что-то от другого шаблона себе вставить, то тоже пусть также работает.

        А еще, еще пусть каждый шаблон это генератор!

        Читать дальше →
      • Pundle — bundler для python

          Начну с пиара другого проекта, который мне очень нравится использовать — pyenv. Это порт rbenv для python, который служит для установки нужных версий python в папку пользователя в недра ~/.pyenv, и активации нужной версии руками или, что более грамотно, через файл .pyenv-version в папке проекта.

          Следуя этой старой доброй традиции обмениваться здравыми идеями с ruby сообществом, я решил портировать идею Bundler (http://bundler.io/), и назвал его Pundle. Это вторая часть рабочего процесса связанного с версиями интерпретаторов и пакетов в руби, и как и первая, достаточно разумна.

          Главная идея pundle в том, чтобы не создавать отдельную директорию на каждую комбинацию версий пакетов как в virtualenv, а вместо этого поставить все пакеты в директории типа .pundlerdir/python-version-variant/package-name-2.3.4, и при старте проекта, взяв информацию из frozen.txt, активировать нужные версии пакетов

          Читать дальше →
        • Открытые классы в ruby, заметки для питонистов

            По своему опыту знаю, что открытые классы в ruby раздражают и вызывают непонимание в среде питонистов. Ну в самом деле, что за странность открыть класс String и переопределить там size?
            Читать дальше →
          • Исследование, которое может показать, что Вселенная это компьютерная симуляция

            • Translation
            Ученые говорят, что если Вселенная продукт симуляции, то мы увидим подсказки в высокоэнергетических космических лучах.
            Одна из самых взлелеянных идей в современной физике, квантовая хромодинамика, теория которая описывает сильное взаимодействие, как она связывает кварки и глюоны в протоны и нейтроны. Это основание вселенной.

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

            Конечно, есть одна или две проблемы на этом пути. Квантовая хромодинамика мозгосносяще сложна и оперирует вычислениями на планковских масштабах. Поэтому даже используя самые мощные суперкомпьютеры мира, физики могут симулировать лишь маленькие кусочки космоса размером в несколько фемтометров (10^-15).

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

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

            И снова, работа симулируемой клетки будет неотличима от реальной.

            Подобные размышления приводят к тому, что возможно наша вселенная запущена на супермощном компьютере. А если это так, есть ли возможность это проверить?

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

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

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

            Читать дальше →
          • Trafaret — библиотека для проверки и преобразования данных

              Исходные данные — вы строите некий сервис, и узнаете, что будете получать данные из вне в определенном формате.
              Предположим что это будет JSON, структуру его определяете не вы, и вообще вот она:
              Читать дальше →
              • +19
              • 3.6k
              • 8
            • SQLAlchemy для Django

              • Translation
              image Я не люблю Django. Я не люблю Django ORM, Django templates, Django forms и еще множество вещей в Django. Но у Django есть определенное преимущество — многие используют Django, практически любой python-программист знаком с джанго. Поэтому приходится мириться с недостатками этого фреймворка, но никто не мешает облегчать себе жизнь, используя действительно хорошие python библиотеки, например SQLAlchemy.

              Что в SQLAlchemy лучше чем в Django ORM? Это главный вопрос, который я слышу от Django guys1, и у меня есть на него ответ — SQLAlchemy может выразить любой SQL запрос (ну 80-90%), в отличие от Django ORM, в котором можно выразить только весьма простые вещи.

              И в некоторых Django проектах возникает необходимость в сложных запросах, на которые стандартный ORM неспособен. Условно предположим, что в момент создания проекта считалось, что Django ORM вполне хватит. Для решения можно писать чистый SQL или воспользоваться SQLAlchemy. Я за второй подход, так как чистый SQL плохо поддается DRY-фикации.

              Читать дальше →
            • Django в неблокирующем стиле, или в погоне за Священным Граалем

                image

                Присказка


                При чтении о Twisted, Tornado, Node.js, у многих python-программистов возникает вопрос — «а вот если взять, и переписать Django в неблокирующем стиле?». Обычный ответ на этот вопрос — нет, не дождетесь. И правда, чтобы переписать целый фреймворк в макаронно-колбечном стиле, надо очень много сил, и большой заряд энтузиазма. Писать с колбеками, очень сомнительное удовольствие.

                Так бы и было, но как я писал в своей прошлой заметке, есть в python-мире greenlet-ы, которые легким движением руки помогают скрыть от программиста все эти асинхронные моменты, до определенной степени. В момент написания той заметки, к мысли заставить работать Django в неблокирующем режиме, я относился весьма скептически — ну в самом деле, кто за это возьмется?

                Читать дальше →
              • Озеленение Twisted

                  Как обычно, в праздники, в свободное время от затирки плитки и прочих прибиваний плинтуса, меня захватила очередная идея из цикла «попробовать». На хабре проскочила статья о Pyrant. Первой итерацией я взял и переделал основную часть протокола на Twisted — github.com/Deepwalker/tx-tokyo. И все было хорошо, наступление шло по всем фронтам, но тут я перешел к питоничной части pyrant, и понял что сделать yield a[megakey]='mega data string', вообще говоря невозможно. Это было очень печально, ведь в статье меня зацепило именно легкое обращение с данными в питоничной форме. Что же делать, Пух, спросил я себя? И вспомнил о greenlet-ах.

                  Читать дальше →
                • Twisted в действии — memcache на python

                    Преамбула


                    В связи с выходными потратил немного времени на реализацию сервера Memcache с использованием python-фреймворка Twisted. В итоге я получил быстродействие в два раза более низкое, что я не считаю очень критичным, а также возможность реализовать парочку расширений оригинального протокола. Также возможны оптимизации, которые еще улучшат быстродействие.
                    Протокол не был реализован полностью — есть еще моменты над которыми можно поработать, но стандартные set/get вполне работоспособны и готовы к использованию.

                    Средства


                    Для хранения кеша используем базовый класс dict. Как вы догадываетесь, реализация dict в python быстра, этот базовый тип используется в python настолько активно, что его не оставили без детальной оптимизации. Таким образом, мы автоматом имеем структуру для хранения кеша в памяти. Осталось реализовать протокол memcache, для предоставления доступа к dict другим программам.

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

                    Читать дальше →
                  • Прокси-сервер SIP на Twisted

                      Питонисты в курсе, что есть такая чудо библиотека для работы с сетевыми протоколами как Twisted. Она немного сложна поначалу, но после просветления становится совершенно необходимым инструментом.
                      В стандартной поставке с ней идет множество уже реализованных протоколов — IMAP, XMPP, HTTP (в сочетании с обработкой URL и какой-нибудь библиотекой шаблонов весьма полезный инструмент) и т.д. Количество же протоколов, которые реализованы на/для Twisted не поддается подсчету.

                      Читать дальше →
                    • В тылу врага. Внедрение

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

                        При всей нелюбви к юзабилити, предоставляемым продуктами небезызвестной корпорации, линуксоиду необходимо интегрироваться в сеть для осуществления деятельности, за которую он будет получать зарплату. В частности ему будет необходимо работать с почтой, обмениваться файлами через общие папки, открывать документы MS Office.

                        Как же выживают линуксоиды в таких условиях?
                      • Поиск драйверов для неизвестных устройств в windows

                          Думаю вы не раз встречались с ситуацией, когда не могли найти драйвера к некоторым устройствам в ОС Windows. В диспетчере устройств эти железки гордо именуются «Неизвестное устройство». Хочу вам продемонстрировать мой метод решения подобных ситуаций и две истории успешного его применения.

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

                          Итак, первая история. Когда то давно я приобрел IrDA-USB адаптер для связи с телефоном Nokia и с Windows XP он работал. Прошло время, появился ноутбук с Windows Vista, и нужно было данные с телефона скопировать для сохранности. И тут выяснилось, что адаптер не работает с драйверами, которые шли на диске. На сайте производителя (Tekram) свежего драйвера под Vista не обнаружилось, но в то же время адаптер прекрасно работал под Linux, чем я и воспользовался.

                          Все знают, что пластиковая оболочка многих устройств с гордым логотипом производителя на деле скрывает под собой чип, который используется в сотнях подобных устройств. Linux не смотрит на логотип, Linux работает с чипами, и вывод dmesg и lspci, lsusb наглядно показывает где следует искать драйвера.

                          Итак, я вставил адаптер в Linux машину и посмотрел вывод lsusb:

                          Bus 007 Device 002: ID 9710:7780 MosChip Semiconductor MS7780 4Mbps Fast IRDA Adapter

                          На сайте производителя за пару минут я нашел требуемое — драйвер под Windows Vista, который заработал.

                          Следующий пример — сервера HP ML110G5. HP поддерживает для этой серии установку Windows Server 2003, и ничего более. В то же время сервера брались под весьма кривую систему, которая иначе как под Windows XP не запускалась. Как вы понимаете на сайте HP драйверов под Windows XP не было, а техподдержка вторично недвусмысленно выразилась, что подобная связка не поддерживается.

                          И снова Linux, а именно Slax, нам помог, lspci вывел наименование чипсета, драйвера под который мы успешно скачали с сайта Intel.

                          Вообще Linux успешно помогает работать с Windows сетями, и эти два случая демонстрируют лишь одну малую возможность применения. К примеру разворачивать новые компьютеры в сети мне привычнее при помощи partimage или dd, так как я не считаю возможным пользоваться нелицензионным ПО, а покупать Norton Ghost, когда я прекрасно обхожусь без него, это растрата средств работодателя.

                          Обновление: в комментариях можно найти другие решения этой частной проблемы.
                        • VPN, полное покрытие

                            Представьте, ваша компания набирает обороты, растут продажи, происходит открытие множества филиалов, и эти филиалы активно работают друг с другом. А это значит что вам нужно все их друг с другом связать! В качестве оборудования у нас маршрутизаторы Cisco, что впрочем отменяет только конечные примеры настроек, если у вас Cisco нет, я находил в сети проект OpenNHRP.

                            Итак, начнем. Для начала свяжем центр с первым филиалом с использованием IPSEC.

                            Читать дальше →
                          • Путешествие группы формант по голосовому тракту

                              Трое монтажников связи. Страдания Джорджа и Гарриса. Жертва ста семи помех. Полезные рецепты. Средство против болезней голосового тракта у монтажников. Монтажники сходятся на том, что переутомились и что им нужен отдых. Неделя в море, вдали от скруток? Джордж предлагает путешествие по реке. Монморенси выдвигает возражение, на реке ловит сотовый. Первоначальное предложение принято большинством трех против одного.

                              Аналоговая телефония



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

                              Читать дальше →
                            • Ликбез по основам безопасности и криптографии

                                Криптография



                                Три кита криптографии — хеш, шифрование симметричное, шифрование асимметричное (с открытым ключом). Основываются криптографические алгоритмы на сложности вычисления больших чисел, но подробнее об этом, если вас конкретно интересует «начинка», стоит читать не в общих обзорах, именуемых ликбезом. Здесь же содержится простое изложение, без лишних заморочек, то есть поверхностное.
                                Читать дальше →
                              • Введение в FreeSWITCH, часть вторая

                                  О FreeSWITCH
                                  Первая часть

                                  Номерной план



                                  Итак, у FreeSWITCH можно подкрутить множество настроек, но основное действо будет происходить в номерном плане. Номерной план располагается в conf/dialplan/*. Как обычно препроцессинг собирает все файлы из этой папки в один. Номерной план делится на контексты (context). То есть следуя настройкам в SIP профиле, настройкам пользователя, выбирается соотвествующий контекст и звонок обрабатывается в соответствии с модулями (extension, переводится на русский как «добавочный номер», но не соответствует смыслу).

                                  Читать дальше →
                                • Python. Плазма-змей

                                    KDE4


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

                                    Теперь серьезно — ключевая технология нового KDE — Plasma. Таким образом, чтобы в KDE было жить хорошо, надо создавать плазмоиды. Спасибо C и C++ за работу ядра, X сервера и KDE, а мы, поколение web-разработчиков, да и вообще людей привыкших к простоте, вполне можем обжить систему используя более знакомые нам языки, к примеру Python, который, как известно, поставляется с батарейками.

                                    Хмм, а может и мне вывести карму на панель?
                                  • FreeSWITCH. Быть может будущее телефонии уже с нами?

                                      FreeSWITCH это редко упоминаемая в настоящее время платформа для телефонии обладающая обширными возможностями. Создан группой бывших разработчиков Asterisk, но не таким образом как Callweaver — архитектура системы переписана с нуля, это не форк. Так как код независим от Asterisk и его форков, разработчики могли выбирать лицензию отличную от GPL, и в итоге выбрали MPL, что позволяет использовать FreeSWITCH в продуктах, производители которых не готовы открывать свои наработки. К сожалению это не позволяет разработчикам использовать код под GPL.

                                      Основные моменты:
                                      • Архитектура многопоточная, производительность очень высокая (тестировал лично, есть тесты на официальном сайте);
                                      • Модуль это модуль, а не название. То есть можно отключить mod_sofia отвечающий за SIP и система продолжит работать. Архитектура Asterisk такого не позволит — код сервера тесно переплетен с кодом chan_sip. Сведения из первых рук — от разработчика;
                                      • Цель — максимально использовать готовые библиотеки. Разработчики не считают своим долгом реализовать все VoIP протоколы современности лично. Вариант с использованием готовой библиотеки вполне подходит;
                                      • Конфигурация — один XML документ разбитый на логические части по разным файлам, собирается препроцессингом (много за и против конфига в XML, все в курсе);

                                      а еще, а еще он может вот сколько