[ View menu ]

28 April 2009

AccessGain

Filed in Uncategorized

Mai multi cititori ne-au cerut sa facem disponibil utilitarul care poate trece peste securitatea din NTFS folosing metoda descrisa aici.

Acesta poate fi folositor in cazul unui hard-disk ce are permisiile NTFS date peste cap sau in cazul in care vreti sa accesati fisiere de pe o alta partitie pe care ati instalat Windows-ul, diferita de cea de pe care ati boot-at.

Apasati aici pentru a descarca utilitarul.

Sugestiile si comentariile sunt binevenite.

VN:F [1.6.3_896]
Rating: 0.0/5 (0 votes cast)
VN:F [1.6.3_896]
Rating: +1 (from 1 vote)

23 January 2009

Partitie separata pentru Windows 7? Nu e nevoie.

Filed in Uncategorized

La inceputul lui ianuarie Microsoft a facut public un nou beta al lui Windows 7, asa ca l-am descarcat si am zis sa mi-l instalez pe laptop. Problema era ca laptop-ul respectiv a venit preinstalat cu Windows Vista, cu o singura partitie configurata sa ocupe tot discul.

Nu doream sa renunt la Vista deoarece Windows 7 este totusi doar un beta, asa ca m-am gandit ca voi avea nevoie de inca o partitie curata pe care sa-l instalez. Cum aveam doar o singura partitie pe laptop, am zis sa o redimensionez pentru a face inca una. Aveam destul spatiul liber pe singura partitie existenta, cam 70 GB. Problema a a aparut cand am incercat sa redimensionez partitia existenta.

Mi-am adus aminte ca in Vista a fost introdusa o noua facilitate pentru NTFS, si anume Volume Shrink. Teoretic facilitatea ar trebui sa ma ajute sa micsorez o partitie NTFS pentru a face loc pentru inca una. Am dat click dreapta pe My Computer -> Manage iar apoi din fereastra aparuta m-am dus la Storage -> Disk Management. Am dat click dreapta pe partitie si apoi Shrink Volume.

Ar fi fost bine daca ar fi mers, dar din pacate nu a fost asa. Am primit un mesaj de eroare. De fiecare data cand am incercat sa folosesc facilitatea respectiva am avut probleme cu ea. Poate sunt eu ghinionist dar mi se pare ca facilitatea respectiva mai mult sta decat merge. Da, am incercat sa defragmentez discul, dar nici defragmentarea nu a ajutat. Se parea ca nu am cum sa instalez Windows 7, chiar daca aveam 70 GB liberi pe disc.

Solutia a venit de la o facilitate noua din Windows 7 si anume suportul nativ pentru fisiere VHD. Cei care au folosit Virtual PC sau Hyper-V stiu ca un fisier VHD (virtual hard disk) este folosit pentru a stoca discul unei masini virtuale. Windows 7 stie sa boot-eze si de pe un fisier VHD, nu numai de pe o partitie.

Mai exact, asta inseamna ca poti folosi un fisier VHD in loc de o partitie separata pentru a instala Windows. Intrebarea urmatoare ar fi cum instalezi Windows 7 pe un VHD?  La instalarea Windows-ului trebuie sa alegi o partitie, nu? Ei bine am cautat si am gasit un blog care spune cum sa faci asta.

Practic nu ai nevoie decat de DVD-ul de Windows 7 cu care pornesti sistemul (se pare ca de la Vista incoace DVD-urile de Windows s-au desteptat) si selectezi Windows Repair, pentru a intra in linia de comanda si a porni managerul de partitii diskpart. Apoi trebuie sa creezi un fisier VHD:

Create vdisk file=c:\<nume_fisier>.vhd maximum=<marime>

In loc de <nume_fisier> trebuie specificat numele fisierului si in loc de <marime> trebuie precizata marimea in MB a fisierului. De exemplu:

Create vdisk file=c:\win7.vhd maximum=40000

pentru a crea fisierul win7.vhd care poate avea maxim 40000 MB.

De ce maxim? In momentul in care fisierul VHD va fi creat el nu va folosi pe disc 40000 MB ci isi va mari dimensiunea pe masura ce se scrie in el. In cazul unei instalarii de Windows 7, spatiul folosit dupa instalare este undeva intre 7 si 8 GB. Asadar fisierul win7.vhd va ocupa doar 7-8 GB pe disc dupa instalare si nu aproape 40 GB cat s-ar putea crede initial.

Dupa ce fisierul a fost creat, acesta trebuie selectat si atasat. Faptul ca este atasat inseamna ca la instalarea Windows-ului se va vedea si el in lista discurilor pe care puteti instala Windows. Comenzile ce trebuiesc introduse in diskpart in cazul de fata sunt:

select vdisk file=c:\win7.vhd

si

attach vdisk.

In cazul in care v-ati incurcat putin in comenzi, am atasat un slideshow care arata desfasurarea procesului de instalare a lui Windows 7 pe un fisier VHD.

Practic, un singur fisier contine toata instalarea mea de Windows 7 si daca vreau sa ma mut pe alt calculator pot muta fisierul vhd cu mine si pot rula Windows 7 pe acel calculator.

Ce e important e ca si pe acel calculator sa fie instalat boot manager-ul care suporta pornirea de pe un vhd. In cazul de fata, avand Windows Vista initial si apoi instaland Windows 7 in paralel, boot manager-ul a fost actualizat la ultima versiune si anume cea din Windows 7.

Bineinteles, fisierul VHD poate fi folosit si intr-o masina virtuala cu Hyper-V sau orice alta solutie de virtualizare care stie sa interpreteze fisierele VHD. Formatul VHD e unul deschis (oricine ii poate vedea specificatiile si scrie un interpretor pt el). Ca urmare, chiar VirtualBox (solutia de virtualizare cumparata acum ceva timp de Sun) are mai nou suport pentru fisierele VHD.

In concluzie, daca vreti sa instalati Windows 7 si nu aveti cum sa faceti o partite separata pentru el, nu va ingrijorati. Atata timp cat aveti spatiu pentru un fisier, acel fisier poate fi folosit pentru a instala Windows 7.

VN:F [1.6.3_896]
Rating: 4.2/5 (12 votes cast)
VN:F [1.6.3_896]
Rating: +1 (from 1 vote)

14 January 2009

Cum sa scapi de securitatea din NTFS

Filed in Internals , Tips

Aveam nevoie zilele trecute sa copiem fisiere de pe un hard-disk mai vechi formatat cu NTFS care avea permisiile de securitate foarte restrictive. Era vorba de mii de fisiere si ar fi durat foarte mult ca sa aplic metoda clasica in acest caz: take ownership. Imaginati-va ce inseamna pentru sistem sa modifice pe rand permisiile a mii de fisiere. Problema era ca aveam nevoie rapid de datele respective.

Solutia a venit de la o metoda (pe care am descoperit-o acum ceva timp) de pacalire a securitatii din NTFS. Ideea de baza a aparut citind MSDN-ul, mai specific aceasta precizare referitoare la parametrul dwDesiredAccess al functiei CreateFile:

“If this parameter is zero, the application can query certain metadata such as file, directory, or device attributes without accessing that file or device, even if GENERIC_READ access would have been denied.”

Ceea ce a iesit in final este un driver-filtru peste sistemul de fisiere care intermediaza deschiderea fisierului printr-o discutie de genul:

Aplicatie: Vreau drepturi de scriere pentru fisierul restrictionat.doc. Ce spui?

Driver-ul nostru catre sistemul de fisiere: Aplicatia vrea drepturi de scriere pentru fisierul restrictionat.doc

Sistemul de fisiere catre driver-ul nostru: Permisiile de securitate setate pe fisierul respectiv nu-mi permit sa fac acest lucru. Raspunsul este NU.

Driver-ul nostru catre sistemul de fisiere: Aplicatia vrea zero drepturi (dwDesiredAccess = 0) pentru fisierul restrictionat.doc

Sistemul de fisiere catre driver-ul nostru: Ok. Pot permite acest lucru. Raspunsul este DA.

Driver-ul nostru catre aplicatie: Sistemul de fisiere a spus DA.

Astfel pacalim sistemul de fisiere sa ne dea ok-ul pentru o anumita cerere, punand intrebarea la care stim ca sistemul de fisiere va raspunde intotdeauna DA. Deoarece sistemul de fisiere raspunde cu DA, sistemul de operare permite deschiderea handle-ului catre fisierul restrictionat.

In mod intuitiv ati putea crede ca handle-ul deschis are zero drepturi de acces, deci este inutil. Totusi sistemul de operare va crea un handle cu drepturile cerute initial de aplicatie. Folosind aceasta metoda puteti accesa orice fisier, indiferent de permisiile de securitate setate pentru el. Partea si mai frumoasa este ca tot codul din driver care implementeaza aceasta metoda are doar 3 linii. Nu este vorba de hook-uri complicate sau functii nedocumentate. Totul se realizeaza cu API-uri documentate.

Pentru a vedea o demonstratie despre cum lucreaza driver-ul respectiv si mai multe detalii tehnice, puteti accesa post-ul in limba engleza ce contine un video si un document PDF:

http://www.hobeanu.com/blog/bypassing-file-system-security-in-windows/

Aceasta metoda nu este considerata o gaura de securitate deoarece necesita incarcarea unui driver. In momentul in care un atacator are drepturi de a executa cod in kernel mode, sistemul este considerat compromis.

VN:F [1.6.3_896]
Rating: 5.0/5 (4 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

1 July 2008

Un gandac in Windows Home Server

Filed in DDK , Debugging , Internals

Lucram in perioada aceasta la un proiect ce implica un driver care creeaza discuri virtuale. Continutul discului virtual este stocat intr-un fisier, iar sarcina driver-ului este de a prezenta continutul acestui fisier ca un disc.

Testand driver-ul pe Windows Home Server cu Driver Verifier activat, sistemul s-a blocat dupa formatarea discului, afisand un binecunoscut ecran albastru.

Bug Windows Home Server

Pentru a identifica sursa erorii, am recreat conditiile aparitiei bug-ului cu debugger-ul (WinDbg) atasat la sistemul de operare.

Analizand crash-ul cu ajutorul lui WinDbg, am observat urmatorul mesaj:

kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************
DRIVER_VERIFIER_IOMANAGER_VIOLATION (c9)
The IO manager has caught a misbehaving driver.
Arguments:
Arg1: 0000000c, Invalid IOSB in IRP at APC IopCompleteRequest (appears to be on
 stack that was unwound)
Arg2: b9b02810, IOSB address
Arg3: 00000000, IRP address
Arg4: 00000000, 0

Mai mult, analiza spunea ca driver-ul care a cauzat eroarea este chiar driver-ul nostru (MYDRIVER).

BUGCHECK_STR:  0xc9_c
DRIVER_VERIFIER_IO_VIOLATION_TYPE:  c
IOSB_ADDRESS: ffffffffb9b02810
IRP_ADDRESS:  82f5af20
DEFAULT_BUCKET_ID:  DRIVER_FAULT
PROCESS_NAME:  explorer.exe
CURRENT_IRQL:  1
DEVICE_OBJECT: 8186f030
DRIVER_OBJECT: 8179a158
IMAGE_NAME:  MYDRIVER.sys
DEBUG_FLR_IMAGE_TIMESTAMP:  48693683
MODULE_NAME: MYDRIVER
FAULTING_MODULE: b9878000 MYDRIVER

Aveam toate motivele sa credem ca avem un bug in driver, deci am pornit la vanatoare.

Continue reading Un gandac in Windows Home Server

VN:F [1.6.3_896]
Rating: 5.0/5 (4 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

27 June 2008

Dezvoltare software in Facultatea de Matematica si Informatica

Filed in Facultate

Inspirat si dezamagit in acelasi timp de ceea ce spune Vlad aici si aici, mi-am adus aminte ce mi-a fost predat in facultate legat de dezvoltare software, intr-un curs dedicat acestui subiect. In acelasi timp mi-am pus intrebarea cum se poate ca in aceeasi facultate, la aceeasi materie, doi profesori sa aiba cursuri total diferite.

Iata si dilema mea:

Varianta 1 de curs de Dezvoltare Software predat la Facultatea de Matematica si Informatica, Universitatea Bucuresti:

http://funinf.cs.unibuc.ro/~vec/flp.htm

Varianta 2 de curs de Dezvoltare Software predat la aceeasi facultate, de catre alt domn profesor:

http://www.cs.unibuc.ro/~radu/rg_MDS_I_II_prog.html

Observati vreo diferenta intre ele? Daca va intrebati, eu am avut (ne)placerea de a studia prima varianta. Desi titlul de pe pagina primului curs (Fundamentele limbajelor de programare) nu duce cu gandul la dezvoltare software, aceea este materia care a fost predata intr-un curs cu numele “Dezvoltare software”. Pentru cei curiosi, in prima varianta este vorba despre un singur curs predat de catre acelasi profesor sub mai multe denumiri, pe parcursul anilor de facultate. Morala: mai multe denumiri, mai multe sanse de castig.

Din pacate, cel care are cel mai putin de castigat de aici este studentul. Trecand prin cursul mentionat in prima varianta un student se poate demotiva foarte usor, pierzandu-si astfel interesul pentru subiectele predate in facultate.

Mai trist este faptul ca am exemple de colegi foarte buni si pasionati de software, cu realizari importante, a caror foaie matricola contine nota 5 la subiectul Dezvoltare Software (studiat in varianta 1). Am inca un motiv in plus pentru a realiza ca nota si-a pierdut semnificatia in scoala romaneasca.

VN:F [1.6.3_896]
Rating: 5.0/5 (3 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

22 June 2008

Ce cred ca ar mai trebui predat in liceu/facultate

Filed in Facultate , Software , Tips

In liceu si in facultate am intalnit profesori care predau informatica intr-un mod specific matematicii. Aproape la fiecare problema in liceu aparea un tipar: numarul de elemente dintr-un vector era notat cu m sau n, variabila cu care parcurgeam ciclul era i sau j sau k s.a.m.d. Asa te apucai si scriai algoritmul.

Scurt si cuprinzator?

Apoi il citeai si incercai sa intelegi ce ai scris acolo, sa-ti explici cum functioneaza algoritmul si, eventual, de ce ai scris asa si nu altfel. In momentul respectiv, creierul facea un pas in plus: descifrarea a ce inseamna n, ce inseamna i sau k. Poate nu pare mare lucru sa tii minte trei nume de variabile si sensul atasat fiecaruia, dar cand te apuci sa scrii o expresie care le foloseste pe toate trei in acelasi timp, lucrurile parca se complica putin.

M-am uitat de curiozitate pe arhiva educationala de pe infoarena, o initiativa de apreciat de altfel, ce pune la dispozitia vizitatorilor site-ului o serie de probleme pe care aproape orice elev/student le intalneste in scoala. Un lucru care mi-a placut mai putin si pe care il faceam si eu in liceu este economia de litere cand vine vorba de numele variabilelor. Este parca o obsesie generala aceea de a folosi o singura litera pentru numele unei variabile, eventual sa-i mai punem si o cifra in coada in cazurile in care alfabetul nu ne poate oferi mai multe litere.

As vrea ca atunci cand citesc un algoritm sa il citesc natural, sa nu stau la fiecare linie sa-mi spun: “a…este q, si q este notatia pentru… deci…”. Am cautat sa vad de unde vine “zgarcenia” cu care suntem invatati in scoala. Da, scoala ne ofera acest model si ne da impresia ca este “modul corect” de a face lucrurile. Cel putin asa a fost in cazul meu.

Originea zgarceniei

Banuiesc ca originea zgarceniei se gaseste in relatia cu matematica. In problemele de matematica notam cu x,y,z etc. toate variabilele de care avem nevoie si lucrurile chiar merg bine acolo. De ce acolo merg si aici nu? Cred ca in “implementarea” solutiilor problemelor de matematica avem in medie mai putine “instructiuni” si “variabile” pe foaie/caiet decat in cazul problemelor de informatica. Cate rezolvari de probleme de matematica de sute sau mii de “linii de cod” ati vazut? Eu niciuna. Tin minte ca in gimnaziu, cand aveam la matematica o problema a carei rezolvare depasea doua table, apareau dificultati in a intelege de fapt care era valoarea unei “variabile”, ce reprezenta ea si unde a fost “modificata” ultima data.

De aici trag concluzia ca informatica nu se mananca in acelasi fel ca si matematica. Profesorii de informatica ar trebui sa tina cont si de lucruri ce tin de modul de scriere al codului. Aceste lucruri le-ar fi folositoare elevilor/studentilor in timpul concursurilor, cand isi recitesc algoritmul, si mai tarziu in cariera de dezvoltatori software. Si asta nu numai la clasa, ci si in toate rezolvarile pe care le propun pentru o culegere de probleme sau pentru un site gen infoarena.

In toti anii de scoala (atat in liceu cat si in facultate) nu am intalnit niciun profesor care sa scrie cod zilnic sau frecvent. Poate de aici rezulta si ignoranta pentru felul in care codul este scris.

Cum ne vindecam de zgarcenie

De ce e important sa scriem cod usor de citit? Jeff Atwood da un raspuns:

If you ask a software developer what they spend their time doing, they’ll tell you that they spend most of their time writing code.

However, if you actually observe what software developers spend their time doing, you’ll find that they spend most of their time trying to understand code.

Joel Spolsky spune concis:

It’s harder to read code than to write it.

Cred ca este datoria fiecarui dezvoltator software sa-si imbunatateasca permanent modul in care scrie cod. Usureaza in primul rand munca sa si, in al doilea rand, pe cea a celor care vor fi nevoiti sa-I citeasca liniile de cod.

O resursa foarte buna pentru vindecarea “zgarceniei” o reprezinta cartea Code Complete, 2nd Edition a lui Steve McConnell, in principal capitolele 31 (Layout and Style), 32 (Self-Documenting Code) si 34 (Themes in Software Craftmanship).

“Write Programs for People First, Computers Second”

In cazul unui proiect cum este arhiva educationala a infoarena este cu atat mai important ca solutiile problemelor sa fie prezentate intr-o maniera cat mai usor de inteles. Principalul scop al unui cititor este sa inteleaga solutia/algoritmul, nu sa piarda timp descifrand codul “destept” sau “concis” al unei solutii.

Scriind cod mai concis, economisesc timp pretios pentru implementarea solutiei

Acest mit ia nastere mai ales in cazul concursurilor de programare, unde viteza de rezolvare a unei probleme este esentiala pentru reusita. Aceasta “economisire” de timp induce de fapt mai multe penalizari de timp in momentul citirii codului.

Steve McConnell:

Making code readable is not an optional part of the development process, and favoring write-time convenience over read-time convenience is a false economy. You should go to the effort of writing good code, which you can do once, rather than the effort of reading bad code, which you’d have to do again and again.

Dar daca scriu cod numai pentru mine? Nu conteaza cum il scriu, oricum nu-l citesc decat eu.

Steve McConnell avertizeaza si in privinta acestei capcane:

The idea of writing unreadable code because you’re the only person working on a project sets a dangerous precedent. Your mother used to say, “What if your face froze in that expression?” And your dad used to say, “You play how you practice.” Habits affect all your work; you can’t turn them on and off at will, so be sure that what you’re doing is something you want to become a habit. A professional programmer writes readable code, period.

Liceul si facultatea reprezinta perioada in care se formeaza primele obieciuri de programare. Recent am fost neplacut surprins sa vad o lucrare (dealtfel foarte buna) la un concurs de software pentru elevi si studenti, scrisa de un student in anul I, cu experienta declarata de 7 ani de progamare, care pentru citirea propriului format din fisier folosea numai variabile denumite in genul i1…in. Codul respectiv arata foarte “egoist”, scris parca doar pentru autorul lucrarii,  fara sa ia in calcul posibilitatea ca cineva sa foloseasca acel cod vreodata.

Chiar daca momentan mi se pare fantezista ideea de a vedea pe vreunul din fostii mei profesori (din liceu sau facultate) urmand sfaturile de mai sus, as fi fost mai mult decat incantat daca as fi invatat cum sa scriu cod de la ei. Probabil ca pentru a te lovi de aceste lucruri trebuie sa fi scris software mai intai.

VN:F [1.6.3_896]
Rating: 5.0/5 (3 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

27 May 2008

Despre concursurile de software

Filed in Uncategorized

La sfarsitul saptamanii trecute am participat impreuna cu Razvan la concursul Infomatrix 2008 in calitate de membri al juriului la categoria Programming. Infomatrix este un concurs de aplicatii software si harware pentru elevi de liceu, aflat la a 6-a editie. Incepand de anul trecut, concursul este adresat si studentilor. Personal sunt un fan al acestui tip de concursuri si consider ca fara ele am avea mai putini elevi interesati de programare.

Prima data am aflat de un concurs de acest gen cand eram in liceu, in clasa a 9-a, cu 3 zile inainte de organizarea unei “sesiuni de comunicari pentru elevi” asa cum se numea pe atunci. Am aflat mai apoi ca era vorba despre faza judeteana a unui concurs national de software – NoiInfo – ce urma sa se desfasoare la Timisoara. M-am apucat impreuna cu Razvan sa lucram la o aplicatie si n-am dormit noptile pana la concurs, de frica lipsei de timp. Ne-am dus cu programul pe o discheta, ne-am calificat mai departe. Am plecat la Timisoara cu mare entuziasm si ne-am intors cu o mare dezamagire. Am avut prezentarea programata pe la 8 seara, cand juriul ne-a incurajat inainte de a incepe: “daca ati putea sa terminati mai repede, v-am fi recunoscatori”. Totul nu a durat mai mult de 5 minute, deoarece juriul probabil era cu gandul mai mult la cina decat la aplicatia noastra.

Ne-am intrebat daca nu cumva am avut asteptari prea mari de la juriu. Prezentasem o aplicatie client-server prin care un calculator se putea controla de la distanta de la un alt calculator. In juriu erau 2 studenti si 2-3 profesori. Daca de la profesori multi participanti nu se asteapta de obicei sa primeasca intrebari prea tehnice (desi cunoastem exceptii notabile), de la cei doi studenti ne asteptam la mai multe cunostinte si mai multe intrebari. Ne asteptam sa ne intrebe cum facem transferul capturilor de ecran, cum compresam fisierele transferate, cate resurse de calcul necesita.. Nu am primit nicio intrebare tehnica. Am primit numai doua intrebari din partea juriului, grabiti spre masa de seara, dupa care prezentarea s-a terminat. Mai mult, desi in formularul de inscriere indicasem nevoia a doua calculatoare legate in retea pentru o prezentare optima, am fost nevoiti sa prezentam aplicatia pe un singur calculator.

In clasamentul final am iesit pe ultimele locuri. Dezamagiti, dar dornici de a obtine sugestii de imbunatatire, i-am abordat pe cei doi studenti. Dupa ce i-am intrebat cum am putea sa ne imbunatatim proiectul a urmat o pauza de cateva secunde, dupa care ne-au raspuns: “mai cititi pe acolo prin MSDN cum se poate face mai bine”.

Urmatorul concurs la care am participat a fost faza nationala a InfoEducatie, un concurs care va ajunge anul acesta la a 14-a editie. InfoEducatie este primul si cel mai longeviv concurs de acest gen din Romania. La prima participare am aflat de un nou concept: intrebarile din public. Daca la NoiInfo intrebarile veneau numai din partea juriului, la InfoEducatie intrebarile pot veni din partea tuturor celor prezenti la prezentare. In opinia noastra, acesta este unul din punctele forte ale concursului. Un alt concept de care am aflat la InfoEducatie, a fost acela de copiere a lucrarilor. Am asistat la prezentarea unui baiat de clasa a 7-a care genera executabile pentru self-extract de imagini. Curios fiind de modul de generare a executabilului, l-am rugat sa ne arate codul sursa, pentru a vedea ca nu era scris de el, desi sustinea contrariul.

Povestioara de mai sus ne-a lasat la momentul respectiv un gust amar, calitatea juriului si onestitatea participantilor fiind in opinia noastra cele mai sensibile aspecte ale concursurilor de software de pe la noi. Deoarece ca particpanti ne-am lovit de multe ori de aceste aspecte, am considerat mai tarziu necesara implicarea in astfel de concursuri pentru a incerca sa schimbam ceva.

Desi am participat in juriu la mai multe concursuri de acest gen, observam ca vechile practici ale concurentilor raman neschimbate. Exista printre anumiti participanti mentalitatea ca juriul nu are competenta tehnica pentru a evalua lucrarile si astfel se incearca exploatarea acestei ipoteze. La toate concursurile unde am fost membri ai juriului s-a intamplat sa gasim, din pacate, cel putin o lucrare copiata. Cel mai rau este atunci cand astfel de lucrari iau premii si medalii, asa cum am vazut ca a fost cazul la cateva concursuri.

Ca sa nu fim intelesi gresit, este absolut OK sa se foloseasca cod existent, pentru ca nu vrem mereu sa reinventam roata, atata timp cat acest lucru este specificat si se delimiteaza contributia personala a participantului.

Personal am privit concursurile de software ca pe un mod de dezvoltare personala si profesionala, incepand de la cunostintele de programare si terminand cu abilitatile de prezentare in fata unei audiente largi si intr-un timp limitat. Am dobandit multe cunostinte tehnice lucrand la proiecte pe care le-am prezentat la InfoEducatie, privind an de an concursul si competitia ca pe o sansa de a inova sau cel putin de a acumula noi cunostinte.

Este trist faptul ca singurul castig pe care il vad unii participanti este cel material. Din pacate, acesta este unul pe termen scurt.  Multe din proiectele realizate sunt “pentru a lua premiu” si nu pentru a rezolva o nevoie existenta sau pentru acumularea de cunostinte. De asemenea, multi dintre participanti doresc un castig rapid cu un efort minim, timpul alocat dezvoltarii proiectelor fiind tot mai mic. Fenomenul este similar cu cel din mediul online, unde multi viseaza sa faca peste noapte urmatorul YouTube sau Facebook fara prea mult efort.

Exista totusi si exceptii, asa cum este infoarena, un proiect prezentat pentru prima oara in 2003 la InfoEducatie si dezvoltat ulterior in cea mai puternica comunitate online romaneasca pentru cei interesati de algoritmica.

In momentul de fata, firmele se plang ca nu gasesc absolventi bine pregatiti, iar un raport recent spune ca elevii romani sunt tot mai slab pregatiti. Oare daca am incuraja si sprijini mai mult concursurile de creatie software precum InfoEducatie, CIA si InfoMatrix (la liceu) si ImagineCup (pentru facultate), situatia ar fi diferita?

VN:F [1.6.3_896]
Rating: 0.0/5 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

24 February 2008

Un Microsoft mai binevoitor

Filed in Stiri , Tips , Vista

De cate ori nu v-ati frustrat cautand sa intelegeti cum functioneaza ceva nedocumentat din Windows? Probabil era o informatie de care aveati nevoie pentru a dezvolta un proiect sau o facilitate, sau pentru a da de urma unui bug urat.

Stim cu totii ca Windows este un sistem de operare closed-source si nu avem libertatea de a-i examina codul sursa pentru a ne rezolva problemele. Totusi, Microsoft a avut initiative menite sa rezolve intr-o anumita masura aceasta problema. Pentru studenti, o foarte buna resursa o reprezinta Windows Academic Program, mai ales prin WRK.

Cu toate acestea, accesul la codul sursa nu poate rezolva eficient problema interoperabilitatii. Pentru ca un client Linux sa partajeze fisiere intre el si un client Windows, a fost nevoie de reverse engineering pentru a “ghici” protocolul de comunicare folosit intre clientii Windows (SMB), rezultand astfel Samba.

In Vista a fost introdusa versiunea 2.0 a protocolului SMB. Detaliile noii versiuni a protocolului nu au fost facute publice. Singura solutie pentru membrii proiectului Samba era sa apeleze din nou la reverse engineering. Cu o structura a pachetelor total diferita de vechiul SMB, SMB2 anunta o munca asidua pentru asigurarea interoperabilitatii cu clientii Vista. Analizand implementarea SMB2 din versiuni beta ale Windows Vista, echipa din spatele Samba a reusit sa ofere suport experimental pentru SMB2 in versiunea 4.0.0TP3, lansata pe 13 Octombrie 2006.

O stire din 22 decembrie 2007 spunea ca Samba a semnat un acord cu Microsoft prin care dezvoltatorii Samba primeau acces la specificatiile protocolului SMB2. Pentru a putea accesa documentele Samba a platit 10,000€. Totusi, cu o floare (una costisitoare) nu se face primavara in problema interoperabilitatii. Cum ramane cu restul protocoalelor de comunicatie care sunt necesare pentru a asigura interoperabilitatea?

Un comunicat de presa din 21 februarie prezinta o impresionanta schimbare de strategie pentru Microsoft, prin Open Protocol Specifications care ofera access la specificatiile protocoalelor folosite in versiunile client si server ale sistemului de operare Windows. Specificatiile pot fi folosite pentru a dezvolta si distribui implementari non-comerciale ale protocoalelor documentate.

Dezvoltatorii proiectului Samba sunt cu siguranta bucurosi sa citeasca specificatia protocolui SMB2 in forma aceasta, decat sa piarda timpul analizand pachete.

VN:F [1.6.3_896]
Rating: 0.0/5 (0 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

23 January 2008

Unde e informatia?

Filed in Software , Tips

Ca multi altii, folosesc mult Internet-ul pentru documentare si de multe ori imi salvez fisiere Word, PowerPoint sau PDF-uri pentru a ma uita mai tarziu peste ele. De multe ori, raman acolo unde le-am lasat deoarece nu am acces rapid la informatia din ele. Problema asta cred ca apare din cauza ca nu pot cauta usor in ele. Probabil primul sfat pe care mi l-ar da cineva ar fi acela de a-mi instala o solutie de Desktop Search, caci am de unde alege (Copernic, Google, Microsoft etc.). Dar ce ma fac daca vreau sa caut informatia de pe mai multe calculatoare si sa vad rezultatul cautarii unificat?

Am tot cautat pe Internet o solutie si am ajuns la conceptul de enterprise search. Am vazut ca de fapt problema mea e una pe care multe organizatii au avut-o cu mult timp inainte sa o am si eu. Normal, au aparut si solutii la problema asta. Din pacate, nu s-au dovedit foarte accesibile pentru mine deoarece aveau costuri ce puteau fi acoperite doar de catre organizatii si nu de catre un individ (cateva zeci de mii de dolari). Din fericire pentru mine, am gasit o solutie, surprinzator, de la Microsoft: Search Server 2008 Express. Am observat ca e un produs relativ nou: daca as fi avut problema asta acum 6 luni, nu dadeam peste el.

Search Server 2008

Am zis sa-l testez si sa vad ce stie. Aveam nevoie de un server cu Windows pentru a-l instala, dar nu aveam timpul necesar pentru a-l instala. Noroc ca am gasit la ei pe site o masina virtuala cu Windows Server 2003, tocmai buna pentru descarcare. Am descarcat-o si am instalat Search Server 2008 Express pe ea. Instalarea a durat cateva minute (click-uri) si apoi am configurat Search Server-ul sa ia datele de pe anumite share-uri din retea unde aveam multe documente.

Search Server are o interfata gen SharePoint, deci pentru cei care lucreaza cu asa ceva va fi o experienta familiara. La mine nu a fost deoarece nu sunt un fan SharePoint, dar am avut un document Word pe masina virtuala care mi-a explicat ce sa fac pas cu pas si totul a mers foarte usor.

Dupa putin timp am accesat din browser, de pe alt calculator din retea, masina virtuala pe care aveam Search Server-ul instalat. Am dat apoi o cautare dupa un termen si mi-au aparut imediat toate documentele in care se regasea. Fiecare rezultat imi arata numele documentului, locatia si contextul in care se gasea termenul, exact ca atunci cand caut pe Google.

Credeti ca e limitat doar la documente in formate Microsoft? De asta m-am temut si eu. Ceea ce e interesant e ca poti instala iFilters, componente care-ti permit sa adaugi suport pentru orice format de fisier dorit (eu am adaugat pentru PDF).

Partea buna este ca pe server se face doar indexarea, nu trebuie sa-ti copiezi datele pe server. Datele pot ramane in locatia lor originala atata timp cat server-ul le poate accesa. Poti sa-l setezi ca periodic sa faca actualizarea indexului (ex: la 20 de minute) .

Varianta Express pe care am testat-o eu este in stadiu beta, dar se spune ca o varianta finala va fi disponibila in prima parte a lui 2008 impreuna cu varianta pe bani.

Pe langa toate avantajele legate de productivitate, ce mi s-a parut cel mai tare la solutia asta este faptul ca e… FREE! Nu trebuie sa dau vreun ban pe ea. Bineinteles, exista costul pentru sistemul de operare pe server, dar cat timp sunt student asta e rezolvat prin programul MSDNAA. Mai incolo… vom vedea.

M-am gandit la un moment dat sa-mi pun si codul sursa la indexare pentru a cauta mai usor prin el, dar inca ma mai gandesc daca/cum sa o fac. Pentru asta am gasit o solutie de la Koders: Koders Pro Edition. E o solutie pe bani si inca nu am avut timp sa o testez, dar voi reveni cu un post cand o voi testa. Ce mi s-a parut interesant e posibilitatea de a cauta prin tot codul tau ca pe Google. Mai mult, poti da click pe un token dintr-un fisier sursa pentru a cauta ce mai poti afla despre el de prin fisierele tale sursa.

Stiti voi alta solutie pentru indexat cod sursa si cautare din browser?

VN:F [1.6.3_896]
Rating: 3.0/5 (1 vote cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)

22 January 2008

Facultate: fac sau nu fac? Unde? La ce sa ma astept?

Filed in Facultate

Malex intreba aici ce sfaturi avem pentru un proaspat absolvent de liceu care se gandeste sa dea la facultate. Am fi putut raspunde cu un singur comentariu, dar am considerat posibilitatea ca aceasta perspectiva sa-i ajute si pe altii asa ca am dedicat un post. Inainte de a incepe, mentionez ca aceasta este doar o parere personala.

Sfatul meu e sa te duci la o facultate mai lejera si sa inveti singur. Altfel risti sa-ti mananci timpul cu stresuri inutile, timp pe care altfel l-ai folosi pentru a invata. Personal, in Bucuresti, am gasit cea mai buna combinatie intre subiectele abordate si timpul liber la Facultatea de Matematica si Informatica de la Universitate. Bineinteles, acest lucru il poti gasi si in alta parte in functie de cat timp decizi tu sa aloci pentru facultate si cat de mult te intereseaza notele.

Facultatea e buna in sensul ca-ti ofera un context din care sa afli ca anumite lucruri/concepte exista. Ca sa-ti dau un exemplu concret, nu cred ca m-as fi apucat prea repede sa citesc despre limbaje formale si sa aflu cat de utile sunt daca nu as fi trecut prin facultate. Dar, de cele mai multe ori facultatea nu te ajuta cu mai mult deoarece am intalnit multe cursuri de tip dictare in care esti fortat sa-ti testezi viteza cu care te tii cu scrisul dupa profesor.

Oricum asta nu trebuie sa te opreasca pentru ca experienta din facultatile romanesti ne arata ca tot pe cont propriu se invata cel mai bine. Dictarea nu numai ca-ti omoara interesul si te face sa te intrebi de ce te mai duci la curs cand poti face altceva in timpul respectiv, dar nici nu-ti da vreo motivare legata de “de ce ar trebui sa fiu eu interesat de aceste lucruri? unde le pot aplica?”. Personal nu-mi place sa invat doar de dragul teoriei. Vreau sa stiu ca pot aplica acele lucruri, ca pot construi ceva pe baza lor. Gasirea raspunsurilor la aceste intrebari depinde din nou de tine si e important ca ea sa existe la fiecare curs pe care il vei face in facultate.

O abordare intalnita in afara si care cred ca ar da roade si la noi este urmatoarea: profesorul sa ofere o bibliografie si la sfarsitul fiecarui curs sa mentioneze paginile care trebuiesc citite dintr-o anumita referinta pentru a pune studentul in tema cu subiectul predat la cursul urmator. In majoritatea cazurilor acest lucru nu se intampla la noi, asa ca la cursul urmator profesorul are tendinta de a trece rapid peste anumite lucruri pentru ca le-a tot predat de-a lungul anilor si i se par banale. Studentul pe de alta parte intalneste acele lucruri poate prima data si de cele mai multe ori se chinuie mai mult sa scrie repede de pe tabla dupa profesor, ajungand numai la intrebari de genul: “auzi, ce e ala pe tabla? e i sau j?”

Legat de ce trebuie sa inveti, te sfatuiesc sa incerci sa abordezi cat mai multe subiecte si tehnologii, pentru ca doar asa vei descoperi cu adevarat la ce fel de lucruri vrei sa lucrezi si pe ce ai vrea sa te axezi pe viitor. Dintre cursurile foarte importante, le-as mentiona pe cele de sisteme de operare, limbaje formale/compilatoare, programarea paralela si concurenta, programarea orientata pe obiect si arhitectura calculatoarelor. Acestea sunt primele care imi vin in minte, dar se poate sa fi scapat altele.

Nu spun ca vei scrie obligatoriu propriul tau compilator sau sistem de operare, ca iti vei construi propriul procesor, dar trecand prin aceste cursuri iti vei modela gandirea si modul de abordare a problemelor pe care le vei intalni pe viitor. Daca tehnologiile se tot schimba, conceptele care stau la baza lor raman aceleasi. Iar legat de limbaje, cum am spus-o si mai demult, consider ca limbajul este doar o unealta.

Nu-ti spun sa renunti la facultate. Dimpotriva, chiar te incurajez sa o urmezi. Chiar daca nu e evident la fiecare curs ce anume iti va folosi pentru viitor, nu renunta rapid cu un raspuns de genul: “asta e materie invechita”, ci cauta mai intai sa te interesezi tu daca chiar asa e sau nu. Nu te baza pe profesor sa-ti spuna asta.

Nu vreau sa privesti aceste sfaturi ca pe un atac la adresa profesorilor. Am intalnit in facultate si profesori care au reusit sa-mi starneasca interesul pentru o anumita materie, dar numarul lor a fost mult prea mic daca stau sa privesc situatia per ansamblu. Asadar, nu pot sa-i privesc decat ca pe exceptii.

In concluzie, ia din facultate ce e bun (informarea despre existenta anumitor lucruri/concepte) si incearca sa ignori lucrurile mai putin bune (atitudinea multor profesori). Scopul final nu e sa-i faci profesorului pe plac, ci sa te dezvolti pe plan profesional.

Succes in alegerea viitorului!

VN:F [1.6.3_896]
Rating: 5.0/5 (2 votes cast)
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)