Too scared to write a line of code ∞
Känner igen mig i mångt och mycket, sitter på tok för länge och går igenom best practises och nya, smartare och bättre tillvägagångssätt – istället för att faktiskt bara sätta mig ner och koda.
Känner igen mig i mångt och mycket, sitter på tok för länge och går igenom best practises och nya, smartare och bättre tillvägagångssätt – istället för att faktiskt bara sätta mig ner och koda.
En fantastisk samling av visuella illusioner, eller “anomalous motion illusion” som Akiyoshi själv kallar dem för.
Via: Hacker News
Tredje gången gilt. Börjar bli en rolig tradition det här med att komma runt SVDs betalvägg. Nu har de börjar slänga in flera olika funktioner med snarlika namn och lite annat roligt trixande – ingen mer for-loop då alltså.
Istället så spinner vi vidare på det reguljära uttrycket (tack igen, @Wibron!), och laddar in en extern fil – så slipper man uppdatera det där bokmärket om och om igen. Filen ligger på GitHub – kom gärna med en “pull-request” om ni upptäcker att mönstret har ändrats eller om ni vill förbättra den.
Lär i alla fall fungera fram tills att SVD gör allt för stora ändringar.
Och som vanligt, ett bokmärke (dra och släpp länken till bokmärkesfältet): Läs artikel.
Notera att detta är mest som en rolig sak, garanterar inte alls att det här fungerar för alltid. Och är du en frekvent SVD-besökare som absolut inte vill ha något med betalväggen att göra, då är det bästa alternativet att rensa alla kakor för webbplatsen.
Idéer på hur man gör det här på ett bättre och/eller mer effektivt sätt? @olssonm heter jag på Twitter.

Uppdaterad 17/5 2013: Än en gång har SVD ändrat i sin betalvägg. För den allra nyaste, och förhoppningsvis sista, metoden för att komma runt betalväggen, läs Kom runt SVDs paywall – för sista gången.
Svenska Dagbladet verkar visst ha fixat sin betalvägg något (som var lite väl vek, som jag skrev om senast), nu kan man inte längre komma runt den genom att endast köra:
svd_pw_close();
Nu har de börjat trixa med en slumpmässig sträng som läggs till i funktionen, så nu ser den ut på följande sätt:
svd_pw_close_298718();
Det blir ju lite krångligare nu när det finns ett slumpmässigt element inblandat; strängen slumpas t.o.m. mellan sidladdningar (alltså inte beroende av någon cookie som man kan läsa av eller liknande).
Hur löser vi det här nu då? Då strängen slumpas, så kan vi så klart gå igenom varje möjlig variant (som tur är består strängen endast av siffror, för stunden):
for (var i = 999999; i >= 0; i--) {
if(typeof(window['svd_pw_close_' + i]) == 'function') {
window['svd_pw_close_' + i]();
}
};
Här har du ett smidigt bokmärke som du kan använda (dra och släpp i bokmärkesfältet): Läs artikel
En annan variant är att köra hela innehållet i svd_pw_close_xxx();, alltså:
jQuery(window).unbind("scroll", svd_pw_prev_scr);
jQuery("#page").css("height", "auto");
jQuery(".svd_pw_alert_box").animate({
top: -500,
}, 500, function () {
jQuery("#svd_pw_alert").hide();
jQuery("#svd_pw_curtain").hide();
jQuery("body").removeClass("svd_pw_freeze");
});
Även till denna får du ett trevligt litet bokmärke: Läs artikel
Sist men inte minst, man kan även rensa alla cookies för domänen. Se t.ex. det här bokmärket från en på Stackoverflow.
Mycket bättre SVD! Men lite till kan ni allt. Men tyvärr så kommer betalväggen förmodligen alltid att kunna kringgås så länge som det förlitas på javascript på klienten.
Uppdaterad 13/5 2013: Patrik Wibron (@wibron) var snäll nog att dela med sig av en kodsnutt som är betydligt mer effektiv (och snyggare) än den gamla for-loop:en här ovanför:
for (d in window) {
var r = /svd_pw_close\d/i,
method = d.match(r);
if (method) window[d]();
}
Även den får ett behändigt bokmärke: Läs artikel.

Uppdaterad 17/5 2013: Än en gång har SVD ändrat i sin betalvägg. För den allra nyaste, och förhoppningsvis sista, metoden för att komma runt betalväggen, läs Kom runt SVDs paywall – för sista gången.
Uppdaterad 13/5 2013: SVD var ganska snabba med att lappa igen de värsta hålen, så den här artikeln är numera utdaterad. För en nyare version, läs: Kom runt SVDs paywall – igen.
Idag så började SVD använda sig om en så kallad “paywall”. Man får läsa ett visst antal artiklar per dag, sedan så får man hosta upp med 15:- per dag därefter.
Att göra det i alla fall lite svårt för användarna att komma runt den här “betalväggen” verkar dock inte ha varit en särskilt stor prioritet. Bara att köra funktionen svd_pw_close(); och läsa vidare artikeln (pw som i paywall antar jag).
Här har du också ett smidigt bokmärke som du kan använda (dra och släpp länken i bokmärkesraden): Läs artikel.
Man kan också skriva följande direkt i adressfältet:
javascript:svd_pw_close();
Brukar för övrigt gilla utvecklarna på SVD, driver en väldigt intressant utvecklingsblogg – och har för det mesta en väldigt bra webbplats. Detta var lite sämre genomfört dock.
För modiga Linux-användare:
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf / || echo *Click*
Bör absolut inte provas på OS X…
Via Stackoverflow
Kartor och kartografi är alltid roligt, och inga gör det snyggare än MapBox. Här om dagen hittade jag dessutom ett open source-verktyg som de utvecklar – TileMill – som en enkel och klar syntax möjliggör skapandet av otroligt fina interaktiva kartor.

Verktyget är som sagt open source (och gratis), och finns till OS X, Linux och Windows. Ett tips är att spana in exempelprojekten som följer med för att snabbt komma igång.
Idag var det min tur att råka ut för Radiotjänsts, och därmed Public Service:s, fullständigt ologiska indrivning av folks pengar.
Man kan knappast ha missat nyheterna den senaste tiden att alla som har tillgång till internet och en dator eller ska numera betala tv-avgift tack vare att SVT sänder sina tablålagda program via internet.
Detta är givetvis helt vansinnigt – bara för att man har möjligheten att använda något, så ska man självfallet inte behöva betala för det. Detta är precis lika logiskt som att en biluthyrningsfirma skickar en faktura för att man har möjligheten att hyra en bil hos dem – om du brukar den möjligheten eller inte spelar ingen roll.
Radiotjänst ABs och hela Public Service är en relik från en svunnen tid som vi snart får hoppas dör ut. Jag vill i alla fall lika motvilligt finansiera melodifestivalen och andra hobbyprojekt från Eva Hamilton & Co. som jag vill hyra en bil.
Binero som marknadsför sig som “Sveriges vänligaste webbhotell” har länge haft sina brister. Jag skrev om flera av dem redan i början av 2012 (Binero – från hero till zero), men först nu verkar de ta sina egna brister på allvar.
Tidigare i veckan så drabbades många av deras (inklusive mig, som av ren lathet inte har orkat flytta ett par av mina mindre viktiga sajter – t.ex. NamnAPI) av diverse problem. Kundernas sajter gick inte att komma åt – och ännu värre för flera var att de inte gick att komma åt sin mail.
I ett blogginlägg undertecknat VD:n Anders Aleborg själv så skriver de att problemen beror på ett storage-problem, där leverantören har felat. De tar också upp, det som jag skrev tidigare, att problemen började med att de växte för fort (eller i deras egna ord; “De senaste åren har Binero vuxit mer än något annat webbhotell i branschen”). Men växtverk är inte mycket att skylla på, om ens kunder inte får vad de betalar för? Om alla drabbas av nertid? Att där samtidigt locka till sig ännu fler kunder med diverse domänkampanjer kan ses som direkt oansvarsfullt.
Men det är bara ett i raden problem för Binero. Tidigare så väntade kunder i år (bokstavligt talat) för att bli portade till deras nya system. De erbjuder ännu inte cron job som lovades flera år tillbaka och PHP-versionen verkar fortfarande gå till 5.2.17 som default (5.2.17 släpptes januari 2011…).
Än en gång utfärdar jag samma varning som jag gjorde i fjol: ställer du höga krav på ditt webbhotell, välj inte Binero. Deras DNS- och domänverktyg håller fortfarande måttet, men som webbhotell duger de endast för enklare hobbyprojekt (de har ju fortfarande ett okej pris, sina många brister till trots).
Kan passa på att göra en shoutout till GleSYS, som har varit fruktansvärt kompetenta och stabila sedan jag bytte till dem i fjol (uptime report hos Pingdom). Andra svenska webbhotell som verkar ta sina kunder på allvar är FS Data och City Network. Ett tips är också att spana in MediaTemple samt DigitalOcean (båda USA-baserade) som man har hört mycket gott om på sistone.
Nyhetsbrev, eller “Mailing lists”, är kanske inte lika vanliga idag som förr. Men Wes Mason sammanställer varje vecka ett fantastiskt matnyttigt sådant där han samlar länkar om nyheter i PHP-världen. Även intressanta projekt och artiklar finns med.
Programmera digitala robotar med Javascript. Väldigt kul, beroendeframkallande och lärorikt.
I mitten av förra året fick MailCom utstå en hel del kritik efter att de gick och hotade en bloggare.
Slutat att hota folk må de ha gjort (jag har i alla fall inte hört något nytt), men de fortsätter fortfarande att leta upp e-postadresser på nätet för att spara undan och sedan spam:a. Det här mailet fick jag från dem tidigare i veckan (till min jobbmail):

De erbjöd i alla fall en “unsubscribe”-länk i mailet. Synd bara att de inte använder normala metoder för att låta folk prenumerera på deras nyhetsbrev spam.
Vill ni läsa mer om MailComs affärsmetoder rekommenderar jag att spana in den här tråden på WN.se eller det här tidigare blogginlägget av Urban Grotherus.
Jag nämde i mitt tidigare inlägg om att PHP fortfarande är störst “microramverket” Flight som jag har använt mig av en hel del på sistone.
Likt Flask, Sinatra och för all del Slim – är Flight ett enkelt ramverk som är gjort för att byggas vidare på helt efter tycke och smak.
Flight är väldigt “barebone” i standardutförande, du får inte så mycket mer en enkla metoder att route:a trafik och ett mycket grundläggande template-språk. Men med php-activerecord och Twig så blir Flight en perfekt start för både små och mellanstora webbapplikationer.
Börja med att sätta upp en struktur liknande det här:

Nu ska vi använda composer för dra in Flight, php-activerecord och Twig till vårt projekt. Alla finns på Packagist, så skapa en composer.json-fil som ser ut ungefär så här:
{
"require": {
"twig/twig": "1.*",
"mikecao/flight": "dev-master",
"php-activerecord/php-activerecord": "dev-master"
}
}
Dra sedan ner composer till ditt projekt:
$ curl -s http://getcomposer.org/installer | php
Och installera modulerna (notera att du måste ha Git installerat):
$ php composer.phar install
Släng också in en .htaccess-fil (om du använder Apache):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
Nu borde du ha allt installerat i /vendor, och vara redo för att skriva lite PHP!
Skapa en index.php i projektmappen och inkludera composer:ns autoload.php. Testa sedan att med Flight skapa et route till /test:
<?php
include dirname(__FILE__) . '/vendor/autoload.php';
Flight::route('/test', function(){
echo "hello world!";
});
Flight::start();
På localhost/test (eller hur du nu har din miljö uppsatt) bör du kort och gott se “hello world!”.
Nu kommer det roliga, att få alla delarna att leka snällt med varandra. Börja med att konfigurera upp Twig:
<?php
/**
* Initiate Twig, and register to Flight
*/
$loader = new Twig_Loader_Filesystem(dirname(__FILE__) . '/views');
$twigConfig = array(
// 'cache' => './cache/twig/',
// 'cache' => false,
'debug' => true,
);
Flight::register('view', 'Twig_Environment', array($loader, $twigConfig), function($twig) {
$twig->addExtension(new Twig_Extension_Debug()); // Add the debug extension
});
På detta vis når vi nu Twig via
<?php
Flight::view()->display('template.html', $data);
Testa så att allt fungerar genom att skapa en mall och lägg den i din views-mapp.
<?php
// template.html
hello {{name}}!
// index.php
Flight::route('/hello', function(){
$data = array(
'name' => Flight::request()->query->name
);
Flight::view()->display('template.html', $data);
});
localhost/hello?name=Marcus borde ge “hello Marcus!”.
Nu var det php-activerecord också. Om du har använt CodeIgniter eller Lithium så är chanserna stora att du har använt något derivat av php-activerecord, så du borde känna igen syntaxen – det är anledningen till att jag brukar köra på det. Men om du föredrar något annat ORM, kör för all del på det istället. För att ladda in det i Flight gör vi på följande vis:
<?php
/**
* Initiate ActiveRecord
*/
ActiveRecord\Config::initialize(function($cfg) {
$cfg->set_model_directory('./models');
$cfg->set_connections(
// mysql://
array('development' => 'mysql://username:password@localhost/database')
);
$cfg->set_default_connection('development');
});
För det här testet kan vi använda en väldigt enkel users-tabell:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`firstname` varchar(255) COLLATE utf8_swedish_ci NOT NULL,
`surname` varchar(255) COLLATE utf8_swedish_ci NOT NULL,
`email` varchar(255) COLLATE utf8_swedish_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci AUTO_INCREMENT=1 ;
Sätt också upp en user-modell i /models:
<?php
class User extends ActiveRecord\Model {
}
Nu borde du enkelt kunna skapa en ny användare genom:
<?php
$user = new User();
$user->firstname = 'Marcus';
$user->surname = 'Olsson';
$user->email = 'trash@thedumpster.com';
$user->save();
print_r(User::last());
// User Object
// (
// [...]
// [attributes:ActiveRecord\Model:private] => Array
// (
// [id] => 1
// [firstname] => Marcus
// [surname] => Olsson
// [email] => trash@dumpster.com
// )
// [...]
// )
Det var allt egentligen – du har nu grunden för att snabbt kunna skapa en riktigt bra webbapplikation. Om du undrar varför vi satte upp /controllers i början är det för att man inte ska behöva ha allt i sin index.php – utan man kan mappa en route till en controller och metod, likt:
<?php
// index.php
Flight::path(dirname(__FILE__) . '/controllers');
Flight::route('/', array('IndexController', 'index'));
// controllers/indexController.php
class IndexController {
public function __construct() {}
public static function index() {
echo 'Hello world!';
}
}
Hela den här guiden finns på GitHub för den som är intresserad, och jag är mer än intresserad av att höra vad du tycker om Flight, och andra microramverk för den delen.
Kollade igenom lite statistik på W3techs över de vanligaste server-side språken i bruk idag. PHP är fortfarande överlägset störst. 78.7% av alla webbplatser drivs av PHP, och inte nog med det – språkets popularitet har dessutom ökat, upp från 72,5% i mars 2012.
PHP har aldrig tidigare varit ett sådant spännande språk att arbeta med, nya ramverk hittar nya lösningar på problem. Och ramverk som Slim och Flightphp gör det enkelt och snabbt att sätta upp nya projekt så att man istället kan fokusera på det viktiga. Även i själva PHP-core händer det en rad ändringar och förbättringar.
Flera nya tjänster och plattformar som t.ex. Fortrabbit och Pagoda Box har gjort det enkelt att driva, underhålla, testa och lansera sina applikationer med enkla och smarta metoder.
PHP är ofta något av ett hånat – kanske till och med ett ibland hatat språk, med ibland viss rätt. Men med det faktumet att nästan vem som helst kan snabbt och enkelt få ut hello world! på ett par minuter på vilket webbhotell som helst – det är nästintill oslagbart.
Därmed är det inte sagt att andra språk är dåliga, eller ens sämre (Python är ett språk som jag verkligen gillar). Men PHP får oförtjänt mycket smuts kastat på sig.
![]()
Visst, Googles senaste tillskott till den lilla Chromebook-familjen är en fantastiskt designad dator – men i praktiken är det en väldigt dyr webbläsare då det är Chrome OS som gäller. $1299 begär Google för den, kom ihåg att det är $100 mer än Apples MacBook Air 13” med liknande specifikationer.
Jag älskar idén med Chrome OS, men plattformen står just nu väldigt mycket i skymundan med ett ytterst litet stöd från utvecklarna – så den duger inte mycket mer till att ha som en sekundär dator, alternativt om Google Docs är det enda man använder (who does that?). Med liknande komponenter, så är valet av en sekundär dator mellan MacBook Air och Chrome Pixel ett enkelt sådant.
Vilka som tillhör målgruppen och som faktiskt kommer att köpa den är och förblir ett stort mysterium.
Det är nu officiellt att J.J. Abrams kommer att regissera, och hans produktionsbolag Bad Robot kommer att producera Star Wars Episode VII.
En person gör alltså de båda två största rymdfilmserierna någonsin (Star Trek och Star Wars). Som om icke-insatta inte redan hade svårt att se skillnaden mellan dem.
Via: Lucasfilm
Varje år utser IDG Sveriges bästa sajter. Vad de tycker är bäst (eller t.o.m.) bra kan man spåna långt och länge om.
I år vann Tv4.se – vilket jag antar kan vara en någorlunda okej vinnare, för en gång skull. Streaming kan vara teknisk utmaning, vilket Tv4 verkar ha löst bra, och sidan är stilren och attraktiv.
Tidigare år har vinnaren varit lika mycket ett utropstecken som ett frågetecken.
Många andra platser på listan i år är dock fortfarande stora frågetecken. Antagningen.se är ett bra exempel, som vann kategorin “utbildning” med motiveringen:
Enkelhet har alltid varit en vinnare på webben och Antagning.se gör det komplicerade extremt enkelt och tydligt. Med användaren i centrum, inte avsändaren, blir webbtjänsten ett föredöme för hur många fler myndigheter och organisationer kan arbeta. Antagning.se, med systersajten www.universityadmissions.se, öppnar dörrarna för hela utbildningsvärlden och drar sitt tydliga och viktiga strå till den stora utbildningsstacken.
Alla som någon gång har använt antagning.se är vet att det inte är det bästa lösningen, inte är den särskilt rolig att använda eller titta på heller. Vidare så kan man inte heller hålla med om motiveringen “gör det komplicerade extremt enkelt och tydligt”. Förr var allt samlat på en sida, studera.nu, för att numera splittas mellan dessa två. Det är inte att göra det enkelt.
Jag tycker att IDG borde byta namn på priset till “De 100 sajterna vi tycker bäst om”, alternativt plocka in några utvecklare och designers till juryn (hittar ingenstans om vilka som faktiskt sitter i juryn) så att det blir mindre skaka-hand-och-klappa-på-axeln-för-bra-jobb och mer snygg-smart-och-intressanta-lösningar-bra.
Jag är en av många som har råkat ut för en bugg som uppstod efter nyår där “Do not disturb”-funktionen inte går efter ens uppsatta schema. Funktionen startar som vanligt, men går aldrig ur läget.
På support.apple.com skriver de helt enkelt att man får vänta tills den 7:e januari, då ska allt vara normalt igen.
Vad är det med Apple och nyårsbuggar?
Via Macrumors.
Så här på slutet av året brukar man titta tillbaka på året som har gått – så gör även jag. Och jag har även spenderat (på tok för stor del av) dagen till att analysera olika data i Google Analytics (mer om det senare kanske).
Här är i alla fall mina tio mest lästa inlägg under året.
Riktigt gammal artikel från december 2010. Men det är den sidan (exklusive startsidan) som lockar absolut flest besökare via Google.
Ett par mindre kända nyheter i OS X 10.8 Mountain Lion.
Tack vare många snälla vänner och andra på Twitter så fick jag en topp på 400 unika besökare under en enda dag till mitt inlägg där jag förklarade att jag sökte jobb. Fick otroligt bra respons från en rad olika företag. Så tack alla (igen) för alla retweets!
Det ständiga dilemmat…
MailCom hotade Urban Grotheus efter det här inlägget, och de som hotar andra på det sättet förtjänar att hängas ut. SERP:en för sökorden “MailCom Europe AB” har ännu inte hämtat sig.
Även här är det via Google folk kommer in – antar att Rdios debut i Sverige inte uppmärksammades tillräckligt väl, och därav min placering i SERP:en. Har dessutom sedan inlägget publicerades fått tre (!) supportmail rörande Rdio.
Skrev ett populärt inlägg om hur man kan skicka notifikationer från webbläsaren till Mountain Lions “Notifications Center” med Javascript.
Mer Javascript, från när jag satt och labbade med D3.js i somras (har sedan dess blivit mest Raphaël.js dock).
Jag var inte helt nöjd med att Tre förlängde mitt abonnemang med nio månader utan mitt samtycke.
Fick lånat en Lumia 900 från Nokia, och skrev en kort recension om vad jag tyckte.
