János's profileJános JankaPhotosBlogListsMore Tools Help

Blog


    March 26

    WPF Toolkit (2009. március)

    The WPF Toolkit March 2009 Release includes:

    • Fixes for top priority issues and frequent pain points, including:
      • DataGridColumn * width designer crash issue
      • Un-clickable popups in DataGrid RowDetails
      • DatePicker crash when setting IsEnabled to False
      • DatePicker SelectedDate binding is not TwoWay by default
      • And many more!
    • The same components as the January 2009 release, including:
      • V1 of the WPF DataGrid
      • V1 of the DatePicker/Calendar
      • Preview of VisualStateManager (VSM)

    Innen már le is tölthető rögtön.

    March 25

    Úton egy új élet felé

    Ha most nem néztek engem őrültnek, akkor soha, de kíváncsi vagyok, hogy Ti mit szóltok mindehhez. Ha az öszödi beszédet - ahogy Fábry is mondta - a Világ legőszintébb beszédjének tituláljuk majd a jövőben, akkor én elmondom a Világ második legőszintébb szónoklatát, de ez rólam fog szólni. Lássunk is neki:

    Egyszer volt, hol nem volt, volt egyszer egy kövér kis fiúcska. Na jó, annyira kicsi nem, 20 éves és 134 kg. 2005 áprilisában ez a fiúcska úgy döntött, hogy elege van abból, hogy bár barátai szeretik és mindenben támogatják, mégis érzi, hogy ő más... Persze mindaddig, amíg házibuliba, vagy akárhol voltak, rendesen kezelték őt, de mikor együtt elmentek egy közös szórakozóhelyre "magára hagyták", "semmibe se nézték" (kivétel "tesókám" Kupy és uncsitesóm, Pista bácsi. Bár néha ezt rajtuk is éreztem, de én ezért nem hibáztatok senkit, nem voltam túl fotogén egy buliba, ez tény). 2005 áprilisában ez a fiúcska már annyira nagyocska volt, hogy már a hasa is fájt amikor megevett egy kanál levest. Na ekkor jött el az a pillanat az életében, hogy ez így nem mehet tovább! Elhatározta, hogy ha törik, ha szakad, ő is olyan lesz mint a többiek és büszkék lesznek rá, amit véghez visz. Sőt, ettől sokkal többet is remélt, de ne rohanjunk ennyire előre a történetben. Nekilátott a saját diétás programjának, illetve a saját edzésprogramjának megalkotásához. A program akár hiszitek, akár nem, nagyon egyszerű volt: 3x2 töltött káposzta minden nap (esetleg halászlé) + napi 1, időnként 2 óra futás a házban zene hallgatással megspékelve. Itt külön kiemelném, hogy csak ez a 2 étel tudott rá úgy hatni, amitől drasztikusan képes volt fogyni, amellett, hogy persze sportolt is. De külön hangsúlyozom, ez a két étel (végigpróbálva mindent) hatott a legjobban a sport mellett neki. Természetesen kenyeret, lisztes termékeket (beleértve a teljes kiőrlésűt is) nem fogyasztott, de nem is hiányzott neki, mint ahogy most sem. Ezt az edzésprogramját folytatva ez a fiúcska meglepően nagy eredményekre volt képes mindenféle Norbi hókuszpókusz nélkül. Nem mondom, hogy az Ő módszere nem működik, de nem az-az egyetlen út a sikerhez, mint ahogy van Béres Alexandra is. :) Számszerűsítve ez azt jelenti, hogy az első hónapban fogyott 20 kg-t, következő hónapban kb. 10 kg-t, majd természetesen ez folyamatosan lassult, s persze az első hónap azért is volt olyan drasztikus, mert abban a vízvesztés is benne van (~ 6-7 kg). A lényeg, hogy őszre, kerek 6 hónap alatt fogyott 55 kg-ot. Ez azt jelenti, hogy ez a fiúcska már szeptemberben bizony 79 kg-osan tette be a lábát az egyetemre és megjegyzendő, hogy ezt az ominózus súlyt 2 teljes éven keresztül tartotta is mindenféle hókuszpókusz nélkül. Másképp néztek rá az utcán, barátságosabban társalogtak vele, s még a buliban is volt mit a tejbe aprítania (pontosabban csak lehetett volna). De! Sajnos, itt jött egy drámai fordulat, s mély depresszióba, magába zuhant ez a fiúcska. Úgy érezte, hogy bár megváltozott, valójában mégse változott semmi. Belül még mindig ugyanaz maradt, mint aki volt. Azt hitte, hogyha lefogyasztja magát onnantól kezdve megnyílik a Világ előtte, s ez így is volt, csak éppen Ő nem volt képes még akkor se megnyílni a Világnak. Talán úgy érezte, hogy még mindig nem felel meg az elvárásoknak. Természetesen, mint ahogy próbálta mindig is hangsúlyozni mindenkinek, a fogyás az nem magáról az evésről való lemondásról, hanem életmód váltásról szól. Igen ám, csak sajnos hiába volt Ő 79 kg, ha még úgy sem volt képes magát elfogadni. Természetesen mondanom sem kell, hogy ezt követően visszaszedett magára majdnem mindent. De! Épp a napokban történt vele egy olyan dolog, ami felidézte benne, hogy talán van még remény és érdemes küzdeni. Mi is lehetett ez? Ennek kitalálását inkább az olvasóra bíznám. Újra neki lát az útnak és győzelmet fog aratni, mert pontosan látja, hogy mik voltak a tévedései még anno. S végezetül nem maradt más hátra, mint a kézzel fogható bizonyíték mindarra, hogy ezt bárki képes kivitelezni, nem csak Ő (majd a későbbiekben teszek még fel róla ettől fotogénebb képeket a 79 kg-os korszakból, illetve a jövőben talán élőben is megcsodálhatjátok majd így, de remélhetőleg már izmosabb karokkal megáldva :)):


    Evolution
    March 23

    !exploitable Crash Analyzer - MSEC Debugger Extensions

    !exploitable (pronounced “bang exploitable”) is a Windows debugging extension (Windbg) that provides automated crash analysis and security risk assessment. The tool first creates hashes to determine the uniqueness of a crash and then assigns an exploitability rating to the crash: Exploitable, Probably Exploitable, Probably Not Exploitable, or Unknown. There is more detailed information about the tool in the following .pptx file or at http://www.microsoft.com/msec.
    This tool was created by the Microsoft Security Engineering Center (MSEC) Security Science Team. For more information on MSEC and the Security Science team, please visit http://www.microsoft.com/security/msec. To see what's being worked on presently, visit the Security Research and Development blog at http://blogs.technet.com/srd/.

    Indulhat a tesztelés: !exploitable Crash Analyzer - MSEC Debugger Extensions

    March 22

    Expression Blend 3. IntelliSense

    Juhuhúúú, van IntelliSense is gyerekek!

    Expression Blend 3 IntelliSense
    De jobbat is mutatok, C# kódszerkesztő IntelliSense-el közvetlenül a Blend-ben:

    Expression Blend 3 C# Code Editor & IntelliSense
    March 19

    Internet Explorer 8 RTM

    Megérkezett a kicsike, kéretik befáradni: Internet Explorer 8 RTM

    March 12

    Delphi Prism (2009. február)

    Letölthető a Prism februári kiadása. Van egy 3 MB-os zip fájl az oldalon, ami tartalmazza a Prism telepítéséhez szükséges fájlokat.

    March 11

    Astoria Offline (Alpha)

    Astoria Offline" is designed to provide an end-to-end solution for authoring of offline applications that use data from data services, either within a corporate network or across the Internet. This download provides the tools and runtime components necessary to create the client and server components of the system and create sync-capable databases (or adjust existing database schemas with sync capabilities). The goal of this initial release is to explore the requirements in this space and share our current thoughts on our approach.

    The download contains a "Using Astoria Offline" document that gives a step-by-step walkthrough to create an offline-enabled application. The walkthrough provides an exploration of the infrastructure and how it can be used to build applications. Additionally, a complete example of an offline-enabled application is included in the download.

    This release is built on top of the ADO.NET Data Services v1.0 release and .NET Framework 3.5 SP1. This is an early “preview” release, as such, it is not supported and should only be used for prototyping and investigating. As this is a preview release, it is strongly recommended that this release be installed in a test-only environment; a virtual machine is recommended. Please read the included README for more information on support and limitations of this download.

    Note: This release is separate from the ADO.NET Data Services v1.5 CTP1 release that will be available soon. Installing this offline preview release on the same system as the v1.5 CTP1 is not supported and it is strongly recommended that you do not install the two releases on the same system.

    Letöltés itt: Project Codename "Astoria Offline", Alpha Preview

    March 10

    T4B Debrecen

    Remélhetőleg tetszett mindenkinek a rendezvény. Nem titok, próbáltam Zsoltit fűzni azzal, hogy Debrecenbe (is) többször látogassanak el. Meglátjuk mit tud intézni ennek érdekében a főnökségnél. Számomra jó volt megismerkedni a többiekkel is a csapatban, úgyhogy mindenképp megérte. Ez az átka a távolságnak. :) További részletek itt.

    March 07

    Risefm zenék

    Megint lesz mit hallgatni utazás közben… Aáá, iszonyat ez a risefm. Tiszta görög hangulatot idéz:

      


    Á, kell Debrecenbe is a többi x rádió helyett! Kérem szépen!
    March 06

    ECO 5 a .NET Frameworkhoz

    Chikk által már tudhatjátok, hogy az EF egy kissé beteges (még). Ezzel nincs is baj, sőt, mint tudtam meg egy-két emberkétől, a Microsoft Angliában nem is úgy nyilatkozik a fejlesztőknek erről (ha megkérdezik őket), hogy ez egy olyan verzió amit élesben használni kellene. Ők tényleg kb., mint egy Alpha verzióra tekintenek az egészre. Pontosan emiatt az egyik srác ajánlott nekem egy másik lehetőséget, az a neve, hogy ECO V. Idézem:

    ECO is a tool for creating model drive applications in Prism, C# or VB. By making it faster to do it right than to cut corners, ECO is not only intended for developers that practice DDD (Domain Driven Design) as a matter of principle. It is equally suited for developers that just want to get the job done as fast as possible. When ECO is used, the domain classes are defined in a model as class diagrams and state diagrams. ECO then generates both the database, the application code, and the O/R mapping, freeing developer creativity for less mundane tasks. At runtime, ECO adds extensive framework support for tasks commonly needed on domain objects such as data binding, transaction handling and multilevel Undo/Redo. ECO is particularly suited for agile processes such as SCRUM, since the model changes are immediately incorporated into the application. ECOs Database Schema Evolution ensures that existing data is not lost when the database is updated to match the new model saving further time on each iteration.

    Amíg nincs kész az EF olyan szinten, hogy nem kell hozzá 67 workaroundot írni, el lehet játszani ezzel is. Ez tényleg mindent tud, amit az EF-nek kell majd tudnia. Egy szépséghibája van, nem ingyen van.

    March 01

    C# vs Delphi Prism

    Tudom, ez most elég kényes téma lesz, annál is inkább, mert ez az a téma tipikusan, ahol nem lehet elfogultságok nélkül ítélkezni. Én mégis megpróbálom ezt megtenni, mégpedig úgy, hogy mindkét félről mutatni fogok olyan dolgokat, amik a másikba nincsenek meg. Mindenkinek szuverén joga eldönteni ezek után, hogy melyik nyelvet használja (természetesen értem ide akár a VB-t is, csak én ahhoz tényleg nem értek). Chikkel épp most vitatkozunk egy-két dologról ezzel kapcsolatban itt, ugye mint egy C# szakival, aki egy kicsit pascal ellenes is talán, de most beláthatja szerintem ő is, hogy meglepő hova fejlesztik ezt a nyelvet. Gondoljunk csak vissza, biztos rengeteg Delphi fejlesztő van aki most is olvassa ezt a cikket és van viszonyítási alapja arról, hogy milyen nagyszerű dolgok mennek itt végbe. Ezt nem egy Microsoft ellenes konkurrenciának kell tekinteni, hanem egy lehetőségnek, hiszen ami alatta dobog, az úgyszint a Microsoft szíve, a .NET Framework. Engem legalább akkora örömmel tölt el látni ezt a nyelvet élni tovább és megerősödni, mint amit  a .NET Framework és a Microsoft által szállított új platformok és technológiák öröme nyújt. De térjünk át akkor a lényegre, legjobb lesz, ha táblázatosan szemlélteket pár dolgot (itt most nyilván nem fogok leírni mindent, csak ami eszembe jutott, de kiegészíthetitek). Hangsúlyozom, nem az volt a cél, hogy tökéletesen leírjak mindent, csak mint szemléltetésképp emeltem ki néhány dolgot:

    Feature C# 3.0 Delphi Prism 3.0
    Lambda expressions () => Debug.Write(“OK”); () –> Debug.Write(‘OK’);
    Lambda statement blocks () => { Debug.Write(“OK”); } anonym methods
    ? : operator y = x > 10 ? 10 : x; y := iif(x > 10, 10, x);
    AFAIK (collection initializers, etc.) x = new [] { 1, 2, 3 };
    y = new List<string> { “String1”, “String2” };
    x := [1, 2, 3];
    y := new List<string>([“String1”, “String2”]);
    string x = “string” + Environment.NewLine; x := Delphis string a Prismben’ + Environment.NewLine;
    x := C#-s string a Prismben + Environment.NewLine;
    verbatim string x = @”C:\Temp\”; x := ‘C:\Temp’;
    x := “C:\Temp”;
    sequences IEnumerable a;
    IEnumerable<T> b;
    IEnumerable<T> c;
    IQueryable<T> d;
    IParallelEnumerable <T> e;
    a: IEnumerable;
    b: IEnumerable<T>;
    c: sequence of T;
    d: queryable sequence of T;
    e: parallel sequence of T;
    colon : operator if (o != null) o.Name = “John”; o:Name := “John”;
    The possibility to have more than one indexed properties. int this[string key] { } property Items[Key: Integer] …
    property Items[Key: string] …default;
    property Lines[Line: Integer] …
    Boolean Double Comparisons if ((x > 10) && (x < 20)) … if 10 < x < 20 then
    Inline Property Readers string Name { get { return "John"; } }

    string this[int i]
    {
       get { return List[i+1]; }
       set { List[i + 1] = value; }
    }
    property Name: string read ‘John’;

    property PropName[I: Integer]: string read List[I+1] write List[I+1];
    Asynchronous Methods/Blocks and Thread Synchronization (PFX or thread pool) .NET 4.0 PFX or Thread Pool async method DoIt();
    begin
    end;

    class method
    ConsoleApp.Main;
    begin
       async
       begin
          …
       end;
    end;

    var x := async for i:= 0 to 100 do
    begin
    end;
    Selectors switch (…)
    {
       case …:  … break;
       default: … break;
    }
    caseof … : …; … : …; elseend;

    case Obj type of
      Person: msg := ‘Person’;
      Employee: msg := ‘Employee’;
    end;

    Enhanced 'is not' and 'not in' statements if (!(o is Person)) … if o is not Person then
    For for (var i = 0; i<=10; i+=2) … for i: Integer := 0 to 10 step 2 do// there is no type inference

    for parallel i: Integer := 0 to 10 step 2 do
    Foreach

    foreach (var obj in objList)
    if (o is User) ...

    for each matching o: User in AList do ...

    for each o in AList index i do

    for each parallel o in AList do

    for each from o in AList do

    Implements for Individual Members  

    type
      IFoo = interface
        method Bar;
      end;

      MyFoo = class(IFoo)
      public
        method Bar; // Foo already had a Bar class that does something else than IFoo.Bar.
        method FoosBar; implements IFoo.Bar; // provides the implementation for IFoo.Bar
      end;

    Property Notification INotifyPropertyChanged INotifyPropertyChanged

    property Name; notify;
    property Address; notify ‘ValueName’;
    volatile volatile keyword Prism 4.0 or
    Thread.VolatileRead 
    Thread.VolatileWrite
    Logical Implication (implies) x = !a || b; x := a implies b;
    x := not a or b;
    Class References reflection PersonClassRef = class of T;
    Default parameters C# 4.0 method DoIt(c1: Word := 5; const c2: string := 'abc'; var c3: Integer := 8);
    Events public event EventHandler Click; event + raise keyword
    if (Click != null) Click;
    Setsoperators Classes (C# 2.0 MSDN: PascalSet, HashSet, etc.) set of
    Futures (PFX) .NET 4.0 PFX

    var w: future := async
    begin

       // work in background thread done here
    end;

    // more work in main thread done here

    w(); // waits for the async block to finish

    Polymorphic Delegates  

    type
      FooData = class(Object);
      FooDataEx = class(FooData);
      Foo = delegate (sender: object; data: FooData);
      FooEx = delegate (sender: object; data: FooDataEx);

    var foo: Foo := method (sender: object; data: FooDataEx) begin end; // there are no lambdas

    Enums enum MyEnum { a, b, c, d = 255 };

    MyEnum = enum (a, b, c, d = 255);
    +
    flags:
       MyFlags = flags(a, b, c);
    typed enums:
       x = enum (a,b,c) of byte;

    Global classes & methods   Delphi Win32 global members
    Class contracts Code Contracts method MyClass.ToString(const index : Integer) : string;
    require
       index >= 0;
    begin
       result := Strings[index];
    ensure
       result.Length > 0;
    end;

    TestClass = public class
    private
       value : Integer;
    private invariants
       value > 0;
    public invariants
       value > 35;
    public
       // public methods
    end;
    Parameter attributes [MyAttribute] int DoIt([MyAttribute] int a) … method DoIt([MyAttribute] a: Integer): [MyAttribute] Integer; …
    “Untyped” Parameters C# 4.0 method FreeAndNil(var obj);
    Partial Methods // file1.cs
    partial void OnNameChanged();

    // file2.cs
    partial void OnNameChanged()
    {
       // method body
    }
    // file1.pas
    method OnNameChanged; partial; empty;

    // file2.pas
    method OnNameChanged; partial;
    method OnNameChanged;
    begin
       // method body
    end;
    Extended Constructor Calls C# 4.0

    with p := new Point(param1, param1, x := 10, y := 20) do
    begin
        // code
    end;

    Readonly directive readonly int x; x: Integer; readonly;
    Exception Filters  

    try
       // ...code goes here...
    except
      on E: SocketException where E.ErrorCode = 10054 do
      begin
         // connection was closed gracefully
      end;
    end;

    Property get/set int Prop { get; set; } property Prop: Integer read write;
    Type Aliases using SimpleDictionary = Dictionary<string, object>; type
       SimpleDictionary = Dictionary<string, object>; // only valid from within the current assembly

    type
       ObjectList = public List<object>; // can be used from other assemblies too
    using using (var f = new FileStream(…)) …

    using f := FileStream.Create(…) do

    with   with new Point do
    begin
       x := 10;
       y := 10;
    end;

    with matching p: AClass := AClass(GetValue()) do DoIt;
    Co/contra variance C# 4.0 Func<Animal> animal := () –> DoIt;
    Func<Rabbit> rabbit := animal;
    Inline Scripting ASP.NET <%...%> and <script> tags ASP.NET <%...%> and <script> tags
    MixIn   There is a simple yet very effective way to get a feature of some other (mainly dynamic) languages that is called "MixIn" to work in Delphi Prism.
    Aspect-Oriented Programming (AOP) Aspect Oriented Programming using .NET Delphi Prism AOP – Cirrus
    Prism Aspects to Help with Monobjc Development


    Ez persze a jelenlegi verziókra vonatkozik jobbára, mert szerintem úgy korrekt az összehasonlítás, és inkább a nyelvbe épített szolgáltatásokon, mint sem a jövöbeli framework kiegészítéseken van a hangsúly. Szerintem nagyon dúrva az eddigi Delphihez, sőt még talán a C#-hoz képest is, de ez az én szerény véleményem. Megmondom őszintén, nekem jobban tetszik ez a nyelv, mert szerintem sokkal áttekinthetőbb és olvashatóbb mint a sok kriksz-kraksz. Már maga az, hogy van külön interface és implementation rész is jóval áttekinthetőbb, mint össze vissza írogatok rendszertelenül mindent. Én szeretem, ha korlátoznak abban, hogy minek hol a helye, persze eleinte ez idegesítőnek tűnhet, de megvan az értelme. Utána sokkal jobban látok mindent, ha előveszem később a projektet. Rend a lelke mindennek! ;)