1 Comments

Ovo je prvi u nizu, nadam se, brojnih kratkih pregledaopen source .NET alata, frameworka, toolkitova, i svega što može poslužiti, korisno ili beskorisno!

Prvi prezentirani alat je Automapper. Radi se jako korisnom frameworku za kopiranje vrijednosti iz jednog objekta u drugi. Osim osnovnog kopiranja propertya po propertya, postoje brojni načini konfiguracije koji omogućuju složene manipulacije nad podacima, a fluent interface DSL način konfiguriranja je intuitivan i relativno jednostavan za podesiti.

Najčešći scenarij u kojemu ja upotrebljavam AutoMapper je kopiranje vrijednosti iz domenskih entiteta (sa učitanim podacima iz baze) u DTO objekte koji reprezentiraju prikaz podataka na web stranici ili windows/Silverlight formi.

Najjednostavniji primjer je kopiranje prema konvenciji, što znači da će Automapper tražiti propertye sa istim imenima:

Public class Article
{
	public int ID { get; set; }
	public string Name { get; set; }
}

Public class ArticleDTO
{
	public int ID { get; set; }
	public string Name { get; set; }
}

AutoMapper.Mapper.CreateMap<Article , ArticleDTO>();

var article = new Article() {ID = 1, Name = "some name"};

var dto = new ArticleDTO();

AutoMapper.Mapper.Map(article, dto);

Malo složenija i češća upotreba je flattening, ili pretvaranje grafa objekata u jedan objekt, uz primjenu ValueResolvera za konverziju tipa podataka:

public class Person
{
	public string Name { get; set;}
	public Address Address { get; set; }
	public bool IsMale { get; set; }
}

public class Address
{
	public string StreetName { get; set;}
	public int Number { get; set;}
}

public class PersonDTO
{
	public string Name { get; set;}
	public string LivingAddress { get; set;}
	public string Gender { get; set; }
}

public class GenderConverter : ValueResolver<bool,string>
{
	protected override string ResolveCore(bool source)
	{
		return source ? "Male" : "Female";
	}
}

var person = new Person() 
	{ Name = "Hudo", Address = new Address() {StreetName = "Sezam", Number = 1, IsMale=true}  };

AutoMapper.Mapper.CreateMap<Person , PersonDTO>()
	// kopiranje ulice i broja iz objekta Address u jedan property
	.ForMember(
	d => d.LivingAddress, 
	s => s.MapFrom(x => x.Address.StreetName + " " + x.Address.Number))
	// konverzija iz bool u string
	.ForMember(
	d=>d.Gender,
	s=>s.ResolveUsing<GenderConverter>().FromMember(x=>x.IsMale));

var dto = new PersonDTO();

AutoMapper.Mapper.Map(person, dto);

Ostali primjeri se mogu pronaći na Codeplexu (http://automapper.codeplex.com/) i naravno, Googlu.

13 Comments
ssh shell vps ubuntu

Svaki pravi web developer bi sigurno htio imati jedan web server! Cijeli server, sa pristupom cijelom operativnom sustavu, da si moze naštimavati sve opcije, optimizirati, podešavati i tjunirati svaki HTTP paket koji odlazi. Kod shared hosting paketa se dobije samo FTP pristup i osnovna funkcionalnost putem nekog Control Panela, ali dalje od tih opcija se ne može. Nista od štimanja ISAPI filtera, mapiranja ekstenzija, dodavanja neograničeno domena i slicnih stvarčica. Za takve stvari ipak treba imati telnet, ssh ili remote desktop pristup, i dozvole podešavanja. To imaju Dedicated i VPS server, od kojih je ovaj prvi pre skup (cca od 50$/mj) i odmah ću ga odbaciti, ali ovaj drugi, VPS server, se ipak može pronaći za skromnije novce. Cijena uglavnom ovisi o dostupnom RAMu i procesorskoj snazi.

Pošto se ovdje radi o pokretanju .NET web aplikacija, u obzir prirodno dolaze samo Windows serveri, ali zahvaljujući Novellu i Miguel de Icazi, aplilacije možemo pokretati i na Linuxu uz pomnoć Mono projekta.

Ako spojimo VPS Linux hosting i Mono framework, znači da već za 9,99$ mjesečno imamo svoj vlastiti server s kojim možemo raditi što god nas je volja! Već neko vrijeme planiram zakupiti jedan takav VPS server i poigrati se. Neki da sam konačno našao vremena, volje, i 10$ viška i zakupio mjesec dana VPSa na jednom od hosting providera. Kroz par postova ću probati opisati postupak konfiguriranja servera, u cilju pokretanja ASP.NET stranica, točnije ovog bloga, i za moje privatne (fuš) potrebe, N2CMSa. Još nisam siguran dali će N2CMS raditi, ali BlogEngine.NET provjereno radi na Mono frameworku.[more]

Krenimo redom; prvo je potrebno izabrati hosting providera sa VPS uslugom. Neki koje sam ja pronašao guglajući su: Fsckvps, IntoVPS, EnjojVPS. Sve su to UNMANAGED serveri, što znači da se dobije ssh pristup, i to je to, snalazi se sam. Uvijek sam mislio da to uključuje kompajliranje kernela i piskaranje gomila konfiguracijskih fajlova, ali nije tako; kernel dođe kompajliran, a konfiguracijske skripte se moraju samo malo piskarati ;) Znači čaša je na pola puna, a ne prazna!

Kada se zakupi VPS, dobije se SSH pristup shellu, kojem pristupamo pomoći nekog ssh/telnet programa poput PuTTy.  Također, gotovo svi hosting provideri daju mogučnost odabira Linux distribucije, i ja sam za ovu priliku izabrao Ubuntu (iako sam prvo uzeo SuSE, pošto je njegov proizvođač Novell, a on je napravio i Mono, ali na njemu mi ništa nije htjelo proraditi, pa sam se prebacio na Ubuntu). Većina providera ima Ubuntu 9.04 Jaunty.

Nakon što smo se spojili na naš novi server, ostaje nam za napraviti sljedeće:

  1. refreshati repozitorije: na Linuxima postoji pojam paketa i repozotorija. To je centralizirano mjesto za instalaciju aplikacija. Takvog čega nema na Windowsima, a radi se o spisku dostupnih aplikacija (paketa) koji je sadržan u jednom ili više repozitora. Korisnik samo mora odabrati željenu aplikaciju (paket), a aplikacijski instalacijski program (apt-get, zypper, yast, …) će ju instalirati, uključujući zavisne biblioteke i programe (nešto tipa DLLova)
    Naredba za update repozitorija: apt-get update
    Naredba za instalaciju aplikacija: apt-get install NazivAplikacije
    Pregled liste dostupnih aplikacija: apt-cache search [NazivApp*]
  2. pošto nisam vičan radu u Bashu preko SSH (ala command prompt na win), ja sam instalirao i sljedeće: Gnome desktop grafično sučelje, VNC server za pristup (ala Remote Desktop)
    Cijeli postupak je objašnjen ovdje, i meni osobno je prošao bez ikakvih problema:
    http://markus.revti.com/2009/08/installing-vnc-remote-desktop-on-ubuntu-linux-vps/
    uz jednu napomenu; ubuntu dolazi sa VI editorom (ala DOSov Edit, ili Win Notepad), koji je meni jako zbunjujuć za raditi, pa sam ja instalirao Nano editor:
    sudo apt-get install nano (ovaj sudo označava pokretanje programa sa root pravima)
  3. instalacija Mono frameworka
  4. instalacija Apache web poslužitelja
  5. instalacija XSP (mono web server, služi Apachu za izvršavanje ASP.NET aplikacija). Konfiguracija mod_mono, da Apache koristi XSP za ASP.NET
  6. testitranje sa više domena i poddomena, N2CMS, BlogEngine.net,…
  7. instaliranje i podešavanje Firewalla

Za sada sam došao do koraka 3, a daljnji napredak ću opisati u sljedećim postovima. Trenutno imam remote desktop pristup serveru, i u instalacijom programu Gnomea (izbornik System/Administration/Synaptic Package Manager)  se nalazi Mono framework 2.0. Zadnja verzija Mono frameworka je 2.4 (podržava C# 3.0, MVC, bez LINQ2SQL), i potrebno je dodati ovaj repozitorij:
deb http://ppa.launchpad.net/directhex/monoxide/ubuntu jaunty main(u Synapticu, izbornik Settings/Repositories/Third party sw). Time smo dobili mogučnost instalacije Mono 2.4 frameworka. Putem Synaptica možemo instalirati i Monodevelop, IDE alat za razvoj .NET aplikacija.

Jedna sitnica, ako vam layout tastature ne štima, odnosno pritisnete D a on ispiše F, onda pogledajte ove upute: https://bugs.launchpad.net/ubuntu/+source/vino/+bug/112955/comments/55

Nastavak slijedi brzo…