27. okt 2008

Naljakas aadress :)

Asciitable

Kunagi esimene kogemus arvutiga ja netiga oli see tippisin www.whitehouse.com ning "roosasid kiisusid" ekraan täis. Aga nüüd see aadress ikka muutunud rahva leheks...mitte, et varem polnud :)))

26. okt 2008

Programmeerijana tahaks natuke huvitavamat tööd...

Viimasel ajal on töö valdkond ikka vägagi igavaks läinud - php ja C# kliendi rakenduste loomine pole just innovatiivsuse tipp. Tõsta nupp paremale, siis vasakule, värvi siniseks, siis punaseks, siis enable ja disable...

Tunnen aina rohkem puudust SMP, multithreading, serviced, winapid, Apache moodulid, ISAPI...

Aeg-ajalt nö uurin vanu häkke, mis seotud süsteemidega ennekõike vaimu värskena hoidmiseks.

Paistab, et päästetee Linux, pole igapäevane Linuxi kasutaja, aga mul suur respekt Linuxi ees. Windows paneb ropendama, kaua seda arendatud, siiani ta arhitektuuriliselt nagu sveitsi juust.

Ojaa tõesti Vista küsib iga asja kohta, see nõuab admin õigusi...ala "do you wan't to shutdown / crash computer" ...sorry...adminni õigusi vaja...see oli nali pigem, aga umbes nii on.


Mis mulle ei meeldi Javas ja C# mäluhaldus, pigem on nii, et garbage collector hoiab asju seni, kuni ta arvab, et asju vaja. Tule taevas appi, enamus progejaid, keda ma kohanud ei tea enam isegi mis asi on STACK, ärme stackpointeritest üldse räägi. Mina progedes loen siiani bitte...viimasel ajal tehaks selgeks, et tänapäeva klientide arvutitel mälu piisavalt pole mõtet pingutada. See pole enam normaalne. Need mugavad programmeerimiskeeled võimaldavad kiireid tulemusi, aga resultaat pole masin-optimaalne ! Näen ainult kohmakaid rakendusi.

Tahaks näha mõnda mugavaks muutunud progejat PICi progemas...:)))

Loodame, et tehniline päike tuleb uuesti pilve tagant välja

Seniks head EIP'd kõigile

24. okt 2008

Kaua võtaks aega TcpView kirjutamine?

Sellise küsimise esitasin endale ning võtsin programmeerimisalase vaimu elustamiseks winapid ette, täpselt 40 min :)))

Tegelikkuses Sysinternasli TcpView on
graafiline variant programmist netstat.exe -a -b


Reaalsuses huvitavad sind ainult kaks apit ! GetExtendedTcpTable ja vajadusel AllocateAndGetTcpExTableFromStack

WinXp alates saab ka protsessi kätte, selleks peate kasutama lippu esimeses API's TCP_TABLE_OWNER_PID_ALL

UDP tabel ka olemas, aga pole nii huvitav ! Asenda Tcp API nimes lihtsalt UDP'ga

Kui soov laiendada, siis läbi MIB_TCPROW ja API SetTcpEntry saab ühenduse sulgeda, peate lihtsalt lipu lisama MIB_TCP_STATE_DELETE_TCB.


Seniks soovin kõigile : net helpmsg 4006 :))))

23. okt 2008

php ja "headers already sent"

Oli vaja lisada feature, et ühte lehte alati tõmmataks uuesti, pole midagi erilist. Tavaline asi

<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>

Aga sain vea, "headers already sent"... nii vaatasin, et include / required_one osad päises, viisin headeri koodi täitsa üles. Ikka viga ja öeldakse, et output tekkinud line 1 juures ?

Kratsin kukalt, mis lugu see veel on, testisin muutujaga headers_sent ja tulemus tõene.

No mis värk on...viskasin kogu koodi välja ning ainult jätsin headerid sisse. Ikka sama viga, tekkis tunne, et Basic authentication paneb näkku nö. Ei miskit...


Ja tunni aja pärast süttis tuluke, et saatan on peidetud redaktorisse !!!

Kui php faili tegin, siis kasutasin notepadi ja salvestasin UTF8 formaati no loogiline ju, et BOM
kirjutatakse faili algusesse. Redaktorid seda ei kuva ning php lehed ka ei kurda...


Jälle saime targemaks...

17. okt 2008

MSSQL : ja limit ?

Mysql sõbrad teavad, et limit käsk aitab neid alati. Limit 0,5 ... esimene offset teine mitu kirjet peale seda. Kuigi Mssqli pean ühte lihtsamaks ning võimsamaks andmebaasiks on seal ka natuke puudusi, just see sama limit. Tahad teha lehekülgi, kus kirjed kuvatud vahemike kaupa, tüüpiline veebinduse teema.

select top 45 * from kliendid top annaks lihtsalt esimesed 45 klienti vastavalt sorteeringule.

Kuidas ikka saada kirjete vahemikud ilma temptabeleid ja muud keemiat kasutamata.


select b.recnr,b.kliendi_id,b.eesnimi,b.perekonnanimi
from
(select top 1000 row_number() over (order by perekonnanimi asc) recnr,kliendi_id,eesnimi,perekonnanimi
from meiekliendid) as b
where b.recnr between 1 and 50

üldiselt over klauslis peate määrama mille järgi on sorteeritud subselect !

That's It!

Räägime ka enda tehtud vigadest...

Enamasti on Eesti programmeerijatel kombeks hirmsasti teisi kritiseerida, kuigi võiks ise oma koodi kriitilise pilguga hinnata !

Mõtlesin, et prooviks midagi uut, räägiks enda poolt tehtud rumalatest vigadest. Ütleme nii, parimad palad leidsin enda poolt tehtud suurimast Eesti teavitussüsteemist :)

Enamus vigu olid kiirustamise põhjused, sest toodet taheti hirmus kiiresti, testperiood minimaalne. Tüüpprobleem Eesti IT arendustes.


1: palake...

services oli globaalne muutuja, var i : integer;

nüüd, kuna tegemist on servisega ning mitmekümne kiuga, siis tore crash toimus.

function Tfastjob.doscanQueue...
begin
i:=jobsinqueue();
while (i<5) do
begin
end;
end;

Kujutage nüüd ette seda olukorda, esiteks see muutuja sünkroniseerimata, väärtustatakse globaalselt. Tulemus; mitu nädalat võib töötada, siis ootamatu crash.

...oleks pidanud olema...

function Tfastjob.doscanQueue...
var
i : integer;
begin
i:=jobsinqueue();
while (i<5) do
begin
end;
end;


Üldse, kui aus olla, on globaalsed muutujad kurjast, võimaluse korral ära kasuta neid ! Või koonda nad kuhugi struktuuri / klassi.

2: palake...

Transaktsioonide mismatch.
Ehk olukord
try
...startTransaction;


....kontrollin asju
if valeaegteavitada then
exit;


...commit tran
except
...rollback tran;
end;


Rollbacki ei tehtud ! Finally sektsioon puudus. Järgmine kord uuesti transaktsiooni avamisel eelmine tõmmati tagasi.

3: palake

Kutsud välja TADOStoredproc aga protseduuris tekib viga, kuid siiski protseduur väljastab dataseti..."viga" kaob kuhugi. Ja kood peale seda läheb programmis siiski täitmisele.


Lahendus, protseduurile anda error parameeter mida kontrollida.


create proc kypsetakoodi(@koodiliik int,@viga varchar(255) output) ...



Kiirustades ei saa ega tohi programmeerida !

16. okt 2008

Jipikajee...uus Lazarus väljas

Lazarus


Mis põhiline !!!

- The LCL now uses Unicode strings UTF-8 encoded on all platforms.
There are docs, tools and functions to help converting old code.

9. okt 2008

Link Delphi 2009 stringide kasutamise kohta

Pole kahjuks saanud Delphi 2009 testida, aga leidsin ühe blogi postituse, kus toimub stringi tüüpide tutvustus.

Delphi 2009 strings explained by example

Ütlen vaid huhh...kui varem oli widestring; string (ansi)...siis nüüd ...

8. okt 2008

YUI Treeview inline editing and dynamic node loading

Sai selline pealkiri pandud ennekõike seetõttu, et emakeeles kõlaks asi päris hirmsalt...

YUI treeview

Üldiselt Yahoo poisid teinud palju Web 2 stiilis komponente. Seekord vaataks Treeviewd.

Tüüpiline laadimise kood (2.6.0 ver):





function overrideSaveValue(v)
{
node=v.node;
//node.data.label = v.inputElement.value;
node.getLabelEl().innerHTML=v.inputElement.value;
alert(node.data);
return true;
}


function idynLoad(node, fnLoadComplete)
{


// lihtne json callback näide, success parameetrid sõltuvad kuidas välja kutsud
var oCallback =
{
success: function(oRequest,oResponse,oPayload)
{

var iNode = new YAHOO.widget.TextNode("test", oPayload.node, false) ;
iNode.data=...mingi json abil saadud elemendi id;
iNode.editable=true; // märgime, et inline editing lubatud
// kavalus laeme nö default handleri üle, et saaksime async stiilis andmebaasi kirjutada andmeid, kui nodet inline stiilsi muudetakse
iNode.saveEditorValue=overrideSaveValue;

// anname teada, et child item laetud !
oPayload.fnLoadComplete();
},

failure: function(oRequest,oResponse,oPayload)
{
oPayload.fnLoadComplete();
},

argument:
{
"node": node,
"fnLoadComplete": fnLoadComplete
},

timeout: 10000
};

// json väljakutse...

...
}

// loome puu...
var tree = new YAHOO.widget.TreeView("container");
var rootnode = tree.getRoot();

tree.setDynamicLoad(idynLoad, "ygtloading ygtvlph ");

// teeme ühe root elemendi...
var myroot = new YAHOO.widget.TextNode('Root node', rootnode, true);
myroot.data=0;
myroot.editable=false;

// võimaldame inline editi !!!!
tree.subscribe('dblClickEvent',tree.onEventEditNode);

// joonistame puu
tree.render();



Nii lihtne see ongi :))))))

5. okt 2008

X-tee, kui veebidisaineri õudusunenägu

Suht harva, kui vaja, pean seda vaheliidest kasutama, aga no liigendus - tule taevas appi ! Siis vahepeal seal tõstetakse menüüpunkte üles / alla (mingi sorteerimise teema, kui uusi linke pannakse). Ei tea, keda peaks paluma, et saaks X-tee disaini normaalseks. Loogiline liigendus 0, tabel-tabel-tabelis disain. Märgistikud paigast ära, mikspärast on mu nimi TAMMEV\304LI. Värvidest ma ei hakka üldse rääkima, sinisel taustal must tekst.

Imelik, et keegi sellel teemal sõna ei võta, sest enamus tuttavaid, kes kasutavad kiruvad samamoodi ?!?