Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Folosirea app.config

In aplicatiile web este foarte folosit fisierul web.config unde sunt pastrate foarte multe informatii utile. Echivalentul (oarecum) acestui fisier atunci cand este vorba despre o aplicatie exe este app.config. Acest fisier este un fisier xml, cu o structura bine definita. Pentru a citi informatii din acest fisier se poate folosi un XmlDocument&co sau mai noul XDocumnet&co.

Insa pentru cei care nu vor sa isi bata capul cu asa ceva, exista o cale directa – System.Configuration.ConfigurationManager. Cu ajutorul acestei clase, statice, se poate citi app.config intr-un mod direct.

De exemplu, daca avem o aplicatie care foloseste o conexiune sql, un loc potrivit pentru salvarea “connection string”-ului este app.config.
Un fisier app.config in care am salvat un “connecion string” arata cam asa:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="bdConnection" connectionString="Data Source=sqlServer\instance01;Initial Catalog=CINet;Integrated Security=SSPI;" />
  </connectionStrings>
</configuration>

Pentru a citi respectiva informatie, simplu, se foloseste:

string s = ConfigurationManager.ConnectionStrings["bdConnection"].ConnectionString;

Pentru a avea acces la ConfigurationManager trebuie o referinta la System.Configuration.dll

Numele fisierului executat

Atunci cand un program trebuie sa salveze diverse date pe disk, in mare majoritate a cazurilor, se doreste salvarea datelor respective in acelasi folder (sau intr-un subfolder) unde se afla fisierul care este executat.

De exemplu, daca am c:\Program Files\zeltera\programDeProgram\pdp.exe si pdp.exe trebuie sa isi salveze, sa zicem, setarile, as vrea sa creez un fisier settings.ini in folderul c:\Program Files\zeltera\programDeProgram\. Cum se afla respectiva locatie la runtime? Asa:

    string path = System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName;    
    path = Path.GetDirectoryName(path);
    //eventual daca vreau sa si salvez calea completa pentru fisierul ini
    path = System.IO.Path.Combine(path, "settings.ini");

Bun de stiut.

c# si vb in asp.Net

Un proiect asp.net poate fi scris in diverse limbaje suportate de framework. Eu folosesc c# si vb.net (cel putin in proiectele mai vechi). In fiecare proiect am un folder App_Code unde pun tot ce e “business logic” simplu – adica tot ce nu consider ca ar trebui inclus intr-un dll de sine statator. Din pacate nu ma prea inteleg eu cu vb.Net – ma enerveaza sintaxa si de fiecare data scriu cu greseli (de sintaxa) respectivul cod. Din cauza asta trebuie sa pierd mult mai mult timp decat as pierde daca as folosi c# (unde nu am asemenea greseli).

Sunt unele proiecte vechi, pe care nu imi permit sa le refuz (de, banii vorbesc) scrise in vb.Net si pe care trebuie sa le intretin/competez. Intr-un proiect de tip asp.net pot adauga o pagina noua care sa aiba codebehind in c# (chiar daca restul paginilor sunt in vb). Ceea ce nu pot este sa adaog in App_code, daca respectivul folder contine fisiere vb, fisiere cs – primesc erroare in momentul compilarii, ceva de genul Error 172 The files ‘/App_Code/Class1.vb’ and ‘/App_Code/xxxxx.cs’ use a different language, which is not allowed since they need to be compiled together..

In urma cu cateva zile am vazut ca exista o metoda de a folosi in cadrul aceluiasi proiect, in app_code atat c# cat si vb.net, ceea ce imi va permite sa pot folosi c# – in care scriu mai repede si mai eficient – pentru a continua diverse proiecte scrise in vb.net.
Continue reading

blekko – un nou motor de cautare

Am gasit astazi un nou motor de cautare: blekko.com (beta deocamdata). La o prima privire pare ok, in sensul ca poti gasi cu autorul lui ceea ce cauti. In plus, sunt aduse niste imbunatatiri fata de celelalte motoare de cautare – cel putin asa se lauda ei. Una dintre imbunatatiri este accea ca din rezultatele cautarii sunt excluse spam-urile; aceasta presupune afisarea rezultatelor numai din surse credibile si relevante. Nu am inteles prea bine pe ce criterii se stabileste relevanta si credibilitatea, insa, deocamdata, ii cred pe cuvant cand spun ca afiseaza numai rezultate credibile din surse relevante.

La prima cautare am remarcat ca pot primi rezultatele cautari ordonate dupa relevanta (default) sau dupa data, ceea ce poate fi util dat fiind ca de multe ori in reuzltatele cutarilor apar informatii vechi de ani de zile inanitea celor recente.
Continue reading

Fire de executie (threads)

Nu rare sunt cazurile in care avem o lista de taskuri de executat si executia fiecarui task, unul cate unul, pe masura ce taskul curent se termina e o operatie ineficienta prin faptul ca e lenta.

De exemplu, daca am de facut o verificare in urma careia sa stabilim daca anumite pagini web sunt sau nu online – sa presupunem ca avem anunturi/bannere puse acolo. Asta inseamna ca am o lista de 1000 url-uri si vreau sa verific pentru fiecare daca bannerul meu mai apare pe acolo, daca pagina mai est online etc.

Astazi voi descrie numai procesul, algoritmul pe care o sa il folosesc, urmand ca in zilele urmatoare sa creez o aplicatie simpla care sa implementeze ceea ce prezint astazi. S-ar putea sa existe si solutii mai eficiente decat ceea pe care o prezint eu, insa nu mi-a venit alta in minte in momentul in care am avut nevoie.

Continue reading

SFM – proiect final partea 3-a

Continuam lucrul la aplicatia Simple Finance Manager.

In folder-ul App_Code vom crea trei fisiere .cs, fiecare reprezentand o clasa: Account, cu atributul Serializable,care va contine metode de incarcare a controalelor cu date, delegati pentru evenimente, Record care va incarca/salva efectiv inregistrarile, Settings care ne va ajuta la stabilirea unor setari ale aplicatiei.

Inregistrarile vor fi retinute intr-un xml, care se va salva in directorul aplicatiei. Vom retine ca date pentru o inregistrare: suma, data si un comentariu.Xml-ul este de forma:

<root>
  <record amount="8" RecordDate="05.05.2008 16:36:20"><![CDATA[&];&];&>;]]></record>
  <record amount="-1343" RecordDate="07.06.2009 22:43:45"><![CDATA[supermarket]]></record>
  <record amount="6" RecordDate="03.05.2010 16:06:45" />
</root>

In Main Window, apelam metoda InitItems(), care va popula controalele cu date.

Continue reading

Solutii de evitat solutiile ilegale

Nu rare sunt situatiile cand, cel putin pentru uz personal, casnic, oamenii apeleaza la surse mai putin legale pentru a obtine anumite softuri de care au nevoie. Eu as vrea sa propun o solutie mai putin ilegala – cel putin asa cred: instalarea de versiuni trial (de obicei multi producatori de soft ofera astfel de versiuni, care functioneaza 15-90 de zile). E legal sa instalezi si folosesti un trial version de mai multe ori? Nu stiu (nu am avut rabdare sa citesc tot EULA si alte documente legate de drepturi) insa e mai bine decat folosirea de software luat de pe torente, emul-uri etc.

Continue reading

Glume de alimentara…

In urma cu cateva zile am fost la supermarket sa cumpar cate ceva de mancare. Pe lista de cumparaturi erau si 2 pui. M-am dus la raionul de pui si am cerut doi pui; am precizat ca vreau sa fie “mai frumosi“. Replica vanzatorului m-a impresionat: “de ce sa fie frumosi? vrei sa iesi la plimbare cu ei?”

Disk de 1Tb de la Tdk

Citesc astazi pe google news despre ultima inovati de la TDK: un disc optic cu o capacitate de stocare de 1Tb. Asta e mai mult decat au in momentul acesta marea majoritate a cititorilor acestui blog pe HDD. Eu am, la munca 320 Gb si imi e suficient. Acasa, unde am ceva filme, muzica si jocuri am un disk de 2Tb la care a trebuit sa muncesc mult timp ca sa il umplu.
Daca as avea un disc optic de 1Tb as putea sa fac un back-up la tot ce am eu in calculator folosind 2 astfel de discuri.

Mai sunt probleme tehnice cu respectivul disc, insa el se vrea citit de actualele unitati optice care citesc discuri blue-ray. Nu s-au precizat detalii legate de pret.

Asa cum mai spuneam, din pucnt de vedere tehnologic, viitorul suna bine!