Welkom op het developersblog van 4DotNet
Op dit developersblog zullen onze eigen ontwikkelaars hun praktijkervaringen en andere inseressante onderwerpen plaatsen.

Archief van 'Delphi'

Andre Mussche

Deze week is “Coderage 6” actief, met online video sessies over verschillende onderwerpen. De replays van de 1e twee dagen zijn nu te downloaden, 2 daarvan zijn erg interessant:

Andre Mussche

Bob Swart: Delphi XE en Intraweb XI
De 3e sessie ging over de nieuwste versie van Intraweb die bij Delphi XE meegeleverd wordt. Dit zijn echter beperkte versies: je kunt beter upgraden naar de volledige versie (oa SSL, source code, IP binding, etc).

De nieuwste Intraweb versie is flink verbeterd en opgeschoond, maar dit is wel ten koste gegaan van oude features: geen HTML3.2/WAP, geen verschillende browser versies, geen partial updates, etc. Dit waren destijds features die hun tijd vooruit waren maar nu niet meer relevant zijn met de modernste browsers. Het is dus niet 100% backwards compatible, maar daarvoor zijn wel betere features voor in de plaats gekomen: volledige AJAX/Async support, betere authentication, betere URL handling, data pools, meer deployment mogelijkheden, etc.

Lees verder…

Andre Mussche

Afgelopen vrijdag 18 maart ben ik weer een keer naar een SDN event geweest. Het werd gehouden in het “Achmea Conferentie Center” in Zeist: een mooie locatie maar geen parkeergelegenheid dus je moest de auto op een vergelegen parkeerplaats parkeren en via een pendeldienst op en neer rijden…

Pawel Glowacki: What’s Cooking in Delphi labs

Als eerste een sessie gevolgd over de ontwikkelingen die er gaande zijn voor Delphi. Sinds de overname door Embarcadero is er veel verbeterd en veranderd (touch & gestures, cloud support, etc) en er zijn veel plannen en ideeen voor de komende versies (data binding, biometrics, voice, social, universal cloud API, parallelization, mobile, etc). Helaas kon en mocht hij weinig concreets zeggen, maar er wordt veel in geinvesteerd. Wat dat betreft was hij blij met Embarcadero: een solide en kapitaalkrachtige onderneming, niet beursgenoteerd dus geen investeerders die zich bemoeien met de roadmap!

De volgende versie gaat in ieder geval 64bit Windows en cross platform (MacOs en Linux) ondersteunen. Dit alleen in de compiler: er komt vooralsnog geen speciale IDE versie voor MacOs etc (hoewel dat wel zou kunnen), ze willen zich eerst vooral op een goede Windows versie richten.

Wel nieuw was de aankondiging dat de volgende versie vector based GUI controls krijgt, die cross platform zijn! Dit is mogelijk door de overname van KSDev, de makers van DxScene en VgScene. Hiermee zijn erg mooie en snelle user interfaces te maken, die door DirectX of OpenGl gerenderd worden (zie een vorige blog van mij hierover). Daarnaast is alles “object based”, dat wil zeggen: je kunt een listbox maken en hierin elke control als item toevoegen (button, image, panel, etc) in plaats van alleen een “listitem”. Een grid met allerlei knoppen en treeviews is zodoende eenvoudig mogelijk. Uiteraard zijn allerlei effecten mogelijk (scaling, zooming, rotation, transparency, transition paths, etc).

Trouwens niets over “Project Cooper” van RemObjects: dit is een Java compiler voor Delphi Prism! Hiermee kun je dus oa “native java” voor Android ontwikkelen.

Sander Hoogendoorn: One man, one Whiteboard and three markers

De tweede sessie was vermakelijk, met allerlei grappen en grollen. Ik had een boek over architectuur van hem gelezen, maar niet geweten wat voor een drukke komiek hij is :-) .

Het was de 2e sessie, gehouden zonder agenda: het publiek bepaalde de onderwerpen. In een rap tempo ging het over DDD, Domain models, Business Objects, Dependency injection, validation, logging, AOP, MVC/MVP/MVVM/MVWTF, etc. Weinig nieuws (bekende termen) maar wel met praktische voorbeelden uitgelegd.

Wel interessant was de benadering m.b.t. domain types: een persoon heeft een voornaam en achternaam. In plaats van deze het “string” type te geven, kun je beter een “HumanName” class maken, want een naam heeft bepaalde karakteristieken: geen cijfers, alleen letters en spaties, geen andere tekens. Dus string is te algemeen. Hetzelfde geldt voor creditcard, BSN/Sofi, rekening- en telefoonnummers.

Ook een goed aandachtspunt was het niet gebruiken van business objecten bij grote acties: bijvoorbeeld uitvoeren van uitgebreide rapportages of het bijwerken van veel records (alle salarissen van een groot bedrijf +10%). Als je duizenden records als data/business objecten moet laden, ben je een hele poos bezig…

Andre Mussche

Als je een applicatie maakt dat moet draaien via een WLAN (Wifi), pas dan even op en lees het onderstaande door:

Windows laadt namelijk niet de gehele executable in het geheugen, maar alleen wat hij op dat moment nodig heeft. Als je bijv. op een knop in je applicatie drukt, dan *kan* Windows een nieuw blok bitjes van je applicatie via het netwerk moeten ophalen (of voor een resource (bijv. een icon) bij een nieuw scherm dat je aanmaakt, etc).
Echter, als je via een WLAN werkt, dan kan natuurlijk net je verbinding weg zijn…
Wat er dan gebeurt? Een “External exception C0000006″ :-(
Oplossing? Je moet een flag in je exe zetten, die aangeeft dat je vanaf een removeable medium werkt (USB, Wifi, etc) zodat Windows wel alles inlaadt. In Delphi kun je dit in de .dpr doen:
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}

Dit heeft bij mijn huidige klant nogal voor wat hoofdbrekens gezorgd: we kregen deze exceptions op de meest vreemde plaatsen, zonder aanwijsbare bug in de code. Na wat googlen was de oorzaak gauw gevonden en de fix snel gemaakt :-) Zie originele discussie + oplossing:
Andre Mussche

Soms wordt je onaangenaam verrast: je meet de tijd van alle SQL queries in je programma met “MillisecondsBetween” en je krijgt als resultaat: 0, 0, 0, en 15ms…

Hmmm, dit is te mooi om waar te zijn, zo snel is MS SQL Server nou ook weer niet! :-)
Er ging bij mij toen wel een lampje branden, ik eens eerder zoiets gezien met “Sleep” en “GetTickCount”.
Andre Mussche

Delphi 2010 released!

Vlak na de preview van Delphi 2010 (zie mijn vorige post), verscheen al de RTM versie en is het officieel released. Ondertussen zijn er verschillende interessante blogs verschenen, waarbij verschillende verbeteringen verder uitgelegd worden. Ik zal niet alle verbeteringen bespreken, maar een paar uitlichten.  (P.S: zie ook de complete “reviewers” guide!)

Lees verder…

Andre Mussche

Op de site van Codegear/Embarcadero is vorige week de Delphi 2010 Preview Center verschenen: Nog 7 dagen, 2 uur, 31 minuten (and counting…) en dan is het zover.
Delphi 2010 belooft de beste Delphi release ooit te worden, met veelbelovende nieuwe features en verbeteringen! Zoals (Multi)Touch, Mouse Gestures, IDE Insight (alles (!) vinden in 1 scherm), background compilation, verbeterde debugger (oa threads), verbeterde RTTI (.Net Reflection!), class attributes, Direct2d canvas (Win7), etc etc.

Lees verder…

Andre Mussche
Weer een overzicht van allerlei nieuws en interessante informatie.

Je kunt op verschillende manieren Win32 en .Net naast elkaar gebruiken. Voor als je bijvoorbeeld veel Win32 code hebt, die je niet 123 helemaal kunt/wilt porten naar .Net.

Ander .Net nieuws:

Natuurlijk ook normaal Delphi nieuws en tips:

Verder nog leuk om te vermelden:

Andre Mussche

Een aantal zaken mbt Delphi (Win32 + Prism):

  • RemObjects heeft hun open source repository uitgebreid metDelpi Prism Templates en Delphi Prism Aspects .
    Op moment van schrijven zitten er alleen een Monoobj Template en een ASP.Net MVC Template en een CheckDisposedAttribute Aspect .
    De bedoeling is dat dit natuurlijk uitgebreid wordt, en iedereen wordt aangemoedigd om mee te helpen!
  • Ik had in mijn vorige blog al even Plastic SCM genoemd. Er is een interessant blog van de makers verschenen over het blame commando: hiermee kun je opvragen welke regel door wie of in welke branch aangepast is!
  • Verder kun je Plastic SCM koppelen dmv triggers met bijvoorbeeld CruiseControl, voor Contineous Integration .
  • Momenteel ben ik aan het oriënteren voor een nieuwe data object structuur bij mijn huidige opdrachtgever. Dit omdat in de toekomst waarschijnlijk meer met .Net gedaan gaat worden (Delphi 2007 + Delphi Prism?). Dan vervalt sowieso de huidige (en oude) structuur. Dus als iemand ideeën of tips heeft, graag! (het liefst voor zowel Delphi als .Net te gebruiken ipv 2 verschillende).
  • Een interessante kandidaat is Hitsoft SQL Object Library (HitSQLe): een soort LINQ voor Delphi Win32! Uiteraard niet 100% compatible maar toch heel uitbreid en krachtig. Zo hoef je oa niet druk te maken over Oracle of SQL Server commando’s, en het heeft een ingebouwde connection pool. O ja, en het is nog open source ook!
  • Een ander alternatief is Data Abstract van RemObjects . Hiermee kan namelijk eenvoudig multi-tier systemen mee gebouwd worden. Ik heb al eens een Proof Of Concept gemaakt voor multi-tier, boven op het RemObjects Remoting Framework (wat wat we al voor messaging en onderlinge service communicatie gebruiken). Maar Data Abstact werkt ook boven op dezelfde SDK, en het is idem database onafhankelijk (het gebruikt oa Schema Modeler ). Ook interessant dus :-) .
  • Momenteel ben ik bezig met het opfrissen van de GUI. Oa met de nieuwe versie van de VCL Components van TMS (ze hebben ook .Net componenten). Hiermee kan bijvoorbeeld eenvoudig een “Office 2007 Blue” look verkregen worden, maar je kunt ook zelf de kleuren schema’s aanpassen. Zo moet straks een groene Greenax look verkregen worden ivm de integratie hiermee.
  • Verder heeft TMS mooie “Smooth” componenten! Deze maakt gebruik van de videokaart voor de 3D effecten.
  • Naast de TMS componenten, wordt nu ook gebruik gemaakt van de mooi iconen van GlyphLab. Dit is een hele uitgebreide set, inclusief originele gelayerde PhotoShop bestanden, zodat je zelf eenvoudig aanpassingen en combinaties kunt maken! En $200 is dan niet duur! Een verademing in vergelijking met de ouderwetse Delphi 3 iconen… Het leuke van het aanpassen van GUI is dat in principe de werking gelijk blijft, maar het toont gelijk een heel stuk beter!
  • Nog meer wat betreft de GUI? Ja, want GUI testen is nogal lastig. Hopelijk gaat OpenCTF mij hierbij helpen. Dit is een uitbreiding op DUnit, waarmee ik al bezig geweest ben voor een POC voor integratie testen.

Nog wat leuke informatie mbt .Net algemeen:

  • Het Mono project heeft een aantal uitbreidingen gemaakt voor .Net. 1 ervan is Mono.Simd. Hiermee kan eenvoudig en snel met vectoren gewerkt worden, die door de Mono compiler omgezet wordt in SSE /SIMD instructies voor de CPU. Dit is stukken sneller dan normale CPU instructies. Mono.Simd is compatible met het Microsoft .Net framework, alleen maakt deze compiler er normale CPU instructies van, dus vele malen trager (maar het is wel compatible). Het is vooral bedoel voor games, omdat deze veel gebruik maken van vectoren.
  • Een specifiekere uitbreiding is ondersteuning voor Microthreads (of Continuations). Vooral bedoeld voor games, maar kan ook goed gebruikt worden voor afhandeling van veel (kleine) netwerk connecties. Microthreads draaien in 1 thread, waarbij bijvoorbeeld de status van een functie opgeslagen kan worden (CPU registers, stack, etc), zodat deze later weer “resumed” kan worden. Het gaat te ver om het helemaal uit te leggen, lees het blog zelf maar :-) . Maar een voorbeeld is wel handig:

prince.WaitForObjectVisible (princess);
prince.WalkTo (princess);
prince.Kiss (princess);

Andre Mussche

Het heeft een poosje geduurd, maar bij deze weer een aantal interessante links:


Lees verder…