Первый блин

Как я уже писал, занесла меня нелёгкая в аниматоры. Вот первая работка на новой работе. Уже выложили на сайт, а значит и тут можно продублировать)) Не сильно скоро, но непременно будут полноценные короткометражки с героями из журнальчика.

http://colorizator.livejournal.com/476315.html

хорошоплохо (никто еще не проголосовал)
Loading...Loading...

MS ODBC Driver 13 + PHP 7.0 + Debian 9

В продолжение предыдущего псто. Таки заставил я работать этот несчастный MSSQL-драйвер для PHP7. Это называется "среди багов нащупал дорогу".

Во-первых, отвечаю на вопрос из комментов, почему не годится PDO_DBLIB. Наш программист говорит, что он слишком неинформативен. То есть, ему по долгу службы и в соответствии с принятой парадигмой построения решений приходится формировать сложные навороченные SQL-запросы. И в "стандартном" механизме "коробочных" PHP-коннекторов нет никакой возможности отследить, а не возникло ли какой-нибудь ошибки в процессе выполнения этого запроса. Стандартный пример: посылаем в одном запросе два SELECT-а, один из существующей таблицы, второй — из несуществующей. В зависимости от порядка следования этих SELECT-ов мы можем либо получить, либо не получить ссылку на результирующий Dataset. И единственной возможностью контролировать всё это дело является парсинг stdout-а от SQL Server-а на предмет наличия в нём Warning-ов, зачастую совершенно неинформативных. Что ни разу не удобно. Поэтому меня и попросили подключить "родной" ODBC-шный коннектор.

Далее, краткая инфа и ссылки, чтобы прежде всего самому потом не забыть как это делается. Речь идёт о дистрибутиве Debian 9 (Stretch) amd64.

Во-первых, 7-ая "пыха" полноценно появилась только в Stretch-е. И раз уж решено с оным связываться, то городить смесь из стабильного и тестируемого дистрибутива нет никакого смысла. Проще уж сразу целиком разворачивать тестируемый. Баги попадаются, да. Но по мере приближения к релизу их всё меньше. Во-вторых, MS принципиально отказалась от поддержки i386, так что придется брать amd64. И даже если каким-то макаром удастся собрать сам PHP-коннектор из исходников, то вот ODBC-драйвер по-любому придется ставить бинарный. Может я плохо искал, но сырцов его я пока не встретил.

Теперь о подводных камнях. Вроде бы по зависимостям там ничего особо экзотического нет. Но нужно иметь в системе установленные пакетики: libgss3, unixodbc и внезапно... libssl1.0.0 из репозитория Jessie. Вот так неочевидно, ага. Со штатными libssl1.0.2 и libssl1.1 оно заводиться не хочет, требует обязательно версию потухлее. Еще из неочевидных моментов — нужно позаботиться о том, чтобы в системе присутствовала локаль "en_US.UTF-8". Без неё почему-то никак и никуда. Также если SQL-сервер слушает на нестандартном порту, то в строке подключения его нужно указывать через запятую, а не через двоеточие.

Где брать.

  1. На момент написания этого псто актуальной версией ODBC-библиотеки была 13-ая. Подходит от 16-ой убунты. Ссылки на DEB-пакеты: раз, два. Ставятся "как обычно", дополнительных зависимостей с сайта MS за собой не тянут, работают "из коробки".
  2. Сами PHP-шные коннекторы. Бинарники тут (версия релиза 4.0.8). В архиве лежит четыре разных библиотеки: "обычная", PDO (PHP Data Object), "NTS" (non thread-safe) и "TS" (thread-safe). Зачем они так собирают непонятно, потому что для Linux-а thread-safe версии неактуальны.

Так что берем из архива "php_sqlsrv_7_nts.so", правим права на неё, копируем в "/usr/lib/php/20151012/" и создаем ini-конфиги для подключения модуля в "/etc/php/7.0/mods-available", а также символические ссылки на них. Вроде больше ничего шаманить не надо. Если же что-то не работает, то проверяем выхлоп команд

ldd /usr/lib/php/20151012/php_sqlsrv_7_nts.so
ldd /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.4.0

на предмет нехватающих библиотек.

Эх, чего только не сделаешь для этих беспомощных программистов... (шутка)

http://klink0v.livejournal.com/411705.html

хорошоплохо (никто еще не проголосовал)
Loading...Loading...

Трёхглавый Трёхзвенный интернет вещей

Рассказываю, обещанное в предыдущей записи - про OpenWRT, MIPS и MediaTek.
Собственно, моё видение устройства некой системы, реализующей то, что сейчас модно называть "Интернет Вещей (IoT - Internet of Things").

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

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

Мы где-то нашли старый свинцовый рудник, и закапываем туда свое нежное оборудование. Центр нашей системы, её печка, от которой мы танцуем - это массив датчиков. Мы люди современные, у нас нет пошлой ламповой херни в виде криогенно охлаждаемых вакуумных фотоумножителей, а стоят матрицы лавинных фотодиодов. Каждая обслуживается условной ардуинкой - неким процессором, который может провести первичную обработку, выделить факт пролета частицы через датчик, и передать по RS-485 пакет с данными вовне. Куда именно вовне - он не знает, его задача - поймать, сформировать пакет данных и выплюнуть.
Это собственно, первое звено - "умные" датчики и актуаторы.

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

При всём при том, концентратор - железка достаточно маломощная и тупенькая, выставлять её голой жопой в интернет нельзя. Зафлудят, поломают, и надругаются. И будем потом вместо RAW-кадров с сигнатурами мюонов рассматривать голые сиськи Дженнифер Энистон. Да и автоматизировать сбор и преобразование данных тоже было бы неплохо. За это отвечает третье звено - фронтэнд. Он же "IoT Gateway". Некая достаточно мощная железка, которая умеет в этот ваш интернет, немножко в безопасность, и одним концом - хотя бы в UART, чтобы подцепиться к концентратору. В неё можно залогиниться по SSH, в неё можно посадить скрипт, который по cron-у будет выгребать накопленные ивенты, преобразовывать, и пушить на сервер оператора - в общем, такой себе микросерверочек.

Так вот, собственно, нормальные кандидаты на фронтэнд нынче - только у Mediatek с их MT7688. Я знаю, что мне сейчас ткнут носом в Raspberry, но Raspberry сложно рассматривать как устройство промышленной автоматизации по причине того, что она грузится с MicroSD, а те, соответственно имеют свойство внезапно дохнуть. Ну и пятикратная разница между модулем на 7688 (600-900 р) и распи (2500-4500 р) тоже играет рояль. Про убогость однокоренных решений на Atheros AR9331 уже говорилось.

В следующем посте расскажу детальнее про функции концентратора. Не переключайтесь.

http://mike-lambert.livejournal.com/262713.html

хорошоплохо (никто еще не проголосовал)
Loading...Loading...

HOWTO: Как установить Ubuntu на виртуальную машину

Пока я вовсю разбираюсь в Linux и почтовом сервере Zimbra, а также замахиваюсь на Zextras, появилось несколько вопросов от знакомых, которым тоже интересно установить вторую операционную систему на виртуальную машину. Задача, в общем, это достаточно тривиальная, но всё же практика показывает, что вопросы у пользователей могут возникнуть на каждом этапе. Так что я первым делом решил быстро накатить Ubuntu.

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

Читать дальше...

http://levashove.livejournal.com/401562.html

хорошоплохо (никто еще не проголосовал)
Loading...Loading...

Реализация твоих идей

Когда-то давным давно (я фигею, 2012 год!) я мучал электронную книжку Sony PRS-505 и пытался сделать её дисплеем. Вот моя статья. Но тогда мне не хватило пороха, рук, времени, звёзды не так стояли, президентом был Обама и проче-прочее, что не дало мне всё же довести задумку до ума. Картинки на книжку передавались очень криво и это нельзя было использовать без танцев с бубном.
И было как-то обидно за гик-недоделку. Но книжку отдал с концами...

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

Собственно говоря даже написал статью по этому поводу. Вот его статья . Основное отличие, конечно, в том, что автор использовал альтернативную сборку линукса, и сделал монтируемый виртуальный жёсткий диск. Как говорит, повторил большую часть моего пути, а потом пошёл своим. Это ОЧЕНЬ И ОЧЕНЬ КРУТО! И так приятно, когда твои труды не пропали даром!

Может у кого валяется на полке Sony PRS-505, я бы повторил подвиг? 🙂

http://dlinyj.livejournal.com/720011.html

хорошоплохо (никто еще не проголосовал)
Loading...Loading...

Учим Linux и Shell — псто для dummies как я :)))

Закапиваясь в Python, понимаешь, что нужно знать Linux, а конкретно: shell (да, это все эти command line commands, которые обычные ламеры давно забыли с 1990-х как страшный сон про DOS)

Как не крути, мне удобнее работать под виндой. Да, есть Raspeberry Pi с его Debian based Raspbian (последний релиз назвали PIXEL), но хочется что-то более удобное, прямо тут под рукой, на том же компе (да, да, я делал headless, т.е. без монитора, RP, и знаю как пользовать putty терминал, и как пользовать TightVNC)

Есть такая штука Cygwin - это терминал под виндой, который выполняет linux команды. Но попробовал - неудобно, Не полный функционал.

Поэтому пошел ставить виртуалку. Вот чувак пошагово объясняет как ставить и настраивать бесплатный и популярный VirtualBox

Поставил. Далее скачиваешь образ Raspbian отсюда, но от сцуко в img, не нормальном .iso формате. После долгих поисков бесплатный конвертеров img to iso в сети не нашел. Можно поставить на внешний носитель (USB флешку или microSD) например с помощью проги Etcher и уже поставленный таким образом невиртуальный, а вполне физический, диск, превратить в .iso тем же Gizmo Manager. И когда у меня будет .iso, подключю его в VirtualBox и должно всё заработать. Тогда в окошечке запустится настоящий Debian.

Несколько хороших ссылок на поучится (для dummies и не очень)

общие краткие сведения
http://www.penguintutor.com/linux/

http://linuxcommand.org/learning_the_shell.php

классная штука - explain shell

http://explainshell.com/

увидели что нибудь типа этого
tar zcf - some-dir | ssh some-server "cd /; tar xvzf -"

а сайтик вам подсвечивает, что такое tar, что за флажки такие zcf, что за | такое и вообще как читать этот "китайский"

you are welcome, новогики 🙂

http://d-kishkinev.livejournal.com/602797.html

хорошоплохо (никто еще не проголосовал)
Loading...Loading...

Установка Quartus и DS-5 под Linux

После установки Quartus не видит Jtag. Запускаем из /quartus/bin/:


quartus/bin$ ./jtagconfig
No JTAG hardware available

Как это лечится. Запускаем:


quartus/bin$ ./jtagd --foreground --debug
No USB device change detection because libudev.so.0 not found

Запускаем:


sudo ln -s /lib/x86_64-linux-gnu/libudev.so.1 /usr/lib/libudev.so.0

Теперь:


quartus/bin$ ./jtagd --foreground --debug
JTAG daemon started
Using config file /etc/jtagd/jtagd.conf
Remote JTAG permitted when password set
USB-Blaster port (/dev/bus/usb/001/007) open failed (13)

Устанавливаем права на тот порт, к которому подключен jtag:


sudo chmod 666 /dev/bus/usb/001/007

Теперь всё работает:


quartus/bin$ ./jtagconfig
1) CV SoCKit [1-1]
02D020DD 5CSEBA6(.|ES)/5CSEMA6/..
4BA00477 SOCVHPS

В DS-5 заходим в Run/Debug Configuration. Выбираем в левом списке, например, DS-5 Debugger/Altera-SoCFPGA-BareMetalBoot-GNU, выбираем на вкладке Connection: Bare Metal Debug/Debug Cortex-A9_0. Выбираем Target Connection: USB-Blaster. Нажимаем кнопку Browse, получаем следующее:


The script file ( device_browser.py ) failed during execution

Перед запуском eclipse нужно установить системные переменные QUARTUS_ROOTDIR и LD_LIBRARY_PATH.
Они должны указывать, однако, не на установленный ранее Quarus (если он был установлен), а на директории /home/user/intelFPGA/16.1/qprogrammer и
/home/user/intelFPGA/16.1/qprogrammer/linux64 (я устанавливал DS-5 в /home/user, а не в /root, как он предлагает при установке). Итак,


intelFPGA/16.1/embedded/ds-5/bin$ export QUARTUS_ROOTDIR=/home/user/intelFPGA/16.1/qprogrammer
intelFPGA/16.1/embedded/ds-5/bin$ export LD_LIBRARY_PATH=$QUARTUS_ROOTDIR/linux64:$LD_LIBRARY_PATH
intelFPGA/16.1/embedded/ds-5/bin$ ./eclipse &


Всё работает!

http://32bit-me.livejournal.com/130272.html

хорошоплохо (никто еще не проголосовал)
Loading...Loading...

Как сделать файлы .desktop

Напишу здесь, чтобы каждый раз не искать.
Создаём на рабочем столе файл с расширением .desktop и пишем в нём следующее:

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Name=имя_значка
Comment=
Exec=nautilus /путь/к/директории
Icon=folder
Terminal=false
Type=Application
Categories=Application;

На рабочем столе появляется значок, который по клику выполняет нужное действие (в данном случае, открывает папку). Внешний вид значка можно изменять, меняя свойство Icon. Список вариантов тут.

http://32bit-me.livejournal.com/129823.html

хорошоплохо (никто еще не проголосовал)
Loading...Loading...

Первый рабочий день в 2017-м :)

my_desktop_kde

Не люблю затяжных праздников 🙂 Такая моя особенность. Поэтому еще в прошлом году знал, что 2-го выхожу на работу.
Continue reading

хорошоплохо (никто еще не проголосовал)
Loading...Loading...