av .

The Heartbleed Bug

'The Heartbleed bug'

En stor brist i OpenSSL, som en stor del av alla servarna på internet använder sig av för att kryptera trafik, har upptäckts.

CVE-2014-0160 eller “the heartbleed bug” som buggen även kallas för, möjliggör att en hackare (eller rättare benämnt; crackare) kan läsa av minnet på målservern och på så sätt inte bara ha möjligheten att läsa av t.ex. e-postadresser och lösenord, utan även komma åt själva krypteringsnyckeln.

Att göra sig av med säkerhetshålet är tyvärr en ganska utdragen process, för att läsa den detaljerade versionen, gå till heartbleed.com – men på t.ex. askubuntu.com har flera användare lämnat väldigt hjälpsamma steg-för-steg guider.

Drabbade versioner av OpenSSL är alla versioner mellan 1.0.1 och 1.0.1f. För att se vilken version man kör kan man använda OpenSSL-prompten:

$ openssl
OpenSSL> version
OpenSSL 1.0.1 14 Mar 2012

Notera att t.ex. Ubuntu fortfarande visar 1.0.1 även efter uppdateringen, detta eftersom att de endast patchar ursprungsversionen.

Ett smidigt testverktyg för att se om din server är drabbad: filippo.io/Heartbleed.

Läs mer om buggen på heartbleed.com

av .

Ett par oumbärliga utvecklingsverktyg

När man bygger och utvecklar stora applikationer kan vara det vara svårt att få allting testat på rätt sätt, särskilt om man använder sig av en rad olika API:er. Här följer ett par verktyg som jag har haft mycket nytta av och har räddat mig otaliga gånger om.

Ultrahook

Ultrahook

Många API:er och webbtjänster förlitar sig på “webhooks” för att t.ex. hålla din egna data i synk med deras. Bl.a. Stripe (ex. ny kund, betalning genomförd) och CampaignMonitor (ex. ny prenumerant, prenumerant uppdaterat e-post) är två tjänster som använder sig mycket av den här tekniken som jag har jobbat mycket med.

Med Ultrahook kan man enkelt route:a så att deras hooks skickas till din lokala utvecklingsmiljö för att möjliggöra snabba tester.

ultrahook.com kan du läsa om hur man installerar och använder verktyget.

Mailtrap.io

Att slå av mailutskick när utvecklar lokalt (eller på t.ex. ens staging- eller utvecklingsserver) är en bra idé så att man inte öser ner kunder med diverse mailutskick. Men när man faktiskt vill testa så att mailen ser bra ut och levereras med rätt data? Mailtrap.io! Det är en enkel SMTP-tjänst (som är gratis) med inbyggt mailläsare och rubbet.

Med den kan du fortfarande “skicka” dina mail, bara det att de fastnar hos Mailtrap istället för att gå vidare till kund eller användare – och du kan snabbt kolla av innehållet så att det stämmer.

Virtualbox och Browserstack

Virtualbox är en enkel och snabb väg att installera Windows så att man kan köra de där obligatoriska testerna i Windows.

Browserstack

Browserstack är ett virtualiseringsverktyg för att testa ens produkt i alla möjliga webbläsare och operativsystem. Perfekt för snabba visuella tester – tyvärr så är det flash-baserat och att använda “developer tools” kan vara riktigt frustrerande i den relativt begränsade miljön.

Virtualbox är helt gratis (kräver Windows-licens, dock), medan Browserstack är $39 i månaden.

Xcode (med iOS simulatorn)

För att testa ens applikation på en mobil enhet.

Om man använder Homebrew (ett måste, läs bl.a. min guide) så kan man köra $ brew install ios-sim för att installera ios-sim för att sedan enkelt starta upp simulatorn för sig själv via terminalen

$ ios-sim start

CodeKit

CodeKit

Kanske inte så mycket med testning att göra – men likt riktigt användbart.

CodeKit har rad olika egenskaper, så som att konkatenera (första gången man skriver det på svenska…) och “lint:a” javascript-filer, kompilera LESS, komprimera bilder m.m.

Har även stöd för auto-reload i webbläsaren för de där småfixarna i CSS:en.

T.ex. Grunt.js är ett alternativ, men i det här fallet gillar jag att ha ett robust allt-i-ett verktyg som i alla fall hittils har klarat alla mina krav.

$29 kostar CodeKit just nu, väl spenderade pengar.

av .

Ny bloggplattform – krav

I lite drygt två har gått sedan jag lämnade Wordpress för det mycket trevliga verktyget secondcrack. Men redan efter cirka 100 inlägg så börjar plattformens tillkortakommanden ställa till besvär för mig.

Koden är illa underhållen (länk till GitHub-repot) och är alldeles för rörig för ödsla tid för att göra några större uppdateringar på egen hand (har redan lagt ner otaliga timmar för att få Google att ens kunna navigera webbplatsen), och DropBox för Linux (som jag använder för att publicera inläggen) är rejält buggigt emellanåt.

Jag har spanat runt efter nya plattformar och verktyg tidigare (tidigare skrivit om det lite här), och har bestämt mig för att jag tar och skriver en helt egen plattform istället.

“Men alla nya då? Det har ju kommit flera bra plattformar på sistonde, Ghost, Anchor CMS med flera?” säger du. Ja, absolut – och de är utmärkta för de allra flesta, men jag stöter alltid på hinder som hindrar mig från att kunna använda plattformen som jag vill.

Mina krav på plattformen är helt enkelt följande:

Snabbhet

Att få det så mycket snabbare än en flat file-plattform (som secondcrack är) är kanske inte vidare troligt, men med APC, Memcache och andra cache-verktyg så tror jag ändå att man kan komma mycket nära med en databasbaserad lösning.

Minimalistiskt

Inte bara designen och layouten jag pratar om här (om det ens blir en ny) – utan även att försöka få kodbasen så minimalistisk som möjligt. Eventuellt kommer jag använda mig av fristående komponenter, t.ex. FlightPHP.

Mer realistiskt så blir det förmodligen Laravel för projektet (mest p.g.a. tiden) dock – kanske inte direkt minimalistisk bas, men åtminstone någorlunda elegant.

Även antalet “features” ska försöka hållas till endast de som jag själv behöver.

Sökmotoroptimerad

När jag gick från Wordpress till secondcrack föll jag som en sten i sökresultaten. Efter mycket jobb är jag tillbaka – denna gången är det ett krav från start.

Remote publishing

Man ska kunna publicera inlägg utan att behöva vara inloggad på webbplatsen. Om detta ska hanteras via DropBox (helst inte), e-post eller annat vis återstår att se.

Markdown

Så klart.

Backup

Någon typ av koppling till DropBox eller liknande så att jag kan sova på nätterna.

Release

Senast 31:a maj.

Vad har ni för krav på en bra bloggplattform? Känner ni redan till ett “perfekt” verktyg? @olssonm är jag på Twitter.

av .

Facebook köper Oculus för $2 miljarder

Facebook verkar minst sagt vara inne i en fas där de spenderar pengar på allt; efter Instagram ($1 miljard), WhatsApp ($19 miljarder) så köper de nu Oculus för $2 miljarder.

Oculus är företaget bakom virtual reality plattformen/enheten “Oculus Rift”, som fick liv tack vare en mycket lyckad kampanj på Kickstarter där de drog in över $2,4 miljoner. De har sedan dess släppt två iterationer av sin prototyp som bl.a. spelutvecklare har haft tillgång till för att skapa nya spelupplevelser och applikationer.

Produkten har fått väldigt gott omdöme om de som har haft chansen att prova den, och flera andra företag ger sig nu in i samma område (Sony presenterade t.ex. Morpheus förra veckan).

Vad Facebook kommer att ha för nytta och användning av Oculus är ännu osäkert, men runt omkring i industrin så är det en hel oroligheter just nu, Marcus Persson (Notch, skaparen av Minecraft) skrev t.ex. på Twitter:

We were in talks about maybe bringing a version of Minecraft to Oculus. I just cancelled that deal. Facebook creeps me out.

Boing Boing skrev även de en något negativ text:

For decades, the idea of living inside a virtual reality has captivated developers’ imaginations.

[…]

But there’s always been a dark cloud over that endeavor: The possibility that these virtual worlds might become tainted or be misused. It’s a major concern, a warning regularly beaten into the minds of those who believed.

[…]

At long last, a hero emerged. Oculus made it possible to dip your head into the simplest of these worlds, to really feel like you had escaped our shared reality into another.

[…]

Suddenly, users were booting up and creating any virtual world they wanted, and that power made them think they might be able to influence the real world a bit. Hopes were high! Oculus seemed untouchable; the white knight of VR.

Well, fuck it. Facebook just bought the thing.

Får hoppas att Facebook förvaltar Oculus väl, och låter plattformen även fortsättningsvis att vara öppen för utvecklare.

av .

Det där med Google+

I februari hade jag tänkt att ge Google Plus en chans, med “chans” menar jag att jag i alla fall hade tänkt att utforska denna outforskade och icke kartlagda plats av internet. Det gick sådär.

Det började bra, en Christian Andersson skrev om mitt “projekt” och jag blev genast tillagd i en rad cirklar, och lade till lika många i mina egna. Men det var egentligen här mina problem med Google Plus började.

Idag så använder jag sociala medier som de flesta övriga; Facebook har jag mestadels helt privat med dem jag verkligen känner. På Twitter är jag i min lilla “tech-bubbla” och LinkedIn för jobbrelaterade saker. Var Google Plus är tänkt att platsa in är lite av en gåta. Tidigare så kollade jag in sporadiskt då jag följer företag och personer som TNW, SpaceX, Google Developers, Guy Kawasaki m.fl. som postar relativt frekvent.

De dussintals personerna som jag nu blev “cirklade” av på Google Plus använde platformen för något helt annat, som ett substitut till Facebook. Inget fel med det alls, “what ever floats your boat” som man brukar säga. Men för mig blir det helt fel när bilder på (i det här fallet) okända personers barn blandas med Googles senaste uppdatering för Analytics och Curiositys bilder från Mars.

“Men är inte det här ett problem på Twitter med?” Ja, på Twitter händer det självklart att folk även där postar saker som jag kanske är mindre intresserad av, eller aldrig ens vill se. Men på 140 tecken påverkar det ens upplevelse på plattformen väldigt lite, till skillnad från Google Plus där innehåll är gjort för att ta så mycket plats som möjligt – man har helt enkelt inte en chans att undkomma det icke-relevanta.

Nej, Google Plus blev inget för mig. Många bra och smarta funktioner till trots. Kul att se att det finns ett väldigt aktivt community där med svenskar som faktiskt använder det istället för Facebook dock.

av .

ProHockeyIQ tar nu emot medlemmar

Nu är OS över för den här gången (inget guld till Tre Kronor…) – men hockey blir det ett bra tag till.

De senaste veckorna har vi på ProHockeyIQ jobbar nästintill dygnet runt för att få i ordning på alla detaljerna som möjliggör en lanseringen – och nu är vi där.

Exempel på den publika delen av profilen: prohockeyiq.com/view/player/1

Från och med idag, den 24:e februari, så kan hockeyspelare registrera sig – och snart även hockeylag. Registrerar man sig innan den sista mars så är dessutom medlemspris endast $8 USD för det första året (90% av det fulla priset). Känner du någon hockeyspelare som vill ta nästa steg i sin karriär så är det bara att dela vidare.

Läs mitt tidigare inlägg om ProHockeyIQ-projektet.

av .

Test för februari – ge Google+ en chans

Google Plus har funnits väldigt länge nu (sedan juni 2011 enligt Wikipedia), och jag har funnits där i alla fall sedan mars 2012 (första inlägget med min nuvarande profil). Men alltid när jag kikar runt där så är det en synnerligen död och dyster plats.

Men, hittills har jag knappast hjälpt till att bidra till att gör det till ett bra nätverk, så jag tänkte att under februari månad ska jag i alla fall göra ett försök. Exakt hur det här försöket ska se ut är jag ännu något osäker på – det är ju så fruktansvärt få som skriver något (och då följer jag ändå 150+ personer).

Det hela är ganska synd egentligen, då Google+ i mitt tycke är en riktigt bra och stabil plattform med många smarta funktioner som man önskar att t.ex. Facebook hade, så som t.ex. de smarta cirklarna.

Tog även tag i att fixa en “dela”-länk till Google+ för enklare delning, enligt precis samma metod som jag har gjort för Facebook och Twitter (utan plugins, SDK:er eller andra onödiga bibliotek).

Har du några Google Plus-tips att dela med dig av? @olssonm är jag på Twitter +MarcusOlsson-me är jag på Google+ (hur de “lottade” ut vanity-URL:erna var för övrigt helt värdelöst).

av .

Intro till Redbean

Redbean PHP

Om man utveckla en mini-applikation snabbt, och vill slippa att behöva sätta upp allt för avancerad logik för dina modeller – då brukar man kanske använda sig av ett ORM (Object Relation Mapper) för att underlätta och snabba upp saker och ting lite. Vare sig det är det inbyggda i sitt ramverk (Eloquent i Laravel t.ex.), Doctrine eller kanske phpActiveRecord (som jag har skrivit om tidigare).

Men nyligen – för ett litet projekt som jag genomförde åt en kund – började jag titta på Redbean som visade sig vara ett fantastiskt litet verktyg som gör det flygande enkelt och snabbt (kanske lite väl enkelt) att jobba mot databasen.

Innan du läser vidare och funderar på att använda det i produktion – ha i åtanke på att användarbasen för Redbean är relativt liten, och har endast en enda aktiv utvecklare – så dokumentation är bristfällig på sina platser. Dessutom är Redbean som sagt nästan för enkel att jobba med då den hanterar väldigt mycket på automatik och antar hur du vill ha strukturen i din databas, du kommer att råka ut för underliga saker under utvecklingen.

Med den varningen, välkommen till PHP-världens (kanske) enklaste ORM.

Varför Redbean?

Redbean är ett litet bibliotek som endast upptar en enda fil (i alla fall om man laddar ner “all in one pack”), och som kräver nästintill noll konfiguration. Perfekt för små snabba projekt där du vill ha resultat direkt.

Att komma igång

Ladda ner Redbean från redbeanphp.com, eller klona det från Github (eller för all del, använd Composer).

För att sätta upp:

<?php
require_once('rb.php');
R::setup('mysql:host=localhost;dbname=' . DB_NAME, DB_USER, DB_PASSWORD);

Och du är igång!

Objekt och relationer i Redbean

Låt oss anta att vi har ett gäng elever i en skola. Eleverna går i en klass, och klassen har flera lärare. Lärarna har i sin tur flera klasser. I “vanliga” fall skulle vi behöva tänka ut något smart sätt att sätta upp de här relationerna, men Redbean skapar dessa åt oss i bara farten.

Låt oss börja med skolan:

<?php
$school = R::dispense('school');
$school->name = 'Jedi Academy';
$school->city = 'Coruscant';
R::store($school);

Vad gjorde vi där egentligen? Vi skapade ett skolobjekt, lade till attribut och sparade den. Kolla efter i din databas, tabellen “school” är skapad, och i den hittar vi…

id  name            city
1   Jedi Academy    Coruscant

Så enkelt var det.

Nu vill vi ha ett par elever och en klass:

<?php
// Skapa två elever
list($s1, $s2) = R::dispense('student', 2);
$s1->name = 'Anakin Solo';
$s1->age = 11;
$s2->name = 'Ben Skywalker';
$s2->age = 11;
R::store($s1);
R::store($s2);

// Klass
$class = R::dispense('class');
$class->name = '4B';

// Länka ihop elever med klass
$class->ownStudent[] = $s1;
$class->ownStudent[] = $s2;

R::store($class);

Inspekterar du tabellen “student” i databasen nu så ser du att det har lagts till en foreign key, class_id som pekar på rätt klass.

Men nu till det riktigt roliga, “n:n” (many-to-many) relationer. Som vi tidigare har sagt så ska läraren kunna ha flera klasser, och en klass ska kunna ha flera lärare.

<?php
// Skapa lärare
$teacher = R::dispense('teacher');
$teacher->name = 'Luke Skywalker';
R::store($teacher);

// Ladda klass där id = 1
$class = R::load('class', 1);
// Länka ihop klass och lärare
$class->sharedTeacher[] = $teacher;
R::store($class);

Du börjar säkert förstå vad du kan förvänta dig nu; Redbean har skapat en “pivot table” i databsen åt oss; class_teacher.

Men hur kan vi t.ex. hämta data på se vilka klasser som en viss lärare undervisar? Så enkelt som:

<?php
$teacher = R::load('teacher', 1);
$classes = $teacher->sharedClass;
foreach($classes as $class) {
    echo $class->name;
}

// 4B

Busenkelt.

Redbean och SQL

Traditionella sökningar med vilkor gör man med hjälp av SQL, med PDO-syntax:en. T.ex. för att hitta klassen “4B” om vi inte känner till dess ID:

<?php
$class = R::find('class', 'name = ?', array(
    '4B'
));

Även funktionen R::findOne() kan användas om man endast vill ha/förväntar sig en rad.

LIMIT”, “ORDER BY” och andra direktiv kan man slänga in där precis som man förväntar sig:

<?php
$class = R::find('class', 'name = ? ORDER BY name ASC LIMIT ?', array(
    $name,
    $limit
));

Modeller

Om man vill kan man också använda sig av modeller tillsammans med Redbean. Kanske vill man att varje gång man skapar ett inägg i databasen så ska fältet created_at skapas och sätta en timestamp:

<?php
class Model_class extends RedBean_SimpleModel {
    public function update() {
        $this->created_at = date("Y-m-d H:i:s");
    }
}

Som du ser så kan man ganska enkelt lägga in valideringen direkt i modellen också via update() metoden.

Det “farliga” med Redbean

Jag nämnde i början att Redbean kanske inte lämpar sig för alla tillfällen. Anta att du vill lagra siffror i en tabell. En double kanske lämpar sig bäst för valutor:

<?php
$number = R::dispense('number');
$number->value = 199.99;
R::store($number);

Redbean ser till så att det blir just datatypen double för fältet. Men anta att man “råkar” försöka lagra ett par bokstäver i samma tabell:

<?php
$number = R::dispense('number');
$number->value = 'hej';
R::store($number);

Nu blir fältet till varchar istället. Kanske inte alltid optimalt.

När man utvecklar med Redbean rekomenderar jag starkt att man ofta använder R::nuke(); (gissa vad den gör..?) för att hålla strukturen optimal, för att därefter när man är nöjd med sitt schema använda sig av R::freeze(true); vilket fryser strukturen på databasen.

En annan sak att tänka på är att Redbean alltid kommer att vilja ha namnet id som primary key. Tidigare versioner erbjöd sätt att komma runt det (< 3.0) för att bättre stödja schemas som inte skapats via ORM:et, men plockades bort för att göra Redbean snabbare och mer effektivt. Så förvänta dig en del meckande om du vill använda Redbean med en tidigare databas som kör på sina egna standarder.

Källkoden för den här artikeln finns på GitHub.

Vad tycker du om Redbean? Ett bra eller dåligt sätt att utveckla på? Synpunkter på artikeln? Du hittar mig på Twitter; @olssonm.

av .

Macintosh fyller 30

Apples Macintosh fyller idag den 24 januari 30 år. Ingen dålig ålder för en produktlinje (även om Apple förvisso kallar den kort och gott för “Mac” numera).

För att fira har Apple även publicerat en riktigt fin sida på Apple.com med både filmer, bilder och texter om historien om Macintosh.

Apple Macintosh Bild via @pschiller / Apple

av .

Kimono – skrapning av data, den enkla vägen

Alla som jobbar inom webbutveckling har någon gång varit tvungen att hämta datan från någon annan webbplats, som olyckligt nog inte erbjuder något API. Simple HTML DOM, XPath och andra verktyg är de man brukar förlita sig på, men så många gånger man har önskat att själva skrapningen skulle kunna förenklas.

Det är precis vad Kimono gör.

Kimono är ett verktyg som dels låter en skapa ett API av vilken webbsida som helst (jupp, du läste rätt), och som dessutom med ett väldigt enkelt interface låter dig markera vilken data som ska skrapas, inget mer jobbigt letanda i nestlade <td>-taggar!

Fantastisk produkt, älskar den redan innan jag ens har hunnit bygga något riktigt med hjälp av den. De har en öppen beta just nu där man kan testa tjänsten gratis, och priserna är dessutom vettiga om man behöver bygga större applikationer.

av .

Sätt upp din utvecklingsmiljö för PHP-utveckling med Homebrew

Homebrew är en “package manager” för OS X som gör det snabbt och enkelt att installera all den mjukvaran du kan tänkas behöva. Eller som de själva så bra skriver:

Homebrew installs the stuff you need that Apple didn’t.

Bland fördelarna med Homebrew är att att allting installeras och placeras på en och samma plats, vilket gör det enklare att uppdatera och avinstallera moduler i framtiden – man slipper helt enkelt leta runt överallt i OS:et för hitta var man har placerat alla ens filer.

En annan fördel är att man skapa skapa “brew formulas” som kan installera flera olika moduler samtidigt, om så skulle behövas (t.ex. om man ska installera PHP, och behöver mcrypt).

Här ska vi gå igenom att sätta upp en komplett utvecklingsmiljö för PHP, där man bl.a. enkelt kan installera och köra Wordpress, Laraval eller vad som helst man kan tänkas vilja utveckla. MySQL kommer behövas, Composer likaså, och så vill vi så klart ha en bra struktur för alla våra projekt med hjälp av vhosts och annat.

Den här guiden innehåller delar som är självklara för många, men jag ville ändå göra den så grundläggande som möjligt.

Installera Homebrew

Steg 1 är så klart att få in Homebrew i vårt system, det gör man så enkelt som:

$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Som svar bör du få något i stil med:

==> This script will install:
/usr/local/bin/brew
/usr/local/Library/...
/usr/local/share/man/man1/brew.1

Press ENTER to continue or any other key to abort

Beroende på vilka “dependencies” du redan har installerade så kan du vara tvungen att gå igenom ett par extra steg, t.ex. så kommer Command Line Tools från Apple att behövas. Dock så behöver du inte installera hela XCode om du inte så önskar.

Hela installationen bör endast ta 1-5 minuter.

När installationen är färdig ber den dig att köra brew doctor, så gör det – den ser bara efter så att alla filerna är installerade som de ska.

Installera MySQL

Att installera MySQL med Homebrew är enkelt:

$ brew install mysql

Nu kan du starta MySQL med:

$ mysql.server start

Standarduppgifter för inloggning till din MySQL-server är host: localhost och user: root. Lösenordet kan du lämna blankt.

Installera PHP

Den formeln” vi kommer att använda oss av denna på Github. Först behöver vi med lite dependencies som den formeln använder sig av:

$ brew tap homebrew/dupes

När det väl är klart ska vi in med själva PHP:

$ brew tap josegonzalez/homebrew-php

Nu är det lite upp till var och en vad man har för krav, för med kommandot $ brew options php55 så får man en hel lista med alternativ. Stöd för Apache och MySQL ingår i grundinstallation (vill man absolut inte ha med dem kan man ta med t.ex. --without-mysql), så vi kör utan några extra parametrar.

$ brew install php55

Nu kommer en rad av olika saker att installeras, allting som behövs för att kompilera och installera PHP (I skrivande stund 5.5.8). Allt som allt tar det cirka 5-10 minuter.

OBS! Beroende på om du kör OS X 10.8 eller 10.9 så kan diverse fel uppstå. På Github-sidan för PHP-formeln listas en del av de vanligt förekommande problemen. På OS X 10.9.1 kunde jag installera allting helt utan problem, men på ett annat system som körde 10.8.5 så fick jag gå igenom ett par extra steg. Här är som alltid Google din vän.

Apache, httpd.conf, vhosts.conf och annat

Apache är inbyggt i OS X, och den fungerar gott och väl att köra på. För att starta upp Apache så är det bara att köra kommandot:

$ sudo apachectl -k start

Och för att starta om (något man kommer att göra ofta när man ändrar konfigurationsfiler):

$ sudo apachectl -k restart

Om du får felmeddelandet “httpd: Could not reliably determine the server’s fully quilified domain name […]” – öppna httpd.conf i /private/etc/apache2/ och sätt serverName till 127.0.0.1.

Vi vill också använda vår nyinstallerade PHP-modul, så lägg även till:

LoadModule php5_module /usr/local/opt/php55/libexec/apache2/libphp5.so

Hur som, det är i /etc/apache2/extra/httpd-vhosts.conf som vi vill ändra, så att vi kan tala om var vi vill att localhost ska peka, och kan t.ex. sätta upp “utvecklingsdomäner” så som projekt.dev.

Först, localhost:

<VirtualHost *:80>
   DocumentRoot "/Users/marcus/Dev"
   <Directory "/Users/marcus/Dev">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>
</VirtualHost>

Jag kör kort och gott med en Dev-mapp i mitt “home directory”.

I den här Dev-mappen så skapar jag en undermapp för varje projekt. Nyligen så programmerade jag t.ex. lite för VehoBil.se, då använde jag:

<VirtualHost *:80>
   DocumentRoot "/Users/marcus/Dev/vehobil.se/"
   ServerName vehobil.dev
   <Directory "/Users/marcus/Dev/vehobil.se/">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>
</VirtualHost>

Lägger du till en utvecklingsdomän, behöver du öppna upp din hosts-fil (/private/etc/hosts) och tala om att den ska gå till din Apache-server:

127.0.0.1   vehobil.dev

Startar du om Apache och går till vehobil.dev/ så kommer du nu att hamna rätt.

I php.ini finns säkerligen en hel inställningar som man vill ändra på också; den hittar man i /usr/local/etc/php/5.5/.

Övrigt

Nu finns det så klart en massa saker man kan göra för att få en miljö som passar ens arbete och arbetssätt på bästa vis. Men vi vill i alla fall ha Composer, för att enkelt hantera alla dependencies för våra projekt, och för att jobba med t.ex. Laravel:

$ brew install composer

Det fina här är att Composer lägger sig globalt, så inget mer av att ladda ner per projekt och köra php composer.phar.

Vi vill också så klart ha ett GUI för MySQL. phpMyAdmin kan man såklart installera om man så önskar, men jag föredrar Sequel Pro för alla mina projekt. Gratis och bra.

För att ansluta till ens lokala MySQL server så behöver man bara fyll i uppgifterna:

'Sequel Pro MySQL Homebrew'

Till sist…

… En liten snabbguide till var alla viktiga filer finns. Tar alltid ett tag att lägga på minnet:

php.ini:            /usr/local/etc/php/5.5/php.ini
httpd.conf:         /private/etc/apache2/httpd.conf
httpd-vhosts.conf:  /etc/apache2/extra/httpd-vhosts.conf
hosts:              /private/etc/hosts

Och användbara kommandon:

$ mysql.server start/stop/restart
$ sudo apachectl -k start/stop/restart

kommentarer är varmt välkomna, @olssonm är jag på Twitter.

av .

ProHockeyIQ

Äntligen dags att presentera ett projekt som jag har jobbat på under en längre tid nu med en skara mycket duktiga människor.

ProHockeyIQ är en plattform där hockeyspelare och hockeylag kommer att kunna hitta varandra – tänk er ett match.com eller LinkedIn endast för hockeyspelare och hockeylag.

Plattformen kommer att fylla en viktig funktion, då det idag är bevisat svårt för spelare att komma i kontakt med lag – och likaså för lag att hitta spelare, särskilt då spelare från utlandet.

Idag lanserade vi en enkel landningssida för att mer i detalj pejla intresset för applikationen, samt sprida information via det brukliga Twitter, Facebook och blogg.

Skarp lansering kommer att ske senare under våren.

Kommer även förhoppningsvis i framtiden kunna skriva lite om tekniker och andra lösningar som vi använder oss utav.

av .

Google Trends: Wordpress vs. Joomla vs. Drupal

Inte för att Google Trends nödvändigtvis måste visa på en korrelation för den här typen av data, men även med en viss felmarginal är det intressant om hur pass mycket mark Wordpress fortfarande vinner gentemot de största konkurrenterna.

Wordpress vs. Joomla vs. Drupal

Interaktiv graf.

av .

Årets mest lästa inlägg – 2013

I slutet av året är det alltid kul att titta tillbaka och summera allting som har skett under året. Har blivit en liten tradition för mig att gå igenom statistik från Google Analytics och se efter vad folk faktiskt läste på min webbplats under året, för att sedan summera det i ett eget inlägg.

Framsidan (där jag faktiskt skriver ut de senaste 10 artiklarna i sin helhet) är inte med, trots att det är den överlägset mest besökta delen av min webbplats. Likaså undersidorna, så som /projekt.

1 – Främlingsfientliga avslöjas via hashningen hos Disqus

Det här inlägget publicerades så sent i mitten av december i samband med Researchgruppens och Expressens artiklar kring Avpixlat – men lyckades ändå bli det mest lästa inlägget under hela året. Och under de första 12 timmarna var hela 2300 unika läsare som läste inlägget.

2 – iPad tips – Läs pdf-filer i iBooks, utan iTunes

Gammalt inlägg från 2010 (snart fyra år sedan!) som har en cirka 20-40 besökare om dagen via Google – om hur man med hjälp av Dropbox kan synka PDF:er till sin iPad.

3 – Staten säljer dina personuppgifter

Inlägg från mitten av 2012 där jag skriver om SPAR, PAR, MIA och andra företag som tjänar sitt leverne på att sälja data om dig.

4 – MailCom Europe AB trampar i klaveret

Om hur MailCom betedde sig riktigt illa och hotade med stämning emot en person som hade mottagit spam från dem och skrev om det.

5 – Jag startar eget

Mitt inlägg om mitt beslut om att starta upp min egna verksamhet.

6 – Hemsida eller webbsida

Något som väldigt många säger fel om – det finns nästan ingenting som heter “hemsida”, så använd inte ens ordet.

7 – Kom runt SVDs paywall – för sista gången

Jag publicerade kod som möjliggjorde en att kringgå SVDs betalvägg. Har både via mail och via Twitter talat med dem om hur dålig deras implementation är, och att de bör tänka om. Inget gehör hittills.

Vore för övrigt kul att se vilka effekter betalväggen har på antalet läsare och liknande egentligen.

8 – CloudFlare – värt att använda?

En snabbgenomgång om vad CloudFlare är, och hur det kan användas för att snabba upp ens webbplats. Jag diskuterade även ett par av nackdelarna.

9 – Ett bra exempel på en dålig artikel

Att svenska journalister ofta ter sig lata, och inte gör sin research är tyvärr inget sällsynt fenomen. Här skriver jag om en särskild “nyhet” som fick mig att se rött.

10 – Idiotin med Copyswede fortsätter

Ja, vad ska man säga? Copyswede verkar komma undan med det mesta.

av .

Nya Mac Pro finns nu att köpa

'Mac Pro 2013'

Nya Mac Pro finns nu tillgänglig att köpa från Apple Store.

Priserna ligger förmodligen en bra bitt norr om vad de flesta är bekväma att betala för en dator; basmodellen börjar på 27995kr och ger dig då en 3,7GHz Intel Xeon E-5 processor med fyra kärnor, 12GB RAM, dubbla AMD FirePro D500-grafikkort på 3GB, samt en 256GB SSD-disk.

Men som vanligt kan man konfigurera den in absurdum, med den dyrare modellen (baspris 36995kr) kan man komma upp i smått otroliga 86275kr, utan tillbehör. Då får man förvisso en 2,7 GHz E-5 processor med tolv kärnor, 64GB RAM (4st 16GB moduler) samt en SSD-disk på 1TB och dubbla AMD FirePro 700-grafikkort.

Och så är det ju väldigt fin att titta på, och så liten. Apple själva hävdar dessutom att den har ungefär samma ljudnivå som en Mac Mini – vilket är imponerande (men sen igen, den enda mekaniska delen i hela datorn är fläkten).

Hur prestandan kommer att vara är det många som spekulerar i; många visade missnöje i veckan när det började dyka upp resultat hos Geekbench för vad man antar är den slutgiltliga produken (här är den jämfört med 2010 års modell). Men att en uppgradering vad på tiden, minst sagt. Senaste gången Mac Pro fick se en större uppgradering var i juli 2010.

Via Tim Cook

av .

Duo – webbläsaren för responsiv webbutveckling

Duo från Electric Pulp är en ny app för OS X där man enkelt kan testa sina webbsidor både i “vanligt” och “responsivt” läge samtidigt.

'DuoApp'

Enkelt sagt är det två instanser av Safari (eller rättare sagt WebKit) som körs parallellt i en varsin panel. Det fina är att panelerna följer varandra vid klick och att man köra Web Inspector samtidigt för varje panel.

Appen är mycket enkelt – inga inställningsalternativ alls att prata om, så när som att man kan förstora den större panelen. Jag saknar dock möjligheten att köra den mindre panelen med förinställda viewport-inställningar för olika enheter – nu är den i fast statisk storlek med 320px bredd.

38kr kostar appen i App Store, inte mycket pengar för att i alla fall testa – kan tänka mig att appen kan potentiellt spara tid åt en hel del utvecklare.

av .

Främlingsfientliga avslöjas via hashningen hos Disqus

Uppdaterat 11 dec 2013: Disqus har via en hjälptext förklarat att de inte har blivit hackade, men har insett svagheten i att MD5-hasha användarnas e-postadresser och har plockat bort funktionen att hämta ut dem via API:et. Orginalinlägget för den ursprungliga metoden följer här nedanför.

Idag släppte Expressen en serie artiklar där de konfronterar anonyma kommentatorer på den främlingsfientliga sajten Avpixlat. Underlag för avslöjanden har de fått via Researchgruppen, som ännu inte har publicerat exakta detaljer hur de har kopplat ihop kommentatorerna med användarnas e-postadresser, men strax efter publiceringarna visade David Remahl (@chmod007) på Twitter hur Researchgruppen kan gått tillväga.

Med det här inlägget vill jag endast förtydliga tekniken lite bakom, då somliga verkar tro att det rör sig om ett avancerat hack (läs “crack”) eller dataintrång. Det förstnämnda är det definitivt inte, ett dataintrång där emot – det antar jag att de lagkunniga diskutera vidare om, i mitt tycke är det dock fritt tillgänglig data som har används på ett smart sätt.

Jag tar inte heller något cred för att ha hittat den här metoden, all den går till (@chmod007).

Disqus som plattform

Disqus är en plattform som man kan koppla ihop med sin webbsida för att tillåta besökarna att lämna kommentarer på ens artiklar. Det fina med Disqus är att det tillåter användarna att använda samma konto till alla webbplatser som använder sig av tjänsten.

Tjänsten är populär då den delvis är enkel att implementera, och används ofta på diverse nyhetssajter då man kan vara delvis (i alla fall till synes) anonym.

Disqus API

Disqus erbjuder ett API (Application Programming Interface) som möjliggör att webbutvecklare och programmerare kan bygga egna funktioner och applikationer med data från Disqus – enkelt förklarat.

Vem som helt kan registrera sig hos Disqus för att få ut en API-nyckel som krävs för att komma åt datan från deras plattform.

Hashing, MD5

Hashing (hashning eller vad man än väljer att kalla det för) en typ av envägkryptering, en textträng kan hashas till en tillsynes unik sträng (inte helt sant, men oviktigt här) – men den unika strängen kan inte konverteras tillbaka till den ursprungliga strängen. Det är på detta vis lösenord ska lagras i databaser (men som vi ofta ser i nyheterna att de inte är).

MD5 är en typ av hashningsalgoritm, som sedan länge (ända sedan 2008) anses trasig av många olika anledningar – det är dock också relativt oviktigt här, då samma svaghet skulle visa sig med andra algoritmer. Det är i alla fall med just MD5 som Disqus hashar användarnas e-postadresser.

För den som är mer intresserad av hashing och särskilt MD5 kan jag rekommendera Wikipedia-artiklarna om Hashing function samt om MD5.

Få ut en e-postadress ur Disqus-API:et

För att hämta ut en användares (hashade) e-postadress ifrån Disqus är enkelt, ett anrop kan se ut på följande vis:

https://disqus.com/api/3.0/users/details.json?user=username:username&api_secret=apiKey

Svaret man får är i JSON, och kan se ut så här:

{
    "code": 0,
    "response": {
        "name": "Marcus Olsson",
        "emailHash": "98709a12227745dcdf96d7b3b2034c32",
        "connections": {
            "twitter": {
                "url": "http://twitter.com/olssonm",
                "name": "Marcus Olsson"
            }
        },
        "reputation": 1.345504,
        "location": "Sweden",
        "numLikesReceived": 237,
        "isAnonymous": false,
    }
}

I det här svaret (som är något förkortat) finns det en rad parametrar som en utvecklare kan använda – den vi tittar särskilt intressant på är “emailHash” – detta är då användarens e-postadress, hashad med MD5-algoritmen.

Hur Researchgruppen kan ha jobbat

Då hashen i sig är ganska oanvändbar, så länge den inte ligger i någon MD5-databas över vanligt förekommande hashningar (ett exempel är den här: md5.gromweb.com), som jag faktiskt hittade några av de avslöjades e-postadresser i (märkligt nog), så behöver man bygga en egen databas.

Om Researchgruppens mål har varit att avslöja just SD-politiker och andra främlingfientliga så har de med största sannolikhet byggt upp sin egna databas med MD5-hasher via e-postadresser som de har skrapat och samlat in från nätet där man publikt kan hitta e-postadresser till flera SD-politiker och SD-annhängare. Därefter skulle de väldigt snabbt kunna korrelera kommentatorers e-postadresser mot sin egna databas. Det hela är väldigt enkelt och skulle förmodligen inte ta mer än ett par timmar för en duktig programmerare att genomföra.

Följderna

Disqus har i sig själva inte gjort något fel – många system är byggda på samma sätt, med samma potentiella svagheter. Förmodligen har de inte sett att en körning mot förhashade e-postadresser sågs trolig nog. Eller att de helt enkelt ansåg att kommentatorerna var “tillräckligt anonyma”.

Jag har redan sett flera ropa “Säkerhetsläcka!” och “Dataintrång!” – men så är inte fallet. Jag har t.o.m. sett dem som har hävdat att Disqus själva har tillkännagivit dataintrång – vilket det inte finns någon tillgänglig information om i nuläget.

Researchgruppen kan mycket väl ha använt en helt annan metod (de faktiskt kanske har lyckats hacka t.ex. en moderators konto?) – men det här verkar mest trolig. De verkar vara duktiga på det de gör, och hoppas på att de är försiktiga med att dra förhastade slutsatser. Disqus kan potentiellt vara ett helt anonymt system om en webbplats tillåter sina användare att kommentera med gästkonton, där man kan ange vilken e-postadress som helst – vilket i sin tur kan innebära att fel personer “avslöjas”.

Kommentarer eller rättelser? @olssonm är jag på Twitter.

Igen, stort eloge till @chmod007 som uppmärksammade den här metoden.