Delphi szálak, üzenetek…

Néhány hasznos dolog Delphi programozóknak ami eddig kimaradt.

Még régebben találtam egy jo kis magyar leírást a többszálúságról pontosabban annak elkerüléséről Delphiben, miközben a felhasználói felletet nem akadályozva akarunk hosszabb ideig tartó műveleteket végezni.
szálőrület bejegyzései: TThread, Application.ProcessMessages, PeekMessage, OnIdle

A Windows üzenetkezeléséről Delphiben egy másik hasznos leírás a A Key’s Odyssey

Dynamic array, open array parameters, array of const @ Rudy’s Delphi Corner – Open array parameters

Debugging with OutputDebugString() @ Delphi Tips – Delphi Programming

Persze még van sok minden de most ezek jutottak eszembe.

D

Ma egy új program nyelvvel ismerkedtem meg: D
Éppen egy genetikai mintaillesztésen (short-read) gondolkodtam. Rendezési, indexelési algoritmusokat olvasgattam a neten, amikor egy in-place radix sort algorithm kérdésbe futottam bele, ahol egy D mintakódot láttam, és felkeltette az érdeklődésemet. Ahogy olvastam a nyelv leírását, összehasonlításokat C++-szal, újra előjöttek a különböző programozási nyelvekről alkotott gondolataim.
Az évek során elég sok programozási nyelvvel találkoztam: asm, asp, basic, bapc, c, c++, c#, clipper, delphi, java, js, pascal, perl, php, vbs, és ami most nem jut eszembe. Persze nem mindben programozok napi szinten, de írtam bennük működÅ‘ programot. Az elsÅ‘ a basic volt még C64-en 🙂 Persze ezeken kívül láttam vagy hallottam még egyéb programnyelvekrÅ‘l is (ada, cobol, fortran, python).
Minden nyelvnek megvannak az előnyei hátrányai. A delphiben imádom a string kezelést. Szeintem ez a legnagyobb előnye a c-vel szemben. Egyszerű kezelni, hatékony, másolható, összefőzhető, gyors (referencia számlált), nem kell bajlódni a memória kezeléssel. A c programok jelentős részében a hibák, biztonsági rések oka a helytelen memória kezelés, string műveletek. Amikor egy függvény több karaktert ír a visszatérési bufferbe, mint annak a mérete, lásd scanf, gets, wchat konverzió.
A másik amit szeretek a delphiben a függvény paraméterek kezelése: érték szerinti, const ill. var referencia szerinti átadás. Tiszta, jól látható, könnyen módosítható. Kiráz a hideg, amikor a c pointer változó átadásaira gondolok, és hogy milyen könnyű hibás kódot irni. A c++ referencia paraméteri már sokkal jobbak.
A Delphiben az erős típusosság is jól jön időnként, megkönnyíti a véletlen hibák kiszűrését, programozást az IDE-ben.
Egy másik dolog ami elég megtévesztÅ‘ tud lenni c-ben, az a pointer növelés és tömb indexelés: int32 a[5]; a[3] == *(a+3), word hi=*(word*)(a+2), hi=*(word*)((int)a+2), hi=*(word*)((char*)a+2) … én egy konstans eltolástól naivan egy mov word ptr [dx+2]-t várnék, egy indexeléstÅ‘l pedig mov word ptr [dx+idx*sizeof]-ot, de a c szerint az eltolás is típusfüggÅ‘ indexelés…
A C#-ban a using blokk hasznos a biztonságos erőforrás felszabadításhoz.
Na mára ennyi elég…

Categories vs. Tags

Néhány szó a kategóriákról: A kategóriák és a cimkék nem azonosak. Bár ugyanazt a funkcionalitást többé kevésbé el lehet érni, nem ugyanarra valók.
A kategóriák hierarchikus rendszerben vannak, és rendszerezésre szolgálnak, a funkciójuk ugyanaz mint a könyvekben a tartalomjegyzéknek.
A cimkék a tartalom leírására szolgálnak, a könyvekben erre a célra a szójegyzék/index szolgál.
Használjuk ezeket ennek megfelelően.

http://lorelle.wordpress.com/2006/03/01/tags-are-not-categories-got-it/

C# – VB.NET

Most hogy probaltam a C#-ban megirt kodot VB-re atirni jottem ra, hogy meg a 3.5-os VB.NETben sincs automatikusan implementalt property…
Automatically implemented properties
Auto-implemented Properties in VB and C#
Igaz, hogy Delphiben sincs, de nem is nagyon van ra szukseg. A VB-nek viszont nagyon kene.

Lassuk mit tudnak az automata konverterek:
Az elso viszonylag jol hasznalhato, bar meg nem volt idom tesztelni
Convert C# to VB.NET
a tobbi amit eddig talaltam ennel gyengebb:
converter.telerik.com
KamalPatel.Net – Convert C# to VB .NET

Analizis, Debugging

Az elkeszult projektet nem art neha ellenorizni:
ASP.NET Memory Leak Case Study: Sessions Sessions Sessions
Production Debugging for .NET Framework Applications
Windows Debuggers: Part 1: A WinDbg Tutorial

Ha valakinek nincs kedve debuggerekkel szorakozni akkor a jo kis adminisztratori eszkoz is szolgalhat hasznos informaciokkal: Admin. Tools – Performance Monitor
A titok a megfelelo szamlalok kivalasztasaban van. (hdd-hez a disk queue-t ajanlottak)
.NET CLR Memory – aspnet_wp – # Bytes in all Heaps
ASP.NET Applications – Cache API Entries
Process – aspnet_wp – Private Bytes

.NET Framework General Reference: Memory Performance Counters
.NET Framework Developer’s Guide: Performance Counters for ASP.NET

MSSQL 2005 + .NET

Ha valaki sql-lel foglalkozik akkor tudnia kell mi az az SQL Injection, es hogy hogyan lehet vedekezni ellene.
pl. php + MySQL : mysqli_real_escape_string()
php + PostgreSQL : pg_escape_string()
tovabbi leiras :addslashes()
(html generalasakor ajanlatos megnezni a htmlspecialchars(), htmlentities() fuggvenyeket)

MSSQL-ben tobb lehetoseg is van az escape character hasznalata mellett:
How To: Protect From SQL Injection in ASP.NET
Az SqlParameter Class hasznalata akkor is jo, ha sql queryben datetime tipusokat kell osszehasonlitani (es nem tudjuk milyen istenverte formaban varja tolunk a datumot)

SqlDataAdapter adapter = new SqlDataAdapter(
"SELECT * FROM Food WHERE expdate < = @expd", connection); adapter.SelectCommand.Parameters.Add("@expd", SqlDbType.DateTime).Value = DateTime.Now;

a kapcsolatok megfelelo kezelesere erdemes elolvasni ezt:
C# Using Statement

Adatbazis kapcsolat tarolasa web.config-ban (mert ott jo, vagy machine.config-ban):
How to: Read Connection Strings from the Web.config File
vagy ConfigurationSettings.AppSettings[...]