Такая ошибка может возникнуть при компиляции программ на C++ в Linux. В моем случае это была библиотека на Qt.
Последнее время крупные компании всё чаще выбирают Python для разных проектов. И правда, для многих задач Python имеет замечательные решения.
Благодаря популярности Java
язык C#
обрел ещё большую популярность, да
так, что теперь доступен на Linux. Я конечно не испытываю симпатий к этим
языкам и .Net
стеку в целом, но OpenSource и доступность в Linux не
может не радовать. Ниже рассмотрим пример как развернуть проект на .NET
Core
и отправить HTTP запрос.
Nix - замечательный пакетный менеджер, который работает на MacOS и любом дистрибутиве Linux, причем из-за своей функциональной чистоты и изоляции зависимостей, гарантировано выдает всегда одинаковый результат.
Задача - создать шаблонную функцию, в которой в зависимости от типа
перечисления выбирается нужный индекс в контейнере vector
. Попробуем решить
задачу в лоб, создадим 3 перечисления и выберем нужный индекс в шаблоне.
Сборка сей библиотеки из исходников под Windows не такая уж простая задача, как может показаться на первый взгляд. Ее можно осуществлять при помощи Visual Studio (cl.exe) или компилятора mingw.
Firebird - это опенсорс, версионная СУБД, с регистронезависимыми названиями таблиц и полей (как у Oracle), которая хранит каждую базу в одном отдельном файле (как sqlite, но требует наличия сервера, хотя бы embeded). Из минусов можно отметить довольно скудную систему типов, индексов и по сути отсутствие возможности горизонтального масштабирования. Также многие библиотеки, ОРМ и прочее игнорируют поддержку этой СУБД, однако FireBird сильно популярен (был?) на территории СНГ, поэтому довольно часто приходится с ним работать.
BOINC - платформа, которая позволяет выполнять добровольные вычисления для различных проектов. Изначально создавался для проекта SETI@home.
Это статья из лекций http://lectureswww.readthedocs.io/999.additions/texteditors/vscode.html
Z-2 USB
всеядный считыватель, который умеет работать на двух частотах 13,56
МГц и 125 кГц одновременно. Поддерживаемые форматы карт EM-Marine
, HID
ProxCard II
, Mifare
, Mifare Plus
, Mifare-UL
(чтение/запись),
Temic
(чтение/запись), Cotag
(опционально).
Docker начиная с версии 1.10
и выше, перестал брать значение MTU
от
сетевого интерфейса. Теперь его нужно указывать явно:
Здесь я буду собирать разные полезные ресурсы по ОС NixOS и пакетному менеджеру nix. Если вы, что то не нашли пишите в комментах.
C++11 в gcc появился, начиная с версии 4.7, но в CentOS6 естественно более старая версия без С++11. Как вариант, можно собрать из исходников, но я опишу способ установки из дополнительных реп.
Это статья из лекций http://lectureswww.readthedocs.io/6.www.sync/3.framework/pyramid/5.1.rest.html
Это статья из лекций http://lectureswww.readthedocs.io/6.www.sync/3.framework/pyramid/5.urldispatch.html
Здесь я буду собирать разные полезные ресурсы по фреймворку Pyramid. Если вы что то не нашли, пишите в комментах.
Это статья из лекций http://lectureswww.readthedocs.io/999.additions/python/asyncio-decorator.html
Все уже слышали про новый pyhton версии 3.5 (https://docs.python.org/3/whatsnew/3.5.html). Я постараюсь описать как начать им пользоваться в вашем виртуальном окружении.
reStructuredText - очень удобная разметка, которая используется при написании документации (sphinx), README для гитхаба, битбакета, PyPi и всего прочего вплоть до научных статей (пример) или же статей для блога :)
Перевел тут блог с https://www.blogger.com/ на abakan/ablog. Блоггер это конечно хорошо, но у него крайне ограниченный WYSIWYG, тем более только из браузера. Ablog по сути это sphinx движок заточенный на блог со всеми плюшками, rST разметкой, RSS и disqus комментами.
Документация в python проектах пишется при помощи sphinx, он умеет
используя расширение automodule
читать докстринги и формировать
документацию из кода.
Mozilla использует в своих проектах Pyramid и у них есть
отличный модуль для создания REST API
https://cornice.readthedocs.org/en/latest/
Deform - это такая штука которая генерит формы, а шаблоны для виджетов в нем написаны в формате Chameleon шаблонизатора.
Старая, но очень полезная книга по Agile
. Довольно редкий случай когда вся
книга описывает рабочие процессы реальной организации, никакой воды, никакой
зауми и вялой теории. Очень рекомендую. Тем более книга в свободном доступе и
переведена на русский язык (лучи добра и счастья переводчикам).
Что бы удалить поломанный пакет типа такого:
Запилил я тут для своих нужд небольшое приложение (sqlalchemy_mptt)
которое добавляет в модель поля и функционал необходимый для Nested sets
.
По аналогии с django-mptt. Грубо говоря в модель добавляются поля
left
и right
которые при помощи системы эвентов самостоятельно
пересчитываются при изменении дерева. Ниже пример обхода дерева:
Идея непрерывной интеграции заключается в том, что при любом изменении проекта он пересобирается в условиях приближенных к реальной эксплуатации и каждый раз запускает тесты. Это позволяет моментально отловить баги и исправить их не отходя от кассы, пока ещё помнишь что понаписал.
Go замечательный язык программирования, который можно компилировать,
компилировать под разные платформы (ARM
, x86
), распараллеливать. Он
проще C/C++
и уже сформировавшийся язык в отличии от Rust
который
ломает программы с каждым обновлением. Область применения самая разная начиная
от консольных утилит, всяких парсеров, системного, сетевого ПО, связи с
физическими устройствами и заканчивая веб приложениями, разве что пока нету
реализаций под смартфоны (android).
ORM
позволяет быстро переключатся между БД не учитывая их диалект
(практически). Но данные хранятся физически в разных местах и естественно их
надо переносить, например при переключении с sqlite на PostgreSQL. В
Django есть встроенный функционал в виде:
Я создал небольшой пример, как это сделать на примере sadisplay.
sadisplay - это модуль который отображает модели SQLAlchemy в виде
UML
диаграммы.
Я прочитал этот шедевр довольно давно, но всё же раз начал писать про книги, то напишу отзыв. Книга просто необходима для прочтения, в первую очередь руководителям и разработчикам с опытом решения разных проблем в области IT и возможно HR в той же области. В этой книге главное осилить первую половину, вторая читается на одном дыхании (а почему так это лучше узнать из контекста). Брукс крут! Реально крут!
Django это фреймворк, при помощи которого быстро пишутся сайты. Так ли это?
Название языка произошло вовсе не от вида пресмыкающихся. Автор назвал язык в честь популярного британского комедийного телешоу 70x «Летающий цирк Монти Пайтона». Но потом все стали его ассоциировать со змеей, ибо змея она и в африке змея.
В продолжение статьи о рабочем окружении (С чего начать?©), по просьбам трудящихся и во благо партии пишу о текстовом редакторе Vim.
pyramid_sacrud_example - пример работы sacrud в Pyramid вместе с
PostgreSQL
.
Еще одна книга по Vim
на русском языке готовится к выходу. ДМК - это всегда
прекрасный перевод тех. литературы, но ксожалению отсутствие эл.форматов.
Уже упоминал эту замечательную книгу (Изучаем редакторы vi и Vim, epub + pdf). Теперь в epub’е, вобщем зачёт.
Для простых CRUD
действий с БД, можно воспользоваться модулем
action
из sacrud. Это немного сократит код и добавит
некоторой универсальности в ПО со сложной логикой.
Новая версия sacrud 0.0.3
. В ней поправлены некоторые баги,
добавлены нескучные обои элементы дизайна в расширении для
Pyramid
и создан отдельный репозитарий с примерами работы разных типов
полей (pyramid_sacrud_example). Pyramid_sacrud_example работает только с
Postgres потому что включает в себя примеры полей специфичных именно для этой
БД (таких как hstore
).
Приведу просто пример триггера на plpython
который использует данные из
поля hstore
:
Запилил Yet another CRUD интерфейс для SQLAlchemy. По сути это аналог
Django админки или FormAlchemy, но ОЧЕНЬ сильно упрощенный, ничего
лишнего. Есть поддержка большинства полей + кастомные поля типа файл (для
загрузки файлов, изображений) и GUID
. Довольно просто подключить к
Pyramid проекту и сразу начать работать по адресу
http://localhost:6543/sacrud
Понадобилось мне тут создать флаг в цикле, который можно использовать где нибудь потом в шаблоне. По логике все должно выглядеть примерно так:
Иногда в шаблоне нужно зафигачить какую-нибудь рыбу типа "Lorem ipsum dolor
sit amet"
, часто в цикле итд. Для этого существует функция lipsum().
У меня есть дополнение к pyramid которое я включаю почти в каждый проект при
помощи includeme
(include()
). Приложение
это дает мне простой CRUD
интерфейс с Jinja шаблонами малой кровью.
Что позволяет избавиться от монстра FormAlchemy. Естественно каждый
проект имеет свое название поэтому пришлось применить немного магии что бы
создать универсальный механизм получения DBSession
в своем подключаемом
дополнении.
Программа для консоли в Linux, которая имитирует поток бинарных цифр из фильма матрица. Очень эффектно выглядит, рекомендую попробовать!
В последнее время мне кажется что я пользователь Интернета
в Северной
Корее
.
Издательство “Символ” радует последнее время годной литературой. Для предзаказа
представлена ПЕРВАЯ книга на Русском языке по vi
и vim
. Я конечно
понимаю что можно прочитать vimtutor
, но когда это все в картинках и со
стрелками то въезжаешь намного быстрее. В общем заказал, для меня очередной
хэндбук.
Мне иногда приходится писать сайты знакомым, друзьям, знакомым друзей, знакомым знакомых друзей... И почти всегда всем нужен простой сайт нахаляву визитка, но что бы можно было вносить изменения периодически. Идеально для этого наверно подходит CMS, но CMS слишком тяжелая и имеет зачастую слишком много ненужного. Поэтому я написал движок сайта-визитки с выпиленным ненужным.
В ноутбук вставляем еще одну сетевую карту, например такую:
Шыкарная книга по Postgres. Много умных и полезных мыслей в одном месте. Хорошо написано про репликацию и настройку производительности. Книга на гитхабе в свободном доступе! Автору лучи добра и счастья, пиши исчо!
Т.к. я читаю много техлитературы, то периодически буду писать мысли о ней.
Если у вас засвистела электроника то 99% это схема питания, будь это нетбук
x100e
или БП или коммутатор.
В принципе мой Debian Wheezy определил почти все системные клавиши кроме 2х
справа на картинке (Ctr+Alt+Del
и поворот экрана
), микрофон и zoom по
Fn+пробел
. Ctr+Alt+Del
не нужен, микрофон и зум это повод написать
отдельную тему, а про поворот экрана я напишу подробно.
Redactor-js - это простой вайсвиг с возможностью загрузки изображений.
Отличное приложение для создания лабиринтов. Написано на Python и доставляет много фана.
Основная документация как это делать здесь. Но как обычно есть нюансы.
Poolyx CMS - малоизвестная система управления сайтом написанная на Python с применением Pyramid немецкими кодерами.
При установке дистрибутива debian-6.0.5-amd64-businesscard.iso
было
замечено зависание на шаге network detect
. Из-за чего это происходит я не
знаю, но лечится нажатием Ctrl+C
один или два раза. После чего начинается
поиск настроек сети при помощи DHCP
.
Пример простого блога на Pyramid https://github.com/uralbash/pyramid_easy_blog
Одной из причин отказа развивать ветку Pylons стала его архитектура
проекта. Все контроллеры хранятся в директории controllers
, модели в
models
, шаблоны в templates
. Это очень удобно когда у вас маленький
проект, но если он разрастается до десятков и сотен сущностей, то становится
крайне сложно скакать по этим папкам выискивая нужный файл, относящийся именно
к этой сущности. В Django сделано по другому, в проекте хранятся
приложения (application
) - это такие маленькие подпрограммы которые
отвечают за конкретный функционал проекта (например фотогалерея
django-photologue или дерево сайта django-sitetree и прочее).
Каждое такое приложение имеет свою папку и уже в ней хранятся контроллеры
(views
в данном случае) и модели (models
). Т.е. вместо такой
архитектуры Pylons:
FormAlchemy это CRUD
для SQLAlchemy. Для Pylons
существовало расширение прямо в самом модуле в разделе ext. Для Pyramid создали
отдельный пакет pyramid_formalchemy. Посмотрим как это работает:
Взято от сюда http://c-nergy.be/blog/?p=897
UPD: Создатель электромеханического бояна Владимир Демин
- человек с
высоким ощущением прекрасного: подробнее на Hack Day
Иногда скрипты, выполнение которых зависит от времени, не срабатывают. Менять
время и запускать их повторно или менять код приложения неправильно. Что бы
выполнить их задним числом есть утилита faketime
.
Если появляется ошибка типа "RuntimeError: autoconf error"
, то необходимо
установить C
компилятор:
Для SNMP в питоне есть несколько библиотек но у всех свои недостатки.
Немного допиленная версия этого http://djangonaut.blogspot.com/2009/05/sphinx-documentation-github-pages-3.html
RRDtool (Round Robin Database). Обеспечивает хранение и отображение данных мониторинга (загрузка каналов, температура и любая другая зависящая от времени последовательность данных, которую можно получить некоторым способом). Задумывалась как повторная, но более правильная реализация MRTG. Объём хранимых данных не увеличивается со временем (ячейки хранения используются циклически). Использование различных функций консолидации данных позволяет охватывать большие интервалы времени без чрезмерного увеличения объема БД за счет снижения разрешающей способности. В отличие от mrtg, программа не упаковывает старые данные самостоятельно, это надо предусматривать при проектировании БД. Сбор информации и генерация HTML-кода также производится с помощью внешних средств. Более мощные средства генерации графиков. Все времена во внутреннем формате Unix (число секунд с 1 января 1970 в UTC). Значения счетчиков могут быть целыми или вещественными числами или специальным значением UNKNOWN. Лицензия - GPL (но автор не будет против, если в благодарность послать ему CD/DVD из указанного им списка; при установке rrdtool имитируется заказ CD на amazone.com ;-). Необходимо иметь perl 5 (без perl rrdtool соберется, но не будет модулей подержки perl) и обычный набор средств компиляции (make, gcc, autoconf, automake, libtool). Имеется также поддержка tcl и python. Нельзя использовать для учета и биллинга - слишком много он усредняет и сглаживает, используя достаточно сложные алгоритмы.
SQLAlchemy в больших таблицах при таком запросе s.query(TableName).all()
зависает и выдает ошибку Memory error
. Для решения проблемы нужно
использовать метод yield_per()
. Если
необходимо еще изменять данные, то нужно делать коммиты каждые N записей.
Qtile - это тайловый оконный менеджер написанный на Python. Последний месяц активно коммитится на github’е. Свежая инфа здесь http://qtile.readthedocs.org/en/latest/ (http://Qtile.org обновляется редко.)
Небольшой “хинт” как при помощи Pylons обрабатывать CSV файлы, отправленные из формы.
Взято от сюда.
Если вы хотите в virtualenv, через pip install
установить
Numpy и Matplotlib, то необходимо вначале поставить в систему:
При проектировании любого проекта, через определенное время, встает проблема маштабируемости, конечно если вы не пишите сайт-визитку или что то подобное. Проект может состоять из одного большого монолитного ядра с множеством контроллеров, сотнями или даже тысячами таблиц и бессчетным количеством разных шаблонов, библиотек итд итп. Под ядром подразумевается та часть проекта (pylons), которую либо нельзя изменить совсем, либо это потребует очень больших усилий. Для того что бы создать гибкий и легко масштабируемый веб (и не только) проект, необходимо иметь небольшое ядро, которое будет выполнять минимальный функционал соответствующий логически завершенной программе. Остальные функции, пусть даже улучшающие программу, нужно выносить за пределы ядра. Вообще я знаю только два способа решения этой проблемы:
Опишу очень простую реализацию трех выпадающих списков, данные которых связанны
последовательно. Выглядит это примерно так "Город" -> "Улица" -> "Дом"
.
После выбора дома, на основе AJAX
запроса, генерируется список улиц этого
города, а после выбора улицы генерируется список домов на этой улице. Создадим
html файл:
У Яндекс Карт хороший геокодинг и есть API, но нет автодополнение поисковой строки (как в гугле). У гугла плохой геокодинг (для России) но есть автодополнение. Более подробно можно прочитать например здесь. Парадокс какой-то. Я написал простой модуль для вычленения данных через API при помощи питона. Это очень удобно использовать в AJAX запросах. Пример использования здесь (OpenStreetMap, Геокодирование и автодополнение адреса в строке поиска (как у гугла) с помощью Яндекс API :)). Код для изучения/исправления здесь https://github.com/uralbash/pyandexmap.
Я периодически использую свои скрипты в разных местах, для того что бы не
копипастить их постоянно и следить за обновлением удобно добавить их в
https://pypi.python.org и устанавливать/обновлять через pip install
. Для
этого необходимо подготовить наш модуль.
В питоне пустые значения возвращаются как None
. Поэтому в шаблонах
Jinja вместо пустых значений отображаются None
. Что бы поправить это
нужно изменить метод finalize
. Пример из google groups:
Иногда необходимо написать скрипт который выполняется из консоли и использует окружение проекта на Pylons. Копипастю простой пример с pylonshq. Так-как там есть привычка периодически удалять информацию.
Для работы с ssh в питоновских скриптах идеально подходит модуль paramiko.
Геокоди́рование — процесс назначения географических идентификаторов (таких как географические координаты, выраженные в виде широты и долготы) объектам карты и записям данных.
OpenStreetMap — это свободно редактируемая карта всего мира. Она сделана такими же людьми, как и вы. OpenStreetMap позволяет совместно просматривать, изменять и использовать географические данные в любой точке Земли. Также позволяет накладывать разные слои в том числе и карты Яндекса с Гуглом. У гугла проблема с детализацией карт в России у Яндекса с API поэтому OpenStreetMap смотрится наиболее красивым решением, при том что софт и сами карты распространяются по свободным лицензиям.
Скрипты написаны на питоне, для установки достаточно форкнуть git
репозитарий
https://github.com/uralbash/snmpdesk. Документация как работать со скриптами
будет выкладываться на github
. Сейчас пока только 1 для извлечения таблицы
коммутации (fdb
), со временем будут появляться остальные.
Обновления в скрипте Срезаем пики в RRD при помощи python. В предыдущем варианте скрипт получал
предельное значение и если любое значение в rrd файле его превышало, то
оно обнулялось. Это неудобно когда для каждого datasource
нужно задавать
свой предел. Ниже пример где несколько строк, в каждой строке 6 значений.
Иногда необходимо поднять демо версию своего проекта для тестов. Склонируем
наш git
проект на сервер где будет демо:
Ошибка в FormAlchemy типа KeyError: "Key not found:
u'Task--super_task_id'"
лечится обновлением:
При установке psycopg в virtualenv может возникнуть ошибка:
В некоторых случаях на rrd графиках появляются пики, как например после перезагрузки сетевой карты:
CouchDB - документо-ориентированная СУБД, в которой удобно хранить разную информацию с изменяющимся количеством параметров. Например сущность товары могут иметь бесконечное количество параметров. Создавать в РСУБД миллионы таблиц или одну огромную не вариант. В couchdb хранятся документы, т.е. простые записи. В записи может быть сколько угодно разных параметров. А для унификации записей обычно создают параметр type который заменяет имя таблицы в РСУБД.
Продолжение статьи готовим Pylons + WTForms. Рассмотрим как создать свой класс для валидации. Здесь можно найти стандартные валидаторы http://wtforms.simplecodes.com/docs/0.6/validators.html
Плеер который в Линуксе нормально отображает кодировки и читает на ура
lossless
, написан на python, работает в консоле. Интерфейс как в
mc - очень удобно музыку перемещать + поддержка мышки.
http://peyote.sourceforge.net/about.rus.html
WTForm простая, но довольно удобная библиотека для создания форм. И еще WTForm очень похожа на формы в Django - одно из немногого что в джанге сделано хорошо. Посмотрим как это работает с Pylons. Для удобства будем хранить формы отдельно:
Когда необходимо выполнять какие-то действия при записи в базу, обычно создают
триггеры before
, after INSERT UPDATE
. В SQLAlchemy можно
реализовать аналогичный механизм но работающий на стороне питона а не БД. В
версии 0.6 это делается при помощи
MapperExtension
, в 0.7
MapperExtension
заменили на sqlalchemy.event.listen()
.
Часто веб интерфейс какого-нибудь устройства требует Java. Что бы ее поставить на Debian необходимо выполнить команды:
Потому что я могу делать так:
В продолжение статьи Python + Tornado + RRDTool: температура на улице и в серверной: температура на улице и в серверной рассмотрим как можно рисовать RRD используя только javascript на стороне клиента. Результат будет такой:
Для своих REST контроллеров можно использовать, формы FormAlchemy.
Рассмотрим как можно мониторить температуру при помощи сервера. Алгоритм довольно простой: подключаем датчик температуры к компу, пишем скрипт который снимает данные с датчика, записываем данные и отдаем по запросу пользователю. Результат будет выглядеть так:
В этом топике вольный перевод довольно интересной статьи http://knolleary.net об одной книге издательства penguin books.
В Xfce по умолчанию второй монитор работает в режиме зеркало. Что бы настроить его под себя придется лезть в консоль, т.к. более менее нормальных desktop приложений я не обнаружил. Нам понадобится команда xrandr. Если ее запустить без параметров то она покажет параметры мониторов:
Для SQLAlchemy существуют интерфейсы управления моделями(что-то типа админки). Как минимум их 2, это Rum и formalchemy.ext.pylons.
Часто при проектировании структуры БД появляется необходимость повторять одни и те же действия с таблицами. Добавлять одинаковые поля, ссылки, счетчики и т.д. Модели в Pylons (SQLAlchemy), как и в большинстве других фреймворках использующих паттерн MVC, являются классом и соответственно могут быть унаследованы от других классов. Это позволяет нам избежать рутинной работы с повторяющимися действиями.
Статья по сути вольный перевод PylonsTemplates: extra Paster templates for Pylons apps с моими дополнениями.
В Интернете множество советов как делать хлебные крошки. Для Pylons эти советы довольно запутанные, сложные в реализации и рутины в поддержке на мой взгляд. Поэтому я рассмотрю простой способ парсить URI. Нас будет интересовать только URN (та часть которая идет после названия сайта).
В Pylons, в шаблоны есть возможность вставить CSS или JS при помощи
stylesheet_link()
и
javascript_link()
. Но существует расширение
MinificationWebHelpers которое позволяет также удобно добавлять javascript
файлы.
UPD: sadisplay - замечательная штука!
Вообще всю информацию по настройке trackpoint можно взять здесь: How to configure the TrackPoint
Для того что бы кнопки закрыть-развернуть-свернуть оказались слева, например как в Ubuntu или MacOS, необходимо: