четвер, 31 грудня 2009 р.

Підсумок-2009

Дві тисячі дев’ятий спливає, то пора підбити якісь підсумки. Всього, звісно, й не згадаєш:

  • Навчився працювати з ACE та TAO. Власне, останні робочі дні року витратив, щоб перенести сервер SIA нової платформи на ACE. Краще все-таки стояти на чиїхсь плечах, ніж намагатися дотягнутися самотужки.
  • Почав у розробці використовувати автоматизовані тестові сценарії. Ніж самому все перевіряти руками, краще доручу роботу тупому роботу (скрипту) від гріха подалі. І таки справляється! Гора з плечей, коли заходить мова про переробку…
  • Став колупатися в мікроелектроніці. Розпочавши із PIC14, перейшов на AVR, поближче до Atmel та GCC. Хочу взяти курс на ARM9 та навчитися заселяти пінгвінів на нього.
  • Повністю перейшов на VCS git, який підкупив своєю високою швидкістю, зручністю роботи, гнучкістю. Незамінна штука!

Відверто, детальних планів на наступний рік немає. Звісно, якщо не враховувати:

  • Влитися у проект GNOME (необмеженого інтернету у мене до цих пір немає).
  • Побудувати свій пристрій з Андроїдом на борту.

Ну, якось так. До зустрічі в дві тисячі десятому!

четвер, 24 грудня 2009 р.

Стягування файлів через telnet

Пригадався епізод із університетських часів. Дуже хотілося знайти собі якісь хороші п’єски для гітари (MIDI), а доступ з мережі університету був обмежений навчальними сайтами. Крім того, коли я був на молодших курсах, до інтернету була підключена тільки станція HP, на яку можна було зайти через текстовий термінал. Ото справжня Unix!

Так, знайомий ще зі школи старшокурсник підказав дуже цікавий спосіб. Треба було зайти на яку-небудь більш відкриту систему по telnet, знайти й стягнути потрібний файл у ній, закодувати його у ASCII інструментом uuencode і роздрукувати його у термінал командою cat. Таким чином, якщо записати сеанс у якийсь файл, то вже локально можна розкодувати файл інструментом uudecode.

Сеанс мав приблизно такий вигляд:

[~]$ telnet grex.org | tee grex.log
[grex.org:~]$ wget http://cool.site/file.mid
[grex.org:~]$ uuencode file.mid file.mid.uue
begin xxx file.mid.uue
...
end
[grex.org:~]$ logout
[~]$ uudecode grex.log -o file.mid

Процес повільний, клопіткий, але дуже цікавий. “Голь на выдумки хитра”!

понеділок, 14 грудня 2009 р.

Помилка і tee в конвеєрі

Чергове “прозріння” граблями в лоб не забарилося. Ситуація, як у M$ Windows: на екрані повідомлення про успішне завершення, а насправді жодних зрушень. Як виявилося, причиною стали наступні рядки у скрипті:

long_operation 2>&1 | tee /var/log/long_operation.log
[[ $? -eq 0 ]] && echo "Succeeded"

Якщо виконання “довгої операції” закінчується невдало, то tee сумлінно приховає цей факт, і в будь-якому випадку з’явиться повідомлення про успіх. Отже, таке шоу краще влаштовувати по-іншому:

long_operation >(tee /var/log/long_operation.log) 2>&1
[[ $? -eq 0 ]] && echo "Succeeded"

UPD

Несподівано ікнулося, що це працює не завжди. Тепер використовуємо ${PIPESTATUS[0]}.

суботу, 12 грудня 2009 р.

Програматор USBasp

Цього разу плата приїхала рівно за тиждень. І раз чесалися руки, відразу ж взявся її розпаювати. Так виявилися перші ляпи: отвори для стабілітронів я призначив занадто малі. Тобто, я взяв стандартний елементи з бібліотеки (ACY300), а діоди раніше не бачив, тому й не помітив, що насправді ніжки в них товсті. По-друге, діоди чомусь вийшли намальовані в протилежній полярності, хоч на схемі все було гаразд. Видно, не догледів при запуску gsch2pcb.

Але це була дрібна біда: припаяв на поверхню й по тому. А от як під’єднав кабель, то відразу ж дізнався, що напруга від USB не подається, на VCC аж −0,8 В. Мав би вже тоді зробити висновок, що кабель підробний, але ні, подумав, що є ще якась біда зі схемою, і вона віджирає більше, ніж їй може дати мій лаптоп…

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

Знову підключаю до комп’ютера (цього разу іншим кабелем), і знову нічого. Хіба що рівень живлення VCC тепер вже став 5 В. І в системному журналі з’явився запис, що знайдено якийсь прилад, але він, партизан, ні на що не відповідає. Та й діод не світиться, отже, не працює програма. Під’єдную осцилоскоп, і бачу, що ніяким меандром на генераторі тактових імпульсів не пахне, один шум та й годі. Довелося пригадати, з якої коробочки взяв конденсатори, з’ясувати, що ці занадто великої ємності, і перепаяти на потрібні.

Останнім штрихом стала модифікація кабеля. Придбаного за п’ять гривень на радіоринку зовсім не жаль було: розрізав, припаяв навпростець до плати. До речі, кабель просто фантастичний, тобто, його розпаяв справжній фантазер: живлення та земля, D+ та D− були попарно сплутані між собою… О диво, після операції мій лаптоп знайшов і визначив новий пристрій (на платі теж засвітився червоний світлодіод)! Ба, тепер енергії вистачає навіть на програмований мікроконтролер.

[~]$ lsusb | grep USBasp
Bus 004 Device 002: ID 16c0:05dc VOTI USBasp AVR Programmer

Працювати з USBavr виявилося досить просто: змінив програму, зібрав її командою make, і записав зміни у мікроконтролер командою make install. Makefile насправді виконує наступне заклинання:

avrdude -c usbasp -p atmega8 -U flash:w:led.hex

Словом, результати:

  • У мене з’явився власний програматор AVR десь за сто гривень.
  • Вперше вдалося провести цілеспрямоване налагодження схеми. Потикань було багато, але колись минеться.
  • Отримав купу задоволення, якого не було б, якби придбав готовий прилад.

понеділок, 7 грудня 2009 р.

Hello, AVR!

 

У студентів запитують:
— Скільки часу вам треба, щоб здати екзамен з китайської?
Студент філфаку:
— Напевне, років зо два…
Студент РФФ (взагалі будь-який технар):
— Методичка є? Зараз доп’ю каву, можемо йти здавати…

 
  З анекдоту

Отже, як на мене, AVR більш привабливий для програмування, ніж PIC. GCC — це не хухри́-мухри́. Дай, думаю, спробую, тільки цього разу ніякої комерції, сам зроблю собі програматор. Після недовгих потикань по інтернетрях жереб випав на USBasp.

Прилад не на один день, значить, має бути добротним. Накидав плату на PCB, сконвертував у Гербери, відіслав замовлення у Херсон. Попросили п’ятдесят гривень, отже повністю зібрана цяцька має потягнути десь на сотню.

А поки Протомат трудиться над заготовкою, треба підготуватися і розв’язати проблему курки і яєць. Рішення легко знайти у журналі “Електроніка для всіх”. Так що, спеціально для свого майбутнього програматора довелося зібрати програматор Громова. Звісно, у мене він на макетній платі. До слова, спаяти безконтролерний на FT232RL мені геть не вдалося: надто вже дрібні деталі.

Як і слід було чекати, моделька запрацювала, жваво заблимавши діодом. Щось мені заклинило, і я зашив не ті “переплавки”, і контролер тепер запускається тільки з генератором RC. Але це вже дріб’язок. Чекаю на плату з Херсону.

середу, 2 грудня 2009 р.

Новий співробітник

 

Есть моск? Поможем научиться и рубить бабло!

 
  реклама devclub.com.ua

З великими труднощами, але знайшли-таки нового програміста. А розказати хочу не стільки про нього, а через що йому довелося пройти, щоб приєднатися до української команди компанії Visonic.

За два роки нам вже тричі доводилося когось шукати для розробки на C++ для GNU/Linux, тому цього разу начальник сказав, що все спростимо. Щоб не гаяти час, я мав проводити телефонні співбесіди і вирішувати, чи витрачати на кандидата час. Запрошеним я мав запропонувати набір простих задач десь на півгодини, самому не відволікаючись від звичної роботи. А вже обрана п’ятірка могла потрапити на справжню багатообіцяючу співбесіду до начальника.

Але це було щось із чимось! Тільки дали оголошення, відразу ж посипались тонни відгуків, кожен кращий від іншого. До слова, всього їх отримали ми десь за тридцяток. Як почав я телефонувати, довелося спуститися на грішну українську землю…

Спершу перепитую, чи справді готові програмувати на C++ для Linux (кілька швидко одумалися). Потім різношерстий набір:

  • Скільки 28?
  • Як записується в signed int число −1?
  • Чи може статична функція класу С++ бути віртуальною?
  • Що робить функція стандартної бібліотеки С++ remove_if (adjacent_find, equal)?
  • Які є примітиви синхронізації потоків posix?

Когось запитував більше, когось менше, головне було зрозуміти, чи варто продовжувати. Я цілився на, можливо, не дуже досвідчених, але обов’язково кмітливих претендентів. Головне, щоб роботу робили, а не знали багато розумних слів і загинали пальці…

Напевне, з півтора десятка ми таки запросили в гості практичну частину. І знову почалося розчарування. Задачки були дуже прості, просто візьми й відразу ж скажи відповідь, можливо, крім однієї. Та де там! Тільки двоє спромоглися розв’язати майже все.

Tasks

Висновки:

  • Робота мисливців за головами вкрай непроста, особливо, як ті голови ще треба знайти.

  • Розумні програмісти десь давно працюють, а в постійному пошуку невдахи.

  • В багатьох випадках вимоги шукачів завищені. Ясно, що знайдуть шукаючі, але хотів би я знати, за що людям гроші платять.