RSS Facebook Pusha Bloggy TwitThis Google Digg

Nyheter i PHP 5.3 Del 2 – Namespaces

I en tidigare post skrev jag om Nyheter i PHP 5.3 och visade funktionaliteten med Lambda och Closures. Naturligtvis var inte detta de ända nyheterna. Jag tänkte därför i denna post gå igenom den kanske bästa nyheten, nämligen Namespaces.

Den främsta anledningen att använda Namespaces är för att komma ifrån problemet med namnkollisioner. Zend har tidigare löst det med en hierarki, till exempel Zend_Db_Table. Dessa kan dock bli väldigt långa som till exempel denna Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive()

Ett exempel med Namespace

Jag kommer gå igenom ett väldigt enkelt exempel med namespace.

namespace Blog;
class User
{
	public function Hello()
	{
		echo "Hello World! from " . __NAMESPACE__ . " - " . __CLASS__;
	}
}
 
namespace CMS;
class User
{
	public function Hello()
	{
		echo "Hello World! from " . __NAMESPACE__ . " - " . __CLASS__;
	}
}

I detta exemplet har vi skapat två stycken namespaces, Blog och CMS. Här ser man redan fördelar med att använda namespaces, vi kan i detta exemplet nämligen ha två klasser med samma namn, User.

För att avända våra namespaces, klasser och funktioner använder vi följande kod.

$object = new CMS\User();
$object2 = new Blog\User();
 
$object->Hello();
$object2->Hello();

Resultatet av följande kod kommer bli:
Bild 20
Ett annat tips när det gäller namespaces är att du kan skapa ett alias för en klass.

use CMS\User as cmsuser;
use Blog\User as bloguser;
$object = new cmsuser();
$object2 = new bloguser();

Här skapar vi två stycken alias, cmsuser och bloguser, dessa kan vi sedan använda för att skapa objektet.

Sub-namespaces

Namespaces fungerar i stort sätt som en katalogstruktur. Du kan alltså skapa sub-namespaces, till exempel.

namespace Baronen\Blog;
class User
{
	public function Hello()
	{
		echo "Hello World! from " . __NAMESPACE__ . " - " . __CLASS__;
	}
}

Notera här att jag har ändrat namnet till Baronen\Blog. Tillvägagångssättet för att använda klassen är detsamma.

$object = new Baronen\Blog\User();

Vill du läsa mer om namespaces rekommenderar jag som vanligt den officiella dokumentationen.

Vill du veta mer om nyheterna i PHP 5.3 hittar du det här.

Som jag nämnt tidigare hoppas jag webbhotellen tar till sig nya versionen av PHP så snart som möjligt.

RSS Facebook Pusha Bloggy TwitThis Google Digg

Skapa korta länkar med bit.ly och PHP

I och med att användandet av mikrobloggtjänster har ökat och folk delar mycket länkar har förkortningtjänster blivit väldigt populära. Jag tänkte därför visa hur du bygger en enkel PHP-klass och använder en av de populära tjänsterna, bit.ly. Notera att för att använda förkortningstjänsten bit.ly krävs det att du har ett konto och en API-nyckel från tjänsten.

När du väl har fixat din API-nyckel och har ett konto så är det dags att börja koda. Kollar vi på den officiella dokumentation så ser vi att länken vi använder ser ut enligt följande: http://api.bit.ly/shorten?version=2.0.1&longUrl=http://baronen.org&login=anvadare&apiKey=APINyckel&format=json
Vi skapar sedan vår ganska enkla klass som innehåller en statisk funktion, GetShortUrl.

class Bitly
{
	public static function GetShortUrl($url, $login, $api, $format = 'json')
	{
		$bitly = "http://api.bit.ly/shorten?version=2.0.1&longUrl=".$url."&login=".$login."&apiKey=".$api."&format=".$format;
		$response = file_get_contents($bitly);
 
		if($format == 'json') {
			$resultJson = json_decode($response, true);
			return $resultJson['results'][$url]['shortUrl'];
		} elseif ($format == 'xml') {
			$resultXml = simplexml_load_string($response);
			return $resultXml->results->nodeKeyVal->shortUrl;
		} else {
			return "Wrong type supplied: " . $this->format;
		}
	}
}

APIet tillåter att man väljer vilket format man vill ha tillbaka resultatet i, jag har byggt denna klass så man kan välja både json och xml.
För att sedan använda klassen anropar du den statiska funktionen. I detta exempel förkortar jag baronen.org, jag skickar även med bitly-användare, api-nyckel samt att jag vill använda formatet xml.

<?php echo Bitly::GetShortUrl('http://www.baronen.org', 'Anvandare', 'API-Nyckel', 'xml'); ?>

Resultat och demo

Se demo eller ladda ner källkoden.

RSS Facebook Pusha Bloggy TwitThis Google Digg

Method Chaining i PHP – metodkedjor

I och med PHP 5+ och stödet för objekt finns det något som kallas Method Chaining. Detta innebär att du kan köra flera funktioner/metoder efter varandra.

Ett ganska vanligt förekommande sätt att använda objekt på är följande.

$userObj = new User();
$userObj->setUsername('baronen');
$userObj->setEmail('mail@mail.com');
$userObj->RegisterUser();

Här skapar vi ett nytt User objekt, sedan anropar vi två set-funktioner för att sedan köra funktionen RegisterUser.

Använd Method Chaining

Man behöver inte göra stora ändringar för att skapa metodkedjor. Jag har här skapat en väldigt enkelt User-klass som har två set funktioner och en funktion för att skriva ut egenskaperna.

class User
{
    private $username;
    private $email;
 
    public function setEmail($email) {
        $this->email = $email;
	return $this;
    }
    public function setUsername($username) {
        $this->username = $username;
	return $this;
    }
    public function RegisterUser() {
	echo "Register user with email <strong>" . $this->email . "</strong>";
	echo " and username <strong>" . $this->username . "</strong>";
    }
}

Den ända skillnaden från en “vanlig” klass är att set-funktionerna returnerar hela objektet, detta för att kunna bygga på med fler funktioner på följande sätt.

$userObj = new User();
$userObj->setEmail('baronen@mail.org')->setUsername('baronen')->RegisterUser();

Resultatet blir i detta fall följande:
Register user with email baronen@mail.org and username baronen

Svårare än så är det inte att använda sig av “Method Chaining”.

Resultat

Se demo eller Ladda ner källkod här.

RSS Facebook Pusha Bloggy TwitThis Google Digg

Antal RSS-läsare via Feedburner API

I denna lilla guide tänkte jag gå igenom hur man kan använda Feedburners API för att hämta ut antalet prenumeranter man har på sitt RSS-flöde.

När jag gjorde ny design till bloggen ville jag inte ha Feedburners fula “widget” Bild 2 som visar antal prenumeranter. Jag började istället undersöka deras API i, och jag kom fram till att den inte var alls svårt att hämta ut antalet.
Läs hela “Antal RSS-läsare via Feedburner API

RSS Facebook Pusha Bloggy TwitThis Google Digg

Twitter på din webbplats med PHP och jQuery

Aktiviteten på Twitter har ökat lavinartat den senaste tiden, inte minst i Sverige. Många som bloggar använder även twitter. Jag tänker i denna post beskriva hur du med hjälp av PHP och simpleXML hämtar ditt twitter-flöde och publicerar det på din egen webbplats.

När sedan biten med PHP och SimpleXML är färdig, kommer jag gå igenom hur man kan använda jQuery för att snurra twitter-flödet.
Läs hela “Twitter på din webbplats med PHP och jQuery

RSS Facebook Pusha Bloggy TwitThis Google Digg

Vilket land kommer besökaren i från?

Vi satt på kontoret häromdagen och diskuterade det här med sidor på olika språk, hur man enklast ser till så att besökaren hamnar på rätt sida. Därför har jag skrivit ihop ett enkelt exempel som kontrollerar besökarens IP-adress och gör att uppslag mot en IP-databas.  För att slå upp ip-adressen har jag använt databasen från Per Gustaffson och sidan ip2nation.com. Databasen innehåller två tabeller, ip2nationCountries och ip2nation.
Läs hela “Vilket land kommer besökaren i från?

RSS Facebook Pusha Bloggy TwitThis Google Digg

Visa epostadress som bild med PHP & GD

Undviker du att skriva ut din epostadress på din webbplats på grund av risken för spam? Jag tänkte här gå igenom om hur du kan visa din epostadress som en bild med hjälp av PHP och GD.

För att detta skript ska fungera måste du självklart ha PHP men även GD-biblioteket. Skapa en php_info() och kontrollera att du har GD installerat.

Steg 1
Första steget är att skapa filen ‘display_email.php‘. Det är denna filen som kommer sköta grovjobbet.

header("Content-type: image/png"); //Detta är en PNG-bild
 
if(isset($_GET['email']))
//Dekodar den base64-kodade adressen
$email = base64_decode($_GET['email']);
else
$email = "Skicka med en email";
 
$font = 4; //Sätter teckensnitt till 4
 
//Räknar bredden och höjd på bilden via
//emailens längd o teckensnittet
$imageWidth = (imagefontwidth($font) * strlen($email)) + 5;
$imageHeight = imagefontheight($font) + 5;
 
$im = @imagecreate($imageWidth, $imageHeight) or die("Kan inte skapa bilden");
 
//Allokerar färger, vit och svart
$background_color = imagecolorallocate($im, 255, 255, 255);
$text_color = imagecolorallocate($im, 0, 0, 0);
 
imagestring($im, $font, 2, 2, $email, $text_color); //Skapar texten
 
//Skapar png-bilden
imagepng($im, null, 9);
 
//Förstör bilden
imagedestroy($im);

Kommentarerna i koden är ganska självtalande men vi kan gå igenom lite kort vad som händer. Det första vi gör är att tala om att innehållet är en PNG-bild.

Nästa steg är att ta emot epost-adressen via $_GET[]. Det vi sedan gör är att dekoda den, vi kodar den när vi skriver ut den i html-kod.

Epostadresser är självklart olika långa och eftersom vi inte vill ha en bild på 500px så räknar vi ut bredden och höjden på bilden baserat på antal tecken och teckensnittets storlek.

Sedan skapar vi en bild med imagecreate och allokerar färger.

Sedan använder vi funktionen imagestring som skapar texten, denna funktion tar sex parametrar, en bildresurs, teckensnitt, x, y, texten och vilken färg som ska användas.

Sist så skapar vi png-bilden för att sedan förstöra bildresursen.

Nu har vi alltså en fil som klarar att ta emot en epostadress och göra om denna till en bild i rätt storlek.

Steg 2
Det sista vi behöver göra nu är att använda oss av vår ‘display_email’ fil.

<img src="display_email.php?email=<?= base64_encode("min_epostadress@madeup.org") ?>" />

I och med att vi använder funktionen base64_encode så kommer resultatet se ut enligt följande, vilket gör det väldigt svårt för robotar att förstå att detta är en epostadress.
<img src="display_email.php?email=bWluX2Vwb3N0YWRyZXNzQG1hZGV1cC5vcmc=" />

Se Demo eller Ladda ner källkoden här.

RSS Facebook Pusha Bloggy TwitThis Google Digg

Sista chansen att söka högskoleutbildning

hikDen senaste veckan har det varit en diskussion på bloggy.se om webbutbildningar. Där har det diskuterats om webbutbildningar på distans och Högskolan i Kalmar (HIK) har kommit på tal. Jag tänkte bara ge min syn på webbprogrammeringprogrammet i Kalmar efter att ha studerat där i drygt två år.

I och för sig har jag har ingen erfarenhet av att plugga detta på distans men programmet är ju detsamma.

Jag kan börja med att berätta att jag har lärt mig väldigt mycket under dessa två år som student på webbprogrammeringsprogrammet.  Jag vet dock att det finns folk som tycker att man kan lära sig att programmera och utveckla själv och att studera detta på högskola är överskattat. Detta kanske är en smaksak men efter att ha pluggat i drygt två år så är jag tveksam, men som sagt, det är ju upp till var och en.

Jag har varit mycket nöjd med dessa två år. Det känns som utbildningen följer dagens utveckling på Internet och ändrar sig år från år beroende på vilka tekniker som kommer och är populära. Detta tror jag är viktigt eftersom det händer fruktansvärt mycket i denna bransch på väldigt kort tid. Även de flesta lärare är väldigt engererade och brinner verkligen för utveckling och programmering. Gå in på hik.se för att läsa mer om vilka språk och tekniker man lär sig.

Jag kan dock tycka att utbildningen är lite för inriktad mot att ta anställning efter utbildningen när det faktiskt finns stora möjligheter att starta eget eller jobba som konsult. Jag skulle gärna se att det kommer in lite kurser och föreläsningar som inriktar sig mot hur man jobbar som egen och hur prissätter man sina tjänster. Alltså lite mer inriktning mot alternativen om att jobba som anställd.

Är du intresserad av att plugga webbprogrammering på HIK till hösten så tveka inte på att söka till webbprogrammeringsprogrammet på Högskolan i Kalmar. Gå in på studera.nu och ange kurskod HK-82237 så hittar du information om hur man söker. Sista anmälningsdag är 15 April så det brinner i knutarna.

RSS Facebook Pusha Bloggy TwitThis Google Digg

Nytt projekt i planeringsstadiet

Idag har ett nytt webbprojekt börjat planeras, tänkte dock inte berätta så mycket mer förens projektet har kommit en bit längre. Hittills finns bara ett namn och en idé, idén är egentligen ganska enkel och egentligen inte unik, dock finns det en stor marknad och målet är att detta projekt ska bli störst i Sverige inom detta område.

Hoppas att jag har byggt upp spänningen lite inför framtiden nu?

RSS Facebook Pusha Bloggy TwitThis Google Digg

Använd gravatar med ASP.NET

Gravatar står för “globally recognized avatar”. Detta innebär att du kan ladda upp din avatar hos gravatar. När du sedan kommenterar på en blogg eller använder någon annan tjänst som stödjer gravatar kommer din globala avatar att användas.

Jag håller just nu på att utveckla en blogg i ASP.NET, detta i samband med ett projekt på HIK. På bloggen finns självklart en funktion för att kunna kommentera poster,  jag tycker själv det lyfter upp och blir roligare om det finns en avatar kopplad till en kommentar. Jag tänkte därför försöka  förklara hur jag har gjort för att åstakomma detta.

Avataren från gravatar identifieras med hjälp av användarens epost adress, därför är det viktigt att du sparar eposten när en besökare kommenterar.

Jag använder mig av en Listview-kontroll för att presentera alla kommentarer till en post. I Codebehind filen skapar jag en metod för att “hasha” användarens epost adress. I denna funktionen måste man göra om besökarens epost till MD5, för att sedan transformera den till små bokstäver med metoden ToLower().

protected string GetHashedEmail(string email)
{
string hashedEmail = FormsAuthentication.HashPasswordForStoringInConfigFile(email, "MD5");
hashedEmail = hashedEmail.Trim().ToLower();
return hashedEmail;
}

Metoden tar alltså strängen email som inparameter. Sedan använder jag mig av klassen FormsAuthentication och dess metod HashPasswordForStoringInConfigFile för att göra om eposten till MD5.

Notera, för att detta ska fungera måste namnområdet security användas. (using System.Web.Security;).

Därefter tar jag bort eventuella mellanslag/blanksteg med metoden Trim() för att sedan konvertera till gemener med metoden ToLower().

Sedan returnerar jag helt enkelt den färdiga hashade epostadressen.

Hur ser det då ut i Listviewkontrollen?

<img src="<%# "http://www.gravatar.com/avatar/" + GetHashedEmail(Eval("email").ToString()) + "?s=60" %>" />

Jag använder helt enkelt en vanlig bild, i src attributet anropar jag min metod GetHashedEmail och skickar med epostadressen.

Det var det hela. Nu borde din visning av gravatarer fungera.

Läs mer om gravatar och hur du som webbutvecklare kan använda det här.

Nästa