2008. december 12., péntek

Branch kezelés SVN alatt TortoiseSVN segítségével

Az branchek kezelése előbb-utóbb minden verziókezelést használó projektben előkerül. Ezt a nagyon expert felhasználók minden bizonnyal remekül csinálják különböző parancssori eszközökkel, de azoknak az SVN-t használó fejlesztőknek, akik a grafikus felületeket kedvelik (és persze windowst használnak) azoknak rendelkezésre áll a TortoiseSVN. Jómagam is ezt használom (az AnkhSVN Visual Studio plugin mellett), úgyhogy ezen a kliensen kellett a branchelés "titkait" feltárni.
Az egyik lényeg, hogy a repository létrehozásakor tartsuk be a konvenciót a szerkezetre vonatkozóan, mert a hangzatos branchelés tuljdonképpen nem más, mint ide-ode másolás és merge a trunk és branch könyvtárak (vagy mik) között.


Ha - mint a mi esetünkben - a felépítés eredetileg nem követte ezt a szerkezetet, akkor sincs baj, mert egyszerűen a HEAD reviziót expotálni kell a trunk alá, a másik helyről pedig törölni és máris helyreállt a rend.
Amikor ezzel megvagyunk, akkor a trunk verziót leszedjük, mint working copyt, majd a felbukkanó menüből kiválasztjuk a branch/tag menüt, ami feldob egy dialógus ablakot.
A dialógusablak kitöltésével a branch ág alatt létrehozzuk az új ágat egy megfelelő néven (esetünkben branch1). Amennyiben ezzel akarunk tovább dolgozni - mint általában - akkor ezt tegyük meg working copynak.


Ha ez megvan, akkor már láthatjuk is a reviziós gráfban az új águnkat.


A következő fontos dolog, hogy amikor végeztünk az adott módosítás/feature fejlesztésével, akkor vissza tudjuk illeszteni a főágba a módosításokat. Hosszabb munka esetében éppígy szükséges lehet a főág változásainak rendszeres átvezetése is. Ez a merge-elésnek nevezett eljárás nem meglepő módon a merge menüpont alól érhető el.

Három féle merge eljárást végezhetünk, attól függően, hogy hogyan akarunk tovább dolgozni. Az első esetben átvihetjük a mi változásainkat egy másik ágba, de tovább dolgozunk a saját verziónkkal, a másodikban visszatérhetünk a változásainkkal együtt a főágba, a harmadik esetben pedig a saját munkaváltozatunkba hozhatjuk be a főág változásait úgy, hogy tovább dolgozun a külön ágon.

Maga a merge a szokott módon történik. Ha nincs konfliktus, akkor az eszköz automatikusan összefésüli a változatokat, a konfliktusoat pedig kézzel tudjuk feloldani.

Tudom, a leírás nem kimerítő, de a lényeg remélem benne van.

2008. december 9., kedd

Legutolsóként lefutó JS függvény

Nemrég szükségem volt rá, hogy egy bizonyos javascriptet úgy futtassak le egy usercontrolokat bőven tartalmazó MS-AJAXos ASPX oldalon, hogy MINDENKÉPPEN ő legyen a legutolsó.
Teljesen függetlenül attól, hogy esetleg itt-ott RegisterStartupScript metódusok vagy bármi egyéb megoldások az oldal részeiben most vagy később garázdálkodnak-e, én azt szeretném, ha nem borítanák meg a rendet.
Hosszas guglizás és kísérletezés után találtam egy többé-kevésbé kielégítő megoldást.
Azért csak többé-kevésbé, mert IE és FF esetében az elvárt módon működik, de sajnos opera alatt nem (mást meg sem mertem próbálni :)).


A kulcs az alábbi függvény:


function AddOnload(myfunc)
{
    if (window.addEventListener)
        window.addEventListener('load', myfunc, false);
    else if (window.attachEvent)
        window.attachEvent('onload', myfunc);
}


Ami ugye (kompatibilitási okokból kétféleképpen) feliratkozik az oldal onload eseményére.
Ezt próbáltam különböző módokon meghívni, hogy a kívánt eredményt kapjam.


Az első változat így nézett ki:



<html>
<head>
    <script type="text/javascript">
        function mymessage()
        {
            alert("onload event");
        }
 
        ...
        ...
 
        alert('inline');
        AddOnload(function() { alert('TheLastOne'); });
    </script>
</head>
<body onload="mymessage()">
    ... ...
</body>
</html>



IE-re már jó is volt. Először megjelent az inline kód, utána az online attribútumban megadott végül pedig az ominózus utolsó. FF esetében már sajnos nem ez volt a sorrend. Ott gyakorlatilag inline
függvényhívásként működött a dolog, szerintem helytelenül. Azután eltoltam a feliratkozást az oldal végére, ez a FireFoxot is rávezette arra, hogy mit is akarok tulajdonképpen. Mint említettem Operában továbbra sem jó ez a megoldás, de több időt nem szántam rá.
Őszintén szólva az IE és a FF a 99.9%-át lefedi felhasználóknak, tehát ennyiben hagytam a dolgot.



    1 <html>
    2 <head>
    3     <script type="text/javascript">
    4         function mymessage()
    5         {
    6             alert("onload event");
    7         }
    8 
    9         function AddOnload(myfunc)
   10         {
   11             if (window.addEventListener)
   12                 window.addEventListener('load', myfunc, false);
   13             else if (window.attachEvent)
   14                 window.attachEvent('onload', myfunc);
   15         }
   16     </script>
   17 
   18 </head>
   19 <body onload="mymessage()">
   20     ...
   21     ...
   22 </body>
   23 
   24 <script>
   25     alert('inline');
   26     AddOnload(function() { alert('TheLastOne'); });
   27 </script>
   28 </html>


Elég érdekes, hogy melyik böngésző hogyan értelmezte az utasítást.
A fenti kód lett a végső változat, amely FF és IE esetében egyformán utolsónak hívja a kívánt scriptet.

2008. december 2., kedd

WinMerge beállítása merge tool-ként a TotalCommanderben


Ez a tipp hasznos lehet TC és WinMerge fanoknak.

A dolog meglehetősen egyszerű. Fogd a wincmd.ini fájlt és írd be a konfigurációs szekcióba a következőt:

Comparetool=C:\program files\winmerge\WinMerge.exe

A path értelemszerűen behelyettesítendő. Természetesen a dolog nem titkos, benne volt anno a release notes-ban, vélhetően a helpben is meg lehet találni, de hát ki olvassa ezeket? :)

2008. november 29., szombat

A TabContainer és a rejtélyes tábla esete

Jelenleg épp egy olyan ASP.NET alkalmazáson dolgozom, ami használja az AJAX Control Toolkit TabContainer kontrolját.

Tudni kell, hogy az adott alkalmazás esetében eléggé sarkalatos kérdés performancia. Magyarul lassú mint a csiga az akácerdőbe'. Ez részben annak köszönhető, hogy meglehetősen összetett és az összes létező technológiát használja, sőt néhány nem létezőt is :) Ennek megfelelően folyamatosan mérve van és a legkisebb további lassulás is eléggé mély ráncokat vés a homlokokra.

Az előzmények ismeretében érthető, hogy nem volt túl örömteli, mikor egy dizájn csiszolgatás után, ahol is kis kinézetbeli igazgatások történtek, bekerült egyszer csak valahonnan 4 másodperc (!) extra renderelési idő. Igaz, hogy a cucc nagyon lassú, de azért 4 másodperc még így is mintegy 70-80%-os lassulást jelentett. Azonnal elkezdődött a vad nyomozás, majd végül kiderült, hogy nem más tekeri meg ennyire a böngészőt, mint egyetlen egy darab dekorációs célból odabiggyesztett 1 pixeles vonal, ami ezzel a kóddal lett kivitelezve:

<table class="tab_top_decor">

<tbody>

<tr>

<td class="tab_top_decor_selected">

</td>

<td>

</td>

</tr>

</tbody>

</table>


Rendben, elismerem, nem a legjobb erre a célra táblázatot használni, de mivel az oldal teljes egészében old-school (és nem túl okos) módon táblázatokkal van formázva, így azt gondoltam, nem oszt nem szoroz, ráadásul akkor még nem tudtam erről a trükkről, ami a 6os explorernek is megmondja, hogy márpedig mekkora az akkora.
Érthető módon majd megölt a kíváncsiság és szanaszét teszteltük az oldalt, míg végül kiderült, hogy az adott tábla csak a TabContainer belsejébe helyezve okozza ezt a durva lassulást. Idő híján nem nyomoztunk tovább, de valószínűleg a TabContainer javascriptjei között van valami ordenáré módon lebaltázva, aminek ezt a 4 másodpercet köszönhettük.

Miután a korábban említett trükköt kiderítettem átírtam DIV-re a dekorációs csíkot és így már minden rendben volt. Na meg természetesen eldöntöttük, hogy ha egy mód van rá megszabadulunk a tebkonténertől, mielőtt még egy időzítet bomba az arcunkba robban.

2008. november 28., péntek

IE6 és a DIV méretezése

Jelenleg egy olyan projektben dolgozom, ahol az egyetlen és kizárólagos webkliens az Internet Explorer, annak is az öregecske 6-os verziója. Mint tudjuk az IE mindig is arról volt hírhedt, hogy nagyvonalúan kezeli a szabványokat, de különösen hírhedt ez a verzió a DIV elementek érdekes kezeléséről. Nálam ez most éppen azért okozott fejtörést, mert dekorációs célzattal egy 1px-es vonalat kellett elhelyeznem, ami dinamikusan alakulgat. Lényeg az, hogy a leglogikusabb megoldásnak egy 1px magas DIV tűnt. Volna. Ha az IE hajlandó lett volna 10px-nél kisebb elemet megjeleníteni.
Hosszas guglizás után kisült, hogy ez a csacsi IE nem hajlandó az aktuális fontméretnél alacsonyabb lenni, csak, ha ezt külön megmondjuk neki. Hm. Ez vajon kinek a fejéből pattanhatott ki? Vagy csak mellékhatás? Bizonyíték gyanánt nézd meg ezt a kódot IE6 alól:

<div style="background-color: #FF0000; height: 1px"></div>


Ime:

Ha a fentit tudjuk, akkor már könnyen rá lehet jönni, hogy milyen beállításokkal lehet elérni a kíván 1px magasságot.
Logikusnak tűnik a DIV számára az 1px-es fontméret beállítása.

<div style="background-color: #FF0000; height: 1px; font-size: 1px"></div>





Ez a megoldás majdnem jó, de nem teljesen. Így már tudunk egész kicsi magasságot beállítani, de 1px-et mégsem.
Az igazi okosság az overflow tulajdonság beállítása, ami azt jelenti, hogy lekezeljük a kilógó részeket.

<div style="background-color: #FF0000; height: 1px;overflow: hidden"></div>





Így már tökéletes 1px-es csíkunk van. Fentieket teszteléséhez kiválóan lehet alkalmazni az IETester nevű segédprogramot, ami 5.5-től felfelé bármelyik IE verziót tudja nekünk prezentálni.

2008. november 23., vasárnap

Levélküldés tesztelése SMTP nélkül

A legtöbb webes alkalmazásban van egy-két olyan sztori, amikor levelet szándékozunk kiküldeni a rendszerből. A végleges változatban általában SMTP szerver felhasználásával tesszük ezt, de fejlesztés közben meglehetősen kényelmetlen minden tesztfuttatás alkalmával ellenőrizni egy postaládát. Ráadásul korántsem biztos, hogy rendelkezésre áll a megfelelő szerver, a fejlesztői gépre sem feltétlenül tudunk vagy akarunk telepíteni.
Ilyenkor az SmtpClient osztály beállításával megtehetjük, hogy a saját fájlrendszerünkkel "levelezünk".
Fentiekhez a web.config állományban a következő beállítások szükségesek:

<system.net>

<mailSettings>

<smtp deliveryMethod="SpecifiedPickupDirectory">

<specifiedPickupDirectory pickupDirectoryLocation="c:\temp\mailpickup"/>

</smtp>

</mailSettings>

</system.net>


Így azonnal ellenőrizhetjük, hogy az üzenet a megfelelő tartalommal előállt-e.

[Test]

public void SendMailTest()

{

SmtpClient smtpclt = new SmtpClient();

MailMessage message = new MailMessage("from@server.com", "to@server.com");

message.Body = "Body";

message.Subject = "subject";

smtpclt.Send(message);

}


A kliensnek egyébként futás közben is megmondhatjuk, hogy a levelet ebbe a könyvtárba küldje:

smtpclt.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;

smtpclt.PickupDirectoryLocation = "c:\\temp\\mailpickup";

2008. november 13., csütörtök

jQuery intellisense tipp

FRISSÍTÉS:
Tegnap olvastam, hogy a Microsoft a VS2008-hoz megjelentette ezt a frissítést, ami lehetővé teszi, hogy trükközés nélkül használjuk a jQuery intellisense támogatást.

Kettővel ezelőtt írtam, hogy van már VS intellisense részére kommentelt jQuery.
Van egy okos trükk, hogy véletlenül se felejtődhessen benne a végső kódban a kommentekkel tűzdelt js állomány.

<script src="jquery-1.2.6.js" type="text/javascript"/>

<% if (false) { %> <script src="jquery-1.2.6-vsdoc.js" type="text/javascript"/>

<% } %>



A fenti módon inkludálva a scriptet az intellisense látni fogja, viszont rendereléskor nem kerül be az oldalba.
(A tipp az ASP.NET Debugging blogról származik)



2008. november 11., kedd

Gyalogos útvonaltervezés API reloaded

A múltkoriban írtam a témában egy rövidet. Akkor idemásoltam egy kódrészletet, ami elvben szemléltetné a használatot. Nos szemléltetésre épp jó csak nem működik :)
Amikor élesben akartam használni a függvényt, mégpedig úgy, hogy az útvonalat ÉN MAGAM rajzoltatom ki és nem adok meg sem panelt az itinernek, sem pedig map paramétert kiderült, hogy ez bizony így nem megy:

var directions = new GDirections();


Nem tudom bug-e vagy feature, de az ititnert feldolgozó DIV megadása nélkül nem működik.

var directions = new GDirections(map, directionsPanel);


Az, hogy az itiner ne legyen látható, elég egyszerű hack.

<div id="route" style="width: 0px; height:0px; display: none;">



Ha (úgy ahogy én) csak a polyline-t akarjuk beszerezni, akkor a konstruktorban lehet null-t adni a map helyén:

var directions = new GDirections(null, directionsPanel);


Egészében a működő cucc:

Bár ennél a megjelenítésnél nem látszik, de az irány több helyen egyirányú utcákban szemben megy, bizonyítván ezzel, hogy tényleg gyalogos útvonalterv készült :)
Íme a forrás:

var map;

var directionsPanel;

var directions;

function initialize() {

map = new GMap2(document.getElementById("map_canvas"));

map.enableScrollWheelZoom();

geocoder = new GClientGeocoder();

geocoder.getLocations("Hungary, Budapest Jókai tér 5", function(response) {

var place = response.Placemark[0];

var p = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);

map.setCenter(p, 17);

}

);

directionsPanel = document.getElementById("route");

directions = new GDirections(null, directionsPanel);

GEvent.addListener(directions, "load", function() {


var gdpolyline = directions.getPolyline();

map.addOverlay(gdpolyline);

});

var opts = { getPolyline: true, getSteps: true, preserveViewport: false, travelMode: G_TRAVEL_MODE_WALKING };

directions.load("from: Hungary, Budapest Jókai tér 5 to: Hungary, Budapest Hernád utca 48", opts);

}

2008. október 29., szerda

Egymásba ágyazott generikus listák

Meglepő, de lehetséges:

Ebben a postban illetve az egyik kommentjében van egy szép példa

204 List<List<int>> MyListOfIntLists;

205 myListOfIntLists = new List<List<int>> {

206 new List<int> { 1, 2, 3 },

207 new List<int> { 4, 5, 6 },

208 };


2008. október 28., kedd

Intellisense jQuery támogatás a Visual Studiohoz

Nemrégiben röppent fel a hír, hogy a MS letette a voksát a jQuery függvénykönyvtár mellett.
Ennek jegyében a jQuerynél elkészítettek egy a VS számára kommentekkel ellátott verziót, amit az IntelliSense tud kezelni.


Letölthető innen:
1.2.6:
http://code.jquery.com/jquery-1.2.6-vsdoc.js
Latest release (jelenleg ugyanaz)
http://code.jquery.com/jquery-latest-vsdoc.js

Arra azért ügyeljünk, hogy ezek a kommentek nem kicsit hizlalták fel a függvénykönyvtárat. A végső verziókban ne felejtsd el lecserélni a kommentezett verziót a minified vagy a packed verzióra!

Új .NET logo

Kicsit próbálták vizuálisan függetleníteni a régi Microsoftos, windowsos piros-sárga-kék-zöld témától.
De lehet, hogy a többi termék is bekékül később.
Illetve nem lehet, hanem biztos, mivel ugye Windows Azure...

2008. október 22., szerda

APIból is használható a gyalogos útvonaltervezés

Az elmúlt hónapban idő híján kicsit elmaradtam néhány témában, de időnként elkezdem átbogarászni a megcsillagozott postokat az RSS források között.
Így fordulhatott elő, hogy csak most sikerült értesülnöm róla, hogy egyik kedvencem, a gyalogos útvonaltervezés, API hívásként is használható már.
Semmi mást nem kell tenni, mint használni az új opciót és bővíteni a már meglévő függvényhívásunkat:

var geodirections = new GDirections();
geodirections.load(
"from: " + startpoint.lat() + "," + startpoint.lng() +
" to: " + clickedPoint.lat() + "," + clickedPoint.lng(),
{
getPolyline: true,
getSteps: true,
preserveViewport: false,
travelMode:G_TRAVEL_MODE_WALKING
});


Természetesen a legutolsó 2.x-es APIt célszerű használni.

A featúrát hírül adó bejegyzéshez készült egy kis példaalkalmazás is.

2008. október 12., vasárnap

Kinek mi jutott a háromdéből

A ma délelőtti kirándulásunkat szemlélgettem éppen a Google Earth-ben - a fene tudja miért, de van ez a perverzióm - aztán észrevettem, hogy van ám már Egernek is 1 azaz egy darab 3D-ben ábrázolt épülete. Persze az ember rögtön azt gondolná, hogy a bazilika vagy a vár, de nem. A Minaret az. Mondjuk tény, hogy ezt jóval könnyebb lemodellezni :)


Ezen felbuzdulva megnéztem még egy-két más várost. Feltűnt, hogy Pécs belvárosában például már egész szépen láthatjuk a legszebb épületeket. De könyörgöm, az átkosból ránk maradt kockaházak minek? Jó értem én, hogy egyszerű modellezni, de akkor is. További nyomozás után azt gondolom, itt lakik a modellek elkövetője, de csak szép sorjában.
Szóval ennél a résznél kezdtem gyanút fogni. Rákattintva az egyik épületre kiderült ám, hogy "modell by geobéka". Rögtön írtam is be a "fly to" ablakba, hogy Székesfehérvár, és nem kellett csalódnom. A Pirosalma utcában büszkén feszít 3D-ben az Alma Mater vagyis a GEO épülete :)
Ha jól emlékszem a Geobéka (valahogy a geodétából meg a békából, de hogy miért arra már nem emlékszem) szóösszetétel Lüvi Pityu alias PI barátom agyából pattant ki valamikor '97-'98 tájékán, ami aztán a Geós kultúra része lett, ahogy látom. Ráakadtam valamiféle Google pályázatra amin ez a modell részt vett (Modell your Campus). Nosztalgiával gondoltam rá, hogy nem is olyan régen (ööö... jóvanna... 99'-ben) a szakdolgozatomhoz mennyire korszakalkotó ötletnek gondoltam, hogy utcai panorámákra helyezett image-mapekkel készítek egy erősen idézőjeles "navigációs rendszert" vagy nem is tudom mit. Mindenesetre ugye kicsit olyan volt mintha az ember az utcán mászkálna.
Na tessék, most meg már on-line 3D modelleket nézegetünk.
Bámulatos hol tart már a tudomány. Mondd csak el mégegyszer hogyan lehet birkavesével földrengést megelőzni!

2008. október 9., csütörtök

A 2-es metróval Minnesotába :)

Ahogy a mellékelt ábra mutatja, a műhold nélküli helymeghatározás azért nem az igazi, iPhone ide vagy oda…

2008. szeptember 30., kedd

A jQuery és a Microsoft

Scott Guthrie írja, hogy a jQuery hamarosan bekerül a hivatalosan támogatott és terjesztett csomagok közé.
http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx
Már pedig ha ő mondja, akkor az úgy van :)

2008. szeptember 26., péntek

Honi ráncfelvarrás

Ritkán keveredek rá mostanában a magyar útvonaltervező oldalakra, így csak most vettem észre, hogy jelentős ráncfelvarráson esett át az utvonalterv.hu. Ami azt illeti igencsak ráfért már.
Nem csak kinézetileg, hanem a GUI minden tekintetében átalakultak.
A működés erősen hajaz a Google maps működésére, de ez nem feltétlenül baj, hiszen sokan megszoktuk/ták már. Szerintem vitathatatlanul a legértelmesebb és leghasznosabb dolog az, hogy végre ki-be kapcsolható rétegként kerültek fel a Fővinform adatai.

A palettán találunk még közhasznú(nak szánt) bekapcsolható rétegeket, ezek közül nagyon hiányolom a BKV nyomvonalakat (megboldogult bpterkep.index.hu ....) . Különösen azért, mivel ez a cég szolgáltatja a BKV számára az útvonaltervezést, ami a felületet tekintve sajnos továbbra is kritikán aluli.
Feltételezem, hogy jelentős szerepe volt az átalakításban annak, hogy (ha jól tudom) tulajdonosváltás volt nem olyan rég.

2008. szeptember 17., szerda

Lorem ipsum generátor

Gondolom mindenki látott már a „Lorem ipsum" kezdetű latin szöveggel feltöltött oldalakat, adatbázismezőket.

A http://www.lipsum.com/ weboldal egyik oldalról a fenti szöveg különböző fordításait tartalmazza, ha valaki – mint én is – kíváncsi rá, hogy mit is lát tulajdonképpen, amikor ezt a szöveget olvassa. Másik szerepét tekintve az oldal gyakorlatilag BLABLAGYÁR névre hallgathatna magyarul, mert tetszőleges hosszban és/vagy sorszámban tud előállítani kitöltő szöveget, ha akarod "Lorem ipsum"-mal az elején ☺ Készítettek egy remekbeszabott Firefox plugint is, hogy ne kelljen az oldalra elzarándokolni, ha az ember például egy 1000 karakterre korlátozott mező validálását vagy egy karakterszámlálót vagy effélét szeretne tesztelni.

Tud magyarul is:

http://hu.lipsum.com/

2008. szeptember 15., hétfő

Budapest 3D-ben

Szégyenszemre az indexről értesültem róla, hogy Budapest fontosabb épületei is bekerültek a Google Earth adatbázisába. Miután bekapcsoltam a 3D épületeket és kicsit böngészgettem a fővárost, sikerült egy egész jópofa budai látképet összehoznom :)

2008. szeptember 11., csütörtök

Tetszőleges típusú statikus térképek

Korábban említettem már, hogy van ez a jópofa Static Map API, aminek a segítségével egyszerű képként lehet megjeleníteni google maps térképeket, javascript nélkül egy egyszerű GET metóduson keresztül. Ez eddig csak egyféle nézetet tudott, mégpedig az „alap” térképi nézetet. Eszerint a cikk szerint az új verzióban már szatelit vagy domborzatos térképet is megjeleníthetünk.

Ezután Selmecbánya már megmutatható így:


selmecz

[http://maps.google.com/staticmap?center=48.45903491638109,18.886055946350098&markers=48.458371,18.886333,red&zoom=13&size=500x300&key=yourkey&maptype=satellite]

vagy így is:


selmecz

[http://maps.google.com/staticmap?center=48.45903491638109,18.886055946350098&markers=48.458371,18.886333,red&zoom=13&size=500x300&key=yourkey&maptype=terrain]

Nem nehéz rájönni, hogy a kulcs az új maptype paraméter.

2008. szeptember 5., péntek

Hosszú elérést röviden

Ismét sikerült felfedeznem egy hasznos apróságot a C#-ban.
Velem együtt valószínűleg többen dolgoztak már úgy, hogy egyszerre használták pl a

System.Drawing.Drawing2D

és a

System.Web.UI.WebControls

névtereket.

Ilyenkor, ha egyik vagy másik helyről szeretnénk az Image objektumot használni, akkor kénytelenek vagyunk végigkalapálni az objektum teljes nevét névterestül, mindenestül.

Ez intellisense-el nem olyan nehéz, de mégiscsak munkás, meg hát nem is szép. Például:
System.Drawing.Drawing2D.Image im = new System.Drawing.Drawing2D.Image();
Ilyen esetekben hasznos lehet a névterekre illeszthető alias, amit az alábbi módon használhatunk:

using Draw = System.Drawing.Drawing2D;
Draw.Image im = new Draw.Image();

Így azért csak rövidebb :)

2008. szeptember 1., hétfő

Adj egy IP-t megmondom hol vagy :)

A Google API-ban nemrég megjelent a kliens helyét IP alapján kideríteni képes új JS objektum, amely a
google.loader.ClientLocation
névre hallgat. Ennek eddig sem volt akadálya igazán, hiszen több helyről lehetett pontos fizetős és kevésbé pontos ingyenes geopozicionált IP adatbázisokhoz hozzájutni, de ha az ember guglis környezetben garázdálkodik, akkor vitathatatlanul egyszerűbb egy olyan eszközt használni, ami illeszkedik a környezethez. A használatához szükséges dokumentáció természetesen a többi között található meg.

Persze nem álltam meg és összekalapáltam egy kis mintaizét:

2008. augusztus 31., vasárnap

Magyarul is gyalogolhatunk

Nemrégiben írtam róla, hogy a Google térképén lehetőség van az autós (és a világ nyugati felén "békávés") útvonaltervezés mellett, hogy gyalogos sétára kérjünk javaslatot.
Akkor mi még nem használhattunk, de valamikor a közelmúltban suttyomban megjelent ez a feature a magyarországi térképen is.
Sétáljunk át mondjuk a Városligeten az Állatkerthez.

2008. augusztus 29., péntek

Magyar műemlékek térképen

Bár a projekt minimum két hónapja elindult, de engem valahogy elkerült a híre. Amiről szó van, az egy térbeli adatokkal ellátott magyar műemléki adatbázis felépítése.
Ami a dologban érdekes, hogy mindez közösségi alapon történik, de a Kulturális Örökségvédelmi Hivatal és a Magyar Geocaching Közhasznú Egyesület közös támogatásával. Természetesen a geocachingelést, fényképezést, adatbázis építést különböző nyereményekkel és egyebekkel teszik vonzóvá a nagyérdemű számára.
Az oldalon van egy Google Maps alapon működő térképi nézegető, de igazából kicsit jobban felturbózhatták volna a dolgot minimális erőfeszítéssel is. Persze legalább van :)

(A képen Eger és környéke eddig bevitt műemlékei)
Én is és még ki tudja hány leendő geodéta foglalkozott annak idején a szakdolgozat kapcsán műemléknyílvántartással. Persze akkor még nemhogy Google Maps nem volt, de a webes térkép is csodaszámba ment még. Mit nem adtam volna akkor egy ilyen jó kis APIért.
Akit mélyebben érdekel a téma nézzen körül a http://www.muemlekem.hu oldalon.

2008. augusztus 17., vasárnap

Hasznos apróságok a Visual Studio 2008 SP1-ben

Ahogy azt korábban írtam nemrégiben megérkezett a VS2008 SP1 végleges változata. Mostanra összegyűlt pár apróság, amit úgy gondoltam érdemes közzétenni.
Előrebocsátanám, miszerint lehet, hogy némelyik itt leírt feature már korábban is megvolt, csak én nem ismertem.

A JavaScript kódok formázásának támogatása az egyik olyan újdonság, amit már réges-rég időszerű lett volna, még akkor, mikor a VS fejlesztői a webes fejlesztés támogatását is bevették a kalapba. A 2008 kiadásával egy egész korrekt intellisense támogatáshoz juthattunk már hozzá, de ez még hiányzott. Igazából még mindig nem lehetünk elégedettek, mert nekem még mindig hiányzik a JS függvények ki-be csukásának lehetősége, ami ugye úgy a HTML, mint a C# vagy VB kódszerkesztőben időtlen idők óta fellelhető.
A szükséges beállítások nem meglepő módon a Tools > Options > Text editor > JScript alól érhetőek el.

Hasonlóan érthetetlen módon eddig a kódkommentekben levő TODO elemeket csak a megnyitott fájlokból volt hajlandó kiolvasni. Én személy szerint szerettem volna együtt látni minden ilyen bejegyzést, ez azonban egy nagyobb projekt esetében meglehetősen problémás lett volna. Az SP1 után nincs ennek akadálya.

Aki szereti pl a Firefox keresési módszerét előnyben részesíteni, annak lehet jó a ctrl+i billentyűkombináció, ami az inkrementális keresést teszi lehetővé az éppen aktuális fájlban. Magyarul, a beírással párhuzamosan keres rá a szövegrészletre.


Egy másik apróság a megnyitott fájlok közötti navigációra ad egy alternatívát. A crtl+tab helyett használhatjuk a ctrl+alt+down (lefelé nyíl) kombót, ami egy kicsi csinos forráslista nézetet ad nekünk.

2008. augusztus 11., hétfő

Visual Studio 2008 és .NET Framework 3.5 SP1

Ma kiadta a Microsoft a VS 2008 és a .NET 3.5 SP1 végleges változatát.
Többen ajánlják, hogy előtte használjuk a Visual Studio 2008 Service Pack preparation Tool eszközt.
Ezután bátran lehet letölteni és installálni a service packot innen.
Többek között a következő fontos/hasznos frissítéseket hozza nekünk:
  • .Net framework :)
  • Asp.Net Dynamic data
  • Asp.net Ajax Browser history
  • Asp.net Ajax Script combining
  • Ado.Net data services
  • Ado.net entity framework
A magam részéről az entity frameworkre fenem a fogam már régen, de sajnos ezidáig csak egy-két minimál próbálgatásra futotta az időmből, pedig régóta ott van a stack-ben a SQL2008 újdonságaival együtt (főleg a térbeli struktúrák ... nyami... :))

2008. július 31., csütörtök

55 ingyenes eszköz webes fejlesztéshez

Egy remek gyűjteményre bukkantam ebben a bejegyzésben ahol a szerző közismert és kevésbé közismert oldalakat tesz közzé, amelyek hasznosak lehetnek webes fejlesztéseinkhez.
Az én kedvencem a wait-animáció bütykölő tool :)

2008. július 22., kedd

Gyalogos útvonaltervezés a Google Maps-en


Autós és tömegközlekedés mellett gyalogos útvonaltervezést is választhatnak a tőlünk nyugatabbra élő Google Maps felhasználók (Google LatLong: Pound the pavement).


Talán hamarosan Budapesten is meglesz, bár van nekünk ilyenünk hazaiban, még akkor is, ha ez a hazai a megboldogult 90-es éveket idézi mind kinézet, mind működés tekintetében (Hogy is mondta Pelikán József? Kicsit sárga, kicsit savanyú, de a miénk.)

2008. július 19., szombat

Hogyan látják mások?

Gyakran van, hogy szeretnénk az elkészült weboldalunkat, ha nem is tesztelni, de legalább egy pillantást vetni rá különböző böngészőkön és operációs rendszerek alatt.
Könnyen meg lehet tenni ezt a http://www.browsershots.org címen, ahol minden jelentős (és jelentéktelen) böngésző-oprendszer párosítást megtalálunk. Csak be kell írni a megnézni kívánt oldal címét aztán várni, időnként persze visszanézegetni. A képek egy idő után törlődnek, így egy kis időt rá kell szánni, de esetneként érdemes lehet. Pl. ha épp készülünk kifizetni egy munkát amiről azt mondják, hogy így néz ki linux/konqueror alól is, de aztán meg hátha mégsem ;)

Frissített légifelvételek a google-nél

Néhány napja aki figyelmes észrevehette, valamint a hivatalos google blogon kívül a Webisztán és a kedvenc magyar térképes blogom is írt róla, hogy sokkal jobb minőségűek a Google Maps/Earth programokban a légifelvételek. A legutóbbi frissítés óta egész Magyarország területén 2.5 méteres felbontású (igen jó minőségű) képeket nézegethetünk. Ez főleg a külterületeken mutat igen szépen, például, ha az egyik szokott futóútvonalamat nézzük a Bükkben :)
oldalvölgy

2008. július 18., péntek

Tetszöleges háttérszín a Google térképnek

Amikor ehhez hasonló híreket olvasok, mindig az jut eszembe, vajon mennyire kell unatkozni ahhoz, hogy erre jusson idő? :)

2008. július 17., csütörtök

Még egy program a print screen helyett

A neve Fireshot. Firefox és most már IE alá is letölthető innen:

http://screenshot-program.com/downloads.php

A printscreenhez képest egyrészt kényelmesebb de ami fontosabb nem csak a látszó részt, hanem a teljes oldalt is le tudod menteni vele. Akár tudod egyből lemezre menteni, emilezni, vágólapra tenni, feltölteni stb…

2008. július 16., szerda

Geocimkézés .NET-ben

Érdekes és hasznos bejegyzést találtam a geotagging témában.
Roiy Zysman ebben a cikkben általánosan írja le a geotagging lényegét, de ami ennél fontosabb egy kis gyakorlati kóstolót is közöl arról, hogyan is tudunk GPS koordinátákkal és egyéb metaadatokkal ellátni egy jpeg képet.
A geotaggingra már a magyar WIKIben is van szócikk, akinek ez a szó nem mond semmit itt utána nézhet.
Programozói szempontból közelítve a dolgot a lényeg, hogy az EXIF adatok írására és olvasására a System.Drawing.Image osztály tökéletesen felhasználható.
Egy a cikkben szereplő rövid, egyszerű kódrészletet szépen megvilágítja a lémyeget:
Image Pic = Image.FromFile(Filename);
PropertyItems = Pic.PropertyItems;
PropertyItems[0].Id = 0x0002; //index of the EXIF TAG
PropertyItems[0].Type = 5;//
PropertyItems[0].Len = length;
PropertyItems[0].Value =new byte[length];
Pic.SetPropertyItem(PropertyItems[0]);
Az úr volt oly kedves és egy statikus függvényt is készített számunkra, hogy könnyedén tudjuk GPS koordinátákkal ellátni akár saját alkalmazásunkban is akár a JPG állományokat.

2008. július 4., péntek

Screenshot távolról

Weboldalak aktuális állapotát lehet "lefényképezni" ezen a linken keresztül.

Tesztelésen kívül alkalmas lehet akár hírgyűjtő vagy egyéb tartalomaggregáló oldalon való felhasználásra is. Ha ilyesmire akarnánk használni, akkor egyszerű GET kéréssel paraméterezve megtehetjük.
Ime egy kis példa, szigorúan IE alá, a FF biztonsági korlátok miatt hibát fog dobni rajta, de a lényeg látszik.


Itt meg a kód:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<script type="text/javascript">
function getPic() {
var url = document.getElementById('urltxt').value;
var x = new XMLHttpRequest();
x.open('GET', 'http://www.url2jpg.co.uk/getgrab.ashx?url=' + url + '&size=13&width=1024&height=768');
x.onreadystatechange = function() {
if (x.readyState == 4) {
document.getElementById('imgdiv').innerHTML = x.responseText.replace(/\/assets/, 'http://www.url2jpg.co.uk/assets');
document.getElementById('imgtxt').value = x.responseText;
}
}
x.send(null);
}
</script>
</head>
<body>
<div>
<input type="text" id="urltxt" value="http://www.bbc.co.uk/" />
<input type="button" value="LÁSSUK" onclick="getPic()" /><br />
ez jött vissza:
<br />
<input type="text" id="imgtxt" size="50" />

<div id="imgdiv" style="width: 320px;height: 240px; overflow:auto;" src="http://www.url2jpg.co.uk/getgrab.ashx?url=http://www.bbc.com/&size=13&width=1024&height=768"></div>
</div>
</body>
</html>

2008. július 2., szerda

FreeEbook

Úgy látszik a Red Gate cég rákapott erre a fajta marketingre, mert a múlt héten ismét megjelent egy ingyenes e-book az oldalukon. A könyv azt ígéri rendkívűli DBA-t csinál belőlünk. Biztos sok okosság van benne, de a magam részéről még nem tudtam belenézni. Van a pakkban egy szerintem elég jó best practice gyűjtemény is.
Amúgy rendesek, mert lehetővé teszik a közvetlen letöltést is nektek.

2008. június 25., szerda

Újabb érdekes VS tool

Kissé elmaradozok mostanában a bejegyzésekkel. Nem mentegetőzésképpen, de voltak némi pozitív és negatív változások körülöttem, meg éppen javában tombol a versenyszezon is. De ez végül is azt hiszem senkit sem érdekel :)
Amiről voltaképpen szó van arra nemrégiben bukkantam rá egy blogon. A neve RockScroll és egy nagyon jópofa VS kiegészítő. Gyakorlatilag a scroolbar helyett egy keskeny kutyanyelv-szerű szalagot helyez el, amelyen szintaksziskiemeléssel látható a teljes kód, persze kellően kis méretben. Színekkel jelzi az editálások helyét, a breakpointokat, a bookmarkokat. Az általam leghasznosabbnak ítélt feature úgy működik, hogy egy szót az editorban duplaklikkel kijelölve az összes előfordulást kiemeli és ez a kiemelés látszódik az oldalsávon is. Ezzel sokszor feleslegessé teszi a CTRL+F nyomkodását.
Photobucket

2008. május 28., szerda

Böngészőbe ágyazott 3D a Google Earth API-val

Mai hír, hogy a Google Earth team kihozta a Firefox, IE6 és 7 alá a Google Earth plugint. A Microsoft Live Mapja IE alatt már régóta tudott nekünk 3D-t mutatni, ideje volt, hogy a guglinál is kijöjjön valami hasonló.
Állítólag remek API-ja van, alig várom, hogy kipróbáljam :)

2008. május 27., kedd

Újabb ingyenes e-book .NET témában

Bár inkább cikkgyűjteménynek nevezhető, ami a Simple-Talk közösségi szájt néhány írását fogja egybe. Bár ha jól sejtem elsődlegesen a marketing célokat szolgált a gyűjtemény létrehozása, illetve közzététele, de ettől függetlenül rendkívül hasznos anyagnak tűnik első blikkre. Olyan problémák kerültek be a válogatásba, amik közül jó esélyyel legalább egyeel minden ASP.NET-tel foglalkozó fejlesztő találkozott már.
Letölthető innen.

GPS-szel rajzolták a világ legnagyobb portréját

A Figyelőn találtam egy rövid hírt a GPS-nek erről a szokatlan felhasználási módjáról.

2008. május 25., vasárnap

Google Maps geokódó elérése GET protokollal

A Webisztán egyik bejegyzése - amely arról szólt amit korábban én is leírtam itt - kapcsán az egyik nyájas olvasó megkérdezte, hogy GET protokollon keresztül miért nem lehet elérni a Maps keresőjét.
Hát kérem az a helyzet, hogy GET-tel is elérhető, minimál túrás után rá lehet jönni, de rendes vagyok és beírom :)
http://www.google.com/maps?q=budapest, kossuth tér
A querystringet nem árt urlencode-olni, de az okosabb böngészők megteszik helyetted. (http://www.google.com/maps?q=budapest,%20kossuth%20t%E9r)
Azt nem tudom mennyire recommended a használata, de működik. Persze ha komolyna gondoljuk a dolgot, akkor mindenképpen a GClientGeocoder osztály használata javallott az API-ban.

2008. május 24., szombat

Újabb ikongyár

Nemrég ismét találtam egy, a hozzám hasonlóan térkép-mániás illetők számára hasznos eszközt, a változatosság kedvéért ismét térképi jelek gyártására. Színes szagos, de egy kis reklámot el kell viselni.
http://www.cartosoft.com/mapicons/

A google maps geokódolása sem tökéletes

Mostanában játszogattam a különböző térképszerverek geokódoló eszközeivel, némileg szubjektívan összehasonlítva őket.
Az eddigi kedvencem a Bükki Nemzeti Park volt, ezzel teszteltem a főbb térképalkalmazásokat, vagyis a Yahoo, a MS Live és a Google térképi szolgáltatásait. A múltkor pedig az itt megénekelt versennyel kapcsolatosan Siófok egyik utcája a Fasor sétány volt az ad-hoc tesztelés alanya.
A Yahoo adatbázisa Magyarországra elég részletes, de annyira azért nem, hogy az olyan földrajzi neveket mint a BNP vagy Siófok kicsi utcácskái megtaláljon. Siófok esetében a szándék megvolt, hiszen legalább a várost meglelte, de a BNP-vel bizony nem boldogult.
A Live esetében legalább háromszor írtam be a keresési feltételt, mire észrevettem, hogy szegénykémnél az alapértelmezett nem a Location hanem a Businesses. Hogy ezt ki találta ki, nem tudom, de monnyon le. Na persze mikor végül beírtam, akkor sem volt benne köszönet. Microsofték szerint Siófok kb 3 utcából áll (mondjuk arra legalább ránagyított), viszont a BNP-t valahogy megtalálja. A fene se érti...
A Google esetében az adatbázis teljesen rendben van. A BNP-t gond nélkül meglelte, a siófoki címnél viszont érdekes dologra figyeltem fel. Eddig a geokódoló algoritmusukat jónak tartottam (bár jelen esetben a cím felparsolására gondolok, ami bele is érthető meg nem is), de a mostani próbálkozás alkalmával a nem létező Fasor utcára kerestem. Nem is találta meg, mivel a Fasor sétányt írták el a lapon, ahonnan vettem a címet. Pedig ha én geokódoló algoritmus lennék, akkor számomra, eléggé magától értetődő dolog lenne, hogy ha találok egy darab közterületnevet ami hajszálra egyezik, akkor azt legalább illene kirakni, ha egyezik a jelleg, ha nem. De még egy egyszerű LIKE vagy szavankénti keresés is visszaad találatot ebben az esetben. Szerintem legalábbis ennek így kéne működnie.

2008. május 23., péntek

Google Maps: WIKIpedia és fotók

Az utóbbi időben lassabban sikerül követni a dolgokat a kedvenc területemen, illetve legalábbis írni róla.
Már két hete is van, hogy hírül adták, miszerint a Google Maps, az Earth-höz hasonlóan kibővült két réteggel. Az egyiken geolokált WIKI bejegyzések olvashatók (sajnos egyelőra csak az angol WIKI :( ), a másikon pedig a Panoramio fotói érhetőek el.
Előbbi esetben nem világos, hogy miért nem keres a felhasználó nyelvének megfelelő bejegyzések között, holott a WIKI ad erre lehetőséget, utóbbi esetben viszont azt nem nagyon értem, hogy ha már a Picasa lehetőséget ad geokódolásra, akkor vajh miért nem jelennek meg a Picasa fotók is, ha már gugli szoftver... Ezt persze főleg azért sajnálom, mert így nem láthatjátok az én Picasas képeimet :)

2008. május 21., szerda

Adatbázis tesztelése tranzakciók használatával

Ez az iromány valahogy piszkozatban ragadt úgy egy hónapja és csak most vettem észre. Sebaj, jobb későn mint soha.

Az adatbázis kommunikációval is foglalkozó alkalmazások esetében örök probléma, hogy mit is tegyünk, hogy ki is legyen tesztelve a megfelelő osztály, de lehetőleg azonosak legyenek a feltételek, ne is szemeteljük tele az adatbázist, pláne ne kelljen "kézimunkázni".
Szégyen ide, szégyen oda, de csak nemrégiben, egy neten talált példa alapján esett le a tantusz, hogy a legkézenfekvőbb megoldás, ha tranzakciót használunk, így a tesztadatok nem zavarják köreinket amikor nem kell. Hiába, az újszülöttnek minden vicc új.

A megoldás lényege röviden leírható:

Vagyis a setupban elindítjuk a tranzakciót, a teardown-ban pedig szépen eltüntetjük, a tesztadatokkal együtt, mintha ott se lettek volna.

Ne feledkezz meg a a System.Transactions.dll referenciába tételéről és persze a System.Transactions névtér usingolásáról!

(Egyben be szeretném mutatni a csodálatos új dark színösszeállításomat, amire itt tettem szert :))

2008. május 15., csütörtök

Fájlműveletek tesztelése

A piszkozatok között kallódott egy marék forráskód, megnézegettem mi lehetett ez.
Nos hát...
Egy időben problémám volt az egységteszteléssel fájlokat használó metódusok esetén, erre találtam egy megoldást. Lehet, hogy van ennél jobb is, de a célnak megfelelt.
Bár ha jobban belegondolunk lehet róla vitatkozni, hogy egységtesztelésről vagy inkább integrációs tesztről van-e szó, hiszen a programunknak a fájlrendszerrel való együttműködését teszteljük. De a talált maréknyi kód szempontjából ez nem is érdekes :)

Az alkalmazás valami képeket méretezett és nevezett át, aztán lementette az átméretezett képeket.

A probléma ott volt, hogy úgy lehessen tesztelni, hogy lehetőleg ne kelljen semmi spéci beállításokat csinálni, ne kelljen rendszergazdai jog stb., de a tesztállományokat kiírni, majd a futás végén letörölni gond nélkül tudjam bármelyik gépen. A program a DirectoryInfo osztályt használta, amit az én szintemen lehetetlennek tűnt mockkal vagy bármi más módon kiváltani. Így jött az ötlet, hogy az aktuális felhasználó profilja alatti temp könyvtárba fogom pakolni az tesztállományaimat. A temp könyvtár elérését a  .NET prímán támogatja, a Path osztályon keresztül.

DirectoryInfo d = new DirectoryInfo(Path.GetTempPath());

A Path osztály további finomságokkal is szolgál, például elegánsan fűzhetünk össze vele útvonalakat. Ráadáasul ha ezt a módszert szokja meg az ember, akkor elvileg MONO alatt azonnal fordíthatja a kódját, nem lesz probléma az oprendszerek különböző szeparátoraival. (Azért mondom, hogy elméletben, mert ezt én még sosem próbáltam, de működnie kellene.)

DirectoryInfo d2 = new DirectoryInfo(Path.Combine(d.FullName, "backup"));

A teszteléshez használt fájlokat egyszerűen resource-ként belefordítottam a tesztprogramba, így már szépen létrehozhatom a tesztállományaimat a teszt indításakor:


        [TestFixtureSetUp]

        public void SetUpDir()

       {

            ...

            ...

            ...

            TestResource.Image1.Save(Path.Combine(d2.FullName "23817_2_01.jpg"));

            TestResource.Image1.Save(Path.Combine(d2.FullName, "23817_2_02.jpg"));

            ...

            ...

            ...

        }

A teszt után pedig, visszaállítandó az eredeti állapotot törölhetem a tesztállományokat. A megoldás nem túl szofisztikált, de a célnak megfelel, tesztelni lehet a programot. Ha valaki tud erre jobb megoldást írja meg ;)

2008. május 12., hétfő

Visual Studio 2008 és .NET Framework 3.5 SP1 Beta

Ma reggel jött ki a fent említett SP1 szervízcsomag bétája, olyan friss, hogy még meleg.
A csomagban sok WPF-es javítás van, a WCF-fen is reszeltek valamit.
Véleményem szerint a két legfontosabb újdonság a teljes SQL2008 support (eddig ehhez kellett egy kiegészítő), illetve a sokak által kíváncsian várt Entity Framework, mégpedig a VS-be integrált kattogós dizájnerrel karöltve. Állítólag a JS szerkesztőn is javítottak, ami azt illeti ezen van is mit és bekerült valami, aminek pár éve még nagyon örültem volna, mégpedig a klasszikus ASP intellisense támogatás.
ScottGuthrie egy bejegyzésben szépen összeszedte az újdonságokat, ajánlatos átfutni.
Még alig kezdtem el felrakni a pakkot máris vidám pillanatokat szerzett nekem a .NET FW telepítője :)

2008. május 10., szombat

Utólagos véleménymódosítás GhostDoc témában

Korábban egy MSDN blogbejegyzés nyomán írtam többek között a GhostDoc nevű csodáról. Akkor feltettem, kipróbáltam, de nem voltam nagy véleménnyel a dologról. Nos, azóta sok víz lefolyt a homlokomon és kénytelen vagyok nyilvánosan megváltoztatni a véleményemet. Igenis jól használható kis eszköz ez, ha az ember ráérez az ízére, hiszen ha szép beszédes függvényneveink vannak, akkor a legtöbbször elég néhány szót hozzáírni vagy megváltoztatni és egész használható doksit kapunk. Nem utolsó sorban rászoktat, hogy beszédes neveket használj ;)

2008. május 7., szerda

MS SQLServer 2008 termékbejelentő konf

Tegnap lezajlott az SQL Server 2008 bejelentése. Ami engem illet, felületesen már tájékozott voltam a témában, Soci idevágó blogbejegyzéseinek köszönhetően. Természetesen nagy érdeklődéssel vártam a térbeli adattípusok bemutatását, ami sajnos az én ízlésemnek kicsit felületes volt, de belátom, hogy a GIS téma végül is elég szűk réteget érint, figyelemfelkeltésnek pedig végül is jó volt. Amire azért felkaptam a fejem az a spatial index téma. Nekem úgy tűnt nagyon hatékonyan működik a dolog, legalábbis a demo alapján, valamint a háttere is érdekes, az elméletnek máshol is hasznát lehet venni. Volt egy rövid szösszenet arról is, hogy hogyan lehet földrajzi helyett időbeli dimenzióra használni az adattípust. Ami viszont szakmailag kicsit fájt, az az volt, hogy amikor a vetületekről és koordinátarendszerekről volt szó, egyrészt eléggé pongyola volt a megfogalmazás, másrészt, hogy a magyar vetületi rendszerről (gyk. EOV ;)) annyi hangzott el, hogy "Van valami magyar is....". Szóval még a neve sem, így aztán gyanús, hogy nem támogatja a cucc, de utána fogok nézni.
A másik érdekesség, amit epedve vártam az Entity Framework volt. A demo alapján már egész használhatónak tűnik a dolog, ha a teljesítményteszteknek hinni lehet, akkor érdemes is lesz. Van hozzá pöpec GUI, természetesen most már VS 2008-cal is teljesen jól megy, állítólag az SP1 -ben már benne lesz az egész, tokkal, vonóval. A bibi csak az, hogy nem tudni mikor lesz SP1. Felkerült a kipróbálandók listájára :)

2008. április 29., kedd

Ikongyár lustáknak

Ez a post nagyjából egy hónapja született a Maps háza táján. Az ikongyár, amiről szó van, nem egy nagy durranás, mégis jelentősen egyszerűsíti az ikonkészítést. Persze ha igazán egyedit és szépet akarsz csinálni, akkor jobb a hagyományos mosópor, magyarul vegyél elő egy képszerkesztőt, aztán használd a GIcon image és shadow tulajdonságait.
Viszont nekem éppen ma gyorsan kellett két egyszerű, színes ikonocska, amit így 1 perc alatt készítettem el, míg ha nekiálllok szöszmötölni a képszerkesztővel, akkor tuti rámegy egy órám, mert hát akkor már csináljuk meg rendesen.
Na persze tartok tőle, hogy végül nem fogom megúszni, de most hirtelen jól jött.

2008. április 25., péntek

Párhuzamos fordítás MSBuild -del

Ebből a postból megtudhatod, hogyan buildelhetsz párhuzamosan MSBuild-del, kihasználva a többmagos proci lehetőségeit. Érdekes...

2008. április 22., kedd

Kövesd az olimpiai lángot

Az előző postból kimaradt:
Ezen az oldalon az olimpiai lángot lehet elkísérni a világ körüli útján. Technológiailag nem egy nagy kaland a dolog, de azért mégiscsak olimpia vagy mifene....

Ismét google maps mashupok

Rábukkantam (hogy miért csak most az jó kérdés) egy magyar google map katalógusra.
Ezen a lapon pedig néhány olyan mashupra, ami mindenképpen említésra méltó.

Bűnözési térkép

Szemléletes példája, hogy milyen térképes alkalmazást NE csináljunk. Rendkívül érdekes témából, rengeteg értékes adat felhasználásával egy ronda, igénytelen, a 90-es éveket idéző honlap. Egy 20 soros CSS és egy jó kép kellene csak. Bár elnézve a külföldi hasonló témájú oldalakat, nem biztos, hogy ez legrosszabb, de ez kétes dicsőség.

Magyarország legnagyobb fái

Az oldal adatai a Google Earth-ben is elérhetőek. Szerintem aki valamelyennyire is természetkedvelő, annak egészen biztosan érdekes ez a honlap, mint ahogy nekem is. A tegnapi erdei futásom nyomvonalát a GE-ben követve figyeltem fel egy fa-ikonra a térképen, ugyanis a Vöröskő völgyben is van egy nevezetes fa. Sajnos nem tudom melyik az, de a legközelebbi alkalommal feltétlenül felkeresem, ha ismét arra járok.
Ami a kinézetet illeti, éppen jól szemlélteti azt, amit az előző térképnél írtam, vagyis, hogy miképpen lehet egy egyszerű CSS és pár jó kép és némi ízlés segítségével kis ráfordítással is normális kinézetet produkálni. Persze "De gustibus non est disputandum", hogy latin műveltségemet is fitogtassam.

Végül egy vitathatatlanul hasznos és egyben rendkívül "webkettes" oldalra is rábukkantam.
Az oldal tavaly nyár óta létezik, nem értem hogyan bújt el eddig előlem. A lap a Wikimapia és a Yellow Pages ötvözete. Talán szerencsésebb lenne bizonyos esetekben itt is befoglalókkal dolgozni pushpinek helyett, de ez csak kukacoskodás. Az oldal élő bizonyíték arra, hogy hogyan tudja egy low-budget közösségi oldal frappánsan megoldani azt, amit nem egy "hagyományos" kereskededelmi oldal sokmillióért sem.

2008. április 9., szerda

Hatékonyságnövelő tippek a Visual Studio 2008-hoz

Az egyik MSDN blogban megjelent egy bejegyzés, 10 tippel, ami a kódolás hatékonyságát növelheti Visual Studioban.
Ki ne szeretne hatékonyabb lenni, hát átolvastam, itt most továbbadom, a saját véleményemmel kiegészítve. Amit jónak tartok így jelölöm: (!), amit nem azt így (?), ahol ezek a jelek nem szerepelnek azt döntsd el magad :)

1. tipp: Tanuld meg a gyorsbillentyűket.

Ez nem túl fantáziadús javaslat, mondhatnám, hogy triviális, de tény ami tény, valóban hatékonyságnövelő tényező, ezért is hívják úgy, hogy GYORSbillentyű.
A legfontosabbakat felsorolja a cikk, bár SZVSZ ezeket mindenki ismeri, hacsak nem ma látott először Studiot.
  • Build: CTRL + SHIFT + B
  • Word completion: CTRL + SPACE
  • Start with debugging: F5
  • Start without debugging: CTRL + F5
2. tipp: Automatikus dokumentációgenerálás GhostDoc segítségével (?)
Ez a tipp erősen vitatható. Egyetlen esetben van értelme használni, ha valaki olyan cégnél dolgozik, ahol a dokumentációt "kilóra" mérik. Ugyanis egyedül ilyen esetben csinál épeszű ember ilyen "dokumentációt":

Vagy ilyet:
A magam részéről úgy gondolom, hogy ennek semmi értelme. Ugyanis a függvény, property, osztály neve ha "önleíró", mint fent, akkor gyakorlatilag csak szószaporítás az ilyen típusú dokumentáció, ha azonban nem az, akkor semmilyen automatikus eszköz nem tudja értelmesen dokumentálni, csak a programozó.

3. tipp: Használd az automatikus tulajdonságokat
Ezt én inkább így írnám:
Használd ki a nyelvi újdonságokat (!)

Az automatikus tulajdonságok egy hasznos újítás a C# 3.0-ban. Mindenkit bátorítanék ennek az anyagnak az átolvasására, aki még nem tette, itt minden újdonság, szépen jól magyarul olvasható el.
A hatékonyságnövelő újdonságok bajuszokban, rövid példával:

Automatikus tulajdonságok


Új lehetőség az objektumok inicializálására



Lokális típusfeloldás


Lambda kifejezések


Erről itt írtam egy szemléletes példát.

4. Tipp: Használd a Refactort

Ha nem tudsz vagy nem akarsz automatikus tulajdonságot alkalmazni, hasznos lehet a Refactor menü Encapsulate field... menüpontja.
Így kezded:


..és ez lesz belőle:

A Rename is igen hasznos lehet, bár néha igen lassúcska, illetve kétségtelenül hasznos és (általam) gyakran használt tool az Extract interface..., ami nem meglepő módon interfészt állít elő az osztályunk alapján pikk-pakk módon.

Az 5. tipp (egyéni parancsok) részben emlegetett PowerCommands toolt ki fogom próbálni, mert a projekt oldalán látok néhány ígéretes dolgot (Copy/Paste Class, Copy/Paste References).

6. tipp: a build testreszabása

Egy nagyobb projekt esetében perceket vehet el az életünkből fölöslegesen, ha olyan dolgok is be vannak kapcsolva a projekt fordítása során, amelyekre például csak a végső változatban lesz szükség. Példaként a post az XML dokumentáció generálását hozza. Érdemes ezekre odafigyelni.



7. tipp: használd a VS unit test generáló funkcióját (??)

Hát ez nálam erősen kérdőjeles. Nem tudom mennyit ér egy ilyen automatikusan generált teszt. Érzésem szerint ez ugyanaz a kategória, mint a fentebb tárgyalt automatikus dokumentálás, vagyis csak kilóra van haszna, érdemben nem nagyon. Emgem ez azért sem érint különösebben, mert az NUnit és a Testdriven.NET használata mellett köteleztem el magam egyelőre, így a VS saját teszteszközeit nemigen használom.

A következő két tipp valóban hasznos, azonban a C#-hoz, de főleg a Studiohoz társítani némileg erős, hiszen mindkettő iknább módszertani kérdés, bár a szükséges eszközök valóban rendelkezésre állnak VS2008-hoz, ha másképp nem, hát külső fejlesztésként.

8. tipp: Interfész-központú tervezés

Az interfész alapú tervezés az én olvasatomban az agilis módszertanok fegyvertárába tartozik. A cikk arra mutat rá, hogy ennek a módszernek jelentős hatékonyságnövelő hatása lehet, főleg teamek esetében. A lényeg röviden annyi, hogy a többrétegű alkalmazások fejlesztésekor legelőször a kommunikációs felületek kialakítása a célszerű, mert így a csapat tagjainak nem kell egymásra várniuk, hiszen például az üzleti logika készítői elkészíthetik a saját - nyilván egyszerűsített - adathozzáférési objektumaikat vagy a következőben emlegetett mocking technikát alkalmazhatják, így párhuzamosan tud zajlani a fejlesztés szorosan kapcsolt rendszer esetében is. Jah igen, ami a Visual Studiot illeti, az objektumtervező lehetőséget ad minimális erőfeszítéssel az interfészek előállítására



9. tipp: A függőségek kiiktatása mock objektumok segítségével

A tipp kétségtelenül hasznos, bár ez nem a Studio vagy a C# fejlesztőinek érdeme :)
Mivel jómagam is newbie vagyok a tesztvezérelt fejlesztésnek nevezett metodológiában, ezért nem szeretnék itt mélyen belemenni a dolog taglalásába. A lényeget már majdnem le is írtam az előző pontban. Gyakorlatilag arról van itt szó, hogy az álobjektumokat egy eszköz segítségével úgy állítjuk elő, hogy azok megvalósítsák azokat a függvényeket, tulajdonságokat, amelyeket a tesztek során használni szeretnénk (lehetőség szerint CSAK azokat). Így egyrészt valóban függetlenítjük a programrészünket a többitől, másrészt a tesztjeink jelentősen gyorsulhatnak is, ha ezzel a módszerrel kiiktatunk például adatbázisműveleteket vagy más idő és erőforrásigényes eljárásokat. A cikk írója által ajánlott rendszer a RhinoMocks névre hallgat, jómagam is ennek használatába kezdtem bele a közelmúltban, az elterjedtsége és nem utolsó sorban az ingyenes volta miatt.
A cikk szerzője hoz egy rövid példát is, amit idelinkelek:



10. tipp: Adatvezérelt egységtesztek

Ismét röviden arról van itt szó, hogy X darab teszt írása helyett egyetlen tesztet írunk, amelyet a VS segítségével egy adatbázis X sorára lefuttathatunk. Ez a tesztek írását valóban gyorsítja, ellenben a futtatáskor - az előző pontban írottal szemben - éppen, hogy megterhetljük a tesztet egy kvázi fölösleges adatbázis és/vagy fájlolvasással. Én kis adatmennyiség esetében (és hogy ne kelljen megválnom a jó öreg NUnittól ;)) inkább az NUnit egyik kiegészítőjét használom (RowTest Extension for NUnit). Ki-ki döntse el, hogy melyiket akarja szeretni.