Mar 05 2008

Metoda inginereasca de rezolvare a problemelor

Category: TechnicalIuliana @ 10:44

De inginereasca? Pentru ca asta scrie pe diploma mea: inginer masterand (sau ceva de genu :P) De ce am scris un post de genul? Pentru ca unii oameni in loc sa-si puna mintea la contributie si sa incerce sa rezolve o problema asteapta sa faca altii chestia asta sau asteapta sa le vina o idee(iar ideile nu vin din senin asa ca…). Deci, hai sa va dau o mostra de gandire inginereasca si de femeie pe deasupra.(ce mai…crem de la creme :D)

Am sa incep cu definitia inginerului: un inginer este o persoana care ofera intotdeauna solutia optima teoretica, o implementeaza optimal si o si testeaza. Asta este o definitie personala desigur, care nu face nici o referire la pregatire sau diploma, pentru ca o diploma si o pregatire teoretica nu te fac inginer, capacitatea de a gandi si implementa o idee in mod practic DA. Si acum din putul gandirii mele am sa expun aici pasii pe care ii parcurg eu cand dau peste o problema.

  • analizez informatia furnizata
  • ordonez informatia furnizata in:
    • date de intrare
    • date de iesire
    • specificatii de procesare (de obicei mi se cere sa folosesc o anumita componenta sau un anumit algoritm)
  • fac un design simplist al aplicatiei format de obicei din:
    • componenta care imi preia intrarile si eventual le pregateste pentru procesare
    • componenta care imi returneaza iesirile
    • schema abstracta de procesare
  • incep implementarea componentei care lucreaza direct cu intrarile
  • dupa ce e gata o testez
  • daca merge, ma apuc de componenta de procesare
  • daca partea de procesare contine mai multe module le testez treptat si numai cand functioneaza asa cum vreau eu trec la urmatorul
  • mai arunc un ochi peste componenta de procesare facand ultimile optimizari
  • implementez partea care imi returneaza iesirile(rezultatele)

Pentru problemele mai usor de rezolvat, adica reduse ca dimensiuni si complexitate nu respect pasii astia pentru ca de obicei au solutii standard usor de adaptat unui anumit caz. Cel mai important, in timpul rezolvarii unei probleme ma documentez foarte mult in legatura cu componentele cu care lucrez pentru a putea face diferenta intre problemele cauzate de o posibila proasta gandire/implementare a solutiei si problemele posibile cauzate de componente sau folosirea lor intr-un mod nepotrivit.


Mar 04 2008

LAMP

Category: TechnicalIuliana @ 11:19

Din punctul meu de vedere un inginer software desavarsit trebuie sa indeplineasca 5 conditii:

  • sa stie foarte bine sa lucreze sub un sistem de operare
  • sa stie sa lucreze cu un server de aplicatii
  • sa stie sa lucreze foarte bine cu o baza de date
  • sa cunoasca foarte bine un limbaj de programare
  • sa stie bine un limbaj de scripting

M-am hotarat si eu la un moment dat sa incerc sa indeplinesc cele 5 cerinte. Am ales Linux, JBoss, MySql, Java si Javascript. Deci acronimul care m-ar reprezenta este LJMJJ. Am citit recent pe situl celor de la Java ca majoritatea developerilor open-source sunt caracterizati de acronimul LAMP(Linux operating system, Apache web server, MySQL database server, PHP/Perl/Python languages) si am avut o revelatie: Sun a cumparat MySql pentru ca nu suporta faptul ca nici unul din produsele lor nu facea parte din lista de mai sus. :)

Oricum se pare ca Sun incearca din rasputeri sa devina un concurent serios pentru Microsoft. Si-au tras si ei propriul server de baze de date(Microsoft are Sql Server, Sun are MySql mai nou) si au scos si un editor destul de complex incat sa se apropie de Visual Studio. Ma refer desigur la Netbeans 6, care face ca dezvoltarea unei aplicatii J2ee sa fie accesibila aproape oricarui programator wannabe. Eu insist sa raman utilizatoare fidela a Eclipse, este usor de personalizat, pot sa imi aleg eu pluginurile necesare si necesita si resurse mai putine.(Web tools-ul mi-a cam scos peri albi recent, dar slava domnului ca exista docs.torrents.ro si am gasit…. o carte :D care sper sa imi mai micsoreze chinul:) )


Feb 26 2008

Solutie pentru Mazgalici :D

Category: TechnicalIuliana @ 17:00

In urma unei discutii pe messenger avute cu Mazgalici, am decis sa-i fac o fericire(si sa ma dau mare), rezolvand o problema peste care daduse el: transformarea unui tablou intr-un string cu elementele sale, separate de un separator definit de utilizator. (Adica implementarea echivalenta in java a metodei implode din php: $a.= implode (“|”,$vector);)

public static String implode(String separator, String[] arg) {
String test = Arrays.toString(arg);
test = test.replace(“[“, “”).replace(“]”, “”).replace(“, “, separator);
return test;
}
Si ca performante : Transforming an array of 2424 elements took : 0.130 seconds.

Ce zici, este acceptabil?


Feb 25 2008

Cine spunea ca…

Category: TechnicalIuliana @ 16:40

… in programare nu iti trebuie matematica? Uite un link care demonstreaza exact contrariul: aici.

Formula aia “super-interesanta” de acolo este folosita de Lucene pentru a determina exact daca un document anterior indexat corespunde unui criteriu de cautare dat de utilizator. Lucene este folosit de majoritatea programatorilor(nu de mine desigur, ca eu prefer sa folosesc instrumentele de search oferite de linux :D) pentru indexarea surselor si a informatiilor legate de un proiect. Indexarea se face destul de repede, iar daca criteriile de indexare sunt destul de bine puse la punct si rezultatele unui search vor fi returnate destul de rapid.

Daca Lucene ar fi scris conform ultimelor standarde java poate l-as folosi. Dar cat timp in codul sau nu se folosesc generice(pierzandu-se timp cu teste si conversii inutile), se folosesc vectori(sunt sincronizati si merg greu, iar contextele in care sunt folositi nu sunt multi-threading, deci nu inteleg rostul folosirii vectorilor in locul unei ArrayList, de exemplu), iar unii algoritmi de cautare sunt implementati cu picioarele (mai mult ca sigur n-au fost implementati cu creierul :D), se folosesc constante imprastiate, in loc sa fie adunate in enum-uri s.a. nu intentionez sa-l folosesc. Dar asta e doar parerea mea de programator pretentios.:D (O sa postez si exemple in curand.)


Feb 19 2008

Frustrari de programator

Category: TechnicalIuliana @ 10:31

Nu ma simt frustrata si nu ma enervez cand nu imi iese ceva. In cazuri de genul ma ambitionez, ma mai documentez si pana la urma gasesc eu o solutie. Dar cand lucrez cu codul unui coleg si cu un framework open source, iar ceva crapa fara a-mi spune de unde ma enervez. Pentru ca la un moment dat nu mai am alte optiuni decat sa banuiesc cam ce nu merge si sa incep sa elimin si sa adaug chestii la nimereala in speranta ca va merge. Asa am patit acum cateva zile. De o saptamana un modul arunca din cand in cand o exceptie, dar isi facea treaba bine. Am tras concluzia ca e ceva intern framework-ului open source. Era enervanta exceptia aia, dar daca nu imi afecta rezultatele nu era mare problema. Intr-o dimineata ma apuc de modificat niste chestii (faza era ca respectiva chestie trebuia sa genereze ceva si mergea greu asa ca “the master of threads“, adica moi :D, a trebuit sa faca modulul respectiv sa mearga multithreaded) pentru ca in momentul in care rula multithreaded apareau exceptii noi. Incercand sa le rezolv pe astea(problema se invartea in jurul unor variabile care nu fusesera setate bine) le-am rezolvat pe celelalte. Cand am rulat si am vazut ca nu mai apar  imi venea sa musc din birou de ciuda, pentru ca nu stiam ce am facut pentru a le rezolva si daca mai aveam aceeasi problema ulterior chiar nu as fi stiut cum s-o rezov. Am rezolvat si celelalte exceptii si m-am linistit. Gandind la rece, banuiesc din ce motiv apareau exceptiile alea,dar pana o sa-mi confirm banuielile o sa mai dureze putin. Nu de alta dar am alt task mai important acum. Eu sper sa am timp sa ma intorc la partea respectiva.


Feb 18 2008

Microshit technology…

Category: TechnicalIuliana @ 23:15

…drives me nuts again. In ultima vreme sunt putine lucruri care chiar sa ma scoata din sarite, poate pentru ca am eliminat sursa principala de draci: Windowsul. De cand am scapat de el nimic nu mai crapa, exceptand desigur firefox cand deschid prea multe taburi cu Liberatea( ziarul ala chiar nu e bun pentru mine, pana si noul meu sistem de operare incearca sa-mi spuna asta:D). De ce ma lamentez in continuare de Microshit Technology? Pentru ca am nevoie de o masina virtuala pe care sa testez anumite aplicatii si pe care sa retusez laboratoarele la disciplina pe care o predau. Disciplina aia legata de C#, pentru care am nevoie de Windows, desigur :(. Disciplina asta presupune la un moment dat si realizarea de aplicatii web si normal lucrand cu .Net , am nevoie de IIS, tot tehnologie Microshit ca sa se pupe mai bine. Poate multi au fost norocosi si le-a mers IIS + Asp .Net 2.0 din prima dupa instalare. Ei bine, eu nu sunt unul din cei norocosi. Acum doi ani cand a trebuit sa-mi fac un proiect pentru facultate m-am chinuit o gramada, intr-un final a mers si inca nu stiu de ce. Anul trecut la fel, l-am facut sa mearga am tinut minte pasii. L-am dezinstalat ca sa mai fac o data ca sa pot sa le spun studentilor si sa fiu sigura pe mine cand o fac ca merge asa. Am refacut aceeasi pasi. Rezultatul:ciuciu. Slava Domnului ca la faculate a mers!

Eh, in seara asta voiam sa ma apuc de facut un site international pentru Clopotel nu de alta, dar chiar ar fi nevoie de unul. Plus ma gandeam si la o baza de date serioasa si o aplicatie aserioasa de administrare a ei ca sa nu se mai chinuie cu managementul pozelor. Si fac din nou aceeasi pasi. Adica instalez IIS, instalez Asp.Net 2.0 si torn si un Vs2005. Il deschid, creez un nou site, compilez si dau sa deschid pagina default pentru testul intial. Imi scuipa ca serverul meu nu e configurat pentru Asp. Net 2.0. Sa mor nu alta… Oki, nici o problema, il mai chinui, ma uit prin optiuni(era setat ca versiune de asp folosita 2.0), ma duc la ei pe site, rulez o aspnet_regiis -ga pentru a acorda orice fel de drept userului meu. In continuare daca rulam din vs imi spunea ca nu e configurat serverul, iar daca deschideam manual pagina din browser imi rage binecunoscuta eroare cu IIS metabase:
HostingEnvironmentException: Failed to access IIS metabase.]
System.Web.Configuration.MetabaseServerConfig.MapPathCaching(String siteID, VirtualPath path) +3492122
System.Web.Configuration.MetabaseServerConfig.System.Web.Configuration.IConfigMapPath.MapPath(String siteID, VirtualPath vpath) +9
System.Web.Hosting.HostingEnvironment.MapPathActual(VirtualPath virtualPath, Boolean permitNull) +163
System.Web.CachedPathData.GetConfigPathData(String configPath) +382
System.Web.CachedPathData.GetConfigPathData(String configPath) +243
System.Web.CachedPathData.GetConfigPathData(String configPath) +243
System.Web.CachedPathData.GetApplicationPathData() +68
System.Web.CachedPathData.GetVirtualPathData(VirtualPath virtualPath, Boolean permitPathsOutsideApp) +3385631
System.Web.Configuration.RuntimeConfig.GetLKGRuntimeConfig(VirtualPath path) +189

In fine, o sa-i dau eu de capat. Internetul este mare si sigur cineva a avut aceeasi problema ca mine si a rezolvat-o si a si postat pe undeva rezolvarea :)

[later edit]: Cica trebuie instalat mai intai IIS si apoi .Net Framework. Cum eu am facut putin invers pasii astia, :D solutia este desigur dezinstalarea .Net Framework si reinstalarea ei. Inteligent, nu? 196683.gif

[later than later edit]: Se pare ca am scapat fara dezinstalare. Doar am dat repair. Si a mers. Sper sa mearga si altora.

[later than later later edit]: Cea mai simpla solutie in comentariul nr. 3 al acestui post. :D


Feb 13 2008

Atentie la teste!(Ep. 3)

Category: TechnicalIuliana @ 16:22

Sunt pe la intrebarea 218, am mai dat peste cateva erori gramaticale si negatii lipsa in cadrul intrebarilor, n-are rost sa le insir aici, ma voi lega strict de cele a caror variante de raspuns sunt aberante.
Deci….inca una:
The file “file.txt” exists on the file system and contains ASCII text. Given:
try {
File ff = new File(“resources/file.txt”);
OutputStream out = new FileOutputStream(ff, true);
} catch (IOException e) {}
What is the result?

  1. the code does not compile
  2. the code runs and no change is made to the file
  3. the code runs and sets the length of the file to 0
  4. an exception is thrown because the file is not closed
  5. the code runs and deletes the file from the file system.

Raspuns oficial: A. Daca imi explica si mie cineva de ce nu s-ar compila bucata de mai sus, eu ma las de java. Parerea mea este ca se compileaza bine merci(avand in vedere ca nu e data toata implementarea clasei respective sar din schema declaratiile de import lipsa), avand in vedere ca FileOutputStream extinde OutputStream,deci nu e nici o problema in linia respectiva. Nu e profesional sa nu inchizi un stream, dat trecem cu vederea in cazul asta. Avand in vedere ca stream-ul respectiv este deschis pentru operatia de append(verificati javadoc-ul constructorului respectiv in caz ca sunteti nelamuriti),e clar ca fisierul nu va fi modificat si codul in cauza va rula, singurul lucru facut de el fiind deschiderea unui stream, ce va fi inchis apoi de gc. Deci raspunsul corect era B.
Si inca una:
Continue reading “Atentie la teste!(Ep. 3)”