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

Utomic lanserar barnkläderssite

Det har varit ganska tyst kring Utomic ett tag nu. Men idag kan jag presentera ett av våra senaste projekt, toddlr.se. Toddlr är alltså en site med inriktning mot barn och barnkläder.

Webbplatsen är uppdelad i tre olika delar, ett register över barnbutiker, barnkläder och en del för begagnade barnkläder. Tanken är att samla produkter, affärer och webbutiker på ett och samma ställe.

Sidan är precis lanserad så det saknas fortfarande viktig funktionalitet och det kan tyvärr förekomma vissa buggar. Hittar du något som verkar konstigt på sidan får du gärna höra av dig till oss.

Förutom toddlr har vi även lanserat en testsida, nämligen grossistkatalogen. (Tack Jonny för den domänen). Denna sida är ett register över grossister i Sverige indelade på kategori och region.

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

Jämför texter i PHP

Jag skrev tidigare att jag tänkte byta inriktning på bloggen. Här kommer första posten inom denna inriktning, jämför text i PHP.

Joacim har tidigare skrivit “Menar du…?“, här förklarar han två tekniker som används för att räkna ut vad man egentligen menar. Den första är Levenshtein och den andra är N-Grams. Jag kommer i denna post gå igenom hur man använder Levenshtein samt en funktion som heter similar_text.

Levenshtein – Menade du?

meantJag tänkte i denna post gå igenom hur man använder Levenshtein för att räkna ut vad man egentligen menar. Metoden i PHP heter Levenshtein och tar emot två parametrar i form av två strängar man vill jämföra.

    $searchPhrase = 'vovlo';
	$words = array('volvo', 'bmw', 'saab', 'skoda', 'chrysler', 'opel', 'mazda');
	$distance = -1;
 
	foreach ($words as $word) {
		$levenshtein = levenshtein($searchPhrase, $word);
 
		if($levenshtein == 0) {
			$closest = $word;
			$distance = 0;
			break;
		}
		if($levenshtein <= $distance || $distance < 0) {
			$closest = $word;
			$distance = $levenshtein;
		}
	}
 
	if($distance === 0)
		echo 'Hittade en korrekt träff, ' . $closest;
	else
		echo 'Menade du... <em>' . $closest . '</em>?';

Vi börjar exemplet med att definiera det ord vi vill söka efter, i detta fall “vovlo”. Nästa steg är att skapa en array som innehåller de ord som vi vill matcha emot. Därefter loopar vi igenom alla ord i arrayen. I loopen använder vi Levenshtein-funktionen för att räkna ut distansen mellan de två orden. Till sist så skriver vi ut det närmsta ordet eller om det var en direkt träff.

Resultat Levenshtein
Bild 9

Din text verkar finnas – similar_text

meant2Den andra funktionen är similar_text. Likt Levenshtein beräknar den likheten mellan två texter. I detta exemplet ska vi beräkna om en text verkar vara en dubblett.

$string1 = "Jag heter Andreas Eriksson och jobbar på Utomic och bloggar på baronen.org"
$string2 = "Jag är Andreas Eriksson och arbetar på Utomic och skriver på baronen"
echo similar_text($string1, $string2);

Detta exempel kommer skriva ut ’57′, det är alltså hur många bokstäver som stämmer överens i de båda strängarna. Det hade varit bättre om vi kunde få ut likheten i procent. Detta gör man genom att skicka med en tredje parameter som sedan får värdet i procent.

$string1 = "Jag heter Andreas Eriksson och jobbar på Utomic och bloggar på baronen.org"
$string2 = "Jag är Andreas Eriksson och arbetar på Utomic och skriver på baronen"
similar_text($string1, $string2, $p);
echo round($p,1). "%"

I och med att vi skickar med $p så kommer $p innehålla likheten mellan de två strängarna i procent. Innan vi skriver ut resultatet använder vi funktionen round som avrundar till en decimal.

Denna teknik kan man till exempel använda för att kontrollera om en text är en dubblett.

Resultat Similar_text
Bild 10

Här har du två olika metoder för att jämföra texter i PHP. Du kan säkert hitta fler användningsområden än de två jag har gått igenom i denna post.

RSS Facebook Pusha Bloggy TwitThis Google Digg

PHP communityn sågar Googles tips

Sedan en tid tillbaka har Google börjat köra sin kampanj “Let’s make the web faster“, där släpper de lite tips om hur du kan förbättra din webbplats. De har lite olika artiklar om hur du snabbar upp din javascriptkod, hur du optimerar bilder och hur du förbättrar din PHP-kod.

Det tog inte många dagar innan bloggposter och artiklar kom ut på nätet som sågade Googles tips och menar att de flesta tipsen är helt fel.

Ett av tipsen från Google var att inte kopiera variabler, enligt Google ska detta fördubbla minnesanvändningen. Grejen är den är PHP tillämpar något som kallas “copy-on-write”. Med detta menas att variabeln kopieras bara om du ändrar den.

The Zend Engine at the core of PHP 4 and 5 uses a technique known as
“copy-on-write” memory management. This means that no matter how many
times you assign the value of a variable to another variable, the data
is not copied until you change it.

Andra tips som tas upp är att använda “Switch” istället för “If/Else” och att använda “echo” istället för “print”.

Jag har hittat två stycken artiklar som bevisar att de flesta av Googles tips inte stämmer. Den första är PHP 10.0 bloggen och den andra en en diskussion på Google Group.

Om man tar detta ett steg längre, hur påverkar detta utvecklingen och hastigheten på Internet i förlängningen när ett företag som Google går ut och säger att “så här gör man, (fast det är inte det bästa sättet)”. Vad tror du?

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.

RSS Facebook Pusha Bloggy TwitThis Google Digg

Kalmar Camp är nu över

Nu är årets upplaga av Kalmar Camp över. Sammanfattningsvis var det mycket trevligt och ganska lärorikt.

Hela evenemanget drog igång med glada miner och alla var riktigt laddade för att utveckla sin egen idé. Ingen hade väl egentligen sin idé helt klar, inte ens i planeringsstadiet, därför gick det ganska mycket tid åt planerande hit och dit.

Personligen kände jag att jag hade hyfsad koll på min tjänst, åtminstone innan jag började. Designen och layouten växte fram ganska snabbt och egentligen inte med så mycket tanke bakom. Men resultatet blev ändå helt ok, med tanke på det tidspress som fanns. När jag väl började programmera (PHP, MySQL & en del javascript) kändes det ganska bra, höll min snabbt uppritade tidsplan, skapade en relativt stabil grund att stå på, och jag hade många bra idéer.

Allting flöt på bra fram till småtimmarna, sedan sa det stop. Då gick bara allt runt i huvudet, hur mycket jag än försökte var det svårt att få koll på objekt, tabeller, egenskaper med mera. Allt detta gjorde att arbetstempot sjönk avsevärt från min sida.

Jag tyckte ändå det va lyckat och det jag tar med mig till nästa Kalmar Camp är att jag ska planera bättre innan, försöka få lite sömn under natten och att äta ordentligt.

Var är resultatet?

Nicklas Jarnesjö Bloggen
En av deltagarna var Nicklas Jarnesjö. Han presenterade vid slutet av Kalmar camp en ny personlig blogg.

jarnesjo

Patrik Wall portfolion
Patrik Wall bestämde sig för att göra en ny portfolio där han kan visa upp sina webbprojekt och kunskaper.

delawall

Joacim Ståhl Bokhyllan
Joacim Ståhl utvecklade tjänsten booklyn,  en social boksida. Där kan du lägga till böcker, hitta nya böcker med mera.

booklun

Erik Falk Märkningen
Erik Falk gjorde en tjänst han kallar Webmark, det innebär att du kan markera texter på en sida för att spara till senare tillfälle.

Patrik planket
Patrik gjorde ett klotterplank, dock lämnade han oss under natten så inget resultat har påträffats.

Andreas Eriksson Kodsamlaren
Själv gjorde jag en tjänst som går ut på att du kan lägga upp dina “kodsnuttar”. Du kan sedan dela med dig i grupper, rätta andras kod med mera. Denna tjänst är inte helt klar än, skäms lite över att inte hunnit färdigt.

codecode

Som sagt, detta var en mycket trevlig tillställning och jag/vi hoppas att deltagandet är en aning större nästa gång. Jag kan tillägga att vi fick en trevlig artikel publiserad i barometern.

RSS Facebook Pusha Bloggy TwitThis Google Digg

Imorgon drar KalmarCamp igång

Imorgon 1200 drar KalmarCamp igång för första gången. Inspirationen till det hela kommer från 24 Hour Buisness Camp. Vi ska alltså samlas kl 12 där vi ska utveckla en färdig tjänst på 24 timmar, blir lite av en utmaning.

Uppdateringar kommer ske under hela morgondagen, bland annat här på baronen, på jaiku men även på den officiella bloggen. Givetvis kommer också den blåa mössan vara på imorgon.

Liten fotnot, jag har precis installerat nya WordPress 2.7 BETA 3 och jag måste säga att jag är grymt nöjd. Hel remake på admingränsnittet och det känns verkligen fräscht.

Föregående Nästa