<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>More info and contact - about.me/andrisreinman</description><title>Andris Reinman</title><generator>Tumblr (3.0; @andrisreinman)</generator><link>http://www.andrisreinman.com/</link><item><title>test2</title><description>&lt;p&gt;proovin kas veel töötab&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/23124824422</link><guid>http://www.andrisreinman.com/post/23124824422</guid><pubDate>Wed, 16 May 2012 00:57:51 +0300</pubDate></item><item><title>StatBot</title><description>&lt;p&gt;Tegin oma statistikamootori mooduli source avalikuks, selle leiab &lt;a href="https://github.com/andris9/statbot"&gt;GitHubist&lt;/a&gt;. Täpsemalt näiteks kodeeringute statistika skripti leiab &lt;a href="https://github.com/andris9/statbot/blob/master/examples/encodings.js"&gt;näidete kataloogist&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Tegu on siis node.js skriptiga. Käivitamisel hakkab skript master protsessiks ning tellib vastava arvu forke kes hakkavad siis etteantud aadresse läbi vaatama. Kui feilib (ühendust ei saada, tundmatu nimi, fork lendab õhku vms.) siis saadetakse veateade Kui õnnestub, siis saadetakse lehe kohta metainfo.&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/15718073717</link><guid>http://www.andrisreinman.com/post/15718073717</guid><pubDate>Thu, 12 Jan 2012 12:33:00 +0200</pubDate></item><item><title>Eesti saitide kodeeringud</title><description>&lt;p&gt;Kuna Rene &lt;a href="http://www.andrisreinman.com/post/14911754645/veebilehe-kodeeringu-maaramine#comment-404311622"&gt;tundis huvi&lt;/a&gt; millised kodeeringud hetkel Eesti saitidel aktuaalsed on, lasin oma robotite armee jälle käima ning poolteise tunni pärast oligi veidi üle 60&amp;#160;000 saidi üle kontrollitud. Sisendiks jälle &lt;a href="http://www.neti.ee/cgi-bin/serverid"&gt;NETI.ee serverite&lt;/a&gt; nimekiri. Märkusena tuleb vaid lisada, et eelmine kord oli see nimekiri üsna iganenud, vahepeal nimekiri uuenes ja seekord oli vigade arv (ühendust ei saadud, nimi tundmatu jne) tunduvalt väiksem  - 756 viga 61109 saidi kohta.&lt;/p&gt;

&lt;p&gt;Kodeeringute tulemused on aga järgmised:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Graafik&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lxmwqbC38J1qdvi2n.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TOP 20&lt;/strong&gt;&lt;/p&gt;

&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; "&gt;#&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;KODEERING&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;SAITIDE ARV&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;PROTSENT&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;1&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;UTF-8&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;38224&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;63.43%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;2&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;ISO-8859-1&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;11012&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;18.27%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;3&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;UNKNOWN&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;6548&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;10.87%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;4&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;WINDOWS-1257&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;1479&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;2.45%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;5&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;WINDOWS-1251&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;938&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;1.56%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;6&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;ISO-8859-15&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;658&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;1.09%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;7&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;ISO-8859-4&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;490&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;0.81%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;8&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;WINDOWS-1252&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;372&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;0.62%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;9&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;ISO-8859-13&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;261&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;0.43%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;12&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;ISO-8859-2&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;48&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;0.08%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;13&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;WINDOWS-1250&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;44&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;0.07%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;15&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;US-ASCII&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;29&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;0.05%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;16&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;KOI8-R&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;24&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;0.04%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;18&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;CP1251&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;11&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;0.02%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;19&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;ISO-8859-3&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;10&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;0.02%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;20&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;UNICODE&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;7&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;0.01%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;tfoot&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; "&gt; &lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;MUUD&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;104&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;0.17%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding-right: 10px; "&gt; &lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;KOKKU&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;60259&lt;/td&gt;&lt;td style="padding-right: 10px; text-align: right;"&gt;100.00%&lt;/td&gt;&lt;td style="padding-right: 10px; "&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tfoot&gt;&lt;/table&gt;</description><link>http://www.andrisreinman.com/post/15668406504</link><guid>http://www.andrisreinman.com/post/15668406504</guid><pubDate>Wed, 11 Jan 2012 14:49:31 +0200</pubDate></item><item><title>Põnev avastus ligi 5 aastat hiljem</title><description>&lt;p&gt;Kunagi lõi eesti blogi- ja hiljem raamatumaailmas ilma keegi modell Milana. Tegutses ta kusagil Itaalias ning pidas oma tegevuse kohta põnevat blogi &amp;#8220;Milana päevik,&amp;#8221; mille siis ka raamatuks vormistas. Spekulatsioonide järgi polnud tegu mitte mingi modelli, vaid omapärase &lt;em&gt;viral&lt;/em&gt; turunduskampaaniaga Heiti Kenderi poolt.&lt;/p&gt;

&lt;p&gt;Kes iganes aga selle pseudonüümi taga polnud, on nüüdseks selge, et vähemalt osaliselt polnud asjad, nii nagu välja paistsid.&lt;/p&gt;

&lt;p&gt;Nimelt saatis toosama Milana 2007-nda aasta neljandal juulil (&lt;a href="http://milanapaevik.blogspot.com/2007/07/castingud-castingud-castingud.html"&gt;tolle päeva sissekanne&lt;/a&gt;) Blog.tr.ee klienditeeninduse postkasti kirja, milles teatas oma blogi mitteilmumisest Blog.tr.ee feed&amp;#8217;i. Kuna see aadress oli suunatud ka minu postkasti, sattus see ka mulle.&lt;/p&gt;

&lt;p&gt;Nüüd jäi see kiri mulle postkasti arhiivi lapates ette.&lt;/p&gt;

&lt;p&gt;Tol ajal kasutasid Hotmail ja Gmail pettuste vältimiseks sellist meetodit, et lisasid kirja päisesse selle masina IP, millelt kiri välja saadeti (&lt;strong&gt;X-Originating-IP&lt;/strong&gt;). Hiljem see praktika muutus, kuna ilmseltgelt on tegu kasutaja privaatsuse rikkumisega, kuid tollal oli see täiesti tavaline praktika. E-posti klient toda aadressi välja kuidagi ei näidanud, aga kui vaadata &amp;#8220;tooret&amp;#8221; e-kirja, on see ilusti näha. Ja Milana kirjal on see aadress ka olemas.&lt;/p&gt;

&lt;p&gt;Kiri on saadetud Eestist, Elioni võrgust. Samal päeval, kui mainitud modell väidetavalt Itaalias castingutel käis.&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/15578669603</link><guid>http://www.andrisreinman.com/post/15578669603</guid><pubDate>Mon, 09 Jan 2012 22:32:06 +0200</pubDate></item><item><title>Eesti serverite statistika algandmed</title><description>&lt;p&gt;Kuna mu eelmine postitus &lt;a href="http://www.andrisreinman.com/post/14873439299/eesti-veebiserverid"&gt;eesti serverite teemal&lt;/a&gt; tekitas mõningat vastukaja, laadisin kõigile huvilistele andmekaevandamiseks üles statistika algandmed.&lt;/p&gt;

&lt;p&gt;Faili saab alla laadida siit: &lt;a href="http://tahvel.info/eesti_serverid.txt.gz"&gt;eesti_serverid.txt.gz&lt;/a&gt; (4.9MB, lahtipakitult 42MB)&lt;/p&gt;

&lt;p&gt;Faili formaat on järgmine:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;---- XXXXX [Wed Dec 28 2011 11:11:14 GMT+0200 (EET)]\n
{"url":"http://www.server.ee", ....}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Kus &lt;code&gt;XXXXX&lt;/code&gt; on number (protsessi id, mis konkreetset aadressi töötles), sellele järgneb aeg millal kirje faili lisati ning järgmisel real on JSON formaadis info aadressi kohta&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JSON formaat&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Juhul kui aadressi laadimisel esines viga, on struktuur järgmine&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;url: &lt;a href="http://www.server.ee"&gt;http://www.server.ee&lt;/a&gt;
error: socket hang up
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Juhul, kui leht saadi kätte (hoolimata kas vastuskood oli 200 või 404 vms), on struktuur järgmine&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;url: &lt;a href="http://www.server.ee"&gt;http://www.server.ee&lt;/a&gt; # algne url, mille pihta päring tehti
meta:
    status: 200 # HTTP vastuskood (siin ei tohiks olla 30x, va. eternal loop)
    responseHeaders: # HTTP päringu päise kirjed
        server: Apache # Serveri signatuur
        content-encoding: gzip # vastus on pakitud gzip formaadis (võimalik ka deflate)
        ....
    finalUrl: &lt;a href="http://www.server.ee/index2.html"&gt;http://www.server.ee/index2.html&lt;/a&gt; # URL milleni välja jõuti, kui oli vaja suunata
    redirectCount: 1 # Mitu suunamist tehti
    cookieJar: # Seatud küpsised (ka võimalikel suunamistel seatud)
        PHPSESSID: # küpsise nimi, väärtuseks massiiv, kuna võib olla mitu sama nimega
            -
                name: PHPSESSID
                value: 3fcf34fa436e3170a1aa75238f0d655a
                path: /
                _expires: 2011-12-28T09:46:49.138Z
                _domain: &lt;a href="http://www.server.ee"&gt;www.server.ee&lt;/a&gt;
    charset: ISO-8859-1 # HTML koodis määratud kodeeringu väärtus
    doctype:
        doctype: &amp;lt;!DOCTYPE html&amp;gt; # dokumendi tüübi tekst
        pos: 0 # mitmendast sümbolist hakkab (vanemad IEd ei arvesta kui algab hiljem kui 0)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Reaalne näide&lt;/strong&gt;&lt;/p&gt;

&lt;div style="overflow:auto"&gt;
&lt;pre&gt;
---- 31903 [Wed Dec 28 2011 11:53:02 GMT+0200 (EET)]
{
    "url": "http://tr.ee",
    "meta": {
        "status": 200,
        "responseHeaders": {
            "date": "Wed, 28 Dec 2011 09:53:02 GMT",
            "server": "Apache/2.2.13/DataZone SP 2.0 (Unix) mod_zfpm/0.2",
            "content-encoding": "gzip",
            "expires": "Thu, 19 Nov 1981 08:52:00 GMT",
            "cache-control": "no-store, no-cache, must-revalidate, post-check=0, pre-check=0",
            "pragma": "no-cache",
            "set-cookie": ["VTL=2d1df8f8913cec1537b1fcfdd8998648cdfc29dd; expires=Fri, 27-Dec-2013 09:53:02 GMT; path=/"],
            "x-pingback": "http://blog.tr.ee/rpc/pingback",
            "keep-alive": "timeout=5, max=100",
            "connection": "Keep-Alive",
            "transfer-encoding": "chunked",
            "content-type": "text/html"
        },
        "finalUrl": "http://blog.tr.ee/",
        "redirectCount": 1,
        "cookieJar": {
            "VTL": [{
                "name": "VTL",
                "value": "2d1df8f8913cec1537b1fcfdd8998648cdfc29dd",
                "expires": "2013-12-27T09:53:02.000Z",
                "path": "/",
                "_expires": "2013-12-27T09:53:02.000Z",
                "_domain": "blog.tr.ee"
            }]
        },
        "doctype": {
            "doctype": '&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;',
            "pos": 1
        },
        "charset": "UTF-8"
    }
}
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Näite juures on doctype positsiooniks 1, kui aga vaadata vaadeldud lehe sourcet, tundub et oleks 0. Vahe tuleb sisse sellest, et faili alguses asub unikood sümbol &lt;code&gt;EF BB BF&lt;/code&gt;.&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/14914584558</link><guid>http://www.andrisreinman.com/post/14914584558</guid><pubDate>Wed, 28 Dec 2011 14:13:00 +0200</pubDate><category>web</category><category>serverid</category></item><item><title>Veebilehe kodeeringu määramine</title><description>&lt;p&gt;Kodeeringut saab määrata mitut moodi&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;-HTTP päises: &lt;code&gt;Content-Type: text/html; charset=UTF-8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;-HTML koodis meta &lt;code&gt;http-equiv&lt;/code&gt; parameetriga: &lt;code&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;-HTML koodis meta &lt;code&gt;charset&lt;/code&gt; parameetriga: &lt;code&gt;&amp;lt;meta charset="utf-8" /&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;-XHTML XML deklaratsioonis: &lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Muidu ei olekski midagi, aga tihti kipub olema nii, et kodeering on määratud mitmel eri viisil ning igal kasutatud viisil on määratud erinev kodeering. Üldiselt peaks olema HTTP päises määratud on tähsam kui teised, aga edasi sõltub juba brauserist - näiteks juhul kui XHTML lehel on nii XML deklaratsioon, kui ka meta märgend, eelistab Firefox meta märgendit, aga Chrome XML deklaratsiooni.&lt;/p&gt;

&lt;p&gt;Ja täiendavalt on vähemalt osade Eesti lehtedega puhul, et kõik märgid viitavad nagu oleks tegu näiteks ISO-8859-1 kodeeringuga, tegelikult aga on tekst hoopis Windows-1257. Kõige suurem vahe nende kahe kodeeringu vahel on, et ISO-8859-1 ei toeta š tähte, aga Window-1257 küll. Brauserid suudavad seda mingil ime viisil tuvastada, aga ise HTML koodi töödeldes võib taoline asi osutuda meeletuks peavaluks.&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/14911754645</link><guid>http://www.andrisreinman.com/post/14911754645</guid><pubDate>Wed, 28 Dec 2011 11:32:00 +0200</pubDate></item><item><title>Eesti veebiserverid</title><description>&lt;p&gt;Korjasin kokku Eesti veebiserverite signatuurid ning lõin need kokku üheks tabeliks, mis on näha allolevalt pildilt. Esimeses tulbas on signatuur, teises domeenide arv mis seda signatuuri kasutasid ja kolmandas osakaal.&lt;/p&gt;

&lt;p&gt;Allikaks kasutasin NETI.ee &lt;a href="http://www.neti.ee/cgi-bin/serverid"&gt;serverite nimekirja&lt;/a&gt;. Paraku üsna suur osa (ligi 10%) servereid jäi kättesaamatuks (timeout, tundmatu domeeninimi, ühendusest keelduti jne) ning neid ma ei arvestanud.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwvmvj1Ofl1qdvi2n.png" alt=""/&gt;&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/14873439299</link><guid>http://www.andrisreinman.com/post/14873439299</guid><pubDate>Tue, 27 Dec 2011 21:22:02 +0200</pubDate><category>web</category><category>serverid</category><category>apache</category></item><item><title>Array.forEach imedemaa</title><description>&lt;p&gt;Sattusin Twitteris nägema &lt;em&gt;JavaScript: The Definitive Guide&lt;/em&gt; autori David flanagani postitust&lt;/p&gt;

&lt;p&gt;&lt;em&gt;And if your browser doesn&amp;#8217;t have Array.forEach, use this mind-bender:
Array.forEach = Function.prototype.call.bind(Array.prototype.forEach)&lt;/em&gt; &lt;a href="https://twitter.com/__davidflanagan/status/80717484193366016"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ilmnes et tegu on tõesti paraja &lt;em&gt;mind-bender&amp;#8217;iga&lt;/em&gt;, võttis tükk aega, enne kui suutsin selle rea dešifreerida. Milles siis asi?&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Array.forEach = Function.prototype.call.bind(Array.prototype.forEach);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Antud rida lisab &lt;code&gt;Array&lt;/code&gt; objekti uue meetodi &lt;code&gt;forEach&lt;/code&gt;, mis käitub järgnevalt&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Array.forEach(array, callback)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;array&lt;/code&gt; on massiiv või massiivilaadne objekt (näiteks NodeList) ning &lt;code&gt;callback&lt;/code&gt; on iteraator, mis saab ükshaaval parameetrina massivi elemendid.&lt;/p&gt;

&lt;p&gt;Kuidas aga suudab rida &lt;code&gt;Function.prototype.call.bind(Array.prototype.forEach)&lt;/code&gt; sellise asja tekitada?&lt;/p&gt;

&lt;p&gt;Tuleb välja, et väga lihtsalt.&lt;/p&gt;

&lt;p&gt;Esimene oluline osaline lauses on meetodi &lt;code&gt;bind&lt;/code&gt; rakendamine. Antud meetod seob parameetrina saadud väärtuse endast vasakul oleva objekti (milleks hetkel on funktsioon &lt;code&gt;call&lt;/code&gt;) kontektsimuutujaga &lt;code&gt;this&lt;/code&gt;. Oluline on, et seda konteksti ei ole võimalik enam hiljem üle kirjutada!&lt;/p&gt;

&lt;p&gt;Seega nüüd on meetodi &lt;code&gt;call&lt;/code&gt; kontekstiks enam mitte &lt;code&gt;Function.prototype&lt;/code&gt; vaid &lt;code&gt;Array.prototype.forEach&lt;/code&gt;. Lihtsustatult võib seega sama lause kirjutada nii:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Array.forEach = Array.prototype.forEach.call
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Tavaliselt peaks sellise tehte tulemusena kontekst jälle muutuma. Objekti &lt;code&gt;Array&lt;/code&gt; uus meetod peaks selle lause järgi olema sama mis &lt;code&gt;call&lt;/code&gt; kuid nüüd oleks kontekstiks juba &lt;code&gt;Array&lt;/code&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Array.forEach = Array.prototype.forEach.call -&amp;gt;  Array.__call__
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Kuid see siiski pole nii, sest esimene &lt;code&gt;bind&lt;/code&gt; juba sidus konteksti ära (selleks sai &lt;code&gt;Array.prototype.forEach&lt;/code&gt;) ning see enam edasistes tehetes ei muutu.&lt;/p&gt;

&lt;p&gt;Kokkuvõttes ongi tulemus selline, et järgmine lause&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Array.forEach(array, callback)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;On tegelikult täpselt sama, mis kirjutada&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Array.prototype.forEach.call(array, callback)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Kuid ilmselgelt lühemas ja käepärasemas vormis.&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/6548960285</link><guid>http://www.andrisreinman.com/post/6548960285</guid><pubDate>Wed, 15 Jun 2011 10:57:12 +0300</pubDate><category>javascript</category></item><item><title>JavaScript edasijõudnutele - eestikeelne konspekt</title><description>&lt;p&gt;Panin üles oma konspekti &amp;#8220;JavaScript edasijõudnutele,&amp;#8221; mida viimasel ajal kasutanud olen - näiteks JavaScripti koolitamisel :)&lt;/p&gt;

&lt;p&gt;Konspekti leiab aadressilt &lt;a href="http://tahvel.info/javascript:advanced"&gt;tahvel.info/javascript:advanced&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sama tekst on võimalik alla laadida ka e-lugeri formaadis:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://tahvel.info/books/javascript.epub"&gt;ePub formaat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tahvel.info/books/javascript.mobi"&gt;Kindle formaat&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Tekst on jagatud Creative Commons &lt;a href="http://creativecommons.org/licenses/by-sa/3.0/ee/"&gt;Autorile viitamine + Jagamine samadel tingimustel 3.0 Eesti (CC BY-SA 3.0)&lt;/a&gt; litsentsiga&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/5934398685</link><guid>http://www.andrisreinman.com/post/5934398685</guid><pubDate>Sat, 28 May 2011 19:59:00 +0300</pubDate><category>javascript</category></item><item><title>WHOIS spetsifikatsioon</title><description>&lt;p&gt;Kirjutasin WHOIS teenuse kohta lühikese ülevaate, mille võib leida &lt;a href="http://tahvel.info/muud_teemad:whois"&gt;siit&lt;/a&gt;.&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/5538259884</link><guid>http://www.andrisreinman.com/post/5538259884</guid><pubDate>Mon, 16 May 2011 09:20:41 +0300</pubDate><category>whois</category><category>internet</category><category>rfc</category><category>protokoll</category></item><item><title>Turbo Pascal</title><description>&lt;p&gt;Õnnestus &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; abil saada tööle vana hea DOS 5.0 ja Turbo Pascal. Kuna 5.5 veel hiirt ei toetanud ning oli üleüldse kohmakas (puudus &amp;#8220;graafiline&amp;#8221; failivaliku aken jne), siis installeerisin ka versiooni 7.1.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lkrvqfxiT51qdvi2n.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Kahjuks aga on endiselt probleemid CRT mooduliga, minu teada mingit väga head lahendust selle vastu ei olnud. On küll mingi &lt;em&gt;patcher&lt;/em&gt; mis .EXE failid üle tõmbab, aga drop-in lahendust, kus saaks mooduli CRT asendada näiteks mooduliga CRT2 ma ei suutnud hetkel tuvastada. Mälu järgi nagu midagi oleks siiski olnud, ei tule lihtsalt meelde.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://tahvel.info/dtv"&gt;.&lt;/a&gt;&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/5241751757</link><guid>http://www.andrisreinman.com/post/5241751757</guid><pubDate>Fri, 06 May 2011 14:56:00 +0300</pubDate><category>turbo pascal</category><category>ide</category></item><item><title>Objekti meetodi kontekst JavaScriptis</title><description>&lt;p&gt;Kuidas saada teada, millisele objektile viitab &lt;code&gt;this&lt;/code&gt; vaikimisi kui tegu on objekti meetodiga? &lt;code&gt;call&lt;/code&gt;, &lt;code&gt;apply&lt;/code&gt; ja &lt;code&gt;bind&lt;/code&gt; abil saab seda ka ise muuta, kuid mis on selleks vaikimisi?&lt;/p&gt;

&lt;p&gt;Rusikareegel on, et tuleb vaadata funktsiooni &lt;strong&gt;käivitamise hetkel&lt;/strong&gt; (st. sellel kohal, kus funktsiooniväärtuse taga on sulud) käivitatava väärtuse &lt;strong&gt;vasakut poolt&lt;/strong&gt; - misiganes sealt vastu ei vaataks, see ongi kontekst.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Math.round();  // meetodi *round* kontekst on *Math*
window.Math.round(); // kontekst on *window.Math*
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Juhul kui seal pole midagi, on kontekstiks &lt;code&gt;window&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;alert(); // funktsiooni *alert* kontekst on *window*
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Kui tegu on &lt;em&gt;callback&lt;/em&gt; funktsiooniga, siis on kõik sama - arvestada ei tule mitte selle seadmise hetke, vaid &lt;strong&gt;käivitamise&lt;/strong&gt; hetke&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;function foo(callback){
    callback();  // &amp;lt;-- siin toimub käivitamine
}
foo(console.log); // &amp;lt;-- siin seadmine
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Näites ei ole käivitatava meetodi &lt;code&gt;log&lt;/code&gt; kontekstiks mitte &lt;code&gt;console&lt;/code&gt; vaid &lt;code&gt;window&lt;/code&gt;! Kuna konteksti seab käivitamise hetk ning lause &lt;code&gt;callback();&lt;/code&gt; juures, erinevalt lausest &lt;code&gt;foo(console.log)&lt;/code&gt; enam konteksti määratud pole - vasakul pool kävitatavat väärtust pole märgitud midagi.&lt;/p&gt;

&lt;p&gt;Et mitte jätta konteksti juhuse hooleks tasub tagasikutsefunktsioonide juures kasutada väärtuse seadmise hetkel meetodid &lt;code&gt;bind&lt;/code&gt; (ES5 lisa, töötab vaid moodsaimates brauserites, samuti ka NodeJS platvormil) või käivitamise hetkel meetodeid &lt;code&gt;call&lt;/code&gt; või &lt;code&gt;apply&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// tagasikutsefunktsiooni kontekstiks saab *console*
foo(console.log.bind(console));
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;või&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// käivitatava funktsiooniväärtuse kontekst on *console*
function foo(callback){
    callback.call(console);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Täpsustuseks märgiks veel ära, et kirjeldatud kontekst &lt;code&gt;this&lt;/code&gt; olulisus seisneb selles, et kontekst viitab &amp;#8220;iseendale&amp;#8221;. See tähendab, et objekti meetodi sees saab kasutada objekti muid omadusi ja meetodeid, ilma et oleks vaja teada objekti nimetust vms viidet.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;foo = {
    bar: 1,
    foobar: function(){
        alert(this.bar); // &amp;lt;-- kontekstiks on objekt *foo*
        // *this.bar* on sama mis *foo.bar*, kuid konteksti
        // tõttu pole vaja *foo* nime teada
    }
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;NB!&lt;/strong&gt; Kui tagasikutse funktsioonile on meetodiga &lt;code&gt;bind&lt;/code&gt; kord juba kontekst seatud, siis seda &lt;code&gt;call&lt;/code&gt; või &lt;code&gt;apply&lt;/code&gt; abile muuta enam ei saa.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;function bar(){
    alert(this.baz);
}
function foo(callback){
    callback.call({baz:1}); // &amp;lt;-- ei muuda enam midagi
}
foo(bar.bind({baz:2}); // &amp;lt;-- bind seab konteksti
&lt;/code&gt;&lt;/pre&gt;</description><link>http://www.andrisreinman.com/post/4981157245</link><guid>http://www.andrisreinman.com/post/4981157245</guid><pubDate>Wed, 27 Apr 2011 12:45:00 +0300</pubDate><category>javascript</category><category>node.js</category></item><item><title>iPhone rakenduse tegemine</title><description>&lt;p&gt;Eelmises postituses mainisin, et minu matemaatiliste valemite rakendust on praeguseks alla laetud 1000 korda, siinkohal siis valgustaks veidi tagamaid.&lt;/p&gt;

&lt;p&gt;Ma ei teinud seda rakendust erilise eesmärgiga, soov oli vaid proovida läbi kogu töövoog alates sellest et on idee, kuni selleni, et rakendust saab AppStorest alla laadida. Idee teket täpselt ei mäleta, igatahes sai selleks matemaatika valemite kuvamine - sisuliselt on tegu spikriga, valid teema ning näed vastavaid valemeid (nt. ruutvõrrandi valemit). Kuna eeldatav sihtrühm krediitkaarti ei oma (tegu siiski kooliõpilastega), siis oli plaaniks teha rakendus tasuta ja selle eest mitte raha küsida.&lt;/p&gt;

&lt;p&gt;C keeles ma suurt ei orienteeru, viimased katsetused jäid aastate taha kui tegin TTÜ&amp;#8217;s mingeid kodutöid, seega sellele väga keskenduda ei tahtnud. Õnneks on praeguseks saada ka erinevaid &lt;em&gt;toolkit&lt;/em&gt;&amp;#8216;e, mis võimaldavad mugavamalt hakkama saada. Minu esimeseks valikuks sai &lt;a href="http://www.phonegap.com/"&gt;PhoneGap&lt;/a&gt;, mis on sisuliselt UIWebView &lt;em&gt;wrapper&lt;/em&gt;. Teed HTML lehe, paned selle JavaScriptiga &amp;#8220;elama&amp;#8221; ja pakid rakenduseks kokku.&lt;/p&gt;

&lt;p&gt;Twitterist sain vihje, et on olemas ka parem süsteem nimega &lt;a href="http://www.appcelerator.com/"&gt;Appcelerator&lt;/a&gt;, mis sisuliselt on sama, aga ainult UIWebView asemel pakub ehitusklotsidena kõiki &lt;em&gt;native&lt;/em&gt; UI elemente ning selmet veebilehena asja kuvada, kompileerib eraldiseisvas failis oleva JavaScripti koodi iPhonele arusaadavaks - ühesõnaga veebilehe asemel kompileeritakse programm &lt;em&gt;native&lt;/em&gt; &lt;em&gt;app&lt;/em&gt;&amp;#8216;iks.&lt;/p&gt;

&lt;h3&gt;Struktuur&lt;/h3&gt;

&lt;p&gt;Rakenduse struktuur on väga lihtne. Põhivaade koosneb kahe elemendiga &lt;em&gt;TabGroup&lt;/em&gt; objektist. Esimene element sisaldab &amp;#8220;sisukorda&amp;#8221;, teine valitud teema valemeid.&lt;/p&gt;

&lt;p&gt;Sisukorravaade koosneb &lt;em&gt;TableView&lt;/em&gt; elemendist, mille sees on üksikud &lt;em&gt;TableViewRow&lt;/em&gt; elemendid. Kusjuures, igale reale on seatud eraldi &amp;#8220;onclick&amp;#8221; kuular, nii et kui mõnel real vajutada, avatakse valemite vaates vastavad valemid.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ljl13k2HyL1qdvi2n.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Valemite vaates on põhielemendiks &lt;em&gt;WebView&lt;/em&gt;, mis kuvab lokaalseid HTML faile. Kõik valemid on GIF pildid, mis asuvad HTML failidega samas kaustas rakenduse sees. Uue teema valimisel näidatakse kasutajale aktiivsuse indikaatorit, mille kaotab WebView küljes olev &lt;em&gt;onload&lt;/em&gt; sündmus.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ljl13u5wIJ1qdvi2n.png" alt=""/&gt;&lt;/p&gt;

&lt;h3&gt;Administreerimine&lt;/h3&gt;

&lt;p&gt;Valemite sisestamiseks kirjutasin lihtsa veebiliidese, mis võimaldab tekitada kategooriad ning nende alla valemeid sisestada. Kui valemid on sisestatud, käivitan täiendava skripti, mis genereerib rakenduse jaoks vajalikud HTML failid ning koostab ka JSON formaadis sisukorrafaili, mille alusel rakendus faile näidata oskab.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ljl1e8UyQE1qdvi2n.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Sisukorrafaili sisu on järgmine:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[
    {
        "title": "Aritmeetika",
        "file": "f3f80b155d7d9af6c53bcfe23f1ea1a5.html"
    },
    {
        "title": "Algebra",
        "file": "589e1e9e690257c13858583381062e49.html"
    },
    {
        "title": "Võrrandite lahendid",
        "file": "54a2708351b891702815e787feed5f69.html"
    },
    {
        "title": "Planimeetria",
        "file": "7a1970deec26f4b79b4c245c03c5f345.html"
    },
    ......
]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Nii on rakenduse sisu lihtne uuendada - tuleb genereerida uued failid (iga kord on failinimed unikaalsed, et vältida puhverdamist) ja rakendus loeb need andmed kindla nimega JSON failist kenasti sisse.&lt;/p&gt;

&lt;h3&gt;Kood&lt;/h3&gt;

&lt;p&gt;Kood on kirjutatud täielikult JavaScriptis (lisaks standardsetele võimalustele on kasutusel Appceleratori API&amp;#8217;id). Toon siin ära põhiloogika bloki, mis laeb JSON failist sisukorra ja genereerib selle alusel sisukorra tabeli read.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// funktsioon laeb sisukorrafaili ja genereerib
// massiivi tabeli rea elementidega
function generateIndex(){
    var data = [], json, rows = [], row,
        file = Titanium.Filesystem.getFile(
            Titanium.Filesystem.resourcesDirectory,
            "topics", "quefile.json");

    // lae failist JSON
    if (file.exists()) {
        json = file.read();
        try{
            data = JSON.parse(json);
        }catch(E){}
    }

    // koosta tabeli read
    for(var i=0; i&amp;lt;data.length; i++){
        if(!i){
            // globaalne muutuja
            firstpage = data[i].file;
        }
        row = Titanium.UI.createTableViewRow({
            title: data[i].title
        });

        // kuna tegu on tsükliga, loo lokaalne kontekst
        // kahjuks bind puudub, seega vaja nikerdada
        (function(f, t){
            row.addEventListener("click", 
                function(){displayPage(f, t)},
                false);    
        })(data[i].file, data[i].title);

        rows.push(row);

    }
    return rows;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Kusjuures rakenduse skriptiosa on ainult 99 rida pikk ja saaks ka veel lühemalt, kuna see on optimeerimata, sisaldab katsete käigus tekkinud jäänukelemente jne.&lt;/p&gt;

&lt;p&gt;Valmis rakenduse saab iPhone, iPod ja iPad seadmesse laadida &lt;a href="http://bit.ly/ftQTDS"&gt;siit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;NB! Et saada õigus iseenda(!!!) telefonis rakendust katsetada ning hiljem valmis rakendus &lt;em&gt;AppStore&lt;/em&gt;&amp;#8216;i üles laadida, tuli liituda Apple Developers programmiga, mille aastatasu on $99. Kusjuures, makset ei saa teha &lt;em&gt;online&lt;/em&gt; vaid tuleb välja printida avalduse vorm, täita see ära (sh. kanda vormile krediitkaardi andmed) ja see faksida (!!!) Apple numbrile. Kasutasin faksimiseks online teenust, kuhu laadisin üles PDF faili (allkirja ei pannud ise, vaid kopeerisin eesti.ee portaalist enda rahvastikuregistri andmete juurest). Kahjuks ei kasutanud SEB virtuaalkaarti vaid reaalset kaarti ning et igaks juhuks vältida tulevasi probleeme panin kasutatud krediitkaardi hiljem kinni. SEB virtuaalkaardiga seda muret poleks tekkinud.&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/4576102737</link><guid>http://www.andrisreinman.com/post/4576102737</guid><pubDate>Wed, 13 Apr 2011 11:52:00 +0300</pubDate><category>iphone</category><category>appstore</category><category>javascript</category></item><item><title>1000 allalaadimist AppStores</title><description>&lt;p&gt;Minu &lt;a href="http://bit.ly/ftQTDS"&gt;tasuta matemaatika rakendust&lt;/a&gt; on praeguseks AppStores alla laetud juba üle 1000 korra. Kuna tegu on eestikeelse rakendusega ning seda ongi alla laetud praktiliselt ainult Eestis (kusjuures iga allalaadimine tähendab üht unikaalset seadet, mitte mitu korda &lt;em&gt;per&lt;/em&gt; seade), siis minu arust tegu täitsa toreda saavutusega :)&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/4558721308</link><guid>http://www.andrisreinman.com/post/4558721308</guid><pubDate>Tue, 12 Apr 2011 22:41:00 +0300</pubDate><category>appstore</category></item><item><title>Kaubamärgi registreerimisest ja Blog.tr.ee'st</title><description>&lt;p&gt;Kaubamärgi registreerimine ei ole keeruline, küll aga jube pikk protsess. Näiteks 27. märtsil 2009 (umbestäpselt 2 aastat tagasi) andsin Tr.ee OÜ, mille juhatusse ma tollal kuulusin, nime alt sisse kaubamärgi registreerimistaotluse nimele &amp;#8220;Blog.tr.ee&amp;#8221;. Aeg kulus, aegajalt tuli registreerijal (Tr.ee OÜ) järjekordse etapi puhul riigilõivu maksta ning siis selle kuu alguses (täpsemalt 07.03.2011) sai see lõplikult registreeritud.&lt;/p&gt;

&lt;p&gt;Kokkuvõttes - kaubamärgi registreerimise protsess võttis aega 20 päeva vähem kui 2 aastat. Mina olin otseselt sellega seotud ainult alguses, kuna lahkusin ettevõttest juba 2009 a. suvel, kuid kuna olin taotluse esitaja, saadeti ka edaspidi kõik seonduv post minu aadressile.&lt;/p&gt;

&lt;p&gt;Siinkohal mainiks ära, et viimasel ajal on mulle silma hakanud mitmel pool blogides kriitika &lt;a href="http://blog.tr.ee/"&gt;Blog.tr.ee&lt;/a&gt; kohta seoses postituste mitte ilmumise ja aeglusega. Teema pole mulle sugugi võõras. Tundub aga, et asjad ei taha kuidagi paremuse poole liikuda.&lt;/p&gt;

&lt;p&gt;Meenus, et kunagi ammu aega tagasi liikusid plaanid teha &lt;a href="http://dukelupus.wordpress.com/2007/09/11/blogtree-kolm-sammu-tagasi-ja-mlema-jalaga-mbrisse/"&gt;MTÜ Eesti Blogiliit&lt;/a&gt;, mis haldaks ise sarnast lehte kuna Blog.tr.ee laiutas turul ja ei toiminud alati korrektselt või ootuspäraselt. Kahjuks midagi sellist kunagi ei sündinud. Aga et asjale siiski nüüd tagantjärele (parem hilja kui üldse mitte) omalt poolt hoogu anda, algatasin avatud lähtekoodiga blogikataloogi projekti tööpealkirjaga &lt;a href="https://github.com/andris9/Blogipunkt"&gt;Blogipunkt&lt;/a&gt;, millega võib igaüks kaasa lüüa või sellest soovi korral oma klooni teha. Ma ise ei tahaks väga valmis saiti hallata, sain seda Blog.tr.ee ajal küllalt teha, aga et anda soovijatele võimalus, siis saigi projekt ette võetud.&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/4189795252</link><guid>http://www.andrisreinman.com/post/4189795252</guid><pubDate>Tue, 29 Mar 2011 22:51:35 +0300</pubDate></item><item><title>Kuidas töötab e-post</title><description>&lt;p&gt;E-post oma olemuselt on üsna lihtne teenus. Sellisel kujul kui meie seda tunneme, on e-post töötanud sisuliselt aastast 1982 - mil loodi SMTP protokoll kirjade edastamiseks. E-kirju saadeti ohtralt ka varem, kuid neid edastati arvutist arvutisse FTP ehk failiedastuse protokolli abil, spetsiaalselt e-kirjade edastamiseks mõeldud protokolli veel polnud.&lt;/p&gt;

&lt;p&gt;Sisuliselt võib öelda, et kui kiri mis saadeti välja aastal 1982 ning adressaadini jõudmata sattus mingisse interneti Bermuuda kolnurka, igavesse tsüklisse, siis sellest tsüklist pääsenult oleks praegune võrk võimeline sedasama kirja ilma mingite modifikatsioonideta endiselt adressaadini toimetama. Kõik täiendused, mis vahepeal on tehtud, on lisatud uue kihina olemasolevale, mitte ei ole põhimõtteliselt muudetud süsteemi ennast.&lt;/p&gt;

&lt;p&gt;E-kiri koosneb laial saastus kolmest eraldi elemendist - kirja sisust, kirja päisest ja &amp;#8220;ümbrikust&amp;#8221;. Kirja pärises asub igasugune kirjaga seotud meta-info, näiteks mis on selle pealkiri ja kellele see on adresseeritud. Küllap paljud ei tea, aga tegelikult kirja päises olevad aadressid (To, Cc ja Bcc väljadel) ei mängi edastamisel mitte mingisugust rolli - need aadressid kuhu kiri tuleb edastada, määrab hoopis &amp;#8220;ümbrik.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Kirja päises olevad aadressid on ainult informatiivseks kasutamiseks e-posti kliendile ning spämmitõrjele. Tegelikud aadressid liiguvad kirjast eraldi info ehk &amp;#8220;ümbrikuna&amp;#8221; e-posti edastusserverilt -serverile.&lt;/p&gt;

&lt;h3&gt;E-posti edastus&lt;/h3&gt;

&lt;p&gt;SMTP serverile öeldakse MAIL FROM ja RCPT TO parameetritega ära esiteks kirja saatja ning seejärel kõik saajad, hoolimata kas need asuvad To, Cc või Bcc real. Kusjuures edastatakse ainult need aadressid, mida vastuvõttev server peab teadma. See tähendab, et kui e-posti klient võtab ühendust väljuva SMTP serveriga, siis vuristab ta ette kõik adressaadid, kuid kui väljuv SMTP server võtab ühendust vastuvõtva SMTP serveriga, edastatakse vaid need aadressid, mis kuuluvad selle konkreetse vastuvõtva serveri juurde.&lt;/p&gt;

&lt;p&gt;Üldiselt liigub siis e-kiri järgmist rada pidi&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Saatev e-posti klient (MUA - Mail User Agent, n. Outlook, samuti ka webmail) võtab ühendust väljuva SMTP serveriga (MTA - Mail Transport Agent), edastab saatja ja saajate andmed ning seejärel kirja enda.&lt;/li&gt;
&lt;li&gt;Väljuv SMTP server (MTA) vaatab kes on addressaadid, ning laeb @ märgi järel oleva serveri nimeserverist (n. @hot.ee) MX (mail exchanger) kirje järgi vastuvõtva serveri aadressi (MTA, hot.ee puhul on selleks mx1.hot.ee).&lt;/li&gt;
&lt;li&gt;Väljuv SMTP server võtab ühendust vastuvõtva serveriga (port 25) ning annab teada kirja saatja andmed ning saaja aadressidena kõik sellele serverile suunatud adressaadid. Seejärel edastatakse kiri ise.&lt;/li&gt;
&lt;li&gt;Vastuvõttev SMTP server edastab kirjad vastuvõtvale e-posti serverile (MDA - Mail Delivery Agent), mis salvestab kirja adressaatide kaustadesse.&lt;/li&gt;
&lt;li&gt;Addressaadi e-posti klient (MUA) võtab POP3 või IMAP protokolli abil e-posti serveriga (MDA) ühendust ning saab nüüd kirja lõpuks kätte. Vastuvõttev e-posti klient enam &amp;#8220;ümbrikut&amp;#8221; ei näe, tema saab vaid kirja enda. From, To, Cc väljadel oleva info kuvatakse kasutajale kui kirjaga seotud addressaate&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lfivinmzr01qdvi2n.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Kirja enda ehitus on sarnane teiste tekstipõhiste protokollidega, nagu näiteks HTTP. Kiri algab päiseosaga, mis kestab kuni esimese tühja reani (kaks reaeraldussümbolit &amp;#8220;\r\n&amp;#8221; järjest), edasi järgneb juba kirja sisuosa.&lt;/p&gt;

&lt;h3&gt;Päised&lt;/h3&gt;

&lt;p&gt;Reegliks on, et üks päisekirje asub ühel real. Erandiks on vaid pikemad kui 80&amp;#160;sümboliga kirjed - need volditakse mitmele reale laiali, aga nii et esimene rea puhul algab tekst esimesest sümbolist, järgnevatel on esimeseks sümboliks alati tühik. Nii oskab vastuvõttev server hiljem read tagasi kokku voltida - juhul kui rida algab tühikuga, liidetakse see eelneva rea lõppu.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;From: andris@kreata.ee
To: addressat1@example.com, addressat2@example.com,
    addressat3@example.com, addressat4@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Näiteblokis jätkub &lt;code&gt;To:&lt;/code&gt; kirje uuelt realt kuna &lt;code&gt;addressat3...&lt;/code&gt; ei alga rea algusest, vaid selle ees on tühikusümbolid.&lt;/p&gt;

&lt;p&gt;Oluliseimad kirjed oleksid &lt;code&gt;From&lt;/code&gt;, &lt;code&gt;To&lt;/code&gt; ja &lt;code&gt;Subject&lt;/code&gt; - kui need on täidetud, on kirja võimalik juba saata.&lt;/p&gt;

&lt;h3&gt;Sisu&lt;/h3&gt;

&lt;p&gt;Vaikimisi on tekst 7 bitises US-ASCII kodeeringus. Kõik mis järgneb päise lõpus olevale tühjale reale, ongi kirja sisuks. Ilmselgelt jääb sellest väheks, kuna nii ei ole võimalik isegi täpitähti kasutada, hieroglüüfidest jms. rääkimata. Samuti ei ole erilisi võimalusi teksti vormindamiseks ega manuste lisamiseks. Kõigi nende nimetatud asjade jaoks võeti kasutusele multimeili laiendused (MIME), kuid nendest hetkel pikemalt juttu ei tee. Sisuliselt on tegu täiendava kihiga tavalise tekstiformaadi peal.&lt;/p&gt;

&lt;p&gt;Seega kõige lihtsam kiri võiks välja näha nii&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;From: andris@kreata.ee
To: andris@node.ee
Subject: Kiri endale

Tere maailm!
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Esimesed kolm rida moodustavad päise, järgnev tühi rida on päise lõpu markeerija ning rida &amp;#8220;Tere maailm!&amp;#8221; moodustab kirja sisu.&lt;/p&gt;

&lt;h3&gt;Kirja edastamise näide&lt;/h3&gt;

&lt;p&gt;Seda, kas kirjeldatud e-kirja koostamise viis ka töötab või mitte, on igalühel võimalik kergelt järgi proovida. Vaja on &lt;em&gt;telnet&lt;/em&gt; nimelist programmi ja ligipääsu SMTP serverile (soovitavalt mitte-autentimisega, kuna ise käsklusi trükkides on paroole raske sisestada).&lt;/p&gt;

&lt;p&gt;Esiteks tuleb käivitada &lt;em&gt;telnet&lt;/em&gt; SMTP serveri pihta. Mina kasutan näites &lt;a href="http://www.hot.ee"&gt;hot.ee&lt;/a&gt; SMTP serverit, kuna see on Elioni võrgust kasutades vaba ligipääsuga.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;telnet mail.hot.ee 25

Trying 194.126.101.116...
Connected to mail.hot.ee.
Escape character is '^]'.
220 hot.ee HOT-Relayhost1.estpak.ee
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Server vastas teatega &amp;#8220;220&amp;#8230;&amp;#8221; mis tähendab, et ühendus on avatud ja server on valmis meid kuulama. SMTP puhul tähistavad koodid algusega 2 ja 3 edu, aga 4 ja 5 ebaõnnestumist.&lt;/p&gt;

&lt;p&gt;Järgmisena tuleb end identifitseerida ja anda teada mis tüüpi protokolli toetatakse, kas tavalist SMTP või laiendatud versiooni ESMTP. Seda saab teha käskudega &lt;code&gt;HELO&lt;/code&gt; ja &lt;code&gt;EHLO&lt;/code&gt; millele järgneb iseenda masina nimi. Näites kasutame tavalist SMTP versiooni ja seega on käskluseks &lt;code&gt;HELO&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;HELO minaise
250 HOT-Relayhost1.estpak.ee
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Nüüd saab hakata &amp;#8220;ümbrikut&amp;#8221; kokku panema. Selle jaoks tuleb sisestada saatja aadress ja ükshaaval saajate aadressid. Need sisesatud aadressid saavad tegelikeks adressaatideks, kirja sees olevad on ainult informatiivse iseloomuga.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;MAIL FROM:&amp;lt;andris@kreata.ee&amp;gt;
250 2.1.0 Ok
RCPT TO:&amp;lt;andris@node.ee&amp;gt;
250 2.1.5 Ok
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Kui formaalsused on korraldatud, saab minna edasi juba tegeliku kirja edastamisega, selle jaoks tuleb kasutada ksäklust &lt;code&gt;DATA&lt;/code&gt;. Edasi on kogu sisestatav tekst osa kirjast ning seda kuni üksiku punkti sisestamiseni omaette real. Vältimaks segadust, peab klient kirja edastades kirja sees kõik rea alguses olevad punktid topeltpunktidega asendama.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;DATA
354 End data with &amp;lt;CR&amp;gt;&amp;lt;LF&amp;gt;.&amp;lt;CR&amp;gt;&amp;lt;LF&amp;gt;
From: andris@kreata.ee
To: andris@node.ee
Subject: Kiri endale

Tere maailm!
.
250 2.0.0 Ok: queued as 01E7F49A
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Peale punkti sisestamist loeb server kirja sisu lõppenuks ning võtab selle edastamiseks üle. Klient võib nüüd ühenduse sulgeda.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;QUIT
221 2.0.0 Bye
Connection closed by foreign host.
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Kokkuvõtteks&lt;/h3&gt;

&lt;p&gt;Selline on siis suures plaanis e-posti liigutamise mehhanism. Võibolla võtan kunagi ka MIME pikemalt lahti kirjutada, seniks aga võib vaadata minu e-posti saatmise kliendi &lt;a href="http://www.nodemailer.org/"&gt;Nodemailer&lt;/a&gt; lähtekoodi, mis on täiesti MIME sõbralik, võimaldades kasutada UTF-8 kodeeringus teksti, lisada manuseid jne.&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/2908476684</link><guid>http://www.andrisreinman.com/post/2908476684</guid><pubDate>Mon, 24 Jan 2011 14:56:21 +0200</pubDate><category>e-mail</category></item><item><title>JavaScripti omistamislause</title><description>&lt;p&gt;Ja nüüd midagi, mis on mul huvitaval kombel siiani kahe silma vahele jäänud, aga mida lugesin Stoyan Stefanovi raamatust &lt;a href="http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752"&gt;JavaScript Patterns&lt;/a&gt; ja mis tagantjärele tundub täiesti loogiline.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var a = b = c = 5;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ei ole sugugi sama, mis&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var a = 5;
var b = 5;
var c = 5;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Vaid hoopis&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var a = 5;
b = 5;
c = 5;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ehk et muutujatest &lt;code&gt;b&lt;/code&gt; ja &lt;code&gt;c&lt;/code&gt; saavad lokaalsete asemel hoopis globaalsed muutujad!&lt;/p&gt;

&lt;h3&gt;Samal teemal veel&lt;/h3&gt;

&lt;p&gt;Igaks juhuks märgin ära veel samasse teemasse kuuluva, aga juba tuntud probleemi&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;a = b = [];
c = d = {};
e = f = 5;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Sellise omistamise korral ei saa me mitte 2 massiivi-, kaks objekti- ja kaks numbriväärtust, vaid kaks numbriväärtust (&lt;code&gt;e&lt;/code&gt; ja &lt;code&gt;f&lt;/code&gt;, mõlema väärtuseks nr 5) ja ühe massiivi- ning ühe objektiväärtuse.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;a&lt;/code&gt; ja &lt;code&gt;b&lt;/code&gt; ei ole mitte eraldi väärtused, vaid kaks muutujat, mis viitavad ühele ja samale massiiviväärtusele. JavaScriptis on objektide edastamine (ka massiiv on objekt) alati BY REFRENCE.&lt;/p&gt;

&lt;p&gt;Seega lause&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;a = b = [];
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;võib lahti kirjutada ka kui&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;a = (b=[]);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;ehk&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;b = [];
a = b; // BY REFRENCE!
&lt;/code&gt;&lt;/pre&gt;</description><link>http://www.andrisreinman.com/post/1541702889</link><guid>http://www.andrisreinman.com/post/1541702889</guid><pubDate>Thu, 11 Nov 2010 11:36:16 +0200</pubDate><category>javascript</category></item><item><title>Kindle e-luger</title><description>&lt;p&gt;Kaalusin kaua, kas hankida endale e-luger, oodata ära kuni iPad kohalikku kaubandusvõrku saabub või lugeda e-raamatuid arvutiekraanilt/telefonist. Kuna ka meie jaoks on mõnda aega avatud Amazoni e-raamatute pood, siis installisin arvutisse ja telefoni Kindle aplikatsiooni, mis neid raamatuid ette näidata oskaks ja proovisingi paari raamatut lugeda. Paraku ei olnud tulemus väga hea, ikkagi üsna tüütu on arvutiekraanilt pikemat teksti ette võtta. Ka iPadi tulek ei tundunud enam nii roosiline, kuna iPadi näol on tegu sisuliselt järjekordse arvutiekraaniga.&lt;/p&gt;

&lt;p&gt;Ühesõnaga, otsustasin proovida e-lugerit. Eestis pakutav valik on üsna kehva, Rahva Raamat küsib Cool-er&amp;#8217;i eest &lt;a href="http://pood.rahvaraamat.ee/Catalog/ViewProduct?section=e-lugerid&amp;amp;title=cool-er_e-luger_soliidne_must&amp;amp;productId=111756"&gt;tutvumishinnaga 3900 krooni&lt;/a&gt;, mis on päris soolane. Koos Kindle raamatute müügi avamisega, hakkas aga Amazon tarnima Kindle e-lugereid ka Eestisse, kuid selle lugeja hind (kuigi tegu peaks olema tunduvalt parema seadmega kui Cool-er) on letil juba ainult $139 + kulud. Kuludeks on siis transport ja impordimaks. Pakkumine tundus soodne ja tellisingi ära.&lt;/p&gt;

&lt;p&gt;Reedel panin tellimuse sisse, esmaspäevaks oli pakk Tallinnas (UPS kulleriga). Kuna pakki oli vaja tollis deklareerida, ei saanud kohe kahjuks kätte. Teisipäeva hommikul käisin tollis (esitada tuli UPS&amp;#8217;i poolt e-postiga saadetud dokumendid + &lt;a href="http://www.emta.ee/public/toll/REISIJA_DEKL_2010_LOPLIK_2.pdf"&gt;reisija deklaratsioon&lt;/a&gt;), maksin impordimaksu ära ja sain UPS&amp;#8217;ist oma lugeri kätte. Väga kiiresti käis.&lt;/p&gt;

&lt;p&gt;Hind kujunes siis järgmiselt:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Seadme hind &lt;strong&gt;1&amp;#160;556,98 kr&lt;/strong&gt; ($139)&lt;/li&gt;
&lt;li&gt;Transport kulleriga &lt;strong&gt;235,00 kr&lt;/strong&gt; ($20.98)&lt;/li&gt;
&lt;li&gt;Impordimaks &lt;strong&gt;362 kr&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Kokku siis &lt;strong&gt;2153.98 kr&lt;/strong&gt;, mis on Rahva Raamatu poolt pakutud Cool-er&amp;#8217;i hinnast ligi &lt;strong&gt;kaks korda väiksem&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Seade oskab suhelda WiFi võrguga ning ka USB kaabli abil arvutiga (sama kaabel on kasutusel ka aku laadimiseks). Amazonist ostetud e-raamatud ilmuvad seadmesse võrgu olemasolul automaagiliselt, kuid peaks saama ka USB kaabli abil neid sinna saata. Tavalisi PDF faile jms võib seadmesse lihtsalt &amp;#8220;lohistada,&amp;#8221; kuna seade ilmub kaabliga ühendamisel arvuti töölauale tavalise välise kettana.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lb94n3Z4RO1qdvi2n.jpg" alt=""/&gt;&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/1460666929</link><guid>http://www.andrisreinman.com/post/1460666929</guid><pubDate>Tue, 02 Nov 2010 11:41:00 +0200</pubDate><category>Kindle</category></item><item><title>JavaScripti testimine</title><description>&lt;p&gt;Kuigi testimise valdkond on suur ja lai, siis üks kindel asi mida tagada tuleb, on eri platvormide testimine. Alati ei ole aga kõiki võimalikke brausereid ja operatsioonisüsteeme käepärast ja tuleb kasutada alternatiivseid vahendeid. Kõige kiirem ja lihtsam nipp erinevate platvormide testimiseks oleks &lt;em&gt;browsershots&lt;/em&gt; lehe kasutamine:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;tee testleht, mis kontrollib erinevaid kindlaid asju (unit tests)&lt;/li&gt;
&lt;li&gt;tulemused peaksid olema esitatud tabelina (et oleks kergelt aru saada, mis mida tähendab) ja testi läbinud read oleksid näiteks rohelised ja mittetöötavad punased&lt;/li&gt;
&lt;li&gt;mine &lt;a href="http://browsershots.org/"&gt;browsershots.org&lt;/a&gt; lehele ja sisesta testlehe aadress&lt;/li&gt;
&lt;li&gt;oota kuni pildid on valmis ning vaata nendelt, millised testid on läbi kukkunud&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Alati ei anna &lt;em&gt;browsershots&lt;/em&gt; pildid õiget tulemust, kuna brauserid ei ole kontrollitud. Võibolla näiteks on konkreetne brauser seadistatud nii, et test ei saagi seal läbi minna (näiteks on küpsised välja keeratud, kui neid oleks vaja jne), samas aga kuna puudub info konfiguratsiooni kohta, on raske ka järeldusi teha. Küll aga kui kõik on roheline, võib omadega rahul olla.&lt;/p&gt;

&lt;p&gt;Mina olen seda strateegiat kasutanud näiteks &lt;a href="http://www.jstorage.info"&gt;jStorage&lt;/a&gt; testimiseks (&lt;a href="http://www.jstorage.info/objtest"&gt;testleht&lt;/a&gt;).&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/1422047544</link><guid>http://www.andrisreinman.com/post/1422047544</guid><pubDate>Thu, 28 Oct 2010 11:01:00 +0300</pubDate><category>javascript</category><category>testimine</category></item><item><title>Veebipõhised protokollide haldajad</title><description>&lt;p&gt;Kes on vähegi HTML&amp;#8217;iga kokku puutunud, teab et linkidel käib ees protokolli nimetus- tavalingi puhul on selleks &lt;em&gt;http:&lt;/em&gt; või &lt;em&gt;https:&lt;/em&gt;, FTP serveri puhul &lt;em&gt;ftp:&lt;/em&gt;, e-maili aadresside korral &lt;em&gt;mailto:&lt;/em&gt; jne. Klikkides lingil, avatakse protokolliga seotud rakendus. Veebilinkide puhul on selleks brauser ise, aga ftp, mailto jne juba reeglina mõni muu.&lt;/p&gt;

&lt;p&gt;Erinevad aplikatsioonid saavad registreerida brauseris ka oma kohandatud protokolle, nii teeb näiteks &lt;a href="http://skype.ee"&gt;Skype&lt;/a&gt; - &lt;em&gt;skype:kasutajanimi?call&lt;/em&gt;. Vähe aga teatakse, et näiteks Firefox brauseris saab protokolli kindla rakendusega siduda ka suvaline veebiteenus - sellisel juhul on protokolli avavaks rakenduseks enam mitte väline rakendus vaid määratud veebilink, mis saab parameetriks lingi väärtuse. Nii näiteks saaks veebipõhine e-posti klient suunata endale kõik &lt;em&gt;mailto:&lt;/em&gt; lingid - kasutaja klikib sellisel lingil, kuid Outlooki või Thunderbirdi avamise asemel avatakse veebipõhine e-posti teenuse leht.&lt;/p&gt;

&lt;p&gt;Protokolli saab enda veebiteenusega siduda järgmise käsuga:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;navigator.registerProtocolHandler(protocol,
          handling_url,
          name);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Kus &lt;em&gt;protocol&lt;/em&gt; on protokolli eesliide (näiteks &lt;em&gt;mailto&lt;/em&gt;), &lt;em&gt;handling_url&lt;/em&gt; on aadress, kuhu päring suunatakse (aadressis olev &lt;em&gt;%s&lt;/em&gt; asendatakse lingi väärtusega, nb - aadress peab asuma samas server, kui päringut teostav veebileht) ja &lt;em&gt;name&lt;/em&gt; inimloetav protokolli nimetus. Loomulikult ei lisata sellist protokolli registreerimist automaatselt, vaid enne küsib brauser kasutaja luba nagu kõigi muude taoliste tegevuste korral.&lt;/p&gt;

&lt;h3&gt;Näide&lt;/h3&gt;

&lt;p&gt;Kui kasutajalt küsida &lt;em&gt;mailto&lt;/em&gt; linkide suunamist järgmise käsuga&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;navigator.registerProtocolHandler("mailto",
          "http://emaili-server.ee/new?to=%s",
          "Minu E-post");
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;ja seejärel kasutaja klikib suvalisel veebilehel järgmise kujuga lingil&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;a href="mailto:kasutaja@server.ee"&amp;gt;saada kiri&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;siis avab brauser veebilehe aadressiga&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;a href="http://emaili-server.ee/new?to=mailto:kasutaja@server.ee"&gt;http://emaili-server.ee/new?to=mailto:kasutaja@server.ee&lt;/a&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Katsetada saab &lt;a href="http://dev.kreata.ee/proto.php"&gt;siin&lt;/a&gt; ja täpsemalt uurida Mozilla MDC &lt;a href="https://developer.mozilla.org/en/Web-based_protocol_handlers"&gt;Web-based protocol handlers&lt;/a&gt; lehelt.&lt;/p&gt;

&lt;p&gt;Töötab - Firefox 3.x. Webkiti core&amp;#8217;s on olemas juba aasta aega kuid miskipärast ei Chrome ega Safari seda veel ei toeta. Tulevikus aga kindlasti. IE kohta ei oska öelda.&lt;/p&gt;</description><link>http://www.andrisreinman.com/post/1367589450</link><guid>http://www.andrisreinman.com/post/1367589450</guid><pubDate>Thu, 21 Oct 2010 21:46:00 +0300</pubDate><category>javascript</category><category>web-based protocol handlers</category><category>firefox</category></item></channel></rss>

