vak: (Default)
2017-10-16 01:38 pm

Надо было металл ставить

Некоторые уж играют так играют.



vak: (Default)
2017-10-09 01:27 am

Сканируем активность сетей Wi-Fi

Сделал демо прошивку для платки W8266: сканирование и отображение активности сетей Wi-Fi.

Demo for board Heltec W8266.

Исходный текст здесь: https://github.com/sergev/vak-opensource/blob/master/microcontrollers/arduino-esp8266/oled-scan/oled-scan.ino

Плата Heltec HTIT-W8266 имеет процессор ESP8266 с интерфейсом Wi-Fi и монохромный дисплей OLED разрешением 120x32. Продаётся на Aliexpress за $9. Программируется через среду Arduino. Для управления дисплеем годится библиотека Adafruit_SSD1306. Главная хитрость - догадаться, что сигнал Reset для OLED подключен к ножке D0 платы.

Если кто не восторге от Arduino IDE - можно обойтись традиционным Makefile.
vak: (Default)
2017-10-05 10:18 am

libmraa для MIPS

Мои правки для библиотеки MRAA наконец попали в основную ветку. Поддерживаются платы Linkit Smart 7688 и Onion Omega2.

Библиотека MRAA это программный интерфейс к внешним сигналам ввода-вывода, типа GPIO, SPI, I2C, PWM и т.п. Примерно как Arduino API, только для юникса. Библиотека изначально была разработана Интелом для плат семейства Эдисон. Позже добавились платы с процессорами ARM, а теперь и MIPS. Поверх MRAA была также создана коллекция драйверов для разнообразных сенсоров: UPM.
vak: (Default)
2017-08-27 07:43 pm

Базисный Рефал и его реализация

Сергей Романенко отсканировал и выложил ценнейшую книжку по языку программирования Рефал. Скачать можно здесь: PDF, DJVU.



Современные реализации Рефала можно отыскать на Гитхабе, к примеру: https://github.com/cmc-msu-ai/refal
vak: (Default)
2017-08-11 09:56 pm

Язык программирования Asciidots

Кто сказал, что программа должна выглядеть, как смесь прозы с математикой? Вовсе необязательно! Вот вам язык программирования, на котором программу можно просто рисовать буковками и циферками. На видео показана программа, увеличивающая и печатающая целочисленный счётчик. Вот здесь можно посмотреть больше примеров и скачать исходные тексты: https://github.com/aaronduino/asciidots

vak: (Default)
2017-08-09 09:57 pm

Маленькие интернетовские хитрости

Если у вас не открывается ссылка типа http://foo.bar.net/ по причине блокировки провайдером, попробуйте http://anonymouse.org/cgi-bin/anon-www.cgi/http://foo.bar.net/
vak: (Default)
2017-08-04 08:34 pm

Програмируем Micro:Bit

Два года назад Би-Би-Си объявила амбициозный проект: одноплатный компьютер для обучения младших школьников программированию и электронике. Конечно, я тут же подписался на новинку. Три дня назад я наконец получил долгожданную платку.



На видео есть неплохой подробный обзор для начинающих:



Все эти навороты с Джаваскриптом, Питоном и Blocks забавные, конечно, но для для старпёров типа меня есть традиционный способ программировать на классическом C++, под обычным Линуксом. Установка на Ubuntu делается следующим образом.
$ sudo apt-get install python-setuptools cmake build-essential ninja-build python-dev libffi-dev libssl-dev srecord
$ sudo easy_install pip
$ pip install yotta
$ sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi
$ sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
$ sudo apt-get update
$ sudo apt-get install gcc-arm-embedded
Скачиваем с Гитхаба примеры:
$ git clone https://github.com/lancaster-university/microbit-samples
$ cd microbit-samples
$ yt target bbc-microbit-classic-gcc
Компилируем пример "Hello world":
$ yt build
Загружаем прошивку в плату, подключенную через USB:
$ cp ./build/bbc-microbit-classic-gcc/source/microbit-samples-combined.hex /media/$USER/MICROBIT/
Исходный код примера "Hello world" выглядит так:
#include "MicroBit.h"

MicroBit uBit;

int main()
{
    // Initialise the micro:bit runtime.
    uBit.init();

    // Insert your code here!
    uBit.display.scroll("HELLO WORLD! :)");

    // If main exits, there may still be other fibers running or registered event handlers etc.
    // Simply release this fiber, which will mean we enter the scheduler. Worse case, we then
    // sit in the idle task forever, in a power efficient sleep.
    release_fiber();
}
vak: (Default)
2017-08-04 12:15 pm

Век программируй, век учись

Шикарный учебник по программированию от Александра Шеня.

https://www.mccme.ru/free-books/shen/shen-progbook.pdf
vak: (Default)
2017-07-29 12:03 pm

Программистские шуточки

$ octave
1>> fact

Richard Stallman can remove his own appendix, using only GDB.
vak: (Default)
2017-07-28 06:37 pm

Умельцу на заметку: флоповод

Флопики давно отжили своё. Однако для любителей древних компьютеров и прочей старины есть выход: фирма Gotek производит устройства, заменяющие стандартный дисковод, но в качестве носителя использующие обычную USB-флешку.



Hervé Messinger разработал альтернативную прошивку для этого девайса, и выложил исходные коды на Гитхаб. Так что теперь каждый имеет возможность приспособить флопик для своего любимого устройства, к примеру для Амиги или БК-0010. На видео показан процесс обновления прошивки.

vak: (Default)
2017-07-13 12:43 pm

Тяжела и неказиста жизнь простого программиста


Почему-то не получается скомпилировать...
c:\dev>g++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status
Народ предлагает всякие разные решения проблемы.
vak: (Default)
2017-06-15 07:12 pm

Digilent OpenScope + Sigrock

"Проект выходного дня" на будущее: сварганить декодер протокола для измерителя Digilent OpenScope к софтине Sigrock. Если кто-нибудь другой не сделает раньше.
vak: (Default)
2017-06-14 11:41 pm

Простой способ вёрстки документации

Я давно мечтал найти простой способ делать документацию. Word и LibreOffice не устраивают: слишком трудоёмко, LaTeX - слишком сложно. Наконец нашёл приемлемый вариант. Процесс укладывается в четыре шага.

(1) Текст готовится в формате MarkDown. Это по сути простое текстовое представление с самоочевидными правилами разметки, вставки рисунков и подготовки таблиц.

(2) Рисунки делаются в формате SVG в редакторе Inkscape или из скрипта на Питоне. Затем рисунки конвертируются в формат EPS для вставки в документ.

(3) Исходный текст преобразуется в формат OpenDocument (он же ODT или *.odt) утилитой Pandoc. При этом стили форматирования подставляются из заранее заготовленного файла-шаблона. Формат ODT понимают LibreOffice, Word и многие другие wysiwyg-редакторы.

(4) Файл ODT преобразуется в PDF посредством LibreOffice.

Весь процесс легко автоматизируется посредством Makefile. Последовательность выглядит примерно так:
inkscape -z picture.svg -E picture.eps
pandoc -f markdown -t odt --reference-odt=my-style.odt input.md -o output.odt
soffice --convert-to pdf output.odt --headless
vak: (Default)
2017-06-07 11:04 pm

Wavedrom

Обнаружил изумительный способ генерить диаграммы сигналов из текстового описания. Диаграмма описывается на языке WaveJSON и выглядит следующим образом:
{ "signal": [
  { "name": "activate.req", "wave": "01........0.",  "node": ".A.........." },
  { "name": "activate.ack", "wave": "0........1.0",  "node": ".........F.." },
  { "name": "out1.req",     "wave": "0.1.0.......",  "node": "..B........." },
  { "name": "out1.ack",     "wave": "0..1.0......",  "node": ".....D......" },
  { "name": "out2.req",     "wave": "0.1....0....",  "node": "..C........." },
  { "name": "out2.ack",     "wave": "0.....1.0...",  "node": "........E..." }
  ],
  "edge": [ "A~B", "A~C", "D~F", "E~F" ]
}
Утилита wavedrom преобразует этот формат в SVG, а дальше посредством inkscape можно делать PNG, EPS или PDF. Вышеприведённый текст превращается в рисунок:



Для интересующихся асинхронной логикой: сей примитив называется Concur и в асинхронном верилоге реализует блок fork...join.

vak: (Default)
2017-05-30 05:49 pm

myradio.sh

Вот такой скрипт получился.


Скрипт )
vak: (Default)
2017-05-23 05:10 pm

Слушаем радио из командной строки

Полезная информация для любителей командной строки типа меня. Утилиту mpg123 под Линуксом можно установить командой "sudo apt install mpg123". BBC One
mpg123 http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_p
BBC World
mpg123 http://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-einws
KQED
mpg123 http://50.31.186.115:80/kqedradio
KDFC
mpg123 http://16643.live.streamtheworld.com:80/KDFCFM_SC
KFOG
mpg123 http://19473.live.streamtheworld.com:80/KFOGFM_SC
Amber Radio
mpg123 http://amberradio.org:8000/mp3
Радио Аквариум
mpg123 http://ic2.101.ru:8000/c16_15
Радио ДДТ
mpg123 http://wz5.101.ru/full/87/181124.mp3
vak: (Default)
2017-05-13 08:51 pm

Синтаксические диаграммы

Красивые синтаксические диаграммы в стиле Паскаля можно делать утилитой ebnf2ps .



Установка на Ubuntu делается следующим образом.
$ git clone https://github.com/FranklinChen/Ebnf2ps.git
$ cd Ebnf2ps
$ sudo apt install cabal-install htmldoc-common
$ cabal update
$ cabal install old-time happy
$ cabal build
$ sudo cp dist/build/ebnf2ps/ebnf2ps /usr/local/bin
Для работы утилиты надо установить переменные:
$ export AFMPATH=/usr/share/htmldoc/fonts/
$ export RGBPATH=/usr/share/X11
Документация находится в файле doc.pdf.
vak: (Default)
2017-05-12 05:32 pm

Великий и ужасный Javascript

C++ это еще цветочки, бывает веселее. Что напечатает следующая программа на языке Джаваскрипт?
[!+[]+!+[]+!+[]]+[+[]]
А напечатает она ровно то же самое, что и предыдущая:
$ nodejs
> [!+[]+!+[]+!+[]]+[+[]]
'30'
>
(объяснение здесь)