четвер, 24 листопада 2016 р.

sylpheed - легкий поштовий клієнт

І знову повертаємося до економного використання ресурсів ПК. Наша мета - зменшити апетити поштової програми. Не секрет, що Thunderbird - доволі громіздка програма. А більшості користувачів від неї потрібна лише здатність відіслати листа з вкладеннями (або без них). Невже для цього так необхідно з'їдати купу пам'яті та ресурсів процесора?

Знайшов для свого нетбука повноцінну заміну: sylpheed - легкий поштовий клієнт з інтуїтивно зрозумілим інтерфейсом. Інтерфейс нічим не відрізняється від того ж Thunderbird, як, зрештою, і від будь-якого іншого поштового клієнта.

Sylpheed нормально працює з захищеними з'єднаннями (читай: з ukr.net та gmail працюватиме без проблем POP/IMAP/SMTP).

Вкладення також підтримуються без зауважень.

З коробки є підтримка GnuPG (але це вже ням-нямка для гурманів)

Українська локалізація є. Та це не так вже і дивує у світі OpenSource.


Джерела:
http://sylpheed.sraoss.jp/en/news.html

понеділок, 21 листопада 2016 р.

aliases - позбавляємося мозолів на пальцях

В Linux є безліч цікавих консольних інструментів з величезною кількістю можливостей. Комбінуючи їх в потрібному порядку можна досягати вражаючої автоматизації процесів. Та якщо ви часто використовуєте певні складні команди, то існує ризик при наборі довжелезної команди зробити фатальну помилку. А крім того пальці на руках не такі вже й залізні і їх трохи шкода. Саме тому мудрі люди придумали поняття alias - скорочений виклик довгих команд.
Для прикладу, у попередньому дописі я використовував доволі довгий варіант команди rename. Звичайно, набирати кожен раз таке набридне, навіть якщо ви володієте клавіатурою як справжній ґуру. Плюс команда rename деструктивна і при помилці може поперейменовувати те, що не слід.
Я часто застосовую подібне перейменування, тому для нього створив alias такого виду:
alias fixnames=$'rename -e \'s/-ln.inc/-ln.inc/i;\' -e \'s/-lk.inc/-lk.inc/i;\' -e \'s/-nr.inc/-nr.inc/i;\' -e \'s/-pl.inc/-pl.inc/i;\' *.*'
Тепер в командному рядку достатньо набрати
fixnames
І вберегтися від мозолів і помилок.
Налаштування alias можна робити у файлі ~/.bashrc, але краще для цього створити ~/.bash_aliases, який автоматично підвантажується з ~/.bashrc.

В alias можна передавати параметри. Вони просто додаються до визначеної користувачем скороченої команди. Також можна створювати складніші спрощення, які задіюють кілька різних команд і навіть викликають скрипти інших інтерпретаторів.

четвер, 17 листопада 2016 р.

Секрети rename

Перейменування файлів у Linux доволі часта операція. Чутлива до регістру файлова система, особливо після переходу з Windows, часто вимагає приведення до спільного вигляду багатьох файлів. Масове перейменування файлів можна здійснити з консолі. Саме для цього призначена команда rename. Її мінімальний формат: rename <шаблон_перейменування> <шаблон_файлів>. Наприклад перейменування всіх файлів *.bak на *.old:
rename 's/\.bak$/\.old/' *.bak
В шаблонах використовуються регулярні вирази, що вельми полегшує справу і дозволяє створювати дововлі складні перейменування невеликими зусиллями.
Перейменування всіх файлів на малі літери просте, як ніколи:
rename 'y/A-Z/a-z/' *.*
Перейменування - операція небезпечна ще й може зачепити назви каталогів, тому перед реальним перейменуванням варто завжди переглядати, що і як переназветься. Для цього є спеціальний режим "лише показати майбутні зміни"
rename -n 'y/A-Z/a-z/' *.*
Якщо одним шаблоном заміни обійтися не вдається, можна використати їх кілька. Наприклад так перейменовуються файли -LK.inc, -LN.INC, -NR.INC та -PL.INC і їхні комбінації з великих і малих літер на один формат (всі постфікси малі). Тут наголошу на обовʼязковості крапки з комою в кінці кожного шаблону.
rename -e 's/-ln.inc/-ln.inc/i;' -e 's/-lk.inc/-lk.inc/i;' -e 's/-nr.inc/-nr.inc/i;' -e 's/-pl.inc/-pl.inc/i;' *.*

вівторок, 11 жовтня 2016 р.

Комп'ютерна вишивка і Linux


Комп'ютерна вишивка - цікавий напрямок розвитку машин з ЧПУ.
На ринку є вишивальні машини різних фірм з різними можливостями. Але обʼєднує їх те, що на вході кожна з них приймає дані лише в своєму форматі і до спільного формату вони поки що так і не дійшли (щоправда, як пишуть деякі фахівці, професійні машини таки притримуються формату *.exp). Для підготовки машинної програми кожен бренд розробляє власне програмне забезпечення.
Це програмне забезпечення доволі вузькоспеціалізоване і розраховане переважно для використання в ОС Windows.
Але, як виявилося, Linux-ові теж є чим повихвалятися.
Розробка машинної програми складається з кількох простих кроків. Ось вони:

Розробляємо шаблон

Для розробки шаблону цілком підходить будь-який векторний редактор.  В Linux (та й у Windows) існує гарний кросплатформений інструмент Inkscape. Саме його я рекомендую використовувати для розробки шаблону. Додатково скажу, що Inkscape може навіть переводити растрові зображення у векторні.

Переводимо зображення у машинний формат

Ось тут виникають перші труднощі. Конкретно мені був потрібен файл під машину Brother (розширення *.PES). Інструментів для його створення обмаль. А ті, що є, не відразу збагнеш, як працюють.
Для переведення картинки в машинні стібки для Inkscape добрі люди написали плагін inkscape-embroidery (розміщений на github). Він зробить за вас основну роботу по герерації тисяч стібків з вашого зображення. Єдине, що в результаті треба або зберігати svg зі стібками (а його немає чим перетворити на *.PES. Тут слід згадати про утиліту svg2pes, яка теж працює, але не так як мені б хотілося. Треба буде здійснити другу спробу) або використовувати проміжний файл, який генерує плагін в своєму каталозі (файл називається embroider-output.exp - як виявилося всі елементи в ньому в 10 разів зменшені по відношенню до оригінального зображення. Це я зрозумів аж на 3 день експериментів. Тепер гадаю: "А, може, svg2pes не працює з тієї ж причини?"). Щоб подолати проблему зменшення достатньо збільшити зображення в 10 разів перед застосуванням плагіну.
Особливості роботи плагіну:
  • він перетворює лінії, шириною >0.5pt в зигзагоподібні стібки. Якщо ж ширина лінії <0.5pt - просто обшивання по контуру. Якщо колір штриха контуру прозорий, то обшивання взагалі відсутнє
  • прозорі ділянки не зашиваються
  • непрозорі внутрішні ділянки контурів зашиваються стібками. Напрямок визначається автоматично
  • згруповані фігури і фігури типу прямокутник чи зірка не обробляються взагалі (тобто все треба розгрупувати і перетворити на штрихи і контури)
  • перед застосуванням плагіну рекомендується згладити лінії за допомогою фільтру Без'є для кращого відтворення кривих штрихів

Перетворюємо *.EXP у *.PES

На щастя є ще добрі люди, які розробляють потужний інструмент embroidmodder2. Це векторний редактор стібків. Він дуже всеядний і може відкривати і зберігати безліч різноманітних форматів файлів машинних програм. Не виключення і embroider-output.exp.
Тож відкривши *.EXP у embroidmoder2 я просто скористався ним як конвертером для перетворення даних в так потрібний мені *.PES.

Перевіряємо правильність конвертації

Для перевірки отриманого *.PES файлу можна скористатися тим же embroidmodder2.
Як варіант можна використати безкоштовний PESView. Він, щоправда, розроблений для Windows, але працює й під Wine.
І останній варіант перевірки - утилітка pesconvert (від Лінуса Торвальдса) - перетворювач *.PES файлів у зображення *.PNG. Нею перетворюєте *.PES файл у картинку і переглядаєте будь-яким переглядачем картинок.
Залишилося перевірити, що ж вийде після виконання машинної вишивки на реальному обладнанні.
Після десятка експериментів вдалося добитися доволі пристойних результатів. Робота швейної машини виглядає приблизно так:
І, нарешті кінцевий варіант:



Процес створення літер за технологією satin column виглядає ось так:
 А перетворення отриманого CSV файлу на машинний PES виглядає так:

Джерела:

http://www.jonh.net/~jonh/inkscape-embroidery/
https://github.com/stesie/inkscape-embroidery
https://github.com/lexelby/inkscape-embroidery
https://github.com/Embroidermodder/Embroidermodder
http://www.joachim-riedel.de/freeware/
http://git.kernel.org/cgit/linux/kernel/git/torvalds/pesconvert.git
https://github.com/MaxKellermann/svg2pes
http://torvalds-family.blogspot.com/2010/01/embroidery-gaah.html
http://svg2embr.wasbo.net/

понеділок, 3 жовтня 2016 р.

TimeLapse відео - пришвидшене відтворення тривалих процесів.

Цікаво створювати відео тривалих процесів, які вкладаються в кількахвилинний ролик. Методів для цього, певен, є досить.

Наприклад відразу знімати процеси з налаштуваннями камери, щоб уповільнена зйомка відтворювалася пришвидшено. На смартфонах під керуванням Android можна, нааприклад, скористатися програмою CosyDVR. Та деякі камери чи смартфони такого і не підтримують. Або що робити, коли помилився з коефіцієнтом стистення?

Для цього в Linux можна використати утиліту ffmpeg з відповідним фільтром:

ffmpeg -i input.mkv -filter:v "setpts=0.1*PTS" output.mkv

В цьому прикладі швидкість файлу прискорюється в 10 разів. 
Ось це відео, хоч і знято і стисканням, та я помилився з коефіцієнтом. Довелося стиснути ще в 10 разів:
А ось відео з розряду "великі будови" - як працює екскаватор в пришвидшеному вигляді:
 
Аналогічно можна сповільнювати швидкі процеси, наприклад удвічі:

ffmpeg -i input.mkv -filter:v "setpts=2*PTS" output.mkv

Джерело:

неділя, 2 жовтня 2016 р.

Linux ABCDE - йдемо до школи

Вивчення іноземних мов у школі часто опирається на аудіоматеріали з підручників. Та не завжди аудіо диски є чим прочитати. Зручніше мати всі матеріали в телефоні у вигляді файлів.

Для перетворення аудіо-дисків на файли є безліч програм і утиліт в Linux. Я обрав собі утилітку 'abcde' - консольний інструмент. Встановлення тривіальне, бо утиліта є в репозитаріях:

sudo apt-get install abcde

Використання теж не складає труднощів. Запускаємо утилітку, вкзауємо параметри вхідних і вихідних даних. Програма сканує диск і створює конфігураційний файл, де для кожного треку можна визначити назву. Так само можна визначити META-дані файлів (рік, виконавець, назва альбому). Дуже зручно в конфігураційному файлі одноразово ввести ці дані. Вони будуть використані при створенні mp3 чи ogg файлів. Отже, команда запуску:

abcde -a cddb,read,encode,tag,move,playlist,clean -d /dev/cdrom -o ogg -V -x

Ось і все. В результаті отримуємо копію аудіо диску на ПК.

субота, 1 жовтня 2016 р.

xombrero - браузер з малими системними вимогами

Мої поневіряння з пошуком браузера для старих систем, схоже, завершилися. Так, сьогодні не легко знайти браузер з достатнім функціоналом, який би не потребував значних ресурсів ПК. От вам коротенький аналіз моїх спроб:

1. Dillo

Цей браузер іде в комплекті з PuppyLinux. Дійсно легенький. Але не підтримує ні javascript, ні cookies. Тож працює швидко, але лише з чистим HTML. Facebook не працює навіть мобільна версія. Відео youtube відповідно не працює також.

2. NetSurf

Цей вже підтримує cookies. Отже, можна зайти на мобільну версію Facebook (m.facebook.com). Це вже щось. Теж досить швидкий. Виглядає пристойно. Вікно із вкладками. Є кнопки керування. Не підтримує JavaScript, хоча в налаштуваннях опція є. Мабуть планується у майбутньому. Відео на youtube не йде. Не працюють сайти типу http://mail.google.com/tasks/ig. Сайт хоч і легенький, але без JavaScript з нього нічого не візьмеш.

3. surf

Перший браузер, який я знайшов, що підтримує і cookies і JavaScript, та ще й не вимагає гігабайтів ОЗП. Клас. Facebook, GoogleTasks і (яке диво!) навіть відео з Youtube. Але є одне але. В цьому браузері немає жодної(!) кнопки. Адресу треба вводити в командному рядку як параметр. Це дещо зіпсувало загальне враження. Втім, браузер як і попередні споживає мінімум памʼяті і працює доволі жваво. Ще один недолік - google визначає його як старий Chrome і постійно намагається запропонувати оновлену версію. Дратує.

4. uzbl

Клон попереднього, але вже без проблем з "версією Chrome" :). Всякі Facebook, GoogleTasks, Youtube працюють. Є елементи керування, а саме командний рядок. Натискаємо 'o' для введення адреси і мандруємо інтернетрями. Це хоча б щось, подібне на реальну роботу. Залишилися всі переваги: швидкість, споживання ОЗП.

5. xombrero

Також клон від surf. Але якийсь мутант uzbl і звичайних графічних браузерів. Є кілька кнопок на панелі інструментів. Є командний рядок, який викликається при введенні ':'. закладки тільки через команди :favadd та :fav. Цей браузер найрозвинутіший з усіх. Памʼяті не жере. Javascript та cookies працюють. Браузер дозволяє вибірково дозволяти скрипти і cookies за допомогою команд. Власне, в ньому я й набираю цю статтю. Схоже він залишиться основним у моїй системі.

Висновки

На моєму нетбуці непогано працює Firefox, але щойно відкриєш забагато вкладок, починається використання файлу підкачки і вся система тільки й займається його обслуговуванням. Це трохи дратує. Мої ж вимоги не такі й великі. Хочу почитати документацію, подивитися ролик в youtube та перевірити фейсбук. Як бонус іноді керую завданнями, які треба не забути зробити. Але, якщо запустити поряд ще якусь програму типу GIMP чи навіть офісну програму, проблеми гарантовані.
Я часто зустрічав на сайтах згадки про Dillo. Але кожен раз, коли намагався його вкотре спробувати наражався на проблеми з cookes та JavaScript.
Нарешті я знайшов адекватну заміну Firefox з невеликими вимогами. Три останні браузери майже рівноцінні. Єдина різниця - інтерфейси. Я обрав поки що xombrero. Спробуйте й ви.

Скріншот на закуску


вівторок, 20 вересня 2016 р.

Розробка Android програм під Linux

Для розробки android програм зазвичай рекомендують середовище AndroidStudio. Втім це доволі важка програма. І не кожен ПК буде адекватно працювати з ним. А слабші  машини відчутно гальмують. Для простих проектів вихід є. Розробку ведемо за допомогою будь-якого текстового редактора, а для компіляції переходимо у консоль і відмовляємося від IDE взагалі. Послідовність дій для налаштування інструментарію і компіляції проекту:

1. Встановлюємо інструментарій:

sudo apt-get install ant openjdk-8-jre openjdk-8-jdk

2. Скачуємо і встановлюємо android-sdk (актуальну версію sdk можна взяти з https://developer.android.com/studio/index.html#downloads):

curl -O https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz

3. Розпаковуємо SDK:

tar -zxf android-sdk_r24.4.1-linux.tgz

4. Оновлюємо SDK згідно інструкції в SDK_readme.txt (одночасно відфільтровуємо лише необхідні компоненти):

./android-sdk-linux/tools/android update sdk --no-ui --filter 1,2,4,11

Як дізнатися, які саме пакети необхідні в опції --filter: 
./android-sdk-linux/tools/android list sdk
В результаті отримуємо щось на кшталт:
Packages available for installation or update: 14
   1- Android SDK Tools, revision 25.2.2
   2- Android SDK Platform-tools, revision 24.0.3
   3- Documentation for Android SDK, API 24, revision 1
   4- Google APIs, Android API 24, revision 1
   5- Google APIs, Android API 23, revision 1
   6- Google APIs, Android API 22, revision 1
   7- Google APIs, Android API 21, revision 1
   8- Google APIs, Android API 19, revision 20
   9- Glass Development Kit Preview, Android API 19, revision 11
  10- Google APIs, Android API 18, revision 4
  11- Google APIs, Android API 17, revision 4
  12- Google APIs, Android API 16, revision 4
  13- Google APIs, Android API 15, revision 3
  14- Android Support Repository, revision 38
5. Переходимо до свого проекту і оновлюємо його дані:
 ../android-sdk-linux/tools/android update project -t android-17 -p .
6.  Компілюємо проект за допомогою ant:
ant debug

понеділок, 19 вересня 2016 р.

Перевстановлення Linux на існуючий LVM DM-CRYPT розділ

Лінукс достатньо стабільна система. Але ніхто не застрахований від помилок користувача. І часом ці помилки можуть призвести до повної непрацездатності системи. Перевстановлення системи - не проблема в більшості випадків. Але якщо ви використовуєте шифрування розділів, то не завжди очевидно, як перевстановити систему поверх старої, не стираючи старих даних.

Отже, як це робив я:
  1. Завантажуємося з Live CD
  2. Монтуємо зашифрований диск (Double-click, вводимо пароль)
  3. Якщо старий софт не потрібен, видаляємо всі каталоги, крім home:

    find /mnt/ ! -name 'home' -maxdepth 1 -exec rm -R {} +

    (Знак оклику обов'язковий!)
  4. Запускаємо інсталятор, вибираємо мову та інші налаштування
  5. Інсталятор просить розмонтувати зашифрований диск. Відповідаємо NO
  6. Поділ диску (Partitioning) - вибираємо "щось інше" (something else)
  7. Вибираємо Ext4 root (і, можливо, home), swap на шифрованому дискові, а Ext2 boot на окремому незашифрованому розділі
  8. Вибираємо встановити GRUB на /dev/sda
  9. Далі нормальна інсталяція
Після цієї інсталяції система не запускатиметься, тому слід знову завантажитися з Live CD, відкрити terminal і виконати такі кроки
sudo su
cryptsetup luksOpen /dev/sda5 cryptLVM
vgscan --mknodes
vgchange -ay
mount /dev/mapper/xubuntu--vg-root /mnt
mount /dev/sda1 /mnt/boot
mount –bind /dev /mnt/dev
mount –bind /sys /mnt/sys
mount –bind /proc /mnt/proc
nano /mnt/etc/crypttab
cryptLVM UUID=896567b2-1c16-4f34-975c-091ae88908c9 none luks,discard
chroot /mnt /bin/bash
update-initramfs -uk all

Визначення UUIDпристрою
blkid /dev/sda5
 
Джерела:
http://www.bobrosbag.nl/index.php/2015/05/28/reinstall-debian-on-an-existing-lukslvm-setup/ http://ubuntuforums.org/showthread.php?t=1034910&p=7916766#post7916766

середа, 31 серпня 2016 р.

Пригоди 3D принтера в середовищі Linux

Робота з 3D принтером в середовищі Лінукс не така вже й складна. Якщо ви маєте модель у форматі STL (а їх достатньо в інтернеті, а в крайньому разі можна розробити свою за допомогою Blender, FreeCAD тощо). Потім STL модель слід перетворити в G-код керування 3D принтером (код для керування станками ЧПУ) і нарешті надіслати цей код на принтер через USB порт або SD картку.

Отже, поїхали.

Підготовка інструментарію


1. Встановлюємо слайсер slic3r (офіційний сайт http://slic3r.org/) - програму перетворення STL моделі в G-код керування принтером:

sudo apt-get install slic3r

2. Встановлюємо пакет Printrun - набір програм комунікації з принтером через USB. Виконуємо кроки згідно інструкцій на https://github.com/kliment/Printrun.

sudo apt-get install python-serial python-wxgtk3.0 python-pyglet python-numpy cython python-libxml2 python-gobject python-dbus python-psutil python-cairosvg git

git clone https://github.com/kliment/Printrun.git

Працюємо в консолі


1. Перетворюємо STL у G-код (я не заглиблююся у налаштування програми slic3r, але після початкових налаштувань перетворення тривіальне):

slic3r project.stl

2. Запускаємо pronsole.py з каталогу Printrun. Це консоль керування 3D принтером, що дозволяє надсилати G-код на пристрій, виконувати окремі G-коди тощо. Детально можна почитати в допомозі.

./pronsole.py

3. Підключення до принтера

connect

4. Попередній нагрів столу та хотенду

bedtemp 110
settemp 245

5. Моніторимо температуру, періодично виконуючи:

gettemp

5. Завантаження G-коду з підготовленого файлу:

load project.gcode

6. Друк деталі

print

Процес друку


Процес (а я робив кліпсу-тримач мобілки з можливістю монтувати на штатив для фотоапарату) виглядає приблизно так (в прискореному вигляді):


Зʼєднавши дві частини і помістивши між ними пружину, отримуємо прищіпку-тримач. Разом з міні-штативом воно виглядає ось так:




Звичайно, існують і інші програми (Cura, Makerbot Desktop, Repetier Host). Детально про них можна почитати на http://reprap.org/wiki/Resources/

понеділок, 15 серпня 2016 р.

Як риба у воді

Щоб полегшити перехід з Windows на Linux собі, своїм співробітникам або друзям я завжди пропоную провести підготовчий етап - перейти на ПЗ, яке є і виглядає однаково як на Windows так і на Linux (такий собі етап адаптації). Після цього люди зможуть вільно себе почувати в обох середовищах - як риба у воді. Відразу вбиваємо двох зайців - одночасно злазимо з голки піратських (я називаю "крадених") програм. Отже, основний набір кросплатформенних програм, яких вистачить для пересічного користувача:

  • LibreOffice - офісний пакет замість Microsoft Office
  • GIMP - растровий графічний редактор замість Photoshop
  • Inkscape - векторний редактор замість CorelDraw
  • Mozilla Firefox - веб переглядач
  • Mozilla Thunderbird - поштова програма
  • VLC - програвач відео
  • Audacious - програвач аудіо замість WinAmp
  • Audacity - звуковий редактор замість SourceForge
  • Double Commander - двопанельний файловий менеджер замість Total Commander
  • Blender - 3D моделювання замість 3Dmax (сам не користуюся, але відгуки позитивні)
  • FreeCAD - розробка моделей для 3D принтера
  • KiCAD - пакет проектування друкованих плат замість Protel
  Після привикання до цих програм перехід на Linux не такий вже страшний.

вівторок, 19 липня 2016 р.

Один комплект клавіатури і мишки на два ПК в Linux

Сидите за двома ПК одразу? Постійно плутаєте клавіатури і мишки? Не зручно набирати на маленькій клавіатурі нетбука ще й користуватися його тачпадом? Набридло? Вихід є: викиньте все зайве і залишіть один комплект клавіатури і мишки на два ПК. Утилітка x2x дозволяє переносити фокус керування на сусідній ПК при переміщенні вказівника миші за правий край екрану основного компʼютера.
Все, що вам слід зробити - встановити ssh сервер та x2x на другорядному ПК:
sudo apt-get install ssh x2x

А потім запустити з основного ПК:
ssh -X secondaryhost x2x -east -to :0

Ті, хто користуються VNC можуть ще звернути увагу на утилітку x2vnc.

Джерела:


четвер, 16 червня 2016 р.

3D принтер в побуті

На сьогоднішній день 3D принтер стає чим далі доступнішим. Ось і я стикнувся з ним. А все почалося з того, що в парасолі відламалася коронка (пластмасова деталь в місці кріплення шпиць до ручки). В майстерні з ремонту парасоль мені поспівчували і повідомили, що такої запчастини у них немає. Склаїти не вдалося: великі навантаження в місці склеювання, тому знову зламалося. Виточувати механічною обробкою таку складну деталь я не ризикнув. І ось я вирішив, що 3D принтер легенько може надрукувати таку саму пластикову штучку.
Кілька днів блукання інтернетрями і вуаля: є доволі пристойна програмка для малювання 3D обʼєктів. FreeCAD - параметричний 3D редактор. Працює як на Linux, так і на Windows. Параметричний означає, що розміри задаються параметрами і для зміни форми достатньо змінювати лише параметри. А взагалі принцип простий - малюєте проекцію, з неї вирощуєте обʼємну деталь. На будь-якій поверхні цієї деталі малюєте проекцію отвору і вирізаєте на потрібну глибину. Є можливість створювати обʼєкти утворені обертанням фігури перетину, обʼєднання частин та інші операції.
Виявляється в Україні можна надрукувати деталь на замовлення зі своєї моделі. Вартість доволі демократична - 5 грн за грам.
Ось поламана деталька:
Ось моделька у FreeCAD (дещо модернізував, щоб була міцніша):
Ось роздрукований варіант:
Ось обидві деталі поруч для порівняння:


Ось причеплений до ручки парасолі:
Навіть працює. Побачимо, чи швидко зламається.

пʼятниця, 6 травня 2016 р.

Організація віддаленої технічної підтримки на VNC

Багато організацій використовують AmmyAdmin або TeamViewer для надання технічної підтримки працівникам/клієнтам. Але ці програми небезкоштовні для комерційного використання (і доволі недешеві). Можна закривати очі на ліцензійні проблеми або знайти безкоштовне рішення.

Рішення існує вже давно - VNC (Virtual Network Control). Зокрема є програма TightVnc, яка є цілком безкоштовною, працює на Linux, Windows (при чому на всіх версіях!) але має один серйозний недолік на фоні комерційних конкурентів - це складність встановлення з'єднання, коли і оператор і клієнт виходять в інтернет через NAT. Правду кажучи навіть TeamViewer має проблеми, коли клієнти/оператори сидять за подвійним NAT.

Отже, яка піґулка? Транзитний сервер. Є програми-репітери для VNC, наприклад uvncrepeater (упс... не працює з TightVnc для Windows) або reflector від TightVnc (мені не вдалося налаштувати його і через регулярні збої я відмовився від нього). Але ж у нас є SSH і тунелювання! Використаймо їх.

Отже, на сервері Linux з публічним IP організовуємо Remote Port Forwarding. Перш за все додаємо виняток у Firewall (дозвіл приймаи з'єднання на порт 5500) для вхідних VNC з'єднань від клієнтів. Плюс для нормальної роботи такого тунелю з можливістю зовнішніх підключень на порт необхідно включити в /etc/ssh/sshd_config дві опції:

AllowTcpForwarding yes
GatewayPorts yes

За потреби перезапускаємо ssh:

sudo service ssh restart

Тепер оператори з Linux створюють тунель до публічного сервера і включають Viewer в режимі реверсного підключення

ssh -Nf -R 5500:localhost:5500 user@remote.server.with.public.ip
ssvncviewer -listen

5500 - відкритий на публічному сервері порт. Якщо порт на сервері інший (скажімо умовно XXXX), тоді буде:

ssh -Nf -R XXXX:localhost:5500 user@remote.server.with.public.ip

-N - не виконувати команд на сервері. Лише port forwarding.
-f - перейти в фоновий режим після авторизації.
Обидві опції можна і не використовувати.

Клієнти з Windows тепер спокійно підключаються до публічного сервера за допомогою зворотнього (reverse) VNC на його публічний порт (5500 або XXXX). Права кн.миші -> Attach Listening Viewer...


remote.server.with.public.ip:5500

Клієнти з Linux використовують x11vnc:

vncconnect remote.server.with.public.ip:5500
Ось власне і все.

пʼятниця, 18 березня 2016 р.

prudebugger - відлагоджувач програм на PRU BeagleBone

При розробці програм для модуля PRU процесора Am3358 на BeagleBone часом є небхідність використати debugger. Одним з них є prudebug:
https://sourceforge.net/projects/prudebug/

Процедура встановлення:

  • Скачуємо і розпаковуємо архів з вихідними текстами. 
  • Запускаємо make з використанням свого крос компілятора (змінити в Makefile або запустити з параметром CC)
$ make CC=arm-linux-gnueabihf-gcc
  • Копіюємо prudebug до /usr/bin

Використання prudebug (на прикладі PRU_blink.bin)

  • Запуск
$ prudebug
  • Вибір робочого PRU
> pru 0
  • Завантаження програми в PRU_blink.bin до PRU, починаючи з адреси 0x0
> L 0x0 ./PRU_blink.bin
  • Видрук програми (disassmbly)
> dis
  • Видрук стану регістрів
> R
  • Покрокове виконання
> ss
  • Продовдження виконання до точки зупинки (breakopoint)
> gss
  • Керування точками зупинки
> br
  • Безумовне продовження виконання програми 
> g
  • Зупинка
> halt
  • Скидання процесора
> reset 
  • Допомога
> help
  • Вихід
> q

Налаштування gitlab-ci runner для android проекту

Офіційні інструкції:
http://developer.android.com/sdk/index.html#Other
https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/linux-repository.md

Як я робив на конкретному прикладі:
  • Встановлюємо ant, java runtime та java-jdk (8 або найновіша версія обов'язкова, щоб не було конфліктів при використанні android-sdk-tools з повідомленням "unsupported major.minor...")
sudo apt-get install ant openjdk-8-jre openjdk-8-jdk

  • Встановлюємо gitlab-ci-runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash
sudo apt-get install gitlab-ci-multi-runner
  •  Переходимо в режим користувача gitlab-runner
sudo su gitlab-runner
  •  Встановлюємо android-sdk-tools 
wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
tar -zxf ./android-sdk_r24.4.1-linux.tgz
cd linux-sdk-tools
tools/android update sdk --no-ui 
  •  Реєструємо свій runner 
gitlab-runner register
 
>>Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci )
https://gitlab.com/ci
>>Please enter the gitlab-ci token for this runner
xxx_ci-token for project_xxx
>>Please enter the gitlab-ci description for this runner
my-runner
  • В робочому проекті налаштовуємо мінімальний .gitlab-ci.yml
before_script:
    - export ANDROID_HOME=~/android-sdk-linux
    - ~/android-sdk-linux/tools/android update project -p . -t android-23 -n MainActivity -s
build:
  script:
    - ant debug
  tags:
    - android

 

вівторок, 9 лютого 2016 р.

Встановлення WxWidgets 3.0 на Debian Wheesy і Beaglebone.

Маю програму для Linux, написану з використанням бібліотеки WxWidgets 3.0. І вирішив випробувати її роботу на BeagleBone. Але є одне але. В дистрибутиві Debian Wheezy по замовчуванню менеджером пакетів можна встановити лише WxWidgets2.8. Є кілька методів вирішити цю задачу.
  1. Відкомпілювати WxWidgets3.0 на самому BeagleBone. Відразу скажу, що цей варіант я навіть реалізував. Результат - працює. Але є кілька недоліків: час компіляції сягає кількох годин (реально витратив цілий день), відкомпільована версія WxWidgets разом з об'єктними файлами сягає 1 Гб (займає майже все вільне місце на порівняно невеликому диску BeagleBone), якщо процес необхідно провести на кількох BeagleBone, то треба або переносити з одного BeagleBone на інший вже відкомпільовані файли або повторювати цю тривалу процедуру на кожному екземплярі.є
  2. Встановити WxWidgets3.0 за допомогою менеджера пакетів з back-ports. Цей шлях простіший і його я зараз опишу покроково.
Отже, згідно http://backports.debian.org/Instructions/ процедура така:
  • Додаємо в /etc/apt/sources.list запис про використання дзеркала з back-ports пакетами:
# sudo nano /etc/apt/sources.list

Додаємо рядок:

deb http://http.debian.net/debian wheezy-backports main

Оновлюємо перелік пакетів і встановлюємо потрібний нам WxWidgets3.0

# sudo apt-get update
# sudo apt-get install libwxgtk3.0

Ось і все. Після цього можна спокійно використовувати програми, які залежать від WxWidgets3.0

четвер, 4 лютого 2016 р.

Монтування TrueCrypt контейнера в Linux

Колись давно я створював собі TrueCrypt контейнер для збереження конфіденційних файлів. Але не користувався ним близько двох років. І ось настав той момент, коли виникла необхідність скористатися цими файлами. Та за ці два роки я, мабуть, кілька разів оновлював операційну систему, а один раз навіть цілком переставляв. Отже, TrueCrypt-у під руками не було. Ще й на сайті розробника висить велике попередження, що програма не є безпечною. Вирішив не встановлювати її, а підмонтувати шифрований контейнер власними засобами Linux. Знайшов статтю, яка описує цей процес: http://unix.stackexchange.com/questions/138642/accessed-a-truecrypt-container-without-truecrypt-what-dangers-await і випробував. Все працює. Ось послідовність моїх дій:
1. Переписав сам контейнер у свій Dropbox каталог. Тепер зашифрований диск буде доступний з будь-якого пристрою.
2. Створив точку монтування цього контейнера
# mkdir ~/truecrypt
3. Власне процес монтування:
# cryptsetup open --type tcrypt ~/Dropbox/vol.truecrypt flopper
# mount -t vfat /dev/mapper/flopper ~/truecrypt
Ось і все. Нічого складного. Ще й вбудованими засобами Linux. Тип файлової системи vfat вказував через те, що TrueCrypt раніше я використовував і під Windows і під Linux. Тому контейнер містить файлову систему Windows.

пʼятниця, 22 січня 2016 р.

Запуск графічних програм на Beaglebone Green

Beaglebone Green (BBG) - спрощений варіант Beaglebone Black (BBB), особливістю якого є відсутність HDMI конектора, окремого роз'єму живлення та наявність двох groove конекторів (SPI та UART2) для легкого підключення периферії.

Відсутність HDMI означає відсутність Xorg сервера, адже Xorg може працювати лише за наявності графічної карти. Хоча і існує проект Xdummy, який запускає Xorg з драйвером віртуальної відеокарти, є й інші методи запуску графічних програм на BBG. Одна з них xvfb - X virtual frame buffer - програма, яка створює в пам'яті образ дисплею і дозволяє графічним програмам здійснювати вивід на нього. Робота з xvfb дозволяє підключати до нього x11vnc і керувати таким віртуальним середовищем по мережі. Цей підхід покроково описаний в статті:

http://www.richud.com/wiki/Ubuntu_Fluxbox_GUI_with_x11vnc_and_Xvfb

Але навіщо такі складнощі? Адже в базовій конфігурації BBG укомплектований програмою xtightvncserver та ще й з налаштованим мереджером вікон openbox. Все, що нам залишається, налаштувати автозапуск xtightvnc і перевірити його роботу. Інструкція по запуску і налаштуванню xtightvnc можна знайти в інтернеті. Є приклад налаштування старих (SysV init) систем та сучасних (systemd) дистрибутивів:

http://www.penguintutor.com/raspberrypi/tightvnc-sysv

http://www.penguintutor.com/raspberrypi/tightvnc

https://www.digitalocean.com/community/tutorials/how-to-set-up-vnc-server-on-debian-8

Отже, я спробую покроково розповісти, як це робив я на BBG.
1 Крок: Встановлюємо  xtightvncserver (насправді він вже встановлений, тож просто переконуємося, що він дійсно є):

$ sudo apt-get install xtightvncserver

2 Крок: Запускаємо vncserver. При першому запуску програма запитає пароль для доступу і його підтвердження. В подальшому використовуватиме цей збережений пароль:

$ vncserver

3 Крок: Підключаємося до нього за допомогою vncviewer-а з іншого комп'ютера. Вводимо пароль і насолоджуємося сесією openbox на BBG. IP-адресу слід змінити на потрібну у нашому середовищі. :1 означає підключитися до 1 екрану на порт 5901:

$ vncviewer 192.168.0.26:1

Тепер спробуємо поставити vncserver в автозапуск системи.

1 Крок: Зупиняємо сервер:

$ vncserver -kill :1

2 Крок: створюємо скрипт для запуску/перезапуску та зупинки сервера і робимо його виконуваним:

$ sudo nano /usr/local/bin/vncserver

В цьому файлі формуємо скрипт керування сервісом:

#!/bin/bash
PATH="$PATH:/usr/bin/"
DISPLAY="1"
DEPTH="16"
GEOMETRY="1024x768"
OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"

case "$1" in
start)
/usr/bin/vncserver ${OPTIONS}
;;

stop)
/usr/bin/vncserver -kill :${DISPLAY}
;;

restart)
$0 stop
$0 start
;;
esac
exit 0




Далі надаємо права:


$ chmod +x /usr/local/bin/vncserver 

3 Крок: на основі скрипта /usr/local/bin/vncserver створюємо сервіс і ставимо його в автозапуск systemd:

$ sudo nano /lib/systemd/system/vncserver.service

Сервіс запускаємо від імені користувача debian BBG з можливістю перезапуску при аварії. Тому у файл налаштування прописуємо таке:

[Unit]
Description=Manage VNC Server on this droplet

[Service]
Type=forking
ExecStart=/usr/local/bin/vncserver start
ExecStop=/usr/local/bin/vncserver stop
ExecReload=/usr/local/bin/vncserver restart
User=debian

Restart=on-failure

[Install]
WantedBy=multi-user.target 
 
 


Перезапускаємо systemd і активуємо наш сервіс:

$ sudo systemctl daemon-reload

$ sudo systemctl enable vncserver.service

З точки зору безпеки варто обмежити доступ до BBG ззовні і використовувати SSH-тунелювання. Для цього у файлі /usr/local/bin/vncserver парметр OPTIONS слід доповнити обмеженням -local. Ось так:

OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY} -localhost"

Після цього підключитися ззовні неможливо. Слід створювати SSH-тунель або застосовувати реверсне з'єднання (його теж бажано робити через SSH-тунель). Для створення реверсних з'єднань існує утиліта vncconnect:

$ vncconnect -display :1 yourhost.yourdomailn

Тоді, якщо на віддаленій машині запущений vncviewer в режимі очікування з'єднання, відбудеться реверсне підключення від BBG до віддаленої машини, з якої можна буде керувати BBG. Ось так запускаємо на віддаленому комп'ютері переглядач:

$ ssvncviewer -listen

Метод реверсного підключення особливо зручний, коли ваш BBG розміщений за NAT і ззовні достукатися до нього неможливо.

четвер, 21 січня 2016 р.

Оновлення прошивки на Esp8266

Оновлення прошивки на модулях Esp8266 доволі простий процес. Для цього слід перевести модуль в режим завантаження прошивки (підключити вихід GPIO0 на GND) і включити  живлення.

Оновлення здійснюється за допомогою інструмента esptool.py. Він створюється при компіляції esp-open-sdk в окремій папці esptool. Правда при спробі встановити esptool в системі згідно README мені видало помилку про відсутність модуля setuptools для Python. Ну, що ж встановимо його:

sudo apt-get install python-setuptools

Далі запускаємо інсталяцію esptool.py в систему, щоб він був доступний звідусіль. З каталога esp-open-sdk/esptool:

python setup.py install

Далі шукаємо необхідні прошивки в каталозі esp-open-sdk/sdk/bin/at/noboot/:
eagle.flash.bin та eagle.irom0text.bin. Але незрозуміло одне: куди який файл заливати?

І тут на допомогу приходить великий Гугль та "kacang bawang" з його статейкою: http://kacangbawang.com/latest-at-firmware-for-esp8266-with-512k-flash/

З неї визначаємо оптимальну команду для прошивки цих двох файлів:

esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash 0x40000 eagle.irom0text.bin 0x00000 eagle.flash.bin

Чекаємо кілька секунд і... вуаля! У нас найновіша прошивочка. Перемикаємо модуль в режим бойової роботи і перевіряємо функціональність.

AT+GMR
AT version:0.50.0.0(Sep 18 2015 20:55:38)
SDK version:1.4.0
compile time:Sep 18 2015 21:32:07

Оце й давно я скомпілював прошивку! Просто не мав змоги її перевірити раніше. Можна, мабуть, вже й оновитися.

Я упустив процес компіляції esp-open-sdk. При нагоді опишу. Але для тих, хто цікавиться, ось ресурс, згідно якого як це робив:

http://www.esp8266.com/wiki/doku.php?id=setup-linux-compiler-esp8266

А ще краще дивитися на ресурсі розробника:

https://github.com/pfalcon/esp-open-sdk

середа, 20 січня 2016 р.

WIFI сервер на ESP8266 за допомогою AT-команд


Мабуть, найдешевший з існуючих на сьгодні WIFI модулів - на базі ESP8266. Варіантів виконання його є багато, і всі вони відрізняються кількістю зовнішніх портів вводу/виводу, об'ємом пам'яті та наявністю додаткового спів-мікроконтролера (саме так, є й такі варіанти, наприклад ESP-14).
Можливості цих модулів достатньо широкі. Вони можуть працювати в режимі робочої станції, точки доступу і навіть(!) в комбінованому режимі. Існують цілі SDK та IDE для написання своїх прошивок. 
Хочу поділитися своїм досвідом перших експериментів з модулем ESP-12Q. Модуль живиться від 3.3В (5В подавати не можна). Так само не можна подавати 5В на вхідні ніжки. Підключення до комп'ютера здійснюється за допомогою перетворювача USB/UART-TTL з можливістю видавати сигнали з рівнями 3.3В. Ніжки GPIO15 та GND підключаються на GND живлення, a GPIO0, GPIO2, EN (CH_PD) та VCC на +3.3В. Сигнальні ніжки бажано підключати через опори по 1..10k, але в крайньому разі можна обійтися і без них.

Заводська прошивка дозволяє працювати з ESP-12Q як зі звичайним модемом за допомогою АТ-команд. Примусити цей невеличкий модуль виступати в ролі сервера не так вже й важко. Для цього в терміналі (я використовую minicom) вводимо такі команди:

AT+CWSAP_DEF="ESP12Q","1234567890",5,3
AT+CWDHCP=0,1
AT+CWMODE_DEF=2
AT+CIPMUX=1
AT+CIPSERVER=1

Перша команда налаштовує параметри точки доступу SSID мережі, пароль, номер WIFI-каналу, та тип шифрування.
Друга команда активує DHCP сервер на точці доступу.
Третя команда переводить модуль в режим чистої точки доступу SoftAP.
Наступна команда перемикає в режим мультипотокової взаємодії (ця опція обов'язкова для режиму сервера)
Остання команда нарешті запускає модуль в режимі сервера, який дозволяє підключатися до нього за допомогою telnet або інших програм.

Після цих налаштувань в переліку доступних WIFI мереж буде видно ESP12Q. Пароль доступу до неї 1234567890. Як тільки підключилися до точки доступу, запускаємо telnet:

# telnet 192.168.4.1 333

По замовчуванню сервер використовує порт 333 для вхідних з'єднань, але його можна змінити в команді AT+CIPSERVER=1,[port].

Після підключення можна спокійно отримати повідомлення, набрані в telnet у вигляді:

+IPD,4,n:xxxxxxxxxx

Надіслати ж дані можна також за допомогою АТ-команди:

AT+CIPSEND=0,5
>HELLO

При експериментах стикнувся з тим, що minicom не сумісний по сигналах '\r\n'. Для виконання команди слід було натискати Enter, а потім Ctrl+Enter. Інакше відповідь була завжди ERROR.