Aug 14, 2008OS 2008 – i lego

Visserligen handlar detta varken om C#,PHP eller programmering, men det är så häftigt att jag bara måste posta länken.

The LEGO Beijing Olympics

Det är alltså OS-staden helt återskapad i Lego, av just LEGO.

Grymt!

Aug 11, 2008Tips för att spåra slöa databasfrågor

Den faktor som oftast spelar stört roll vid utveckling av hårt belastade webbapplikationer är frågor som ställs mot databaslagret. För att enkelt spåra querys som tar lång tid (standard > 1 sekund), har mysql en inbyggd funktion för att logga dessa till en fil, vilket är mycket användbart.
För att slå på funktionen, starta mysqld med argumentet

--log-slow-queries[=filnamn]

eller lägg till

log-slow-queries [=filnamn]

i din my.cnf-fil.

Aug 11, 2008PHPLinq

Många är vi som älskar och använder Linq (Language Integrated Query) i .Net. Kort sagt används Linq för att ställa frågor mot dataobjekt, med liknande syntax och funktionalitet som en databas.

Ett snabbt linq-exempel i C# skulle kunna se ut något i stil med:

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var lowNums =
    from n in numbers
    where n < 5
    select n;

foreach (var num in lowNums)
{
    Console.WriteLine(x);
}

vilket är mycket smidigt. Ända tills nu har Linq endast funnits i .NET 3.5, men finns nu som ett bibliotek till PHP. Funktionaliteten är densamma som i .Net, och ett exempel från PHPLinq skulle kunna se ut som följande:

$numbers = array(5, 4, 1, 3, 9, 8, 6, 7, 2, 0);

$lowNums= from(‘$num’)->in($numbers )
            ->where(‘$num < 5′)
            ->select(‘$num’);

foreach($lowNums as $num)
{
    echo $num;
}

PHPLinq

Aug 8, 2008När skall PHP-folket lära sig?

Allt för ofta när man kommenterar php-kod pÃ¥ diverse forum dyker problem upp som aldrig hade kommit upp om folk lärt sig programmera “pÃ¥ riktigt”, eller om php hade varit strikt typat, vilket vore att föredra.

Ta till ett exempel som detta:

$namn = "Alexander";
$alder = 0;

if($namn == $alder)
{
    echo "Hmm?";
}

Skriptet kommer här att skriva ut “Hmm?”.

Visst, nu tänker du säkert, varför skulle man vilja jämföra en integer med en sträng? Det finns många många gånger, t.ex. när man hämtar data från en datakälla som en databas eller web-service.

Kort och gott kärt folk, använd ALLTID

===

när ni skall jämföra nÃ¥got. Att använda “===” innebär att man inte bara kollar att värdena stämmer, utan även datatypen.

Aug 8, 2008PHP 5.3 Alpha äntligen här!

För nästan exakt en vecka sedan släpptes första alpha-versionen av nya PHP 5.3. Denna version har mycket genemsamt av vad vi kommer att få se i PHP 6, till exempel namnrymder vilket är guld värt för oss som programmerar objektorienterat, men även för er som återanvänder klasser, som kanske råkar heta samma sak. Det är enkelt löst med namespaces.

För att deklarera en viss namnrymd skriver man helt enkelt:

namespace CMS;

Class User()
{
    function authenticate()
    {

    }
}

namespace BLOG;

Class User()
{
    function authenticate()
    {

    }
}

Det innebär att vi skulle kunna deklarera flera klasser med samma namn, så länge de ligger i olika namnrymder. Sedan kan vi anropa dem enligt följande:

CMS::User::authenticate();
BLOG::User::authenticate();
 

eller

use CMS::User as CMSUser;
use Blog::User as BlogUser;

$cmsUser = new CMSUser();
$blogUser = new BlogUser();
 

En annan spännande feature i nya PHP-versionen är alternativet att använda mysqlnd istället för libmysql. Fördelen med mysqlnd är att det är bundet med php på c-nivå, istället för libmysql som är löst kopplat, eftersom det kan användas till vilket projekt som helst. Eftersom mysqlnd är kopplat till php på c-nivå följer det även PHPs inbyggda minneslimitering? (memory limit).

Vidare fördelar med mysqlnd är att det inte håller dubbla rader av resultat från en query, vilket framför allt sparar mer minne.

För mer information om mysqlnd rekommenderar jag läsning på PHP-Mysqlnd wikin för projektet.

PHP 5.3 stöder även late static binding, vilket innebär att ärvda klasser också övertar statiska metoder.

Som det är i PHP just nu:

<?php
Class ParentClass
{
    public static function Init()
    {
        self::HelloWorld();
    }
   
    public static function HelloWorld()
    {
         echo "Hello world from Parent!";
    }
}

Class ChildClass Extends ParentClass
{
    public static function HelloWorld()
    {
         echo "Hello world from Child!";
    }
}

ChildClass::Init();
?>
 

Här kan man absolut förvänta sig att Init() skall skriva ut Hello world from Child!, så är dock inte fallet. Problemet är att PHP med ::self kommer att länka till den klassen där methoden deklarerades.

I PHP 5.3 använder man

static::Init(); istället för self::Init();
 

Även ett flertal intressanta datumfunktioner är tillagda:

  • date_add()
  • date_sub()
  • date_diff()
  • date_parse_from_format()
  • date_create_from_format()
  • date_get_last_errors()

samt även motsvarigheten till ucfirst() – lcfirst().

Något som också är väldigt uppskattat är nya SPL-implementationer:

SPL

för oss som använder det.

För en fullständig lista på uppdateringar hänvisar jag till PHP 5.3 CHANGELOG.

Det som kan tyckas vara negativt med PHP 5.3 är operativsystem äldre än Windows 2000 t.ex Windows 98 inte längre stöds.

Det enda som återstår är nu att alla wamp-xampp-lampp-paket samt webbhotell uppdaterar till 5.3, men det lär väll ta 2-3 år som med alla andra versioner.

Aug 8, 2008Google translate gadget till Vista sidebar

Jag är en flitig användare av Google Translate, just för att snabbt kunna bekräfta att ord stavas så man tror. Dock är det enligt mig jobbigt att gå in och välja språk varje gång man vill snabbkolla ett ord.

Av denna anledning sökte jag efter en gadget till Windows Vista, men kunde inte hitta någon. Därför slog jag slag i sagen och utevecklade en egen, och tänkte dela med mig den här.


Google Translate Vista gadget

För att installera gadgeten zippar ni upp filen nedan, skriv sedan

%userprofile%\appdata\local\microsoft\windows sidebar\gadgets

under Start -> Kör, och placera GoogleTranslate under katalogen som dyker upp.

Hoppas den kommer till användning, om ni får problem är det bara att droppa en kommentar!

GoogleTranslateGadget

Aug 8, 2008Php, file_get_contents och curl

Många hävdar att curl är mycket snabbare på att ladda hem dokument från andra webbplatser, andra hävdar motsatsen. Jag personligen har märkt att curl är snabbare och använder därför det uteslutande för att hämta ner andra webbplatser.

Nackdelen är då att curl inte är installerat på alla webbhotell, därför bifogar jag här en mycket enkel funktion för att ladda ner dokument, som använder curl om det finns installerat och aktiverat, annars används file_get_contents.

function get_contents($url)
{
    $data = "";
   
    if (function_exists("curl_init"))
    {
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
       
        $data = curl_exec($ch);
       
        curl_close($ch);
    }
    else
    {
        $data = file_get_contents($url);
    }
   
    return $data;
}
 

Simpelt men mycket användbart!

Aug 8, 2008Screen scraping med PHP

Jag har ofta kommit i situationer där jag, i olika projekt, behöver hämta data och statistik från sidor som inte tillhandahåller rss-feeds. Dessa situationer har jag alltid löst genom att skriva simpla regexp som hämtar det jag vill ha. Detta är dock ofta tidsödande och väldigt krävande för systemet som skall interprera scriptet.

Nu har jag dock hittat ett verktyg för att stega igenom dokumentmodellen på en webbplats, nämligen PHP Simple HTML DOM Parser. Verktyget fungerar väldigt tillfredsställande och använder en syntax liknande jQuery.

Vad är det då som skiljer ovan nämnda verktyg från de andra som finns?

Jo en för mig avgörande skillnad är att det stöder icke-korrekta htmldokument. Detta innebär att du kan parsa i princip vilken sida som helst.

För att t.ex. hämta ut alla sökresultat på google för ett visst sökord gör vi enligt följande:

require_once "simple_html_dom.php"; // Inkludera PHP Simple HTML Dom
$keyword = "iocore";                // Sökordet vi vill söka efter

$html = file_get_html("http://www.google.se/search?hl=sv&amp;q=" . $keyword); // Hämta ner sidan och gör det till ett simple_html_dom-objekt

foreach($html->find("h2") as $h2) //Hämta alla h2-element
{
    foreach($h2->find("a") as $link) // Hämta alla a-element med h2 som förälder
    {
        echo $link->href; // Skriv ut href-attributet pÃ¥ funna a-element
    }
}
 

svårare än så är det inte!

Det var allt för nu, håll utkik efter mer användbara kodsnuttar här på IoCore!

Aug 8, 2008Välkommen till IoCore!

Som sagt, välkommen till min nystartade blogg, IoCore! Denna bloggen kommer främst ta upp ämnen som befattar programmering, till exempel programmeringsspråk som C#, PHP med mera. På IoCore kommer du även finna små men användbara scripts till en olika språk, men även shellscripts.

Hoppas du kommer hitta något av intresse!

Mvh Alexander Nyquist

Tips:
MediaAnalys