Close Panel

27

iul

2008

Prima leapşă

By DarkByte. Posted in Lepse | 5 Comments »

Nu puteam scăpa pentru mult timp, era inevitabil să fiu pleznit de cineva … în concluzie, de pe Puccu, în premieră, leapşa …


Tu ce faci in vacanta aceasta ?

Am să încep prin a copia modul de lucru “puccu”, adică prin a povesti din urmă.

Ca să mă laud, încep prin a povesti că, pe la sfârşitul primăverii, mi-am găsit şi eu Pucca mea. Din păcate, a fost doar ambalajul, care evident că a trebuit aruncat la gunoi şi n-am mai rămas cu nimic. This is life, ain’t it ? Abschied, süßen Traum, kümmern sich selbst …

La puţin timp după asta am reuşit, după ce mult timp am rămas în stadiul de “holbează-te şi ai grijă să nu laşi bale pe monitor”, să-mi cumpăr un aparat foto, Canon Powershot S5 IS. Aproape că treceam prin tavan, în aşa măsură nu-mi mai încăpeam în piele de bucurie happy … n-a durat mult bucuria, ci doar până am încercat să fac nişte poze cu el şi am remarcat cam cât de diferit e faţă de fostul meu aparat. Back off, RTFM. Când am terminat şi operaţiunea asta, mi-am luat aparatul şi picioarele la spinare şi mi-am început ucenicia prin oraş.

În scurt timp am devenit îndeajuns de obişnuit cu el, pentru a-i permite lui Agkelos (cu al lui Canon 350D) să treacă într-o sâmbătă prin Oradea, să facem o plimbare împreună pe la Şirul Canoniştilor … al Canonicilor, scuze happy
Duminică, a doua zi, a fost rezervată pentru descinderea mea în Cluj, pentru prima oară. Friends, views, all the way. Din păcate, şi soare din belşug. Un weekend reusit, în care am intrat în mai multe biserici decât în toată viaţa mea. It was worth.

Ca să fiu sigur că am fost îndeajuns de cheltuitor pentru anul în curs, am mai achiziţionat şi un laptop, aparataj de pe care scriu chiar în acest moment. Evident, alt vis din alte ere, care a fost, în sfârşit, aruncat. Visul.

Între timp (această expresie specifică o necunoştinţă a datelor exacte şi poate însemna “oricând” şi chiar “de mai multe ori”winking am trecut şi pe la câteva restaurante, unul în Cluj, unde m-am simţit ca acasă, după ce reclamă mi-a făcut Agkelos :lol: , şi încă vreo 2, 3 prin Oradea, unde am aflat ce înseamnă restaurant în România. Totuşi, a fost bine, n-am motive foarte mari să mă plâng … poate că ciorba aia de perişoare putea să ajungă în mai putin de 40 de minute şi poate că nu ar fi trebuit să cer eu nişte pâine şi ardei iute la ea … dar a fost bine happy … p(uccu)rietenii ştiu de ce tongue

Acum vreo două săptămâni am făcut şi o ieşire la Bulz, pe lângă Piatra Craiului. Team-building, cică. “Febră musculară”-ing, mai degrabă. A fost destul de bine (pentru cei care nu văd bine, citiţi aici : “excelent, foarte cald, distractiv, mâncare îndestulătoare chiar şi pentru mine, etc”winking. După mult câr şi mâr în legătură cu locul în care să ne facem că nu mai plecăm până nu sună împrăştierea, am găsit un loc frumos, lângă un Criş repede care putea fi trecut în pantaloni scurţi, fără a uda respectivul articol de îmbrăcăminte.
Totuşi, nu sunt sigur de tot ce s-a întamplat … we need a remake happy

În altă ordine de idei, privind în viitor, prin globul de cristal şi zaţul de ness, prevăd o ieşire prin Timişoara, pe undeva prin august. Ciufy … ar fi foarte bine să pregătească terenul (şi licenţa … şi blogul … şi un hug mare happy ), dacă mai are nevoie de urechi şi alte cele. Cu ocazia asta, evident, alte noi şi fascinante poze îşi vor găsi locul în lumea noastră, pe lângă febra musculară care parcă simt că abia aşteaptă să mă ia din nou în braţe …

În rest, numai de bine … habar n-am ce alte planuri îmi voi face, în ciuda faptului că stau lângă un clar-văzător cu ochelari …

Leapşa merge mai departe la Ciufy, Fără Sens (sunt curios ce scrie acum big grin), Zăpăkitul, nutoatăiarbaelafel şi Goof’s Grave.

 

27

iul

2008

Activităţi … ludice

By DarkByte. Posted in Aberatii | 3 Comments »

Ludic derives from Latin ludus, “play”. Means literally ‘playful’, and refers to any philosophy where play is the prime purpose of life. Ludic derives from the Latin and connotes anything that is “fun”.
Sursă : Wikipedia

Majoritatea fiinţelor (spun “majoritate”, dar nu cunosc contra-exemple) au nevoie de activităţi ludice. În general, aceste nevoi sunt mai mari în copilărie, scăzând treptat după maturizarea individului.

Cine poate spune că nu s-a jucat vreodată ? Cine poate spune că nu ştie ce e “mâţa prinsa”, “de-a v-ati ascunselea” sau “raţele şi vânătorii” ? Probabil că, dacă nu aţi făcut-o voi, aţi văzut pe alţii stropind lumea cu baloane cu apă sau, mai apoi, cu atotputernicele pistoale cu apă ? happy N-are rost să enumăr în continuare, aţi prins voi ideea. Dacă nu, continuaţi să fugiţi, e chiar în faţă.

În ultimele 2, 3 decade posibilităţile oferite de platformele PC au diversificat enorm posibilităţile, bineînţeles, în detrimentul activităţilor în aer liber, care nu fac subiectul postului prezent. Jocurile au ajuns să aibă o industrie numai a lor, oameni care şi-ar da şi ultimul ban pentru a face rost azi de jocul care va fi lansat mâine … practic, jocurile pe calculator au deja o viaţă numai a lor, pentru un număr destul de rotund de oameni de (aproape) toate vârstele. De înţeles : un joc cu o poveste bună, acţiune pe măsură şi cu un gameplay acceptabil prinde foarte multă lume. Nu o dată mă surprind pe mine în timp ce, atent la tot ce mişcă, îmi ghidez caracterul din Prince of Persia sau îmi cresc, pas cu pas, luptătorul în vreun RPG captivant.

Un lucru foarte interesant legat de activităţile ludice, mult mai uşor de remarcat în jocurile pe calculator, este faptul că nici un joc bun nu e străin de conceptul unei lupte : un jucător / o echipă trebuie să câştige. În cazurile cele mai fericite, câştigul succede unor activităţi aducătoare de puncte, dar fără interacţiuni între jucători.

În general, totuşi, jucătorii sunt puşi faţă în faţă, într-un fel sau altul şi tot ce trebuie e să câştige. Să rupă jucătorul advers în Mortal Kombat, să facă praf turnurile inamicului in DotA, să cucerească, să bată, să distrugă, să întreacă. În jocurile de strategie, mai ales, mai ai şi pauze între lupte, în care … te pregăteşti de luptă.

Generalizând, se poate spune că omul nu se poate destinde decât dacă el sau echipa lui câştigă. Pot înţelege o mentalitate de învingător, până la un anumit punct, dar suntem înecaţi în aceleaşi tipuri de jocuri, care ne alimentează dorinţa de a câştiga, uneori nemaicontând nici măcar metoda.

Fair-play ? Un concept învechit. Trebuie să câştigi ! Nu te descurci singur ? Ameninţă, fă scandal, cheamă-ţi “haita” în ajutor. Să joci doar pentru distracţie ? Vax … timp pierdut. Trebuie să câştigi !!!

Dacă e vorba de un joc online şi nu te descurci cu vreun anume jucător, care e atât de al dracu’ încât nu încalcă vreo regulă pentru care să-i faci rost de vreun ban, cheamă întăriri. Legea junglei … sau a străzii. Cinci pe unul … dacă nu suntem de ajuns, mai chemăm şi alţii. Trebuie să câştigăm !!! E în joc orgoliul nostru şi sfânta Tastatură a gamerilor !!!

Pentru cei care nu ştiu citi printre rânduri, menţionez că nu am nimic cu jocurile. Am ce am doar cu oamenii care consideră jocurile (pe calculator sau nu) un scop de căpătâi al vieţii. Am ce am cu oamenii care nu ştiu să piardă onorabil, cu cei care n-au atâta mândrie încât să încerce să-şi descurce drumurile lor proprii în jocurile care le plac şi se milogesc de alţii, ca ţiganii la colţ de stradă.

Să-i menţionez şi pe cei care nu pot termina un joc fără cheat-uri ?

 

25

iul

2008

O zi obişnuită

By DarkByte. Posted in De-ale vietii | 7 Comments »

Mă culc la 21 … sau la 3 … nu e prea important, organismul e cel care decide asta, iar creierul, uneori, poate doar să accepte cu un sec : “Da, să trăiţi !” … indiferent de ora la care cad ca lemnul între cearceafuri, urmează o dimineaţă cruntă.

Începe, uneori sec, printr-o trezire pre-alarmă. Motiv de nervi : 10-15 minute pe care le mai puteam dormi … :mad: Soluţia este evidentă, unanim acceptată şi pusă pe loc în aplicare. Adorm la loc. Brusc. Uneori nici nu mai aud alarma când, într-un final, se decide să mă anunţe că e trează.

Oricum, când aud sunetele melodioase, care-mi scot peri albi, ale alarmei, folosesc cu încredere “snooze” … de mai multe ori. Momentul în care renunţ la amânarea iminentei ridicări din pat e acela în care, prin aburii somnului, îmi dau seama că e îndeajuns de târziu ca să mai am timp doar pentru un spălat rapid pe ochi, sărit in pantaloni şi pantofi, urmate de fuga după autobuz… uneori, de bombănit în urma lui …

Ajung cu bine la lucru şi, de obicei, chiar treaz. Îmi fac lucrul, uneori îmi fac şi nervi. Mai crapă Vista, Delphi sau programul la care lucrez. Back to the drawing board. Pentru răzbunare, mai dau un restart şi ies pe balcon la o ţigară. Urmăresc cu privirea fuioarele de fum care, libere, se pierd în aer … sau dacă nu în aer, măcar în surogatul lui poluat. Da, nimic anormal.

Cu mintea în stand-by încep să-mi caut drumul înapoi spre casă. Curios e că-l găsesc, de fiecare dată. Ar fi mai interesant dacă măcar o dată pe lună m-aş rătăci …

Ajung acasă, îmi pregătesc ceva de mâncare şi, pentru a mă relaxa după lucru, dau drumul la calculator. Sau la amândouă.

Vine seara şi, cu o regularitate enervantă, şi grupul de tineri adolescenţi care stau în scara blocului, lângă geamul meu …
Rectific : nu stau. Vorbesc, strigă, râd. Încă e bine. Aflu, chiar şi fără să vreau, ultimele noutăţi sociale sau ce adidaşi de firmă şi-a luat vreunul. Merge. Rău e atunci când încep să se laude cu calităţile multimedia a telefoanelor luate din banii părinţilor şi dau drumul la manele, cât duce aparatul. Pentru a intra în ritm, dau şi eu drumul, cu diferenţa că eu pun muzică. Nu mă interesează în mod special la ce anume dau drumul, dar prefer Rammstein, Korn, Metallica … nu sunt rocker, într-adevăr … dar nici grupul aciuat în scară nu are rockeri în lista membrilor. Pleacă.

Îmi aduc aminte, din când în când, că mi-e foame (din nou) şi mai dau o tură prin frigider. Pot să dau şi un pion, că de obicei e gol. Citesc (dintr-)o carte, mai frecventez un forum, mai vorbesc pe messenger cu câţiva prieteni … e deja târziu, dar mai stau.

Trag de timp cât pot, nu-mi place să dorm. La un calcul aproximativ deja am dormit 8 ani neîntrerupt. M-am săturat. Prefer, în disperare de cauză, să vizionez un film care să mă ţină cu ochii lipiţi de display. Uneori funcţionează … de fapt, totdeauna … doar că uneori funcţionează ca somnifer. Iar somn :roll:

 

21

iul

2008

Lecturofobie ?

By DarkByte. Posted in Aberatii, Carti | 7 Comments »

Give me 26 soldiers of lead and I shall conquer the world.
Johannes Gensfleisch zur Laden zum Gutenberg

BibliotecaTipografia, deşi necunoscută în Europa până la invenţia lui Gutenberg, era cunoscută în China încă dinainte de secolul IX. Totuşi, Gutenberg e cel care o aduce în atenţia publicului şi reuşeste, în decurs de câteva sute de ani, să modeleze o societate în care majoritatea ştie să scrie şi să citească, ceea ce înainte era doar apanajul clericilor, sau, în unele cazuri, a nobililor.

În răstimpul de când avem posibilitatea de a multiplica cu uşurinţă textul, au fost tipografiate milioane şi milioane de cărţi, în mult mai multe exemplare. Varietatea textelor tipărite este de-a dreptul uluitoare, iar accesul la cărţi nu mai e chiar o problema, existând biblioteci publice la tot pasul.

 

20

iul

2008

Window Spy

By DarkByte. Posted in Delphi | 8 Comments »

Win 32 APIProbabil că ştiţi că în Windows totul se bazează pe ferestre … era destul de evident, nu ?

Să vedem cum am putea afla câte ceva legat de ferestrele vizibile şi cum am putea să le ascundem, să le dezactivăm, etc, totul din Borland Delphi, folosind funcţii API.Borland Delphi 7

Pentru început, să vedem cum aflăm ce fereastră avem sub cursorul de mouse.

Pentru asta ne trebuie să ştim poziţia cursorului, care se poate afla folosind funcţia GetCursorPos, din care putem afla handle-ul ferestrei de sub cursor, folosind funcţia WindowFromPointSă vedem nişte cod.

var hWindow  : Longint;
    P : TPoint;
  ...
  GetCursorPos(P);
 
  hWindow := WindowFromPoint(P);

Destul de simplu, nu ? În variabila hWindow avem acum handle-ul care ne interesează.
Pentru a “vedea” în timp real ce fereastra e sub cursor, punem codul acesta într-un TTimer.

Să vedem cum afişăm informaţiile găsite, cum ar fi titlul ferestrei, clasa ferestrei (adică tipul componentei) şi handle-ul asociat părintelui ei, din TTimer. Pentru asta avem nevoie (în cazul acesta) de patru TEdit-uri.

procedure TForm1.Timer1Timer(Sender: TObject);
var hWindow  : Longint;
    P : TPoint;
    buff : Array[0..255] of char;
begin
  GetCursorPos(P);
 
  hWindow := WindowFromPoint(P);
  Edit2.Text := '$' + IntToHex(hWindow, 8);
 
  GetWindowText(StrToInt(Edit2.Text), Buff, 255);
  Edit1.Text := Buff;
 
  GetClassName(StrToInt(Edit2.Text), Buff, 255);
  Edit3.Text := Buff;
 
  If GetParent(StrToInt(Edit2.Text)) > 0
    then Edit4.Text := '$' + IntToHex(GetParent(StrToInt(Edit2.Text)), 8)
    else Edit4.Text := 'None';
end;

GetWindowText returnează titlul ferestrei (sau textul din fereastră, dacă e vorba de un TEdit), GetClassName returnează tipul componentei, iar GetParent handle-ul părintelui. Simplu, nu ? happy

Păcat că momentan tot ce aflăm sunt lucruri destul de puţin importante şi deloc atrăgătoare. Nişte numere şi ceva text care oricum se vedea şi fără un asemenea program. Să încercăm ceva mai atrăgător.

Pentru început vom ascunde / reafişa fereastra, apelând funcţia ShowWindow, care are nevoie de doi parametri: handle-ul ferestrei şi un parametru care specifică dacă vrem să afişăm sau să ascundem fereastra.

Afişare fereastră:

ShowWindow(wHandle, SW_SHOW);

Ascundere fereastră:

ShowWindow(wHandle, SW_HIDE);

Alt lucru care-l putem face : vom seta ca fereastra selectată să devină fereastră de top-level şi înapoi. Pentru acest lucru vom folosi funcţia SetWindowPos pentru a ne defini o procedură apelabilă cu un parametru de tip Boolean care să ştie modifica stilul ferestrei în ambele moduri, al doilea parametru fiind handle-ul ferestrei care vrem s-o modificăm.

procedure SetTop(Top : Boolean; Handle : HWnd);
Begin
  If Top
    Then
      Begin
        SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0,
                     SWP_SHOWWINDOW + SWP_NOMOVE + SWP_NOSIZE);
        SetWindowPos(Handle, HWND_TOP, 0, 0, 0, 0,
                     SWP_SHOWWINDOW + SWP_NOMOVE + SWP_NOSIZE);
      End
    Else SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0,
                      SWP_SHOWWINDOW + SWP_NOMOVE + SWP_NOSIZE);
End;

Acum nu mai avem decât să apelăm procedura asta din butonul corespunzător.

Ştiind handle-ul ferestrei, o putem şi activa / dezactiva folosind EnableWindow, care necesită specificarea handle-ului ferestrei şi un parametru logic care determină activarea / dezactivarea ei.

Codul pentru cele şase butoane de până acum:

procedure TForm1.bShowClick(Sender: TObject);
begin
  hWindow := HexToInt(Copy(Edit2.Text, 2, Length(Edit2.Text) - 1));
  ShowWindow(hWindow, SW_SHOW);
end;
 
procedure TForm1.bHideClick(Sender: TObject);
begin
  hWindow := HexToInt(Copy(Edit2.Text, 2, Length(Edit2.Text) - 1));
  ShowWindow(hWindow, SW_HIDE);
end;
 
procedure TForm1.bTopClick(Sender: TObject);
begin
  hWindow := HexToInt(Copy(Edit2.Text, 2, Length(Edit2.Text) - 1));
  SetTop(True, hWindow);
end;
 
procedure TForm1.bPotClick(Sender: TObject);
begin
  hWindow := HexToInt(Copy(Edit2.Text, 2, Length(Edit2.Text) - 1));
  SetTop(False, hWindow);
end;
 
procedure TForm1.bEnableClick(Sender: TObject);
begin
  hWindow := HexToInt(Copy(Edit2.Text, 2, Length(Edit2.Text) - 1));
  EnableWindow(hWindow, True);
end;
 
procedure TForm1.bDisableClick(Sender: TObject);
begin
  hWindow := HexToInt(Copy(Edit2.Text, 2, Length(Edit2.Text) - 1));
  EnableWindow(hWindow, False);
end;

Probabil că aţi remarcat linia

hWindow := HexToInt(Copy(Edit2.Text, 2, Length(Edit2.Text) - 1));

, despre care nu am scos nici un cuvânt până acum. Este inversa funcţiei IntToHex din Delphi, şi este definită mai jos.

function HexToInt(S : String): Longint;
var B : Byte;
    C : Char;
Begin
  Result := 0;
  s := UpperCase(s);
  For B := 1 To Length(s) Do
    Begin
      Result := Result * 16;
      c := S[B];
      Case c Of
        '0'..'9': Inc(Result, Ord(c) - Ord('0'));
        'A'..'F': Inc(Result, Ord(c) - Ord('A') + 10);
        Else
          Begin
            Result := 0;
            Exit;
          End;
      End;
    End;
End;

Puteam folosi variabila hWindow ca variabilă globală şi atunci scăpam de nevoia folosirii acestei funcţii, nu ? Dar ce se întâmpla dacă la utilizarea programului se voia reafişarea unei ferestre căreia îi ştim handle-ul ? În acest fel tot ce avem de făcut este editarea celei de-a doua căsuţe text cu handle-ul respectiv şi putem face orice, altfel putând lucra doar cu ferestrele vizibile pe ecran.

Cam acesta ar fi codul necesar pentru o mini-aplicaţie de lucru cu ferestrele … dar stai … e o problemă … dacă verificarea ferestrei de sub mouse se face în timp real, înseamnă că … da, dacă selectez butonul de “ascundere fereastră”, îmi va ascunde tocmai respectivul buton. Damn, nu e bine.

Trebuie să programăm o metodă de a opri scanarea ferestrelor în timp real, o dată ce am selectat fereastra cu care vrem să lucrăm, fără să mişcăm mouse-ul. Pentru asta ne vom defini o combinaţie de taste globală, folosind funcţia RegisterHotKey, care primeşte patru parametri: handle-ul ferestrei căreia să-i trimită mesaj în caz că s-a apăsat combinaţia noastră de taste, un identificator pentru combinaţie, definit de noi, şi combinaţia de taste, definită prin doi parametri – primul, care defineşte dacă tastele CTRL, ALT, SHIFT sau WIN sunt apăsate, şi al doilea, care defineşte o tastă normală (cum ar fi “R” ). Apelul funcţiei, pentru a ne defini combinaţia CTRL + F8, este :

const StopKey = 100000;
  ...
  RegisterHotKey(Handle, StopKey, MOD_CONTROL, VK_F8);

Această linie trebuie apelată chiar la începutul rulării programului, în FormCreate.
Atenţie : StopKey este o constantă ce trebuie definită global, înaintea secţiunii implementation.

Pentru a fi anunţaţi când este apăsată combinaţia noastră de taste ne vom defini o procedură care să primească mesajul trimis de sistem, interceptând mesajul WM_HOTKEY.

type
  TForm1 = class(TForm)
  ...
  private
    { Private declarations }
    procedure WMHotKey(var Message: TMessage); message WM_HOTKEY;
 ...

Codul procedurii :

procedure TForm1.WMHotKey(var Message: TMessage);
begin
  If Message.WParam = StopKey
    Then Timer1.Enabled := not Timer1.Enabled;
end;

Practic, la fiecare apăsare a combinaţiei, TTimer-ul nostru se va opri / reporni. Pentru a nu lăsa mizerie după rularea programului, va trebui să distrugem această combinaţie de taste la oprire. Pentru acest lucru, în FormCloseQuery vom apela :

  UnregisterHotKey(Handle, StopKey);

Cam asta ar fi tot codul.

Pentru a nu vă pune să lucraţi cu copy / paste şi să vă faceţi griji de componente şi asignări de evenimente, aveţi mai jos sursele şi executabilul arhivate.

Download : Sursa :: Executabil

 

19

iul

2008

Wanted – 2008

By DarkByte. Posted in Filme | 4 Comments »

If no one told you that bullets flew straight and I gave you a gun and told you to hit a target, what would you do ?

Un film de acţiune plin de efecte speciale de efect şi aproape interesant, cu o distribuţie în care apar nume mari.

Actorul din rolul principal, James McAvoy, îşi joacă bine rolul de victimă la început, apoi, încet-încet, de dur, pe măsură ce învaţă mai multe despre lumea în care a fost, practic, aruncat, până în momentul în care ia totul pe cont propriu pentru răzbunare şi o viaţă a lui însuşi. Ca o notă de subsol, a avut un rol principal în “Children of Dune”, un rol care m-a ţinut alert până la final.

Alţi actori : Angelina Jolie, Morgan Freeman.

Dacă am reuşit să vă stârnesc curiozitatea, vizionaţi filmul. E unul care merită văzut, chiar şi numai pentru efectele speciale.