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ă.

Getting shut out of my Windows / Opening up to a new World

Toată povestea asta începe cu ziua când, după ce am dat super examenul la IE, micvs și cu mine am decis să ne schimbăm sistemele de operare. El, din Ubuntu în Vista 64, eu din WinXP în Ubuntu 64. Bine, ideea era așa, un test, să vedem cum merge, dar dacă tot m-am regăsit în Ubuntu, am zis ce-ar fi să redimensionez eu partiția mea NTFS de Windows să o fac un pic mai mare, că și așa n-am nevoie de 40 de Giga pe Ubuntu. Allright, zis și făcut. 5 ore de redimensionat partiția de NTFS, restart, surpriza! Pentru că probabil s-or rescris descriptorii partiției în MBR după redimensionare, Windows acuma se credea instalat pe C:\, deși el era instalat pe F:\. Normal, no more boot, no more Windows.

Am încercat să-l lămuresc eu, am citit mult și bine despre cum se poate și ce se poate face, să repari chestia asta. Vă spun imediat ce am reușit, dar ce contează e că în timp ce foloseam Ubuntu ca să mă documentez și mai instalam câte o chestie, două în el, și am reușit să găsesc metode să trec peste problemele care îl făceau enervant pentru mine și, acum, după 3 zile (vă zic, nu-i așa simplu să găsești documentație pentru problema ce-am avut-o eu :P) sunt destul de hotărât să trec, într-un final, pe Ubuntu ca sistem de operare principal. Mai mult despre aventurile mele în ultimele 3 zile mai încolo. Postul ăsta este de fapt despre cât de prost îi Windows la chestii simple, și despre ce să faceți dacă pățiți ca mine :)zu

Situația pre-dezastru

Aveam un Ubuntu 7.04 (updatat între timp la 8.10), deci un ext3 și un swap. swapu era evident, standard, într-o partiție extinsă. Când am instalat XP-ul, am redimensionat partiția primară a linuxului și i-am făcut loc între linux și swap. Windows a văzut partița ca discul F: și așa a rămas (C, ext3u, D, swapu, și E, cdrom-ul – cred).

Problema

Am micșorat partiția ext3, în setup-ul pentru Ubuntu amd64, și am lăsat spațiu între ea și partiția ntfs a windows-ului, apoi, din proaspătul instalat Ubuntu, am rulat GParted (am încercat inițial cu Partition Magic din Windows, dar fiind partiția activa o refuzat să ruleze), și am redimensionat partiția ntfs la stânga (ceea ce implică și o deplasare). De menționat că îți trebe musai ntfsprogs ca să faci trăznăi pe ntfs din GParted.

Când am repornit windows-ul, partiția mea F: era acum C: și, Windows-ul nu mai știa să pornească (ajungea chiar înainte de login!). Am citit toate forumurile posibile, și am aflat o gramadă de sfaturi utile la tot felu de oameni în probleme asemănătoare cu a mea, dar nici unul util pentru mine. Totuși, niște chestii interesante.

  • Windows nu folosește la boot litere de partiții. La boot are un fișier special, boot.ini, unde partițiile sunt definite pretty much ca in linux, adica o adresare de tipul hard/partitie. Drive letter assignment este ținut în regiștrii (se înregistrează id-ul partiției la litera asociată). Dacă id-ul partiției se modifică sau ceva se schimbă și îi dă cu virgulă, Windows decide să facă o reasignare instant pornind de la C: (ceea ce am pățit și eu)
  • Practic, se pot edita regiștrii Windows, dacă reușești să te loghezi (se pare că sunt cazuri în care ajungi să te și loghezi), sau, poți să-i modifici chiar din Linux, dar tre să știi ce faci (și atenție copii, că regiștrii îs tot ce contează în windows, dacă cineva vine cu un livecd vă poate faulta. Sugestia mea, întotdeauna să aveți parolă pe boot :)
  • GParted se mișcă în direcția în care problema asta nu o să mai existe
  • Există un utilitar pe RecoveryConsole-ul de la WindowsXP, BOOTCFG cu care se poate modifica fișierul boot.ini, și regenera în cazul în care se strică sau devine corupt
  • Vista știe să repare cu DVDul de instalare default problema asta (nice)
  • WindowsXP are posibilitatea de a se reinstala (face un soi de Recovery, zice el) dacă bagi exact cdu ăla în unitate (adica acelasi produs, nu neaparat același CD fizic – contează dacă-i SP2, dacă-i varianta pentru MSDNAA, dacă ii Pro sau Home …) în care practic își șterge toate fișierele lui și le pune la loc și rescrie regiștrii. Eu am văzut în chestia asta scăparea mea (și cred ca era) doar că, dintr-un motiv bizar, când am ajuns să bag Keyul de la MSDNAA, Windows Setup nu îmi vedea tastatura, de loc. Am încercat de două ori, și am renunțat.

Soluția mea finală: move to Ubuntu, Windows can get screwed to fast, to unexpectedly. Totuși, dacă nu aveam problema cu tastatura (care presupun că a fost cauzată de ceva problema cu drivere gata instalate) puteam să îmi bootez windows-ul. De acord, îl butam în C: nu în F:, dar apoi puteam trece la șmecheriile cu regiștrii și eram home safe. Cred că unui user de desktop i-ar fi mers.

Pe drum spre casă

Am fost acum câteva zile în Maica Domnului (pentru cine nu ştie, MD este o stradă în Bucureşti unde sunt concetrate magazinele de piese electronice & accessories), să-mi iau prostii (aveam nevoie de un multimetru, de nişte mufe, prostii de-astea). Ce contează în postu ăsta este că m-am lovit peste un mini trepied (de-ăla de 30 de cm) la reducere (20 de lei) şi mi l-am luat instant. Azi am avut prima ocazie să-l testez pe el şi noua mea cameră pe care am primit-o de la mama de Crăciun, pe drum de la şcoală spre casă:

Nişte bănci de beton pe lângă Transporturi
Nişte bănci de beton pe lângă Transporturi
Locul unde acum aproape 5 ani îmi căutam numele pe listele cu admişi. Era acolo, cam la roata tomberonului. Ultimul.
Locul unde acum aproape 5 ani îmi căutam numele pe listele cu admişi. Era acolo, cam la roata tomberonului. Ultimul.
Pe unde o sa fug pe seară :P
Pe unde o sa fug pe seară :P

Proiect IE

Proiectul de semestru la IE a constat în realizarea, în echipă, a unui site web care să prezinte activitatea unei firme / unui grup fictiv care îşi desfăşoară activitate în domeniul interfeţelor web. Până aici, simplu. Partea interesantă a fost că proiectul urma să fie punctat nu doar în funcţie de cum arată / cum satisface cerinţele punctuale, dar şi în funcţie de ce trafic web atrage, şi pe ce poziţie se află pe Google la o căutare după „interfeţe web”.

Cred că e în spiritul general al tipului de oameni care merg la genul ăsta de facultăţi (şi NU sunt legume) să se bage în competiţii (ştiu, sunt multe legume). Şi cum competiţia s-a prezentat singură de data asta, concurenţii n-au stat pe gânduri. Cam în acelaşi timp în care ne era prezentată tema de proiect, interfeteweb.com a fost cumpărat de unul din colegi. În următoarele două săptămâni, cei care s-au chiar interesat de proiect au vânat rapid cele mai multe domenii ieftine de cumpărat cu cuvintele interfete şi web. Noi, deşi eram relativ conştienţi de bătălia ce se dă, ne-am mişcat un pic mai târziu, dar am avut decizia şi banii să cumpărăm interfete-web.eu cât timp mai era liber.

Din păcate, pentru că am ales (nu ştiu de ce) să trecem printr-o firmă din România în loc să plătim live pe net cu cardu la cineva, deşi făcusem rezervarea, cineva mai ager a şi plătit înainte să putem noi să confirmăm ceva, deci am rămas fără domeniu aşa, la mustaţă (până la urmă am aflat că echipa lui Bogdan Zaharia a fost cea care ne-a luat domeniul). Evident, asta a însemnat recurgerea la soluţii de criză, şi astfel s-a născut interfete-web-beton.eu.

Ce a fost foarte ok pentru noi, care suntem crescuţi în proasta mentalitate de „totul se face în ultima clipă posibilă în care se poate face, sau chiar şi mai târziu” a fost că proiectul a impus nişte etape, ceea ce a însemnat că a trebuit să fim mai organizaţi. Pe lângă site, trebuia să întreţinem şi un blog, şi să postăm şi acolo, dar să scriem şi articole pe site, ca să generăm trafic. Soluţia pe care am găsit-o a fost să folosim Google Data API şi sa punem pe site dinamic toate chestiile ce le-am postat pe blog (şi cu ocazia asta am observat şi eu una alta despre Google Data API).

Ne-am promovat site-ul prin statusuri de messenger, şi se pare că avem muuulţi prieteni pentru că am avut foarte multe vizite. O vreme, chiar şi Google ne-a plăcut, chiar şi cu concurenţa puternică a unor colegi mai „strong”, eram undeva pe pagina 2, dar chiar înainte de prezentare am ajuns undeva pe poziţia 168 (nici noi nu ştim de ce).

Mai multe informaţii despre rezultatele proiectului sunt în prezentarea pe care am susţinut-o (cu mai mult succes ca cea de la CI), şi, evident, pe site.

hm2

Tema 4 IE

Am scris un pic înainte despre Tema 3 la IE, aia cu highlighter pe text (care, în tentativa de a o face mai „cool” am buşit-o). Ultima temă la IE a fost creearea unei interfeţe pentru o aplicaţie fictivă care caută în log-uri de diferite tipuri de clienţi de IM. Aplicaţia trebuia să aibă un screen de setări, configurabil (conturi / rezultate pe pagină) şi un screen pentru căutare, cu posibilitate de căutare simplă şi căutare avansată (după tip şi după dată).

Partea interesantă a fost că tema a dat mână liberă la metoda de implementare: putea să fie browserbased sau standalone sau whatever, java, javascript, c#, pygtk, ce-o fi. Eu am reuşit să mă apuc de temă după ce am încheiat ultimele modificări la site-ul pentru proiectul la IE (despre care o să scriu mai încolo), deci pe la vre-un 5AM. Prezentarea trebuia făcută la 10AM, odată cu predarea proiectului, deci nu era foarte multă vreme la dispoziţie.

Am ales să o fac în Javascript / PHP pentru că îmi era cel mai la îndemână, dar omg cât de urât am fost obligat să codez din lipsă de timp. Rezultatul final a trecut „testul” (cu toate că au existat dezbateri dacă aplicaţia chiar trebuia să facă o filtrare de date phony sau putea să afişeze orice), adică implementa în mare facilităţile cerute, chiar dacă ultimele chestii le-am făcut pe scări la EG-uri în faţa laboratorului şi chiar în timpul prezentărilor. Trebuie să spun aici ca am „furat” de la micvs ideea cu logourile aplicaţiilor de IM în interfaţă :P.

Rezultatul final e aici, dacă vreţi să aruncaţi un ochi. [notă: evident că am sfeclit ceva pe-acolo când am făcut versiunea de pus pe site, deci probabil are bug-uri].

hm