Программирование

Работа с USB в Python

Соорудил на своей stm32f4discovery собственное usb устройство. Все довольно просто, одна BULK конечная точка. Плата принимает данные и переключает светодиоды, которых в наличии четыре.
Собственно о программе контроллера как-то в другой раз, а сейчас о том, как с данным дивайсом работать с ПК.

Использование сторонних dll при помощи ctypes в python

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

Конвертация графических файлов осциллограмм Rigol

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

Я решил поправить эту ситуацию. Поправить просто изменив размеры пикселей. Т.е. сделать из одного пикселя - четыре.
Для этого я воспользовался python и библиотекой Pillow.

Над скриптом особо не парился.

Cython - python приложение на C

Cython - это язык программирования, который дополняет python возможностью типизированного задания переменных и возможностью компиляции в Си код, который в последствии можно скомпилировать в бинарник.
Python потрясающий язык программирования. Но скорость его выполнения оставляет желать лучшего. И как раз в этом нам может помоч cython. На данный момент он практически без труда умеет компилировать python код в си.

Давайте рассмотрим все на примере.
Вот код python для нахождения чисел Фибаначи.

Делаем бинарный файл из Python скрипта при помощи Py2exe

Писать на python конечно удобно и быстро, а вот распространять потом скрипт как-то не огонь. Во первых запускать его не совсем удобно. Во вторых нужно заставлять пользователя самостоятельно ставить все зависимости и интерпретатор.
Но есть возможность скомпилировать ваш скрипт на python в исполняемый exe файл. Сделать это можно при помощи py2exe. Библиотека уже довольно бородатая.
Установите нужную версию (тут важно чтобы разрядность и версия python совпали с версиями py2exe).

Скрипт у меня простой:

Лог запуска функций при помощи GCC

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

Марковские цепи в Wolfram Mathematica

По долу рода деятельности нужно было решить несколько задач о марковских цепях.
Штука весьма интересная, да вот в Matlab (который де факто является стандартом) решить я их не смог. Толи вообще этих функций нет, толи я не сообразил.
Давно хотелось пощупать Wolfram Mathematica. Вот и повод.

Решение задач линейного программирования в Matlab

На просторах интернета полно пример работы с командой linprog, которая позволяет решать задачи линейного программирования в Matlab. Да вот беда. Нигде не показано как ей пользоваться в полном объеме. Куча примеров простейшего уравнения, да и только.

Давайте рассмотрим такой пример:
5x1 - 2x2 + x3 >= 3
-2x1 + 3x2 - 2x3 <= 8
x1 + x2 + x3 = 9
1 <= x1 <= 2
2 <= x2 <= 4
x3 >= 1
f = x1 + x2 - 2x3

Работа с COM портом средствами C#

Я уже как то писал о работе с последовательным портом компьютера на языке C++. И не то чтобы я не любил этот язык, или мне было лень написать на пару строк больше кода.. но стал посматривать в сторону C#. Есть устойчивое впечатление, что язык станет развиваться семимильными шагами.