The Lone Programmer

Blog o programiranju i dizajniranju aplikacija sa .NET i C# tehnologijama …

Kako omogućiti da u sistemu postoji samo jedna instanca aplikacije?

Posted by Denis Biondic on juli 6, 2009

Ovo je jedan od veoma dobrih primjera koliko programiranje nekad može biti zanimljivo :)) Kao jedno od rješenja, može se upotrijebiti Mutex klasa.

Ovo se može uraditi ako pri svakom pokušaju pokretanja aplikacije provjerimo da li ima ijedna instanca iste aplikacije u sistemu (logično, naravno). Problem nastaje kako to realizirati. Treba nam neki način “signaliziranja”, način da drugim aplikacijama kažemo da je jedna instanca već pokrenuta.
Jednostavno rješenje nudi Mutex, koji predstavlja process-wide lock mehanizam u .NET-u (isto kao i lock – tj. Monitor.Enter() i Monitor.Exit() ). Registrovani Mutex objekat, pod nekim nazivom, je vidljiv u cjelom sistemu – i sve aplikacije mu mogu pristupiti. Ovo možemo iskoristiti tako da unutar Main() metode pri startanju aplikacije provjerimo da li ima Mutex pod istim nazivom već registrovan:


static class Program
{
    // Mutex objekat pravimo statičnim da ga GC ne preuzme.
    // Isto možemo postići da na kraju Main() metode pozovemo
    // GC.KeepAlive(mutex)
    static Mutex mutex = new Mutex(false, "nazivKompanije url bla bla");

    [STAThread]
    static void Main()
    {
        // sačekati par sekundi u slučaju da se upravo gasi
        // druga instanca
        if (!mutex.WaitOne(TimeSpan.FromSeconds(2), false))
        {
            MessageBox.Show("Aplikacija je već "  +
                            "pokrenuta!", "", MessageBoxButtons.OK);
            return;
        }
        
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        finally { mutex.ReleaseMutex(); }
    }
}

Što se tiče samog nazivanja Mutex objekta, pokušajte staviti naziv za koji ćete biti sigurni da niti jedna druga aplikacija neće koristiti – obično string sastavljan od naziva aplikacije, naziva kompanije, url-a kompanije itd…

Posted in General programming | Označeno: , , | 1 komentar »

Observer pattern vs. .NET event sistem

Posted by Denis Biondic on Juni 28, 2009

Observer pattern je sigurno jedan od najpoznatijih design patterna koji postoje, barem ja imam takav utisak. Prije nego što sam se posvetio materiji design pattern-a, Observer je bio jedini za koji sam mogao reći da poznajem, ili barem sam mislio tako :) Ono što jesam znao, jeste kako napraviti custom event u .NET-u, te kako to iskoristiti za nešto realno.

Ipak, poznato je da svaki developer počne gledati drugačije na polimorfizam i nasljeđivanje jednom kada počne proučavati design pattern-e. Taj slučaj je bio i sa mnom. Ono što sam mislio da je Observer, zapravo je bila veoma pojednostavljena implementacija istog. Pravi Observer pattern (iz GoF knjige, GoF – Gang of Four, poznati naziv za autore najpoznatije Design Pattern knjige – Design Patterns: Elements of Reusable Object-Oriented Software) upotrebljava abstraktne klase / interfejse za implementaciju.

Pitanje koje nakon ovoga nastaje, koja je implementacija bolja? Da li je bolji pristup nasljeđivanja abstraktnih klasa, ili klasične implementacije neodređenog broja event-a unutar klase? Odgovor slijedi …

Observer pattern služi za odvajanje zavisnosti među objektima koji inače trebaju da na neki način komuniciraju jedni sa drugim. Observer omogućava da broj “povezanih” objekata bude proizvoljan, te da se novi objekti mogu dodavati i za vrijeme izvođenja programa (run-time). Ta zavisnost bi na normalan način bila uspostavljena pozivanjem raznih metoda između objekata. Observer izbjegava ovaj pristup, i promoviše loose coupling. Primjeri upotrebe Observer pattern-a obično ispunjavaju uslov da se radi o jednom subjektu i više posmatrača (observera).

Tipični primjer Observer pattern-a, preuzet iz GoF knjige, je dat na slici:

Primjer Observer pattern-a

Primjer Observer pattern-a



Pročitaj ostatak ovoga unosa »

Posted in Design Patterns | Označeno: , , , | Leave a Comment »

Šta su Design Patterns (dizajn šeme) ?

Posted by Denis Biondic on Juni 23, 2009

Jedna od važnih tema spomenutnih u prethodnom članku (Kako postati programer?) je bila Design Patterns. Spominjanje nije bilo slučajno – smatram da su Design Patterns jedna od najvažnijih stvari koje programer treba poznavati, i koja je prijeko potrebna za razvijanje OO (objektno orijentiranog) razmišljanja.

Iako ću sada ponoviti neke već napisane stvari iz prethodnog posta, to nema veze. Ovo je članak posvećen detaljnoj obradi ove, veoma zanimljive, teme.

Stranice:

  1. Pojam, Robot primjer (State pattern)
  2. Primjer sortiranja, IComparable i IComparer
  3. Undo / Redo u aplikaciji za crtanje (Command, Singleton, Mediator…)
  4. Daljnja literatura i zaključak

1. Pojam

Pojam Design Pattern-a (eng. Pattern – nešto što se ponavlja, uzorak – jedan od prijevoda je “dizajn šema”) potiče prije njegove upotrebe u programiranju. Ljudi su, u mnogim oblastima života, počeli shvaćati da postoje određeni problemi koji se ponavljaju, te da su njihova rješenja konceptualno ista. Jedan od tih ljudi je bio i Christopher Alexander, po zanimanju arhitekta, koji je prvi počeo proučavati određene ponavljajuće probleme u procesu gradnje nekog objekta. Njegov cilj je bio da opiše te probleme, stvarajući zajednički jezik za arhitekte da koriste. Nije dugo trebalo da i sam shvati da je, primjenjujući u određenom redoslijedu, moguće izgraditi cijelu strukturu upotrebljavajući ove pattern-e. Na sličan način, ovakvo se razmišljanje počelo pojavljivati i u svijetu računara. Prvi pokušaji da se saberu znanja i tehnike su bili veoma uspješni. Primjer ovoga je jedna od najpoznatijih knjiga o algoritmima ikada: The Art of Computer Programming, autora Donalda Knuth-a, izdana još davnih 60-ih godina.

Ipak, prvi pokušaji da se opišu generalni problemi pri dizajniranju software-a, čekali su malo duže. Ono što će postati sinonim za Design Patterns oblast, započelo je kao doktorska disertacija Ericha Gamma-e, još početkom 90-ih godina. Iz ovoga je nastala knjiga Design Patterns: Elements of Reusable Object-Oriented Software , na čijem pisanju su mu se pridružila još trojica autora: Richard Helm, Ralph Johnson i John Vlissides. Danas, ova četvorica autora imaju pomalo i kultni status, jer im se često obraća i pod nazivom Gang of Four, iz kojeg je i sama knjiga dobila naziv GoF knjiga. Nakon ove knjige, uslijedila je prava popularnost izučavanja design pattern-a, što je rezultiralo velikom eksplozijom istih.
Iz početnih 23 pattern-a iz GoF knjige, danas postoje desetine pattern-a, od kojih se mnogi preklapaju pod istim nazivima, neki se odnose na samo određene primjene programiranja itd…
Pročitaj ostatak ovoga unosa »

Posted in Design Patterns | Označeno: , , , , | 2 komentara »

Kako postati programer?

Posted by Denis Biondic on Juni 14, 2009

Put od hiljadu milja počinje prvim korakom ~ Kineska poslovica

Iako pitanje iz naslova, priznajem, zvuči poprilično naivno i nategnuto, pokušaću da objasnim neke svoje stavove i ideje, koje već duže vrijeme imam u sebi. Najvažniji cilj mi je da osiguram povjerenje čitaoca, koje je malo teško zadobiti činjenicom da autor ovih redova još uvijek studira, ostalo nastranu. Povjerenje je teško zadobiti, i potrebna je neka mjera vrijednosti da se ono ostvari. Ako je nekome vrijednost rad – mogu reći da, iako studiram, radio sam na komercijalnim aplikacijama. Nekome je mjera uspjeh na fakultetu – za ovo ne mogu dati valjan komentar, jer kakav god bio moj uspjeh na mome fakultetu, smatram da se on ne može niti porediti sa iole normalnijim i ozbiljnim fakultetima, nažalost… Vrijednosti koje bih ja naveo za sebe su da sam uporan, i snalažljiv. Sve što sam naučio, naučio sam sam, skoro bez ičije pomoći (čast izuzecima). Zbog toga i pišem ovo, jer usprkos mišljenjima da sistem obrazovanja može dati rezultate, smatram da to nije istina. Moj cilj je da pokušam djelovati na ljude koji imaju šanse da nešto primijene na sebi, dok je vrijeme – na kraju srednje škole – u toku studiranja. Jednom kada studiji završe, i počnu jadikovanja kako posla nigdje nema; onda je prekasno. Da ne bi bilo zabune, posla ima na pretek, jedino što nedostaje su ljudi koji ga znaju raditi.
Pročitaj ostatak ovoga unosa »

Posted in Učenje | Označeno: , , , , , | 10 komentara »

Zašto blog?

Posted by Denis Biondic on Juni 11, 2009

Odgovor na pitanje iz naslova je krajnje jednostavan, i bez suvišnog okolišanja, otkrit ću ga odmah. Odlučio sam pokrenuti blog na kojem će bilo tko ko se bavi programiranjem, želi programirati, ili pak želi vidjeti what it’s all about, pronaći ponešto zanimljivo. Sam pojam zanimljivog je u većini slučajeva subjektivan, te je zbog toga važno da kažem da se nadam što većem broju kritika / diskusija / komentara na određene tekstove koje budem pokušao izložiti.

Govoreći o broju kritika – da ne bi bilo zabune – ne radim ovo radi nikakve popularnosti :). Nisam jedan od onih sto skupljaju prijatelje po facebook-u, iako imam profil tamo (da preduhitrim sve komentare: “a-ha, eno ga, slagao je”). Cilj ovog bloga je razmjena znanja. Tokom dužeg vremena, Internet mi je bio najbolji (i nažalost de-facto jedini) suputnik u  potrazi za znanjem. Osjetim da je vrijeme da i ja nekome pomognem, kao što su i meni nebrojno puta pomogli. Ako uspijem pomoći jednom čitaocu ovih redaka, smatraću da je moj cilj ispunjen. Zauzvrat, jedino očekujem mišljenja čitaoca, jer je diskusija jedan od najboljih vidova učenja.

Ono što bi sada bilo korektno, jeste da se predstavim. Zovem se Denis Biondić, imam 21. godinu, i trenutno sam student ETF-a u Bihaću – treća godina. Pošto fakultet slijedi Bolonjski proces, ovo je i završna godina studija. <offtopic> Nadam se da ću jednom naći vremena da napišem i par riječi o eskapadi zvanoj fakultet, iako ne volim biti negativan :/ </offtopic> Da nastavim – programiranje se bavim dugo, iako tek zadnjih par godina aktivno sa konstantnom željom napredovanja. Mogu za sebe reći da mi programiranje stvarno predstavlja strast, iako zvuči pomalo otrcano :) … Uživam otkrivati nove elegantne načine rješavanja problema, i stvarno volim dobar challenge: pogotovo kad se radi o novoj stvari za koju znam da će biti veoma primjenjiva (čitaj: isplativa, money makes world go around).

Dosada, mogu za sebe reći da sam se bavio svime i svačime, od analize raznih algoritama, mrežnog programiranja – pa do proučavanja softverskih arhitektura. Radio sam i na desktop i na web programiranju, ali ovo potonje mogu reći da tek poznajem. Smatram da je moja stručnost desktop, i to je ono u čemu se usavršavam. Radim sa .NET frameworkom, i to najviše sa .NET 2.0 tehnologijama. Kao i većini programera, konstantno izmišljanje kotača baš i ne leži, tako da WPF, WCF, ADO.NET Entity Framework i ostale Vista+ stvari i nisu previše poznate. Smatram da je programiranje više umjetnost, nego poznavanje alata i tehnologije koji je trenutno aktuelan. Gledajući aktuelnosti, dobri stari WinForms je za sada sasvim dovoljan.

Sa pričom o sebi bi ovdje stao, jer sljedeći put želim početi s temom puta jednog programera, gdje ću kroz svoj primjer pokušati objasniti prepreke na putu bilo koga tko se želi baviti ovim poslom…

May the force be with you …

Posted in About this blog ... | Označeno: , , | 4 komentara »