november, 2007 havi archívum

AJAX Control Toolkit –
DropShadowExtender

Ez egy példaalkalmazáshoz tartozó leírás! Az alkalmazás erről a címről tölthető el:
http://www.devportal.hu/portal/Detailed.aspx?NewsId=049c6ecc-fdfd-4e63-8a2d-b8678ae2f511 vagy

http://cid-8dcaf3b0da4fb828.skydrive.live.com/embedrowdetail.aspx/ACTsorozat/ACT|_XII|_DropShadowExtender.zip

Ma egy eléggé érdekes vezérlővel fogunk megismerkedni a DropShadow-val, mivel ez egy 2in1 extender!
 
DropShadowExtender alapok
Ez az extender azért különleges, mert azon kívül, hogy képes árnyékot rajzolni a Panel vezérlőkhöz, egy másik extender butított változatát is magában foglalja, még pedig a RoundedCornersExtender-ét. Tehát az „árnyékosításon” kívül még le is kerekíthetjük a sarkait a Panelünknek.
(Zárójelek között jegyzem meg, hogy egyszerre ne akarjuk használni a DropShadow sarok lekerekítését, illetve RoundedCorners-t , mert Java script error-t fogunk kapni!!!)

DropShadow használata
A dropshadow használata olyan végtelenül egyszerű, hogy egyedül csak a TargetControlID-t kell csak beállítanunk, és már működik, a többi tulajdonság már csak a finomhangolásra való.
Nézzük sorba a tulajdonságokat, hogy mi mire is való:
Opticity: Az árnyék láthatóságát szabja meg. 0 és 1 közötti értékeket vár ez a tulajdonság. Az értéket meg kell szorozni százzal, és ekkor megkapjuk, hogy hány százalékosan lesz látható (1 – 100% – normal ; 0 – 0% – nem látható/átlátszó).
Width: Az árnyék szélessége pixelekben (alapban 5px)
Rounded: Egy bool értéket vár, attól függően, hogy szeretnénk-e lekerekített sarkokat, vagy sem. (default: false).
Radius: A lekerítés ívének sugarát tudjuk megszabni vele. (default value: 5) Minél magasabb ez az érték, annál nagyobb negyed-körök lesznek a sarkakban!
TrackPostion: Ezen tulajdonság segítségével, azt a szolgáltatást tudjuk be-, illetve kikapcsolni, hogy a Java script figyelje-e a panel mozgatását, átméretezését. Magyarul, ha például a DropShadow mellett, használunk még DragPanel, illetve ResizeableControl extender-öket is, akkor a változtatások után újra fogja rajzolni a rendszer az árnyékot, illetve az esetleges lekerekítéseket. /Feltéve persze, ha true-ra állítottuk ezt a tulajdonságot./ (alapérték: false >> vicces tud lenni, amikor az árnyék ott marad a helyén).
Ha bekapcsoljuk ezt a szolgáltatást, akkor a DropShadowBehavior egy Timer objektum segítségével folyamatosan polling-olni fogja a panel pozícióját, ezért teljesítmény szempontjából, csak akkor kapcsoljuk be, ha tényleg szükség is van rá!!!!

Íme egy példa a DropShadow extender használatára:

<asp:Panel ID="Pnl_with_shadow" runat="server" Height="200px" Width="200px" BackColor="Silver">
    <br /><br /><br /><br /><br />
    <span style="color: #ffffff">Ennek a Panelnek van árnyéka!</span> </asp:Panel>
<ajaxToolkit:DropShadowExtender ID="DSE_1" runat="server"
            TargetControlID="Pnl_with_shadow"
            Opacity="0.5" Width="7"
            Rounded="True" Radius="10"
            TrackPosition="true" />

Fontos, hogy a panelnek beállítsunk valamilyen háttérszínt, mert különben csak az „árnyék” fog megjelenni!

AJAX Control Toolkit –
DropDownExtender

Ez egy példaalkalmazáshoz tartozó leírás! Az alkalmazás erről a címről tölthető el:
http://www.devportal.hu/portal/Detailed.aspx?NewsId=7d583c4f-562b-49d7-b435-73e97df628af
vagy

http://cid-8dcaf3b0da4fb828.skydrive.live.com/embedrowdetail.aspx/ACTsorozat/ACT|_XI|_DropDownExtender.zip

Ezen a héten a DropDown Extenderrel ismerkedünk meg, amely szinte bármely ASP.NET-es vezérlőhöz hozzárendelhető, és egy SharePoint stílusú legördülő listás menüt tudunk vele megvalósítani. (Hát valahogy eddig megvoltunk e nélkül is…)
 
DropDownExtender használata
Ahhoz, hogy használni tudjuk ezt a vezérlőt, két dologra van szükségünk. Egy vezérlőre, amit ki akarunk bővíteni, illetve egy Panelra, ami majd le fog gördülni. Vegyük észre, hogy ez a DropDownExtender jóval univerzálisabb annál, minthogy csak SharePoint-féle legördülő listás menüket készítsünk vele. A Panelbe bármit elhelyezhetünk, sőt akár a Panel helyett is választhatunk más vezérlőt, így tehát igazándiból egy olyan kiegészítést kapunk, amely azt eredményezi, hogy ha az adott vezérlőre jobb vagy bal egér gombbal kattintunk, akkor megjelenik alatta egy másik vezérlő a jobb alsó sarkában.
Mi most az egyszerűség kedvéért egy SharePoint-os legördülő menüt fogunk megvalósítani! Húzzunk a formunkra egy Label-t és egy Panel vezérlőt, a Panel-en belül pedig helyezzünk el egymás alatt 4db LinkButton-t. Mindegyik LinkButton Click eseményéhez a Selection metódust rendeljük. Íme a Selection eljárásunk:

protected void Selection(object sender, EventArgs e)
{
    string size = ((LinkButton)sender).Text;
    lbl_sample.Text = String.Format("<{0}> Minta szöveg </{0}>", size);
}

Az alábbi pár változtatást végezzük el a vezérlőkön:
– lbl_target.Text =  Kérlek válassz betűméretet:
– LinkButton1.Text =  H1 … LinkButton4.Text =  H4; LinkButtoni.ID = Optioni

Hogy ténylegesen Sharepoint-hoz hasonló megjelenést tudjuk kölcsönözni a vezérlőinknek, néhány stílusbeállítást el kell követnünk (pl.: SharePoint betűk: Tahoma 11px). A példaalkalmazásban felhasznált stílusosztályokat most nem részletezném, a letölthető tömörített állomány úgyis tartalmazza az adott stíluslapot.
Nézzük meg, hol is tartunk most markup ügyileg:

<asp:Label ID="lbl_target" runat="server" Text="Kérlek válassz betűméretet:" CssClass="ContectMain" Width="300px" />
<asp:Panel ID="pnl_drop" runat="server" CssClass="ContextMenuPanel" Style="display :none; visibility: hidden;">
    <asp:LinkButton runat="server" ID="Option1" Text="H1" CssClass="ContextMenuItem" OnClick="Selection" />
    <asp:LinkButton runat="server" ID="Option2" Text="H2" CssClass="ContextMenuItem" OnClick="Selection" />
    <asp:LinkButton runat="server" ID="Option3" Text="H3" CssClass="ContextMenuItem" OnClick="Selection" />
    <asp:LinkButton runat="server" ID="Option4" Text="H4" CssClass="ContextMenuItem" OnClick="Selection" />
</asp:Panel>

A Panel-t azért rejtjük le stílus beállítások segítségével is, mert különben villanna egyet az oldal betöltődéskor. Alapból egy Java script rejti el a Panelt automatikusan, ami viszont csak azután fut le, hogy letöltődött az oldal.

Még két dolgot kell megvalósítanunk, ahhoz működjön a programunk. Először is kell egy DDE, amit az alábbi módon konfiguráljunk be:

<ajaxToolkit:DropDownExtender ID="DDE_1" runat="server"
            TargetControlID="lbl_target"
            DropDownControlID="pnl_drop" />

A DropDownControlID által meghatározott vezérlő fog legördülni, ami ugyebár nem csak Panel vezérlő lehet, hanem bármi más is, akár még egy UserControl is!

A másik dolog, amit még létre kell hoznunk: az lbl_sample. Ebben akarjuk megjeleníteni a kiválasztott menüelem nagyságú minta szöveget. Ehhez egy UpdatePanel-t is igénybe veszünk, hogy ne frissüljön a teljes oldal, hanemcsak a címkénk. Fontos, hogy a mind a 4 aszinkron trigger-t beállítsuk. Íme a kódunk:

<asp:UpdatePanel ID="UP_1" runat="server">
    <ContentTemplate>
        <asp:Label ID="lbl_sample" runat="server" />
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Option1" EventName="Click" />
        <asp:AsyncPostBackTrigger ControlID="Option2" EventName="Click" />
        <asp:AsyncPostBackTrigger ControlID="Option3" EventName="Click" />
        <asp:AsyncPostBackTrigger ControlID="Option4" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>

És készen is vagyunk!

Néhány érdekesség
Ez az extender is azon vezérlők közé tartozik, melyekhez lehet animációt rendelni. Értelemszerűen a legördülő objektumra vonatkozóan (OnShowOnHide). Az érdekessége a dolognak az, hogy az SDK-ban is ajánlott, HideAction animációs tag-et, egyedül nem lehet használni, kell mellé egy másik animáció is. Azt gondolnánk, hogy ilyenkor a HideAction-t, illetve valamilyen egyéb animációt Parallel (párhuzamos lejátszás) tagek közé téve működni is fog. Mily meglepő, nem a várt hatás fogad majd minket. Ennek oka az, hogy a <HideAction Visible= true (|false)> animáció nem képes párhuzamosan futni más animációkkal, ezért utánuk fog csak lefutni. Így például, ha fade-eléssel szeretnénk egy kicsit javítani az megjelenítésen, akkor azt az alábbi módon tehetjük meg:

<Animations>
    <OnShow>
       <Sequence>
        <HideAction Visible="true" />
        <FadeIn duration="1" Fps="25" />
       </Sequence>
    </OnShow>
    <OnHide>
        <Sequence>
            <HideAction Visible="false" />
            <FadeOut duration="1" Fps="25" />
        </Sequence>
    </OnHide>
</Animations>

A másik érdekes dolog számomra ennél a vezérlőnél az volt, hogy egy bizonyos tulajdonságcsoportról, sehol-semmilyen leírást nem lehet találni. Ez a tulajdonságcsoport a dynamic, vagyis a dinamikus szövegkörnyezet generálás. Ez az ACT-nél megszokott módon történik, vagyis webszolgáltatás segítségével (erre a tulajdonságok nevéből rá lehet jönni). Az igazi probléma itt az volt, hogy a webmetódusok paraméterlistája szigorúan kötött. Ezt a listát eléggé nehezen, de végül is sikerült megtalálnom (reflector-nak köszönhetően).
A paraméterlistát úgy sikerült megtudom, hogy a DropDownDesign osztályban nézelődtem, aminek egyetlen egy Delegate-je van összesen:

private delegate string GetDynamicContent(string contextKey)

Ebből pedig már egyértelművé vált, hogy egy string-et visszaadó függvényről van szó, ahol a contextKey paraméter elhagyható. A contextKey arra való különben, hogy ha több DDE vezérlőnk van, és ezek legördülő elemeit egyetlen egy webmetódussal szeretnénk dinamikusan generáltatni, akkor a contextKey-ben kapott szöveg alapján (ezt mi állítjuk be a DynamicContextKey-en keresztül) tudjuk azonosítani a hívó objektumot.
További érdekessége a dolognak, hogy html tageket is tartalmazhat a visszaadott string, amiket képes utána értelmezni a DDE. Sőt nemcsak stringet adhatunk vissza, hanem akár string tömböt is, de ilyenkor az elemeket egymástól vesszővel választja el a rendszer.
Íme egy nagyon egyszerű példa:

<asp:Calendar ID="calendar_with_menu" runat="server"></asp:Calendar>
<asp:Panel ID="pnl_dynamic_menu" runat="server" CssClass="ContextMenuPanel" Style="display :none; visibility: hidden;">
</asp:Panel>
<ajaxToolkit:DropDownExtender ID="DDE_2" runat="server"
            TargetControlID=" calendar_with_menu"
            DropDownControlID="pnl_dynamic_menu"
            DynamicServicePath="WebService.asmx"
            DynamicServiceMethod="GetContextMenu"
            DynamicContextKey="bármi"
CacheDynamicResults="true" >
</ajaxToolkit:DropDownExtender>

[WebMethod]
public string[] GetContextMenu(string contextKey)
{
    List<string> result = new List<string>();
    result.Add("1. elem<hr width=’100′>");
    result.Add("Bejövő param:" + contextKey);
    result.Add("<br>Harmadik<br>");
    result.Add("<a href=’Default.aspx’ class=’ContextMenuItem’>(4) – Egy Link</a>");

    return result.ToArray();
}

Egy fontos dolog még, ha nem állítjuk be a DynamicControlID tulajdonságot (ami azt szabja meg mely, vezérlőt töltsön fel adattal a webservice), akkor a DropDownControlID-ben megadott vezérlőt állítja be DynamicControlID-nak! (OnPreRender metóduson belül)

Természetesen akár az alap Hello World-öt is megadhatjuk webmetódusként, hiszen annak a szintakszisa is megfelelő!

Megjött a télapó…

Posted: 2007. november 27. in Egyéb
Hát ilyen hamar nem szoktak teljesülni a kívánságaim. Tegnap írtam, hogy kéne Silverlight Tools pack a VS08-hoz, erre reggel felkelek, (esett a hó) és láttam, hogy jöt egy mail Zöld Laci barátomtól, hogy megjelent. Köszi Télapó, na jó ScottGu bácsinak is megköszönjük…
 
Microsoft Silverlight 1.1 Tools Alpha for Visual Studio 2008
 
Silverlight 1.1 Tools Alpha for Visual Studio 2008 Available for Download – by ScottGu
 
 
 
Más téma, tegnap befejeztem az egyik egyetemi jegyzetem Novemberi CTP verzióját. Van egy olyan specim, aminek az a neve, hogy Visual Basic I., ahol a VB alapjait tanítják (kellett a kredit ). Nos én ehhez készítettem egy hallgatói jegyzetet, innen le is tölthető, ha esetleg valakit érdekel:
http://people.inf.elte.hu/csalap/docs/vb_note_1_pro.pdf
http://people.inf.elte.hu/csalap/docs/vb_note_2_and_3_pro.pdf

Jelenleg verifikáció alatt áll a projekt, de remélhetőleg minél hamarabb RTM lesz belőle. Ha valaki észrevesz benne bármilyen hibát, kérem jelezze, köszönöm!

Vs08, felhasználó és fejlesztő szemmel

Posted: 2007. november 27. in Egyéb

Ígértem mára fűt-fát, hát ennek sajnos csak a felét tudom csak teljesíteni. (A csomó progis rész napolva).

Szal VS08. Első számomra nagy meglepetés az volt, hogy miután kiadták az RTM változatot (Release To Manufacture – „ipari kiadás”, nagy cégnek és MSDN előfizetnek szánt változat), után nem a VS08 Standard vagy Proffesional végleges verziója következett, hanem az Express család. Tehát így érdekes koncepció lehet MS-éknél, hogy először a pénzes réteg, majd utána csórik… Hát ők tudják.
Nekem egy Team Suite 90 napos trial verziót sikerült beszereznem (express családdal nem vagyok kibékülve, amióta tudom, hogy például csak röptében csatolt (fly attach) adatbázisokhoz csatlakozhatunk wizardok segítségével. Ez mondjuk, fogjuk rá, érthető is, hiszen a hobbi szintű felhasználóknak nincs otthon + 1 sql szerverük).
A telepítő ismét ambivalens érzéseket váltott ki. Custom módot választva is, szinte csak annyit lehetett beállítani, hogy mely nyelveket tegye fel. Gondolom, mondanom se kell, hogy ismét feltesz automatikusan olyan dolgokat, amikre áltag embernek az életbe nem lesz szüksége: SmartPhone SDK, MicroFramework, SQL Compact Server, stb…
A telepítés közben látható marketinges szövegek mögötti képek ismét hozták a formájuk. MultiCulture , szóval nem igazán értem, hogy egy fogfehérített 50 éves nővel kiket akarnak megfogni? Na mind1…
A Telepítőnek azért van egy jó pár pozitívuma is:
Az egyik az volt, hogy automatikusan települ a .NET Framework 2.0-hoz, illetve 3.0-hoz tartozó szerviz csomag. Királyság nem kell külön letölteni.
A második igazi pozitívum az volt, hogy maga a Visual Studio összesen csak 500mb helyet foglalt. Ha megnézzük azt, hogy a 2003 700mb-ot, a 2005 pedig 1gb-ot foglalt, akkor már tényleg igazán értékelendő dolognak találhatjuk ezt is.
A harmadik dolog, amiben pozitívan csalódtam az volt, hogy az uninstall zökkenőmentesen működik. Tehát a beta2-vel ellentétben egyetlen error-t sem kaptam, ellenben vagy 25 komponenst kellett egyesével uninstallálni..

Első indításkor valamivel gyorsabb, mint a VS05. Új megjelenésről igazándiból nem beszélhetünk, mert csak egy kicsit pofoztak a design-on. Új projekt létrehozásánál bennem két dolog motoszkált. Az egyik az, hogy miért nem lehetne tooltip-be leírni, mi mire való, mert van kb. 50db projekt sablon, ami közül választhatunk, és a sablonnevek nem mindenki számára beszédesek. A másik dolog az volt, hogy mekkora királyság ez a multi-targeting dolog, hogy csak az jelenik meg, amit az adott framework támogat. (Ez persze nem csak a projektsablon választásra igaz, hanem a toolbox-ra, projekt properties, stb.)
Őszintén, én csak kétféle projektet próbáltam eddig ki, egy WPF-es alkalmazást, illetve egy Webalkalmazást.
A WPF-es XMAL editor csúcs, sőt a hozzá tarozó properties ablak is nagyon pöpec (kár, hogy a többi projektben nem ilyen van ). Ám itt jön egy nagyon nagy DE, mert Silverlight-os XMAL-t nem támogatja. A Canvas pajtásra azt mondja, h ismeretlen, úgyhogy xmal szerkesztésre marad a VS05, Blend páros.
Ez ismét egy csúcs dolog, hogy a Blend 2-ben van split view, illetve design nézet, de nincs IntelliSence, ellenben VS05-ben van IntelliSence, de nincs se split, se design view XMAL fájlhoz. A másik nagyon vicces dolog még az, hogy csak Blend-ben lehet kimondott XMAL fájlt hozzáadni a projekthez, VS-ben csak úgy lehet XMAL fájlt létrehozni, hogy egy XML elemet adunk a proj-hoz, és XMAL kiterjesztést adunk neki, de ilyenkor nincs intellisence pajtás ismét…
Állítólag 2-3 héten belül ígérik a Silverlight-os templateket, add-inket a VS08-hoz, meglátjuk mi lesz belőle.

Na miután kibosszankodtam magam a Silverlight eléggé silány eszköz támogatottságán, nézzük mi újdonságokat rejt számunkra az ASP.NET 3.5. Hát elsőre nem túl sokat! Van összesen vagy 5 új vezérlők (ListView, DataPager, LinqDataSourceAdapter, XAML, Media), amit valljunk be őszintén, az első kettőre biztosan nem lesz túl gyakran szükségünk. A linq-ról meg ismét lehet vitatkozni, hogy jó dolog-e, vagy sem… Én egyenlőre még csak most ismerkedek az alapjaival, de annyira nem érzem eget rengetőnek a dolog, mint amire be lett harangozva.
Nem egyetlen pozitívumként, de talán a legnagyobb pozitívuma a VS08-nak az új weblapszerkesztő felület (Split view). Sokkal jobban használható, mint a régi, de tényleg!

Akit érdekelnek az ASP.NET 3.5 újdonságai, illetve a VS08 újdonságai, azoknak az alábbi oldalt ajánlom:
http://www.asp.net/downloads/vs2008/#newFeatures

Nekem összesítve a véleményem a VS08-ról az, hogy nem rossz fejlesztő eszköz, de lehetne jobb is. Ha megvárták volna a Silverlight-os srácokat is, hogy elkészüljenek az 1.1-gyel végre, akkor tuti nagyobb durranás lett volna, mert állítólag a VS-be beépülő része az SDK-nak már tartalmazni fog Silverlight vezérlőket.

Néhány link… VS08

Posted: 2007. november 23. in Egyéb
Örülünk ezerrel, mert kijött a Visual Studio 2008 RTM változata! Ezért most megpróbálok összeszedni egy pár hasznos linket ezzel kapcsolatban:
 
Visual Studio 2008 Express familie
 
Visual Studio 2008 Team Suite Trial 90 day (VS08 standard, illevte prof még nem érhető el RTM változatban…)
 
VS08 offical site
 
VS08 Extensibilty
 
How Do I video series
-ASP.NET
-ASP.NET Ajax
-Devices
-Native Coding
-Silverlight
-Visual Basic
-Visual Studio
-Visual Studio Tools for Office
-Visual Studio Team System
-Windows Forms
-Windows Presentation Foundation
 
VS08 + .NET 3.5 Traning kit
 
ASP.NET 3.5 new features (AJAX, ListView, DataPager, Linq, WCF), stb.
 
ASP.NET 3.5 Videos
 
Linq Videos
http://www.asp.net/learn/linq-videos/

Virtual Labs about .NET Framework 3.0

 
Este még megpróbálok egy új blog bejegyzést összedobni, amiben szó lesz VS08 RTM első benyomásról, Silverlight használatáról, illetve egy csomó hasznos progiról!
 
__________________

szerk.: legyen inkább jövő hét hétfő
AJAX Control Toolkit –
DragPanelExtender
 
Ez egy példaalkalmazáshoz tartozó leírás! Az alkalmazás erről a címről tölthető el:
http://devportal.hu/Portal/Detailed.aspx?NewsId=8aa9cf77-1e51-4a38-9c55-3f2d9e2b22ba vagy

http://cid-8dcaf3b0da4fb828.skydrive.live.com/embedrowdetail.aspx/ACTsorozat/ACT|_X|_DragPanelExtender.zip

Ma a DragPanelExtender –rel ismerkedünk meg, ami a szintén a roppant egyszerűen használható vezérlők közé tartozik.
 
DragPanelExtender használata
Ez az extender arra szolgál, hogy egy panelt a kliens szabadon mozgathasson a weboldalon. Sajnos az átmozgatott pozícióját nem képes még megjegyezni két postback között, de állítólag már dolognak az ügyön.
A DPE rendkívül egyszerűen működik, meg kell szabnunk egy panelt, amit a kliens megfoghat, és általa mozgathatja a panelt. Ezt a DragPanelID tulajdonságon keresztül állíthatjuk be. A TargetControlID, pedig általában egy konténer panel lesz, mely magában foglalja a DragPanel-t, illetve a ContentPanel-t, (a tényleges tartalmat tároló panel). (Természetesen a DrapPanelId, illetve a TargetControlID lehet egy és ugyanaz!)
Nézzünk is egy példát:
 
<asp:Panel ID="Pnl_container" runat="server" Width="250px" style="z-index: 20;">
    <asp:Panel ID="Pnl_header" runat="server" Width="100%" Height="20px">
            <div style="text-align:center">Itt lesz a fejléc…</div>
    </asp:Panel>
    <asp:Panel  ID="Pnl_content" runat="server" Width="100%" Height="250px" Style="overflow: scroll;">
            <div>Ide jön a fontos szöveg…</div>
    </asp:Panel>
</asp:Panel>
 
És az ehhez kapcsolandó DPE kódja:
 
<ajaxToolkit:DragPanelExtender ID="DPE_1" runat="server"
TargetControlID="Pnl_container" DragHandleID="Pnl_header" />
 
Adjunk még valami hosszabb szöveg az oldalhoz, majd futtassuk és tesztelgessük!
A mellékelt példaalkalmazásban egy puzzle-szerűséget valósítottam meg. Jó szórakozást hozzá!
 
Egy hiba javítása
A tesztelés során, biztosan elő fog fordulni, hogy olyan helyre szeretnénk húzni a panel-együttesünket, ahol nincs szöveg. Ilyenkor egyszerűen vissza fog ugrani arra a helyre a panel, ahonnan el akartuk mozgatni. Erre a probléma a megoldást, az ACT SDK-ban is megtalálható script adja. Íme:
<script type="text/javascript">
    function setBodyHeightToContentHeight() {
        document.body.style.height = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight)+"px";
    }
    setBodyHeightToContentHeight();
    $addHandler(window, "resize", setBodyHeightToContentHeight);   
</script>
 
(Ez a script sem tökéletes, mert ha esetleg több ilyen mozgatható panelt helyezünk el az oldalon, akkor már nem fog működni! )

WTW, Orcas, MS

Posted: 2007. november 16. in Rendezvény információk

WTW
Múlt hétvégén lezajlott a második WTW verseny. Ezen a rendezvényen most a winforms, illetve .NET tudásukat kell megmutatniuk a versenyzőknek. A nagyfeladatnál igazándiból csak a .NET Remoting-ra volt szükség, mint technológiára, a többi része a dolognak algoritmikus volt. A nagy feladat leírása innen érhető el:
http://msportal.hu/blogs/wtw/archive/2007/11/10/nagyfeladat.aspx

Maga a feladat szerintem sokkal érdekesebb volt, mint az előző wtw-nél. Itt tényleg a gondolkodás módon volt a lényeg, nem azon, hogy ki milyen szépen tud webdesign-olni, illetve hány funkcionalitást tud megvalósítani. Ennek következtében mérhetővé vált a csapatok teljesítménye, és ez folyamatosan nyomon is tudtuk követni.
A mi csapatunk igazándiból három problémába futott bele. Az első legrövidebb út meghatározásához szükséges algoritmus kiválasztása és leimplementálása volt. Minárik Péter barátom szavaival élve: A keresési algoritmusunkat egy iterativan mélyülő kereséssel valósítottuk meg. (hullámfront) Felmerült többféle algoritmus is, mint például az A* vagy a Disjktra, de végül is mi a hullámfrontos megoldást választottuk (mármint Peti ezt írta meg, mi addig Tibivel managerkedtünk).
A másik problémánk az volt, hogy a szervertől (msdnkk) érkező kérésekre összesen 4másodpercnyi idő állt rendelkezésünkre, hogy valamilyen választ generáljunk. Végül is annyira sikerült túlbonyolítanunk a dolgot, hogy a legrövidebb útkeresést egy BackgroundWorker segítségével aszinkron-ban futattuk. Próbálkoztunk azzal is, hogy sok-sok osztályt és metódust definiáltunk, hogy a beérkező kérések lekezelésére szolgáló függvény ne 30 if-ből és 40 else-ből álljon. Végeredményként maradt a sok if-else, mert a töménytelen osztály miatt, még úgyis, hogy aszinkronban ment a kereső algo, túlléptük a 4 másodperces válaszadási időt.
Az utcsó problémánk az volt, hogy bár sikerült már a pizzát is felvenni, és el is indultunk azt kiszállítani, de valamilyen okból soha nem sikerült átadni a megrendelőnek, így csak fogyott a pénzünk.

Összességében a verseny nekem tetszett, bár eléggé sokszor állt le az msdnkk szerver, de ez különösebben minket akkor még nem érintett:P A szervezők is tényleg nagyon segítő készek voltak a kódok debugolásában, illetve sok hasznos 5lettel is segítették a csapatokat.
Az első helyezetnek járó díjjal valahogy nem igazán értek egyet, mivel 20 MCP vizsga lehetőséget is kaptak fejenként, melyeket 1 év alatt kell letenniük. Még szerencse, hogy nekem ez a szám nincs limitálva, illetve nincs időkorlát se …
Bővebb infót a versenyről, illetve a csapatok algoritmusairól az msportalon találhattok, illetve a ch9-en a szervezőkkel is láthattok egy interjút. Hamarosan felkerül a többi videó is!

Orcas
A tegnapi előadássorozat nagyon jó volt, de valahogy bennem eléggé ambivalens érzéséket kellett a .NET Framework 3.5. Egyfelől tetszett, mert a lehetőségek tárháza van az új framework-ben, másfelől viszont emiatt túl sok új nyelvvel kell megismerkedni.
Idáig, ha egy webalkalmazást akartunk fejleszteni, akkor fogjuk rá 3 nyelv elég volt a számunkra (HMTL, ASP.NET, C#). Ha ASP.NET 3.5 webapp-ot szeretnénk készíteni, akkor ez a szám drasztikusan megnő. Az alábbi új nyelvekkel kell megismerkednünk: XAML, Linq, Lamda expression, JSON, Ruby vagy Phyton, és természetesen nem árt, ha ezentúl szorosabb barátságot kötünk a CSS-sel, Java Script-tel. És akkor még nem is beszéltünk az új technológiákról, melyeket beágyazhatunk webalkalmazásainkba (WPF, WF, WCF, Silverlight, …)
Tehát nekem így az jött az egészből, hogy ezentúl a webfejlesztés se, egy ember által kivitelezhető feladat lesz, hanem csoportos munkaerőt kell bevonni. És természetesen az osztott rendszerekre való fejlesztést nyomatni kell, ahogy csak lehet. Ennek persze van értelme, mivel a Microsoft nem nekem tervezi az ASP.NET-et, hanem fejlesztő cégeknek.
Ettől függetlenül egy másik érdekes dolog az, hogy a Visual Studio 08 kezd olyan lenni, mint a Vista. Sok mindent ígérnek, aztán nem mindent sikerül megvalósítani, ezért ezek a dolgok majd valamikor később kiegészítésként fognak belekerülni a .NET-be. Ilyen például a Silverlight, Entity Framework, Dynamic Data Contols, stb..
Végül még egy dolog, ami elgondolkodtató. Ha az ASP.NET 3.5-re nézünk, akkor azt látjuk, hogy most már nem elég csak szerver oldali kódokat írnunk, hanem sokszor a kliens oldali részbe is bele kell avatkoznunk. Ennek egyedüli előnye, hogy növelhetjük vele a felhasználói élményt, ami azért nem is biztos, hogy sikerülni fog. Ha most megnézzük napjaink legsikeresebb weblapjait, akkor azt látjuk, hogy a letisztult, egyszerű formák a nyerők. (fehér háttér, néhány kép, stb.). Erre most jön a WPF (Windows Presentation Fundation) illetve a Silverlight, amivel olyan csili-vili cuccokat tudunk készíteni, hogy leesik az állunk. Bár ki tudja, mit hoz jövő és mi lesz a divat… 

Visszatérve egy kicsit a WTW-re, a kisfeladatok nagy része .NET 3.0 igényelt!!!
Szal, szumma-szummárum nekem valahogy vannak fenntartásaim a .NET Framework 3.5-tel kapcsolatban, amit remélhetőleg minél hamarabb sikerült eloszlatnom!

AJAX Control Toolkit –
ConfirmButton
 
Ez egy példaalkalmazáshoz tartozó leírás! Az alkalmazás erről a címről tölthető el:
http://devportal.hu/Portal/Detailed.aspx?NewsId=05db42c6-24c6-40f4-96a0-9fed38fe37ce vagy

http://cid-8dcaf3b0da4fb828.skydrive.live.com/embedrowdetail.aspx/ACTsorozat/ACT|_IX|_ConfirmButton.zip

Ma a létező legprimitívebb extender-rel fogunk megismerkedni, vagyis a ConfirmButton-nel, ami magyarul kb. annyit jelent, hogy megerősítő vagy visszaigazoló gomb.
 
Biztos benne, hogy kell ilyen Önnek? Ok, Mégse
Aki használt már valaha Windows operációs rendszert, talán akad ilyen az olvasók között, neki már biztosan jó néhányszor feltett az op. rendszer/böngésző/egyéb program valami hasonló kérdést: Biztosan be akarja zárni?
Web-böngésző esetén, ezt egy nagyon bonyolult java script kód segítségével tudjuk csak elérni, sokórányi fáradtságos munka árán. Én időt, pénzt és energiát nem kímélve leimplementáltam ezt a feladatot ASP.NET alá, és íme a végeredmény:
 
<asp:Button ID="sample_btn_1" runat="server" Text="Ki akarok lépni, és ezt jól meg gondoltam!" OnClientClick="window.close();" />
 
A web-böngésző ennél azért többre is képes, akár a Basic nyelvből jól ismert MessageBox néhány „típusának” implementációit is meghívhatjuk. Az üzenet (Message), illetve a figyelmeztetés (Warning) ablakok érhetőek csak el java script alól. Figyelmeztetést az alert() függvénnyel tudunk kiíratni, melynek paraméterül át kell adnunk a kiírandó szöveget. Ilyenkor csak egy Ok gomb fog megjelenni. Figyelem most kezdünk el durvulni!
Amennyiben egy szimpla üzenetet szeretnénk kiíratni, abban az esetben a confrim() parancsot használjuk, aminek a paraméterezése hasonló az előző utasításéhoz. Ebben az esetben viszont már két gombot is adunk a felhasználónak egy Ok-ot és Mégsé-t. Úgy érzem ismét mutatnom kell egy „kis” példakódot, mert elfogjuk veszteni különben a fonalat:
 
<asp:Button ID="sample_btn_2" runat="server" Text="Na ez vajon mit csinál?" OnClientClick="confirm(‘Tényleg töröljem a vinyód tartalmát?’);" />
 
Hát ennek a gomb így nem túl sok értelme van, mert ugyanazt csinálja, mindkét gomb esetén: semmit, mármint villan egyet az oldal. Ezért rendeljünk valamilyen kódot a gomb Click eseményéhez, majd ismét futassuk a kódot, és katt! Ilyenkor valami hasonlóval kéne találkoznunk:

[kép hamarosan…]

 
Nos egy oldalnyi rizsa után, elértük a célunkat, mivel egy az egyben ezt tudjuk megvalósítani a CorfirmButton extenderrel. Pontosítok majdnem ezt, mivel mindösszesen csak három tulajdonság áll rendelkezésünkre, mellyel kicsit egyedibbé tehetjük a visszaigazoló ablakot. De még mielőtt ennyire előre szaladnánk, azért nézzünk egy gyors példát a CBE használatára (asszem magyarázatot nem igényel a kód…):
 
<asp:Button ID="sample_btn_3" runat="server" Text="Használj engem is!" OnClick="sample_btn_3_Click" />
<ajaxToolkit:ConfirmButtonExtender ID="CBE_1" runat="server" TargetControlID="sample_btn_3" ConfirmText="Lefusson a button click eseménye?" />
Egyetlen megjegyzés: a ComfirmText-be ne HTML kódot írjunk, mert ez egy Windows panel, tehát pl.: ha sort akarunk törni, akkor használjuk a \n-t!
 
OnClientCancel
Ugyebár az egész visszaigazolás lényege az, hogy adunk egy még egy lehetőséget a felhasználónak arra, hogy meggondolja magát. Így ha az Ok gombra kattint, akkor folytatjuk tovább az eredeti process-ünket, ha a Mégsé-re, akkor pedig nem hajtunk végre semmit. Ez az alapeset, de itt akár Cancel gombhoz is rendelhetünk kódot! Én konkrétan nem is tudom, hogyan lehet megoldani java script-ben ezt, vagy csak gány módszerrel, ezért nézzük inkább, hogyan is tehetjük mindezt CBE-vel:
 
<ajaxToolkit:ConfirmButtonExtender ID="CBE_2" runat="server" TargetControlID="sample_btn_4" ConfirmText=" Kattints valamelyikre! \nNe félj, nem fog fájni…" OnClientCancel="return true;"  />
 
Ilyenkor az OnClientCancel tulajdonságra van szükségünk, amely jelenesetben ugyanazt fogja csinálni, mintha az ok gombra kattintottunk volna.
 
ConfirmOnFormSubmit
Ez a tulajdonság elviekben arra szolgál, hogy a Confirm Panel megjelenítését késleltessük. Ez abban a szituációban tud nagyon hasznos lenni, ha például validátorokat használunk az oldalon, mivel ugyebár ha hiba van az oldalon, akkor nem kéne kérdezősködnünk. Azért írtam, h elméletben, mert ez a 10920-as előtti ACT verziókban nem működött sehogy se. A 10920-asban elméletben már úgy működik, ha ValidationSummary is van az oldalon, őt egyedül képes már úgymond megelőzni, kivéve az én gépen…
 
DisplayModulPopupID
A visszaigazoló ablak megjelenése teljesen egyedivé szabható egy úgynevezett ModulPopup Extender segítségével, de az alábbi három feltételnek teljesülni-e kell:
– A ModulPopup TargetControlID-jának meg kell egyeznie a CDE hasonló nevű tulajdonságának értékével, ami bármilyen IButtonControl interfészt implementáló kontrol lehet. Tehát akár ImageButton vagy LinkButton is! 
– Muszáj egy Ok, illetve egy Cancel gombot elhelyezni a panelen , és ezeket beállítani a ModulPopup OkButtonId-jának, illetve CancelButtonId-jának.
– Az OnOkScript, illetve az OnCancelScript megadást mellőzük!
A ModullPopup részletes bemutatása egy későbbi cikkben fog megtörténni, ezért a példakódba tettem megjegyezéseket!

Ez fájt….

Posted: 2007. november 9. in Egyéb
Most amikor felmentem a codeplex-re megnézni a projektemet, egy furcsaságot tapasztaltam: Nem jelent meg sehol. Gondoltam egyet, és beírtam a projekt oldalának címét, amire nem várt üzenet fogadott (röviden, magyarul): a projekt nem elérhető, ezért kérlek jelentkezz be… (rohadt intelligens a rendszer, tudja h én vagyok a projekt tulajdonosa, még anonymous-ként is!) Hát nem kicsit lepedőttem meg a dolgon, ezért bejelentkeztem és sikerült megoldanom másfél hónap álmatlanságának okát. Release-eltem a projektet, de tudjátok hogy: felszólítottak, hogy ma nem lesz release, akkor törlik a projektem. Alatta volt egy Publicate illetve egy Delete gomb (ha jól rémlik..). Ráplattyantam a publikálásra és lás csodát újra látszódott a projektem, de nem release állapotban volt!!!
Gondoltam üsse-kavics megpróbálom még egyszer release, hát ha most sikerül. Codeplex nagyon sokat fejlődött, sikerült a CalenderExtender-nél beállítaniuk a Format tulajdonságot, úgy ahogy. Eddig a lokalizáció miatt (mint ahogy erről már írtam is) a dátum ilyen formában került a kiadási dátum textbox-jába: yyyy.MMdd , most már intelligensebb a rendszer, mert a validátor hibaüzenetében kiírt  formátumba írja át. Mondanom se kell, hogy ez is hibásan van megad (yyyy.mm.dd.), mivel csak úgy fogadja el a rendszer a dátumot, ha a nap mögé nem teszünk pontot!!!!!!

ÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁ
körübelül ennyire fájt, amikor erre rájöttem…  ,de szerencsére nektek ezzel már nem kell vacakodnotok!!!

Mégse olyan rossz ez a CodePlex?

Posted: 2007. november 9. in Egyéb
Képzeljétek el, az elmúlt héten több, mint 50 ezerszer töltötték le a codeplex-ről a projektemet. Az érdekessége a dolognak az, hogy ez a szám 3 nap alatt generálodott és összesen ~4000 visitora volt, akkor a projektnek. Egy másik furcsaság, pedig az, h a hozzátartozó adatbázist, illetve patchet ellenben alig töltötték le.

Viszont ennek köszönhetően egyedül az AJAX Control Toolkit népszerűbb a letöltések közül a codeplex-en… (Projects with Most Downloads). A legjobb dolog az egészben pedig az, hogy van egy fejlesztő aki szeretne csatlakozni a projekthez… (bár egyenlőre még csak ennyit tudok róla)

Szal nem tudom mit kavartak be MS-knél, de emiatt most kivételesen nem szídom a CodePlex-et, de nem is dícsérem