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…
Tag Archives: programozás
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
Precompile ASP.NET WebSite
C# using
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[...]
VS 2008 asp dotNET bugs?
OK, szoval regen VS 2003.NET -et hasznaltam, most meg 2008-at. Olyan erzes mint amikor uj helyre koltozik az ember. Semmit se talal elsore, minden mashol van, es tiszta frusztraltan erzi magat.
Szoval a multkori bejegyzesemben irtam/hivatkoztam az autoEventWireup kikapcsolasara mint teljesitmenyjavito eljaras. Nos ez nehezebbnek bizonyult mint azt vartam. VS 2003-ban .NET 1.1-ben ez tiszta ugy volt. olyan szep kodot generalt a Visual studio:
/// <summary>
 /// Summary description for AdminResurce.
 /// </summary>
public class AdminResurce : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.DataGrid DataGridResource;
...
#region Web Form Designer generated code
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: This call is required by the ASP.NET Web Form Designer.
   //
   InitializeComponent();
   base.OnInit(e);
  }
 Â
  /// <summary>
  /// Required method for Designer support - do not modify
  /// the contents of this method with the code editor.
  /// </summary>
  private void InitializeComponent()
  {  Â
   this.DataGridResource.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGridResource_ItemCommand);
...
this.Load += new System.EventHandler(this.Page_Load);
Most se InitializeComponent, se OnInit, minden oldalra automatikusan beirja az AutoEventWireup=”ture”-t, ha kikapcsolom, akkor persze nem mukodik a Page_Load (csak ha kezzel letrehozom a megfelelo OnInit kodot). Ha Website-hoz kapcsolodok, es ott hozok letre webformot, akkor meg csak a kontrollokat se latom (amiket Web Application projectnel a *.aspx.designer.cs-be pakol: protected global::System.Web.UI.HtmlControls.HtmlForm form1; )
A templatek itt talalhatok : C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplatesCache\Web\CSharp\1033\WebForm.zip
Szandekosan butitja a microsoft a visual studiojat, hogy tobb programozasi konyvet, meg tanfolyamot tudjon eladni?
autoEventWireup is hard-coded into templates making changing the default stupidly time-consuming
http://blog.dantup.me.uk/2007/08/autoeventwireup-still-broken-in-visual.html
ASP.NET info
Mivel mar regen programoztam asp.NET-et, amikor meg az 1.1-es .NET volt a legfrissebb, igy ugy dontottem nem art szetnezni a neten. Mivel a Microsoft folyamatosan tolja ki az uj dolgaait, nem lehet pihenni mindig van ujdonsag.
Itt van nehany link amit erdemesnek talaltam osszegyujtani a barangolasom soran. Nehany alapfogalom, koncepcio…
Ha valaki webre fejleszt jo ha szet tudja valasztani a design elemeket es az uzleti logikat. Az elozo bejegyzesem az elobbivel foglalkozott (absolute, float layout..). Itt van meg egy link: Multi Column CSS Layouts .Mint azt rogton eszrevettem a VS 2008 nem kinalja fel a gridLayoutot mint azt regen az 1.0-s framework idejen. De ez nem is baj, hiszen weboldalt es nem pc alkalmazast fejlesztunk. (egyebkent be lehet kapcsolni az abszolut pozicionalast a tools menuben). Az egymasba agyazhato Master Pagek ami ujdonsag. Ha nem egy oldalt keszit az ember erdemes hasznalni, es raforditani turelmet es jol elkesziteni. A tobbi oldalt mar gyorsabban el lehet kesziteni, es egyseges look-and-feel-t kapunk.
ASP.NET Master Pages Overview
VS 2008 Nested Master Page Support
Open Source Templates
Nade lepjunk tovabb az izgalmasabb programozasi reszekre, mint peldaul a tobbretegu megoldasok (DAL) es egyebek. Talaltam par leirast a kovetendo modszerekrol (best practices) amit mindenkepp meg kel fontolni, de ezek mar inkabb haladoknak szolnak, nem ebbol fognak a legtobben megtanulni programozni, es remelhetoleg nem kezdoket vesznek fel nagy teljesitmenyu portalok megirasara, de azert itt van:
ASP.NET Best Practices for High Performance Applications
“Good” ASP.NET Coding Practices
Best Practices to Improve ASP.Net Web Application Performance
Best Practices for Speeding Up Your Web Site
(gondolom mar mindenki kitalalta mi volt a search phrasem a googleban, ha talalkoztok jobb cikkekkel irjatok meg : )
Es akkor egy kis 101. Foleg ha tobb oldalunk van, valahogy allapotot kell tudnunk tarolni, informaciot cserelni. (oldalako kozotti valtasra a fenti cikkek Server.Transfer-t javasolnak)
ASP.NET’s Data Storage Objects
Ma mar keves oldal engedheti meg maganak, hogy ne hasznaljon JS-eket.
JavaScript with ASP.NET 2.0 Pages
Elvalasztani az adatfeldolgozast, adathozzaferest es a GUI:
Tutorial 1: Creating a Data Access Layer
Mivel foleg C#-ban programoztam eddig, de most megkertek hogy VB.NET-ben irjak kodot, igy utana kellett neznem par dolognak itt is, az egyik ilyen a type-casting
Windows Internals
Optimal Coding 6 – 2D algorithms
Line and Circle drawing
Line-Drawing Algorithms
Bresenham’s line algorithm
Implementations in Delphi
Here is my old “Pascal” line drawing function for 256 color SVGA in DOS:
procedure LineSVGA256(x1,y1,x2,y2:word;c:byte);assembler;
var xtav,ytav,xdir,ydir:word;
asm mov dx,0ffffh; mov ax,0a000h; mov es,ax; mov ax,x1; mov bx,x2
sub ax,bx; jnc @negxdir; neg ax; neg dx
@negxdir: mov xtav,ax; mov xdir,dx; mov dx,0ffffh; mov ax,y1; mov bx,y2
sub ax,bx; jnc @negydir; neg ax; neg dx
@negydir: mov ytav,ax; mov ydir,dx; cmp ax,xtav; jc @vizsintes
@fuggoleges: or byte ptr cs:[@incdecf],00001000b; cmp xdir,1; jnz @i0; and byte ptr cs:[@incdecf],11110111b
@i0: or byte ptr cs:[@addsubf],00101000b; cmp ydir,1; jnz @i2; and byte ptr cs:[@addsubf],11010111b
@i2: mov cx,ytav; mov bx,cx; shr bx,1; inc cx; push bx
mov ax,y1; mov bx,VideoUResX; mul bx; add ax,x1; jnc @ide1; inc dx
@ide1: mov di,ax; mov ax,4f05h; xor bx,bx; int 10h; pop bx; mov al,c
@_0: mov es:[di],al
@addsubf: sub di,VideoUResX
jnc @05; add dx,ydir; push bx; mov ax,4f05h; xor bx,bx; int 10h; mov al,c; pop bx;
@05: add bx,xtav; cmp bx,ytav; jc @_1; sub bx,ytav;
@incdecf: dec di
jno @_1; add dx,xdir; push bx; mov ax,4f05h; xor bx,bx; int 10h; mov al,c; pop bx;
@_1: loop @_0; jmp @vege
@vizsintes: or byte ptr cs:[@addsubv],00101000b; cmp ydir,1; jnz @i1; and byte ptr cs:[@addsubv],11010111b
@i1: or byte ptr cs:[@incdecv],00001000b; cmp xdir,1; jnz @i3; and byte ptr cs:[@incdecv],11110111b
@i3:mov cx,xtav; mov bx,cx; shr bx,1; inc cx; push bx
mov ax,y1; mov bx,VideoUResX; mul bx; add ax,x1; jnc @ide2; inc dx
@ide2: mov di,ax; mov ax,4f05h; xor bx,bx; int 10h; pop bx; mov al,c
@_2: mov es:[di],al
@incdecv: dec di
jno @15; add dx,xdir; push bx; mov ax,4f05h; xor bx,bx; int 10h; mov al,c; pop bx;
@15: add bx,ytav; cmp bx,xtav; jc @_3; sub bx,xtav;
@addsubv: sub di,VideoUResX
jnc @_3; add dx,ydir; push bx; mov ax,4f05h; xor bx,bx; int 10h; mov al,c; pop bx;{}
@_3: loop @_2
@vege:
end;
Midpoint circle algorithm/Bresenham’s circle algorithm
Circle-Drawing Algorithms