Archive for the ‘Tippek, Trükkök’ Category

Kéthétnyi kihagyás után, mely nagyrészt beadandó, könyv és hibajavító kódok írásával telt, ismét jelentkezem egy újabb (remélhetőleg) érdekes és hasznos cikkel. Ebben a részben Chris Diaz (Visual Studio-s csapatnál group program manager) Tips&Tricks: Visual Studio 2010 IDE & Extensions nevet viselő előadásán elhangzottakat szeretném Veletek megosztani.

Elsőre kicsit szkeptikusan álltam hozzá, mert az ilyen előadások ritkán szoktak hasznos információval szolgálni, de végül pozitívan kellett csalódnom. Sok okosság hangozott el (étvágygerjesztőként: a VS 20 millió kódsorból áll; kommentek, whitespacek nélküli is, több mint 4 millió) és nem csak egy másfélórás shortkey bemutató volt az egész. Nézzük sorjában a fontosabbakat:

– A Visual Studio kezdőlapját teljesen áttervezték. Jár is érte a piros pont a VS csapatnak. De a legjobb az egészben, hogy bárki átszerkesztheti, sőt akár fejleszthet is bele új modulokat (mármint a kezdőlapba). Ehhez annyit kell tenni, hogy az online template-k között rá kell keresni a Custom Start Page Project Template-re. (A háttérben a Visual Studio Gallery oldal taralmában keresünk.) Ehhez előtte persze fel kell telepíteni a Visual Studio SDK-t. Ha ez megvan, akkor a letöltött start page template-t egyből tesztre is szabhatjuk. Build után a Visual Studio-ban úgy tudjuk beállítani az új kezdőlapot, hogy elnavigálunk a Tools >> Options >> Startup és itt a Customize Start Page legördülő listából ki kell választani a sajátot.

Magyarított egyedi VS kezdőoldal

– Egy másik hasznos dolog a Productivity Power Tools  kiegészítés a Visual Studio-hoz, amelyet az MS fejlesztett (igazándiból azt nem értem, ez miért nincs alapból benne). Ez valójában egy tonna cool szolgáltatást tartalmaz (pl.: Solution Navigator, Quick Access) és egy jó pár olyat, ami nélkül azért lehet élni (pl.: tripla kattintás, ctrl + klikk >> go to definition, stb.). Én most csak a Solution Navigator-t és a Quick Access-t mutatnám be. A Solution Navigator-nek két nézete van, az egyik a Solution Explorer és a Class View összedolgozása igazándiból, a másik egy inline referencia és hívás kereső. Ezek eléggé elő tudják segíteni egy új rendszer megismerését, vagy egy komplex rendszer átlátását. (Persze ez nem helyettesíti az architecture explorer és a függőségi gráf használatát.)

Solution Navigator 

Inline Solution Navigator

A Quick Access ablak lényege, hogy egy adott fogalomhoz kapcsolódó összes Visual Studio-s szolgáltatásra, menüpontra, beállításra, stb. rá lehet keresni. Tehát ha például a debug beállításait nem találjuk az IDE-ben, akkor egyszerűen le kell ütnünk az CTRL + 3-at és be kell írni a keresőbe, hogy debug, a többit a VS megoldja. Ez egy eléggé hasznos és gyakran használható kis ablak szerintem.

– A harmadik bekezdésbe néhány kódszerkesztésnél hasznos feature-t és billentyűkombinációt gyűjtöttem össze. Néha elfordul olyan, hogy az IntelliSence és a VS túlbuzgó, például ha egy még meg nem írt metódust akarunk meghívni egy osztály példányon, akkor ő a hozzá legjobban hasonlító szóra fogja lecserélni az általunk beírt függvény nevét. Jó hír, le lehet ezt tiltani ideiglenesen az IntelliSence-nél (egy úgynevezett Suggestion Mode-ba lehet átváltani) a Ctrl + Alt + Space segítségével. Persze ne felejtsük el utána vissza bekapcsolni! Egy másik hasznos feature a több sor egyidejű módosítása, pl.: hozzáférési szint átállításkor. Ilyenkor az Alt + egér vagy az Alt + Shift és a le,föl,jobbra,balra gombok segítségével ki kell jelölni a szerkesztendő sorokat, majd utána már gépelhetjük is a kódot egyszerre több sorba.

 Utolsó dologként a blokkmozgatás technikát mutatnám meg. Jelöljük ki a mozgatni kívánt szöveget és az Alt + le,föl gombok segítségével helyezzük át a megfelelő helyre. Néhány esetben valamivel kényelmesebb, mint a Ctrl+C, Crtl+V páros.
Utolsó gondolatként csak annyit fűznék még hozzá ehhez a bejegyzéshez, hogy érdemes megnézni az előadásról készült videót, mert tényleg sok hasznos dolgot, technikát lehet belőle tanulni.

A sorozat következő részében az SQL Server 2008 R2 egy új szolgáltatásával fogunk foglalkozni. (Változás jogát fenntartom!)

Tegnap ScottGu barátunk blogjára felkerült egy szép hoszzú bejegyzés azzal kapcsolatban, hogy mit is fog tartalmazni a VS08-hoz, illetve .NET Framework 3.5-höz megjelenő első szerviz csomag! Jelenleg még csak beta érhető el belőle, de már most található benne sok hasznos bug-fix, illetve néhány új feature (főleg IntelliSence okosságok). A végleges verziót nyárra ígérik!
 

Visual Studio 2008 and .NET Framework 3.5 Service Pack 1 Beta  Download:

 
ScottGu blog bejegyzésse ezzel kacspolatban:
 

Visual Studio-s Trükkök

Posted: 2008. május 9. in Tippek, Trükkök
Az elmúlt pár héten ismét volt szerencsém eléggé sokat fejlesztgetni php-ban. Igazándiból csak egyetlen dolog zavart az egészben, még pedig a professzionális fejlesztő eszköz hiánya! Ezért így most már igazán tudom értékelni a Visual Studio által nyújtott szolgáltatásokat.
Emiatt arra gondoltam, hogy megpróbálom egy blog-bejegyzésbe összeszedni azt a jó néhány apró trükköt, amikkel még hatékonyabbá tehetjük a Visual Studio-ban, .NET-ben történő fejlesztést. Természetesen én se tudom mindent, ezért ha valamit kihagynék, akkor légy szíves írjátok meg nekem, hogy ki tehessem ide és tanulhassanak belőle a többiek is! Előre is köszönöm!
– Gyors névtér usingolás
Kivel ne fordult volna már elő az, hogy írta nagy bőszen a kódot és elfelejtette using-olni mondjuk valamelyik objektumhoz a szükséges névteret. Ilyenkor mit csinál az ember, jobb klikk az objektumon, majd Resolve és ott az almenün belül kiválasztja a megfelelő névtérhez tartozó using linket vagy pedig beszúratja a teljes elérési utat az objektum elé.
 
Van erre egy egyszerűbb megoldás is!  Amikor belekattintunk az objektumhoz tartozó kódba, akkor ne a jobb egérgombot nyomjuk le, hanem a CTRL + . bill. kombinációt!  Ilyenkor az alábbi ablakra egyszerűsödik a dolog:
 
– Felesleges névterek eltávolítása
Ez a kis hasznos szolgáltatás a Visual Studio 2008-ban debütált, és nekem nagyon tetszik . Bárhol a forráskódban kattintsunk jobb egérgombbal, majd az Organize Usings menün belül a Remove Unused Using menüpontra! Ilyenkor a Visual Studio kigyomlálja a nem használt névtereket a fájlunkból, ezáltal rövidebb lesz a kódunk és észre nem vehetően, de gyorsabb!
Íme, egy nagyon egyszerű példa, hogy mennyi felesleg névtér van alapból beusingolva:
Előtte
 
Utána
 
Ez azért szerintem nem rossz dolog!
– IntelliSence átlátszóság
Ismét egy tipikus szituáció: az IntelliSence éppen eltakarja azt a kódrészletet, amire pont most lenne szükségünk. Esc, megnézzük mi volt alatta, majd Ctrl+Space-szel visszahívjuk IntelliSence barátunkat. Ez egy baromi fárasztó dolog, ezért VS08-ban van egy hasznos feature erre, amivel átlátszóvá tudjuk tenni az IS-t. Egyszerűen csak nyomjuk le a Ctrl gombot, amikor lenyílik az IntelliSence, és csak 10%-osan lesz látható a mi kis nélkülözhetetlen barátunk.
IntelliSence normál módban
 
Ctrl billentyű lenyomása közben
 
– Preview-s ablakváltó
A Visual Studio 2008 a Vista-tól „örökölt” egy szerintem hasznos szolgáltatást, még pedig a preview-s ablakváltót! VS05-ben még csak úgy lehetett az ablakok között váltani, hogy fent az eszköztár alatt rákattintunk a megfelelő fájlhoz tartozó fülre. (Vagy pedig az F7 billentyű nyomogatásával tudtunk váltogatni a markup és a codefile között!) A 2008-as verzióban, ha lenyomjuk a Ctrl + Tab bill. kombót, akkor az alábbi kis design-os ablak segít minket a fájlok, illetve a segédablakok közötti váltásban:
 
– Gyors eseményfeliratkozás
Amikor kódból szeretnénk feliratkozni egy bizonyos eseményre, akkor sokszor elgondolkodunk előtte, hogy vajon milyen paramétereket kaphat az esemény.  Sima EventArgs? – ááá, dehogy… akkor talán SqlNotificationEventArgs?  -… az biztosan nem.
Ettől a ténylegesen sokszor sok fejtörést okozó problémától úgy tudunk a legegyszerűbben megszabadulni, hogy amikor fel akarunk iratkozni az eseményre, és már a += -nél tartunk, akkor megnyomjuk kétszer a Tab-ot! Ilyenkor a VS nem csak beilleszti az adott sorba a new Eventhandler-t a kezelőfüggvény nevével együtt, hanem létre is hozza az eseménykezelő-függvényt hozzá!  Alapban NotImplemented kivételt dob a metódus, ezért ha esetleg elfelejtenénk megírni hozzá a kódot, akkor legkésőbb futtatáskor ez ki fog derülni.
Esemény feliratkozáskor
 
Két Tab után
 
– CodeSnippet-ek használata
Sokszor használunk if-eket, foreach-eket, sokszor írunk saját tulajdonságokat, stb., és ezek begépelése általában a legunalmasabb része a kódolásnak. Ezen lehet változtatni a codesnippet-ek (kódtöredékek, kódmorzsák) segítségével. A dolog lényege, hogy a kötött formájú vezérlési szerkezeteket, ujjgyakorlatokat, nem kell teljesen begépelnünk csak egy kulcsszót, illetve utána a "függő-váltózó" részeit.
CodeSnippet -eket úgy tudunk beszúrni, hogy jobb klikk bárhol a kódban, majd helyi menü >> Insert Snippet… menüpont. VS08 esetén ilyenkor választanunk kell egy könyvtárat ahonnan szeretnénk kódrészleteket beszúrni, majd az intellisence felsorolja a lehetséges codesnippet-eket. VS05-nél még nincs könyvtárba szervezés!
 
 
 
prop kulcsszó– Új tulajdonság létrehozásához (VS05-ös kép, ugyanis C# 3.0 már vannak default értékkel létrehozható tulajdonságok!)
 
Természetesen a helyi menüs barangolás elhagyható a dologból, egyszerűen csak be kell írnunk a shortcut-ját a codesnippet-nek, majd pedig két Tab-bal be kell illesztenünk. Például konstruktort egy osztályhoz egyszerűen a ctor + 2xTAB segítségével adhatunk könnyedén!
 
– Kód körülölelés codesnippet-tel
A kódtöredékek beszúrásának van egy hatékonyabb módszerre is, amikor egy adott kódrészlet köré „folyatjuk” a codesnippet-et.  Ilyenkor a jobb klikk-es helyi menüből ne az Insert Snippet…-et válasszuk, hanem a Surrond With…-et!
 
 
Most ennyi VS hasznos feature jutott eszembe, de jövő héten folytatom tovább a listát, de akkor már C# hasznos feature-ekkel! Természetesen a hatékony fejlesztéshez a hotkey-k megtanulása is nagyban hozzájárul (pl.: Alt+shift+enter >> Teljes képernyős nézet)! Ezeken kivül még érdemes lehet 5-10 percet rászánni a Refactoring lehetősége megismerésére is!
Remélem sikerült újat is mutatnom!
 

Online Office ala MS

Posted: 2008. március 25. in Tippek, Trükkök
Tegnapelőtti netes barangolásom közben találtam rá az Office net-es változatának béta verziójára. Az elgondolás annyira már nem új keletű, sőt inkább válasz a Google által kifejlesztett Online Office-ra. A dolog lényege, hogy telepítés nélkül meg lehessen nézni, illetve esetleg szerkeszteni az office dokumentumainkat.
Google Dokumentumok
http://docs.google.com/
 
MS Office Live Workspace
 
Képek alapján mindkettő szép és jó, majd ha egyszer sok időm lesz, akkor letesztelem melyik a jobb…

Estefelé még visszatérek egy SL 2.0 élménybeszámolós blogbejegyzéssel!
 
Az év egy ilyen kitüntetett napján, mint a mai, mivel mással rukkolhatnék elő, mint egy rendhagyó blog bejegyzéssel. Mai témának néhány ingyenes .NET -ben készített professzionális alkalmazás bemutatását találtam ki!
 
De még mielőtt belekezdenék a mondókámba, meg kell veletek is osztanom egy végtelenül fontos információt! Még pedig, hogy valójában nem a mai nap szökőnap, hanem 24.-e volt! (Nem mintha nem lenne tök mindegy…)

 
Az első kivesézendő delikvensünk a Paint.NET nevet viseli.
 

Mint ahogyan a nevéből is következik, ez egy képszerkesztő program, mely nem csak, hogy ingyenes, de nyílt forráskódú is! A progit C# nyelven követték el. Jelenleg a 3.22-es a stabil verzió belőle.
 

A Paint.NET kinézetében|elrendezésében, illetve funkcionalitásában|szolgáltatásaival egyértelműen a Photoshop-ra hajaz, nem pedig az mspaint-re. Van benne minden, ami a szemszájnak ingere: layer-ek, graident brush, … ,merevlemez függő history és végtelen sok plugin.
A program jelenlegi verzió még .NET 2.0-t igényel, emiatt értelemszerűen GDI+-t használ, vagyis rasztergrafikus képek szerkeszthetőek, kreálhatóak benne. Én kíváncsian várom a .NET 3.5-re alapuló verziót is, amely remélhetőleg már ki fogja hajtani a WPF (windows presentation foundation) megjelenítő alrendszert.
A körülbelül 5 megás progi hivatalos oldala az alábbi címen érhető el: http://www.getpaint.net/
Egyéb idetartozó linkek:
Magyarosítás a progihoz – http://paintdotnet.forumer.com/viewtopic.php?t=848
Plugin rengeteghttp://paintdotnet.forumer.com/viewforum.php?f=16

 
A következő említésre méltó .NET-ben fejlesztett alkalmazás a Microsoft Student Graphing Calculator, vagy újabb nevén a Microsoft Math
 

Ez az alkalmazás az előzővel ellentétben (mely egyetemi hallgatók által lett kifejlesztve) teljesen Microsoft-os termék. Sajnos ennek csak a "régi" 2006-os verziója (azaz az Student Graphics Calculator(SGC)) ingyenes, a Microsoft Math sajnos már nem!

 

 
Ez az alkalmazás főleg egyetemi szintű matematikai feladatok megoldásához lett kitalálva. Nem csak spéci egyenletek megoldására képes (Equation Solving), hanem függvények 2 illetve 3 dimenzióban történő megjelenítésére, forgatására is (Graphing)! Ezen felül tartalmaz még egy körülbelül 100db a matematikában gyakran használt egyenlőséget, egyenlőtlenséget, azonosságot (Equation Library).
A Math-ban van néhány eléggé jó újítás a Student Graphics Calculator-hoz képest, emiatt nem is .NET 2.0-át igényel, hanem már 3.0-át! Pl.: van benne egy olyan feature, hogy az egyenleteknél nem csak a megoldását írja ki, hanem lépésről-lépésre végig is vezet a megoldás menetén! Lehet már benne mátrix-okkal is dolgozni (ebben nem vagyok teljesen biztos, h ezt nem tudja a SGC), illetve van benne kézírás felismerő is, stb!
 

 

 
A Student Calculator letölthető innen.
 
 
Hát mára ennyi fért csak bele ebbe a bejegyzésbe, remélem tetszett, és mindenki ki fogja próbálja ezeket a progikat!
Ha esetleg valaki találkozik, ilyen vagy ehhez hasonló .NET-es alkalmazással kérem írjon nekem, hogy kitehessem ide a blogba! Előre is köszönöm!

ASP.NET Tippek, Trükkök I. rész
 
Ma ismét egy kicsit rendhagyó blog bejegyzést olvashattok. Ennek több oka is van. Az egyik és legfontosabb a globalizációval kapcsolatban még gyűjtök anyagot. A másik szintén értelmetlen indok az, hogy ezeket tényleg hétköznapi problémákra lehet megoldásként alkalmazni. Ebben a bejegyzés három okosságról fogom lerántani a leplet, ígyvágjunk is bele!
 
 
1.Trick
Biztos mindenkivel előfordult már az, hogy egy saját osztályból (tehát nem apsx-ról, hanem App_Code mappában lévő üzleti logikából) próbálta meg volna elérni, mondjuk a Cache-t, vagy a Response objektumot. Hát igen, nem is olyan egyszerű a dolog. Direktbe nem tudjuk elérni ugyebár, ezért el kezdünk egy kicsit gondolkodni. A Response egy tulajdonság, nem pedig egy objektum. A Response a Page osztály egy tulajdonsága! De mintha már olvastunk volna valahol arról, hogy a Response egy HttpResponse objektumot valósít meg.
Na ugye, hogy mégse vagyunk elveszett emberek. Vagy mégis? Bepötyögjük szépen http, majd IntelliSence segítségével kiválaszt a HttpResponse objektumot és jön ismét a nagy pofára esés. Itt csak három tagfüggvényt tudunk elérni, amelyek teljesen általánosak és semmire se jók (legalábbis most biztos). Jön ismét a nagy 5let, létre kell hoznunk belőle egy példányt. Létre is hozunk belőle egy példányt, majd látjuk, hogy a konstruktora vár egy TextWriter objektumot. Oké legyen, implementáljuk a System.IO névteret is, ezen ne múljék.
Mivel a TextWriter egy absztrakt osztály, ezért konkrétan egy TextWriter objektumot nem tudunk neki odaadni. De egy belőle leszármaztatott osztályt már simán, pl.: StringWriter-t.
Na nézzük hol állunk most kód ügyileg:
TextWriter tw = new StringWriter();
HttpResponse hr = new HttpResponse(tw);
hr.Write(”Teszt”);
 
Futtatjuk és nagy megdöbbenésünkre nem ír ki semmit az oldalra az alábbi pár sor kód. Megint gondolkodunk, majd szétvet minket az ideg, és gondolunk egy merészet. Mi lenne, ha egy HtmlTextWriter objektum segítségével akarnánk kiírni. Okés, átírjuk a StringWriter-t HtmlTextWriter-re és látjuk, hogy mindkét túlterhelése a konstruktorának egy TextWriter obejktumot vár. És már fel is robbantunk.
Ezt úgy tudjuk elkerülni, hogy tovább olvassuk a blogot! Most kicsit félretéve a mese részt, elég hamar rájöttünk arra, hogy rossz helyen kopogtattunk. A nekünk kellő osztály nem a HttpResponse, hanem a HttpContext. Ennek van egyetlen egy baromi hasznos tulajdonsága, még pedig a Current. Ezzel eltudjuk érni az weboldal által használt kontextust és innen mintha már egy aspx oldal Page objektum-át sasolnánk. Tehát elérhetjük a Request-et, a Cache-t, a Session-t, stb. Egy oldal átirányítás az alábbi egyetlen sorral megoldható, ahelyett hogy ismét a HttpServerUtility vagy HttpUtility osztályokkal szenvednénk:
HttpContext.Current.Server.Transfer(„AndItsWorks.apx”);
 
 
2.Trick
Egy másik gyakori probléma, amibe bele futottunk már egy párszor, vagy ha még akkor fogunk az az, hogy egy Null értéket tartalmazó cellát akarunk olvasni. Hát igen, jön a szép Exception, mi meg ismét nagyon örülünk. Most már csak mese nélkül vázolom a rossz megoldást. Van a System.String objektum-nak egy IsNullOrEmpty() metódusa. Ezzel az a baj, hogy csak stringet lehet vele vizsgálni, így konvertálnunk kéne egy null értéket, ami lássuk be nem megoldható jelen esetben.
Viszont két jó megoldás közül is választhatunk, hogy elkerüljük a NullReferenceException-t. Az egyik megoldás az, hogy a DataReader (legyen mondjunk most SQL) IsDBNull() tagfüggvényét meghívjuk, amely egy bool értékkel tér vissza. Így egy egyszerű elágazásban letudjuk kezelni , ha null értéket tartalmazott az adott cella. Íme egy példa:
string result;
if(reader.IsDBNull(0)) result=”It was null!”;
else result=reader.GetString(0);
 
Az IsDBNull, illetve az összes Get-es tagfüggvénye az SqlDataReader objektumnak, mind egy oszlopazonosító számot várnak paraméterül. Ne feledjük 0-tól kezdődik a számozás és a lekérdezésben megadott mezősorrend érvényes itt is!
A másik jó megoldás a null értékű cellák olvasásra, az NVL sql függvény. Mivel sql függvény, ezért magába a lekérdezésbe kell beleágyazni. Két paramétert vár, az első egy mezőnév, melyben a null értékeket le szeretnénk ideiglenesen cserélni, a második paraméterként megadott értékre. Nézzünk egy példát:
 

SELECT Fizu + NVL(premium,0) FROM Ceg WHERE…
 
Tehát csak a null értékek lesznek lecserélve ilyenkor 0-ára.  Most már tudunk két alternatívát is a null értékek kezelésére.
 
 
3.Trick
A mai harmadik okosság a tárolt eljárásokkal kapcsolatos. Ugyebár, amikor egy tárolt eljárást akarunk meghívni, akkor a Command objektumnak be kell állítani a CommandType tulajdonságát is. Hát velem nem egyszer történt meg az, hogy ez a sor kimaradt a kódból. Aki nem tudja, hogy miről beszélek, annak itt egy példa:
MySqlCommand.CommandText = ”Insert_News”;
MySqlCommand.CommandType = CommandType.StoredProcedure;
 
Majd utána jönnek a paraméterek. Erre egy alternatíva az Execute utasítás, amely után meg kell adni a tárolt eljárásnevét. Előnye, hogy ilyenkor nem kell beállítani a CommandType-ot, mivel ilyenkor indirekt hajtatunk végre egy tárolt eljárást már. Hátránya az, hogy ilyenkor viszont fel kell sorolnunk az összes bemenő paramétert, természetesen a bekérésnek megfelelő sorrendben. Íme a fentebbi kód módosítása:
MySqlCommand.CommandText = ”EXECUTE Insert_News @Author, @Title, @News, @Date”;
 
 
Remélem ezzel a három kis okossággal sikerült újat mondanom nektek! A kövi ilyen Tips & Tricks blog bejegyzés még nem tudom mikor lesz, így ezen a héten befejezem még a 70-536-os könyv vesézést.