Vezi conţinutul

Ovidiu

Nu face azi ceea ce poţi lăsa pe mâine!

De când a început lumea să folosească Windows Vista sau 7, au început şi problemele legate de afişarea corectă a diacriticelor ş şi ţ în documentele Word sau TXT deschise în Windows XP sau mai vechi.

În loc de ş sau ţ, vedem nişte dreptunghiuri în picioare. Care e explicaţia?

Normele ortografice ale limbii române prevăd că ş şi ţ se scriu de fapt ca s cu virgulă, respectiv t cu virgulă, şi nu cu sedilă. Noi ne-am obişnuit în Windows XP să le scriem cu sedilă; chiar şi acest articol e scris cu sedile. Într-un Windows XP proaspăt instalat fără drivere suplimentare nu există posibilitatea alegerii formatului dorit şi astfel se va scrie automat ş şi ţ cu sedilă.

Începând cu Windows Vista, apar de la bun încept mai multe layouturi de tastatură instalate, printre care Romanian-Standard, Romanian-Programmers sau Romanian-Legacy. Activarea unuia dintre acestea când scriem textele dictează ce caractere vor fi introduse în text la apăsarea tastelor de pe tastatura fizică a calculatorului.

Să presupunem că avem o tastatură cu layout englezesc. Mai toţi în România avem tastaturi în engleză. Dacă nu adăugăm din Windows layouturi suplimentare, se va folosi layout-ul implicit care este (în funcţie de varianta Windowsului) cel mai probabil English-US. Astfel, există o corespondenţă clară între tastele apăsate la tastatură şi caracterele introduse în textul editat. Ce vedem pe tastatură, aia se şi afişează. Dacă adăugăm layoutul Romanian-Legacy şi apăsăm pe ; se va introduce ş sau dacă apăsam pe [ se va introduce ă sau dacă apăsăm pe y se va introduce z şi aşa mai departe. În schimb, dacă adăugăm şi folosim Romanian-Standard se va introduce ş sau ţ dar cu virgule şi nu cu sedile. Aşa este corect sa scriem, însă dacă folosim aceste caractere într-un document Word pe care îl deschidem mai apoi în Windows XP sau mai vechi, în loc de acestea se vor afişa nişte deptrunghiuleţe.

Fiecare caracter are un cod numeric. Orice în calculator se păstrează ca o combinaţie de cifre de 1 şi 0. Mai multe cifre de 1 şi 0 într-o anumită combinaţie dau un anumit înţeles. Dacă salvăm într-un fişer text cu Notepad doar caracterul A, pe hard-disk se vor salva de fapt 8 cifre (sau mai bine spus biţi) şi anume 1000001. Folosind maximum 8 biţi se pot forma cel mult 256 de astfel de combinaţii. Fiecare combinaţie poate fi interpretată ca un număr de la 0 la 255 inclusiv. Prima combinaţie este 00000000 şi înseamnă 0, iar ultima este 11111111 şi înseamnă 255. Există situaţii când aceste combinaţii de biţi sunt interpretate şi altfel. Problema se complică pentru că în lume sunt mai multe alfabete şi deci, trebuie reprezentate mai mult de 256 de caractere. Pentru aceasta, în loc de 8 biţi se pot folosi 16 sau un multiplu de 8 pentru a stoca un caracter. De exemplu, pentru a salva caracterul ş, adică s cu sedilă se foloseşte combinaţia 00000001 01011111 care înseamnă 351 iar pentru a salva caracterul ş cu virgulă se foloseşte 00000010 00011001, adică 537.

Windows XP (fără drivere suplimentare) nu ştie cum să interpreteze codul 537. Ar trebui să afişeze ş, adică s cu virgulă, dar fonturile existente nu au caracter pentru codul 537. De la Vista în sus, se poate folosi tastatura Romanian-Standard şi caracterele vor fi afişate corect pentru că există interpretare pentru aceste coduri.

Începând cu Windows Vista, caracterele au fost implementate corect, însă s-a păstrat şi versiunea veche Romanian-Legacy pentru compatibilitate.

Concluzia e că până dispare Windows XP, pentru a menţine compatibilitatea şi dacă dorim să scriem cu diacritice, e bine să folosim layoutul Romanian-Legacy şi să evităm Romanian-Standard.

Iată cum arată ş şi ţ cu sedilă (Romanian-Legacy): ş ţ

Iată cum arată ş şi ţ cu virgulă (Romanian-Standard): ș ț (dacă le vedeţi ca lumea, înseamnă că sunteţi pe Windows Vista sau mai nou, dacă vedeţi pătrăţele, sunteţi pe Windows XP cu Internet Explorer). Firefox (probabil şi altele) le afişează corect pentru că are fonturi proprii.

La fontul Tahoma folosit pe blog, ambele variante arată la fel. Deci nu se vede nicio diferenţă.

În imaginea de mai jos se poate vedea diferenţa dintre cele două; prima literă este ş cu sedilă şi a doua este ş cu virgulă, adică aşa cum e corect.

Aceasta este o imagine JPG.

Codul sursă C care compilat va produce executabilul unui serviciu Windows poate fi descărcat de aici: http://ovidiu.tibiscus.ro/blog/wp-content/uploads/2011/08/MyService.c

Serviciile Windows sunt acele programe care rulează în Windows fără o interfaţă grafică de utilizator. Acestea, de regulă, se pornesc deodată cu calculatorul şi nu este necesară logarea pe vreun cont de user.

Serviciile Windows au de îndeplinit diferite sarcini. De exemplu, un server de găzduire web poate rula pe Windows ca un serviciu. Acest blog este accesibil prin intermediul unei instanţe de Apache ce rulează ca un serviciu Windows. Un program key-logger ar putea rula ca un serviciu întrucât acesta oricum trebuie să ruleze ascuns.

Acest articol este destinat acelora care au ceva habar de C şi vor să aibă la îndemână o sursă de inspiraţie pentru a crea un serviciu Windows. Programarea în C nu se începe scriind un serviciu. Asta-i clar!

În teorie, iată în mare ce trebuie ştiut despre un program de servicii Windows:

  • este o aplicaţie consolă (un program EXE);
  • programul poate furniza mai multe servicii;
  • fiecare serviciu rulează în propriul fir de execuţie.

Programul din acest articol este format din 3 funcţii:

  • funcţia main() – punctul de intrare pentru orice program C;
  • funcţia ServiceMain() – punctul de intrare în codul executabil al servciului;
  • funcţia ControlHandler() – procesatorul de comenzi date din Windows.

Funcţia main() are ca scop definirea serviciilor din program şi să pornească dispecerul de servicii. Services Control Manager (SCM) este acel proces din Windows care se ocupă de toate serviciile din sistem. Serviciile se definesc ca elemente ale unui tablou local de structuri SERVICE_TABLE_ENTRY.

Datele membre ale structurii definite în acest exemplu sunt:

  • lpServiceName – este numele serviciului;
  • lpServiceProc – pointer la funcţia principală a serviciului.

Înainte de ieşierea din funcţia main(), se apelează funcţia StartServiceCtrlDispatcher() cu pointerul la tabloul de structuri ca argument. În acest moment, SCM porneşte câte un thread nou pentru fiecare servciu definit în tabloul de structuri ServiceTable. În aceste threaduri (fire de execuţie) se execută funcţia principală a serviciului, în cazul nostru ServiceMain(). Execuţia programului principal (adică a threadului în care rulează funcţia main()) stă blocată în funcţia StartServiceCtrlDispatcher() până când se termină de executat toate serviciile pornite în threadurile corespunzătoare. La revenirea din StartServiceCtrlDispatcher(), programul se încheie.

Funcţia ServiceMain() este funcţia principală a serviciului. Dacă programul ar conţine mai multe servicii, ar exista câte o astfel de funcţie pentru fiecare dintre ele. În această funcţie se execută codul care trebuie executat de serviciu. În funcţie de obiectivul serviciului, acest cod ar trebui să se execute într-un ciclu repetitiv, pentru că dacă se iese cu execuţia din funcţia ServiceMain() se termină şi threadul asociat. SERVICE_STATUS este un tip de structură ce conţine informaţii despre un serviciu. Această structura este folosită pentru a raporta starea serviciului către SCM cu ajutorul funcţiei SetServiceStatus().

Tot în cadrul funcţiei ServiceMain() se înregistrează şi procesatorul de comenzi (funcţia ControlHandler()). Acest lucru se realizează apelând funcţia RegisterServiceCtrlHandler().

Funcţia ControlHandler() este apelată de Windows (adică de SCM) când serviciul trebuie să răspundă la o comandă (de exemplu, utilizatorul opreşte serviciul în mod manual). În exemplul nostru, se răspunde doar atunci când serviciul este oprit.

Mai multe despre serviciile Windows pot fi găsite pe site-ul MSDN la adresa http://msdn.microsoft.com/en-us/library/ms685141%28v=VS.85%29.aspx.

Kassandra este o piesă muzicală interpretată de Jose Antonio Bordell, un cântăreţ venezuelean care a făcut parte din grupul Unicornio în anii ‘80, fiind cea mai importantă melodie a sa. Aceasta a fost folosită drept coloană sonoră pentru clipurile de introducere şi de final ale telenovelei cu acelaşi nume.

Audiţie plăcută!

Espiritu del viento
Hija de la luna
Amante solitaria
Que grita en el silencio
Guardando el sentimiento
En soledad

Halo de misterio
Salvaje es tu belleza
Fantasmas del camino
Adoptan tu existencia
Gitana, gitana…

Ah, aha
Ah, aha
Kassandra…

Amor rebelde eres para mi
Kassandra
La fuerza de mi raza luchará por ti
Kassandra
Ancestros del pasado iluminan el amor
Que emanan nuestros cuerpos

Los brujos y hechiceros
Enturbian el destino
Entregame tu alma
La sangre de mis venas
Fluye como lava
Por nuestro amor

Reina de la noche
Envidia de princesas
Gritando en la penumbra
Buscando en las estrellas
Tu boca, tu boca…

Ah, aha
Ah, aha
Kassandra…

Amor rebelde eres para mi
Kassandra
La fuerza de mi raza luchará por ti
Kassandra
Ancestros del pasado ilumïnan el amor
Que emanan nuestros cuerpos
Kassandra…

Spirit al vântului
Fiică a lunii
Iubită singuratică
Care ţipă în linişte
Păstrând sentimentul
În singurătate

Înconjurată de mister
Sălbatică îţi este frumuseţea
Fantome ale drumului
Adoptă existenţa ta
Ţiganco, ţiganco…

Ah, aha
Ah, aha
Kassandra…

O iubire rebelă eşti pentru mine
Kassandra
Forţa rasei mele va lupta pentru tine
Kassandra
Strămoşi din trecut luminează iubirea
Pe care o emană corpurile noastre

Vrăjitoare şi vrăjitori
Ne întunecă destinul
Dăruieşte-mi sufletul tău
Sângele din vene
Îmi curge precum lava
Pentru iubirea noastră

Regină a nopţii
Invidia prinţeselor
Strigând în întuneric
Căutând prin stele
Gura ta, gura ta…

Ah, aha
Ah, aha
Kassandra…

O iubire rebelă eşti pentru mine
Kassandra
Forţa rasei mele va lupta pentru tine
Kassandra
Strămoşi din trecut luminează iubirea
Pe care o emană corpurile noastre
Kassandra…

UPC 3D

Mai 18

UPC România a introdus în grilă canalul Eurosport 3D. Abonaţii UPC Digital ce deţin un mediabox compatibil HD recepţionează gratuit canalul Eurosport 3D pe poziţia 159 de pe telecomandă.

Duminică, 1 mai 2011, a avut loc la Valea lui Liman, cea de-a VI-a ediţie a Concursului de Mountainbike Liman Bike Race. Concursul de MTB a fost organizat de către echipa de tradiţie: Alin Roşu, Cosmin Roşu şi Puiu Munteanu căreia i s-a alăturat Clubul Sportiv Tibiscus Timişoara. Detalii suplimentare despre concurs pot fi gasite în secţiunea dedicată de pe site-ul Clubului, la adresa http://ciclism.tibiscus.ro/limanbikerace/.

Mai jos, puteţi urmări clipul video pe care l-am realizat în numele Clubului Sportiv Tibiscus.

Mulţumesc colegului nostru Laurenţiu Manda pentru asigurarea transportului cu maşina între locaţiile de filmare.

În acest articol de blog, voi publica sursele C pregătite înaintea laboratoarelor de TAP. Nu vor exista fisiere sursă pentru acele laboratoare la care activitatea s-a desfăşurat prin exemplificarea şi aplicarea unor algortmi.

Laborator 01:

Începând cu anul universitar 2010/2011, pentru scrierea programelor C în cadrul laboratorelor de la disciplina Tehnici Avansate de Programare, s-a trecut la mediul integrat de dezvoltare Microsoft Visual C++ Express Edition 2010.

Mediul integrat de dezvoltare (în engleză: Integrated Development Environment) este acel soft care ajută la scrierea unei aplicaţii. Acesta conţine editorul codului sursă şi compilatorul care crează programul final. Versiunea 4 a celui mai popular browser web Firefox a fost scrisă folosind C++ în Visual Studio 2010.

Versiunea Express Edition este o versiune gratuită a produsului Microsoft Visual Studio.

Folosind acest mediu de dezvoltare apare o problemă la portarea programelor pe sistemele Windows mai vechi. Visual Studio 2010 ne crează programele noastre C, dar aceastea sunt dependente de o versiune mai nouă a mediului de execuţie, care este instalată deodată cu Visual Studio pe calculatorul de pe care scriem programul. Executabilul nostru va rula ok pe acelaşi calculator, însă dacă dorim să îl dăm unui prieten, avem şanse ca acesta să nu poată rula programul pe calculatorul acestuia.

Fişierul de care depinde executabilul nostru creat cu Visual Studio 2010 se cheamă msvcr100.dll. După o instalaţie proaspătă a Windows XP de exemplu, acest fişier nu va exista pe acel calculator, deci programul nostru nu îl va avea la dispoziţie. Totuşi, Windows XP vine instalat cu o versiune mai veche a acestui fişier, versiune compatibilă cu cea a mediului de execuţie folosit de programele compilate cu Visual Studio 6, însă această versiune a mediului de dezvoltare a fost lansată în 1998 şi prin comparaţie cu ultima versiune a Visual Studio, oferă facilităţi deja învechite. Ideea e că un program compilat cu Visual Studio 6 va rula ok pe un calculator cu Windows XP.

Pentru a ne putea rula programele noastre C scrise cu Visual Studio 2010, trebuie să cerem utilizatorilor să îşi instaleze mai întâi mediul de execuţie Microsoft Visual C++ 2010 Redistributable Package, oferit gratuit de Microsoft la adresa http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84 sau să ni-l instalăm pe calculatorul nostru şi apoi să căutăm acest fişier care ne trebuie şi să-l dăm mai departe împreună cu executabilul nostru. Programul va rula şi dacă acest fişier dll se va afla în acelaşi folder cu executabilul, fără a mai instala nimic în plus.

Versiunile de Windows lansate după Visual Studio 2010 vor conţine implicit o versiune mai nouă a mediului de execuţie, deci programele vor rula prin simpla distribuire a executabilului.

Disciplina Tehnici Avansate de Programare se studiază în anul I, semestru II la Facultatea de Calculatoare şi Informatică Aplicată a Universităţii „Tibiscus” din Timişoara. Aceasta continuă noţiunile limbajului de programare C, începute în semestrul I la disciplina Programare Procedurală.

Limbajul de programare C a fost inventat de către Dennis MacAlistair Ritchie. La acest limbaj de programare s-a lucrat între anii 1969 şi 1973 şi a fost conceput pentru a fi utilizat în cadrul sistemelor de operare Unix.

Limbajul C este probabil cel mai folosit limbaj de programare din toate timpurile. Din acesta derivă limbajul C++. Conform Microsoft, sistemele de operare Windows (inclusiv Windows 7) sunt create folosind cel mai mult limbajele C şi C++. Pentru câteva aplicaţii incluse, s-a folosit şi limbajul C# (C Sharp).

Limbajul C poate fi folosit pentru a crea drivere de sistem şi aplicaţii complexe pentru calculator dar şi pentru sisteme embedded. De exemplu, softul calculatorului de bord al unui automobil poate fi scris în limbajul C.

În limbajul C, se pot crea aplicaţii de sine stătătoare (adică sunt executate pe calculatorul utilizatorului folosind exclusiv resursele acestuia). Acestea se mai numesc şi programe de tip desktop. Aplicaţiile pot fi de tip consolă sau cu interfaţă grafică de utilizator numite şi aplicaţii Windows.

Pentru a învăţa limbajul C, se poate începe citind cartea scrisă chiar de dezvoltatorul limbajului împreună cu Brian Wilson Kernighan, carte intitulată “The C Programming Language”. Există şi versiunea în limba română a publicaţiei intitulată “Limbajul C”, apărută la Editura Teora. Această carte ajută la învăţarea noţiunilor generale ale limbajului C, pasul următor fiind învăţarea programării targetate. Astfel, pentru a scrie programe destinate utilizatorilor de Windows, se va folosi documentaţia oferită de Microsoft în acest scop.

Personal, recomand învăţarea limbajului C implementat de Microsoft. La adresa http://msdn.microsoft.com/en-us/library/fw5abdx6.aspx se găseşte întreaga documentaţie. Programatorii experimentaţi şi atraşi de limbajul C pot începe apoi sa scrie aplicaţii interactive de tip fereastră Windows cu ajutorul documentaţiei bine organizată oferită de Microsoft la adresa http://msdn.microsoft.com/en-us/library/ee663300(v=VS.85).aspx.

Dennis Ritchie trăieşte astăzi în New Jersey, Statele Unite ale Americii.

Duminică 10 octombrie 2010, echipa de ciclism DHS Tibiscus Team a făcut o sesiune foto, pentru a prezenta noul echipament folosit de echipă în urma încheierii contractului de parteneriat cu compania Eurosport DHS.

La foto-shooting au participat: Mihaela Giucoane, Mircea Baba, Victor Jivănescu, Gabriel Faluşi, Alexandru David Faluşi, Alexandru Almăjan, Alexandru Creţescu, Bitză Nădăştean, Andrei Harabagiu, Virgil Dorogostaisky, Remus Farcaş, Alexandru Grosu.

Mai jos puteţi viziona înregistrarea video a acţiunii, iar pentru descărcarea fişierului Flash Video, accesaţi acest link: http://ovidiu.tibiscus.ro/transfer/?f=filmari.

Detalii suplimentare despre parteneriatul cu Compania DHS puteţi obţine pe pagina Clubului: http://cs.tibiscus.ro.

Duminică 12 septembrie 2010, Clubul Sportiv Tibiscus în parteneriat cu proiectul Verde pentru Biciclete a organizat a doua ediţie a concursului pe şosea BEGA TOUR.

Concursul a fost de tip open, s-au putut înscrie toţi cicliştii doritori, indiferent de vârstă (totuşi, cicliştii sub 14 ani nu au fost primiţi), de tipul bicicletei (totuşi, nu s-au organizat categorii diferite), sex, convingeri religioase, păreri politice ş.a.m.d.

Mai jos puteţi viziona înregistrarea video a acţiunii, iar pentru descărcarea fişierului Flash Video, accesaţi acest link: http://ovidiu.tibiscus.ro/transfer/?f=filmari.

Detalii despre concurs, pe pagina Clubului: http://ciclism.tibiscus.ro/begatour.