Alte chestii utile prin GNOME

De câteva zile încerc să îmi găsesc un sistem cât mai bun de organizare a ideilor, a lucrurilor de făcut, a întâlnirilor și așa mai departe. Folosesc Tasque (despre care cred ca am mai scris) pentru gestiunea task-urilor, integrat în Gnome-Do (despre care cu siguranță am mai scris).

Tasque ia task-urile din mai multe back-end-uri, eu folosesc backend-ul Evolution (pentru că de acolo le pot sincroniza simplu și cu alte servicii, cum ar fi mobilul, când oi avea unu suficient de deștept). Allright, acuma intră în scenă Hamster, un proiect de gestiune a timpului despre care am mai scris. Hamster are un feature de care eu nu am știut atunci când am început să îl folosesc, și anume când îi spui activitatea de care te ocupi și pe care vrei să o urmărești, îți sugerează din task-urile existente în Evolution. Coool!

Statistici Hamster dintr-o zi productivă :P

Ok, mergând mai departe, m-am uitat un pic prin Tomboy. Tomboy este un sistem de note-taking (care nu este nicicum apropiat ca și complexitate cu OneNote de la Microsoft), care este de fapt o implementare a unui wiki, orientată pentru Desktop și pentru note. Este extensibil, prin forma unor plug-in-uri (Tomboy este scris în C#/Mono). Printre altele, știe să link-uiască între note, dar și să introducă link-uri spre fișiere și chiar și spre emailuri din Evolution.

Tomboy suportă sincronizare, și asta este îndeosebi util în combinație cu back-end-ul pentru UbuntuOne. Notele din Tomboy pot fi sincronizate cu notele din Evolution (și apoi de acolo cu notele de pe telefon, spre exemplu), folosind Conduit. Tomboy mai are și alte feature-uri cool, și câteva pluginuri third-party, cum ar fi un plugin care deschide o notă la un moment dat într-o zi.

Slightly offtopic, am fost impresionat să văd ca Pidgin suportă spellcheck în box-ul pentru mesaje.

Acum câteva zile am descoperit un progrămel, blueproximity, a cărui utilitate este discutabilă, dar al cărui factor de coolness nu este. blueproximity folosește puterea semnalului de pe legătura cu un alt dispozitiv bluetooth (gen telefonul mobil) pentru a lock-ui sau a unlock-ui calculatorul. Pentru un exemplu concret, în setup-ul meu, dacă plec la mai mult de 3- 4 metri de comp, se încuie, și se descuie automat când mă apropiu de el :D

Și ultima chestie care intra în post-ul ăsta este beagle, un serviciu de indexare și căutare, mai complex și extensibil decât tracker-ul original din Ubuntu. Beagle are și un gui, care nu are un nume deosebit (aplicația se numește Search). După ce indexează fișierele și conținutul lor, beagle poate găsi repede fișiere, poze (tag-uite), video-uri, conversații de messenger și alte informații de genul, indexarea fiind extensibilă prin plugin-uri. Încă nu a terminat de indexat tot (mai ales pe partea de poze), dar sunt fericit cu ce rezultate am obținut până acum ;)

UP12 stuff on my computer ;)
http://beagle-project.org/Main_Page

Grafice rapide pe Linux

Deși nu ne-am calificat la FRC2010, am învățat mai multe lucruri utile și pentru multe alte feluri de proiecte. Spre exemplu, primeam date de la accelerometrul ala, și le salvam pe un card în microSD. Pentru mine, pe Linux, a fost destul de nasol să fac graficul acceleratie(x) în OOo Calc, pentru că erau foarte multe puncte, și efectiv nu se descurca, și graficul rezultat era greu de aranjat.

Așa că am început să folosim Octave, care este un soft de genul Matlab (evident, opensource și mai puțin dezvoltat ca Matlab), și interfața grafică QtOctave. Am luat datele de la accelerometru, dar și punctele unde am înregistrat noi curbele, și valorile de prag pe care le calculam la fiecare tură. Ce mi-a s-a părut foarte tare a fost că în 20 de minute am făcut un script python cu niște expresii regulate, care spărgea fișierul provenit de la mașină în mai multe seturi de date, și o funcție Octave care să tragă niște grafice după care să ne estimăm noi algoritmul. Practic, din trei clickuri, era gata tot, și și foarte repede.

Octave-ul e doar este o soluție la îndemână pentru învârtit datele, pentru aranjat în matrici. De acolo, de fapt octave-ul folosește gnuplot, care se poate folosi și standalone, și care și el este o super sculă :D

Anyway, toate sculele astea sunt gratis, și, even better, opensource.

Tadaaaaa

Simboluri noi în gEDA / gschem

De multe ori când creezi o schemă electrică (în orice pachet, indiferent dacă e sau nu comerical / open) ajungi la un moment în care dispozitivul pe care vrei să îl adaugi nu există în baza de date a programului. Eu folosesc gEDA / gschem și de cele mai multe ori când nu am găsit ceva în bibliotecile standard am găsit tot ce aveam nevoie pe gedasymbols.org, chestii contribuite de comunitate.

Astăzi, lucrând la un proiect în care am nevoie să fac un mic server de rețea pe un ATMega și cu un ENC28J60 de la Microchip, am decis că am nevoie de un Magjack, dar, evident, nu era in biblioteca de la gschem, și nici în gedasymbols.org, așa că am căutat puțin cum să îmi fac propriul simbol.

Fișierele simbol sunt fișiere cu un format deschis, text, (au extensia .sym), deci pot fi editate direct, fie în mod text, fie din gschem. Pentru adaptat simboluri e ok doar duplicarea simbolului vechi și modificarea în copie, dar dacă ai nevoie de un simbol nou (cum am avut eu nevoie de Magjack), trebuie să o iei de la 0. Cum cititul a sute de pagini de documentație nu este un sport la care voiam să mă înham în cele 20 de minute alocate pentru task-ul ăsta, am mai căutat pe net și am găsit o super soluție, prezentată în detaliu aici.

Practic, există un utilitare, tragesym, care ia un fișier de specificații și îl transformă în .sym compatibil cu gschem. Pentru a oferi șirul de specificații, băieții de la gEDA au un template (fie în format text fie ods) și îți explică cam ce tre să scrii acolo.

În 15 minute, presto, magjack.sym.

AVR plugin pentru Eclipse

De când am făcut marea trecere pe linux, găsesc tot mai multe tooluri la îndemână pentru lumea noastră, a geek-șilor, și tot mai puține pentru lumea ailaltă, știți voi, aia reală. Totuși, nu pot decât să mă bucur când găsesc ceva să-mi simplifice task-urile … creative.

Acum un an am avut o materie numită Proiectarea cu Microcontrollere (sau așa ceva, ideea e că numele de cod este PM), unde, pentru prima oară în 4 ani (atunci) de școala trebuia să construim noi un dispozitiv. Ideea e că am fost puși față în față cu seria ATMega de la Atmel, și ni s-au dat pași concreți spre realizarea unei chestiuțe care să chiar MEARGĂ. De atunci, toate planurile de world domination includ cel puțin un ATMega :).

Anyway, post-ul ăsta există pentru că am găsit ceva util. Procesoarele AVR au mai multe feluri de programatoare (și chiar de Debuggere real-time), există plăci de dezvoltare and stuff like that. (AVRFreaks este site-ul recunoscut ca cea mai bună sursă de informații :P). Îs enșpe mii de variante de procesoare, care se folosesc destul de larg în orice „home brewed” device. Anul trecut, ca să le programăm, sub Windows, trebuia să scriem sursa cumva, să facem un Makefile (care era oarecum complicat, din ce țin eu minte) și să folosim un soft (PonyProg) ca să încărcăm proiectul pe procesor.

Există destul de multe tool-uri pentru lucrul cu AVRuri (WinAVR are și un IDE integrat, am înțeles că există ceva numit CodeVision, mai sunt), dar eu n-am reușit să le fac să-mi meargă pe Windows (parțial pentru că nu există suport pentru programatorul neavansat pe care îl folosim noi, parțial pentru că eram prea tăntălău). Tool-ul general preferat de mine, din anul II, de la tema cu bridge-ul (prietenii știu de ce) este Eclipse, care e extrem de configurabil și sunt sigur că măcar compilarea se putea rezolva de „mână” și înainte.

Dar acum nu mai e nevoie. Există plugin-ul ăsta super, care este construit peste pluginul CDT (partea de C/C++ a Eclipse) și are niște unelte de compilat automat, uploadat pe device direct cu avrdude. Am vazut că avrdude există și pe Windows, deci nu văd de ce tool-ul ăsta n-ar merge la fel de beton cum îmi merge și mie pe linux. Am avut plugin-ul instalat și pe Windows, da nu m-am simțit împins nicicum să-l fac să meargă.

Am găsit prin avrfreaks doua link-uri cu cum să-l aranjezi să-ți meargă (trebuie setat programatorul fizic ce se folosește, noi am folosit SI-Prog, dar am văzut că acum se face la PM o treabă pe USB care nu știu exact cum funcționește … încă!). De ce ar face cineva tutoriale pentru oameni tehnici în format video n-am înțeles, așa că pe scurt despre ce trebuie să faceți să vă programați ATMega-ul dintr-un foc (*credit-ul pentru indicații merge la baieții din link-urile de mai sus, eu doar încerc să-l fac un pic mai cursiv, pentru oameni nerabdători ca mine :P):

1. Vă trebuie compilatorul (avr-gcc), și alte câteva jucării (avrdude e downloader  / uploader, libusb trebuie dacă folosiți un device care se programează pe USB, avr-libc e biblioteca standard)

sudo apt-get install binutils-avr, avr-gcc, avr-libc, avrdude, libusb

Cred că pachetul ăsta se numea altfel mai demult (gcc-avr), dar mie cu ăsta mi-o mers

2. Vă trebuie Eclipse (recomand 3.4, dacă nu aveți motive serioase de a rămâne la 3.3) și CDT >= 4 (eu îl am pe ultimu stable de la Ganymede)

3. Instalați plug-in-ul AVR (care are site de update pentru Eclipse, just add the site to the Eclipse sources list .P)

http://avr-eclipse.sourceforge.net/updatesite/

4. Faceți un proiect C nou în Eclipse, alegeți AVR Cross Target App, Alegeți Toolchain-ul cu avr-gcc (dacă mai aveți și altele), alegeți tipul de device și frecvența (ATMega16/32 au o frecvență bazată pe un oscilator intern, la 1MHz. La PM am învățat cum să-l ducem la maximul potențialului, cu un cristal de 16MHz – trebuie setate niște fuse-uri prin el).

5. Windows > Preferences > AVR > AVRDude. Bifați chestia aia cu Log output to console dacă vreți să vedeți ce face (recomandat). Adăugați o configurație nouă, în funcție de programatorul vostru (avrdude are suport pentru o gramada de configurații, eu folosesc cea mai simplă, probabil, SI-Prog.). Poate e o idee bună să îi spuneți acolo și ce port serial folosiți în cazul în care mai programați pe serială :).

* Pașii 4 și 5 sunt independenți și interschimbabili

6. Project > Preferences > AVRDude > alegeți configurația pe care tocmai ce ați salvat-o.

7. Project > Preferences > C / C++ Build aveți o opțiune Additional Tools in Toolchain, ar trebui să aveți selectat AVRDude și Generate HEX file for Flash Memory cel puțin selectate. Eu am selectat și Print Size și Generate Extended Listing (deși nu știu exact daca nu-s numa chestii de raportare și nu de programare efectiv)

8. Tot acolo aveți posibilitatea să configurați comanda către avrdude (dacă nu îl aveți în path sau dacă aveți nevoie de drepturi de root să folosiți portul pe care vreți să-l folosiți, tipu de la care preiau chestia asta o pus un sudo avrdude acolo. Eu mi-am modificat permisiunile pentru serială)

9. (Recomandat) Setați nivelul de optimizare la AVR Compiler la -Os (size optimization)

10. La următorul build, dacă aveți legat controllerul în programator, avrdude o să descarce hex-ul în controller.

Mai sunt niște viewuri pe-acolo pe care le puteți folosi, și este un buton direct de upload pe device (care pe mine mă enervează că se pune acolo sus in bară și la alte viewuri decât ale pluginului ăstuia)

Utilizare port serial în aplicație Java pe Linux

Am nevoie să fac o conexiune pe un port serial din Java, și să comunic both ways prin el. (Eu sunt fericitul posesor al unui laptop generatie relativ noua (Dell Latitude 820) care are inca port serial – si ce bine ca are!). Am googălit puțin, și aici este o soluție, pentru arhivă (pe ubuntu 8.10 x86_64):

Se instalează pachetul oamenilor astora:

sudo apt-get install librxtx-java

Mai trebuie luat, de pe același site, RXTXComm.jar, în funcție de versiunea de rxtx care o are ubuntu vostru în repo (eu am 2.1.7.4).

Apoi, ca să-l folosiți în Eclipse, puteți să urmați ghidul de la ei de pe site. Traducere, pe scurt: adăugați JAR-u în class pathul proiectului, dați click pe el ([+] expand), setați native library location la  /usr/lib (la mine), și proiectul vostru are puteri seriale :P. Este la ei pe site exemplu de cod suficient cât să te apuci de treabă.