av .

Stripe finns nu i Sverige (i β-form i alla fall)

Stripe finns fr.o.m. idag i Sverige, i alla fall i en privat beta – vilket förhoppningsvis innebär att det snart är fritt fram för alla andra.

Tidigare i år hade jag turen att få jobba med Stripes API under uppbyggnaden av ProHockeyIQ, och precis allting är så bra med dem som hype:n säger.

Det är väldokumenterat (Stripe API Reference) med riktigt bra kodexempel, de har stabila färdiga bibliotek för en rad språk och ramverk (Github), de har bra och snabb support – och framför allt; de är billiga (2.9% + 30¢ per transaktion).

Om du någon gång kommer att behöva integrera betalning i ditt system – och speciellt återkommande sådana, då kan jag inget annat än att rekommendera Stripe.

av .

Ett år som egen företagare!

Idag är det precis ett år sedan jag lämnade mitt fasta, trygga jobb för att testa att köra mitt egna race som egen företagare.

Efter par tröga månader under sommaren 2013 innan jag hade alla papper i ordning (tips; starta aldrig företag på sommaren) och fått in de första pengarna i företaget, så har det där efter flutit på fantastiskt bra.

Jag ska inte sticka under stolen med att jag har haft lite tur också, jag har i princip aldrig behövt marknadsföra mig eller “fråga runt” efter arbete. Affärsrelationer har uppståt av ren slump, och fantastiska kunder har återkommit med fler spännande projekt – vilket har gjort att jag i nuläget tyvärr måste neka en del mindre uppdrag.

Vill i alla fall säga ett stort tack till alla fantastiska tidigare (och framtida) kunder för förtroendet!

Efter nästa vecka (18 juli) tar jag ett litet sommaruppehåll – jag kommer som alltid att kolla av mailen, men kan vara lite senare än vanligt på att svara. Men, i börjar av augusti är det dags för nya spännande uppdrag!

Redan nu kan du kontakta mig om du vet att du behöver en webbutvecklare till hösten.

av .

Googles nya designspråk: Material Design

Under Googles årliga utvecklingskonferans “I/O” presenterade de igår deras nya designspråk, som de har valt att kalla för “Material Design”.

Ser onekligen bra ut, och man får hålla tummarna nu för att Android-utvecklarna blir lika duktiga som iOS-utvecklarna på att följa OS:ets riktlinjer.

De har även publicerat en helt separat sida som handlar just om design (google.com/design) där de skriver (något “hyperboliskt”):

Material is the Metaphor

A material metaphor is the unifying theory of a rationalized space and a system of motion. Our material is grounded in tactile reality, inspired by our study of paper and ink, yet open to imagination and magic.

Vad betyder det ens? Och jag som tyckte att Apples Jony Ive talade i gåtor när han skulle beskriva nya produkter.

av .

Lite bättre och enklare e-postmallar

Att göra e-postmallar är kul, men kan vara väldigt komplicerat och tidskrävande. HTML och CSS för e-postklienterna går tvärtemot vad man har vet är bäst om inline CSS, layouts med tabeller och liknande.

Tidigare i år tröttnade jag på att om och om igen skriva inline-CSS (och använda MailChimps Inliner Tool) så jag skapade ett workflow för att underlätta processen.

Gulp.js

Till att börja med satte jag upp Gulp för att hantera byggandet av mallen automatiskt med LESS-kompilering, CSS-prefixing samt det viktigaste; att skjuta in all CSS inline.

Det fina med den här metoden är att man helt enkelt kodar mallen precis som om det vore en webbsida, och ut spottas en mall som är redo att användas för ens val av tjänst för e-postutskick (jag rekommenderar CampaignMonitor och MailChimp).

Koden hittar du på GitHub (tillsammans med grunden till en basic mall, inte direkt redo att användas).

Responsiva e-postmallar

Alla vill ha responsiva mallar, så tid har även lagts på att undersöka metoder på att skapa så väl fungerade responsiva mallar som möjligt.

Responsiva e-postmallar är lite av en “hit or miss”; det gäller att man har en någorlunda utplanerad plan, och att man har koll på vilka e-postklienter / tjänster som faktiskt stödjer det här.

Den enklaste formen av responsiva mallar är så klart att köra med en flytande layout, alltså:

.wrapper {
    width: 100%;
    max-width: 700px;
}

Där bredden anpassas efter enheten. Nackdelen med den här metoden är dock att man inte har möjligheten att visa/gömma innehåll, eller att t.ex. få en två-kolumnslayout att bli till en kolumn på ens iPhone.

Man blir helt enkelt tvungen att på hederligt vis använda media-queries:

@media screen and (max-width: 480px) {
    td.col {
        width: 100% !important;
        display: block;
    }
}

<table>
    <tr>
        <td class="col" width="50%">
            <p>Kolumn 1</p>
        </td>
        <td class="col" width="50%">
            <p>Kolumn 2</p>
        </td>
    </tr>
</table>

Vad som händer här att td-elementen (som har display: table-cell; som standard) sätts som block, och kommer att ta upp hela bredden. Metoden fungerar mycket bra i de allra flesta mailklienterna, med undantag; GMails egna app för Android och iOS (Androids och iOS standard mailläsare fungerar det dock med) – då den klienten envisas med att rensa bort alla <style>-taggar. Hoppas på ändring från Google där snart.

Bonus, alternerande layout till en kolumn

Ett vanligt sätt att presentera t.ex. produkter på i ett mail är följande vis:

"Mail produkter icke responsiv"

Men vad händer om layout:en är responsiv? Jo:

"Mail produkter responsiv fel"

Produkterna alternerar inte som man har tänkt sig… Men, det finns ett väldigt enkelt knep man kan använda sig av, via attributen dir och align:

<table dir="rtl">
    <tr>
        <td dir="rtl" class="col" align="right" width="50%">
            <img src="#">
        </td>
        <td dir="ltr" class="col" align="left" width="50%">
            <p>Text</p>
        </td>
    </tr>
</table>

Ger:

"Mail produkter responsiv rätt"

dir är egentligen till för att bestäma hur texten ska “flöda” i ett element, rtl (right to left) eller ltr (left to right). Men med det kan vi också styra hur kolumnerna ska stapla sig ovanför varandra.

Källkod finns på GitHub. Min gulpfile.js är anpassad efter hur jag föredrar att jobba, men är enkel att anpassa efter dina egna behov. Frågor eller kommentarer? @olssonm är jag på Twitter.

av .

Nytt från Apple 2 juni – WWDC 2014

Apple bokstavligt talat radade upp nyheterna under deras WWDC konferans i San Francisco. Det må visserligen inte ha presenterats någon ny hårdvara, men nyheterna var knappast färre för det.

Jag kan omöjligt täcka allting här; jag rekomenderar att spana in deras preview-sida för OS X Yosemite, iOS 8 samt deras developer-sidor.

Riktigt kul att Apple lyfte utvecklarna ännu mer än vad de brukar göra under sina Word Wide Developer Conferences – och att de tillägnade väldigt mycket tid åt deras SDK och dess API:er.

OS X Yosemite

'OS X Yosemite'

Nästa version av OS X kommer att heta “Yosemite” (efter nationalparken i Kalifornien) och innehåller en rad nyheter där det mest påtagliga är ett helt nytt UI som hämtar mycket ifrån iOS 7. Det mesta är platt, med många semitransparenta element – och med nya ikoner, så klart.

Ut åker också Lucida Grande som typsnitt, in kommer ett Helvetica-liknande sådant (jag har inte lyckats hitta om det är en light-variant på “Helvetica Neue” eller ett eget typsnitt).

Spotlight

Spotlight (som jag själv använder otaliga gånger varje dag) öppnas numera mitt på skärmen (a lá Alfred, och tidigare Quicksilver) och hämtar sökningar från ännu fler datakällor, och med previews.

iOS integrering – “Handoff”

Apple tillåter nu ens iPhone att ge extra funktioner till ens Mac, som exempel visade de upp möjligheten att ta emot och svara på samtal samt SMS direkt i OS X. Utvecklare kommer även att ha tillgång till det här API:et.

iCloud Drive

Apple kommer att tillåta användare att direkt komma åt dokument och data lagrat på iCloud istället för att behöva öppna den tillhörande applikationen. Detta gör även att man kan öppna dokument i en App, som hör till en annan. Tänk dig t.ex. att öppna ett excel-dokument i Numbers.

Apple passade även på att slänga in en rad mindre nyheter, så som att man i nya OS X kommer att kunna ändra ens menu-bar till svart (äntligen!).

iOS 8

'iOS 8'

På utsidan kanske inte iOS 8 är någon större uppdatering; ja – det omryktade “Health” gör debut i den kommande uppdateringen, där en rad hälsoappar kan lämna data så att man kan hålla koll på allt ifrån vikt till blodtryck och hur långt man har sprungit. iCloud Drive kommer även till iOS.

Message-appen har fått en rad nyheter, så som att lämna röstmeddelanden och filmer direkt i appen. Att ha möjligheten att lägga till personer i konversationer är även det nytt.

Notifikationerna är nu också interaktiva – vilket innebär att man t.ex. kan svara på ett SMS direkt ifrån notifikationen.

Apple har också gjort om hur tangentbordet fungerar, för att försöka åtgärda de allt för ofta “autocorrect fails”.

För utvecklare; Xcode, iOS SDK och Swift

Apple gör i och med iOS 8 någonting som de aldrig tidigare har gjort; de öppnar upp systemet. Nästan helt.

Det går knappt att beskriva hur stort det här kommer att vara för utvecklare; appar kan nu dela data direkt via operativsystemet, appar har åtkomst till OS-specifika funktioner så som touchID, full kontroll över kameran – och Siri (ska bli ruskigt spännande att se vad folk kommer på där).

Utvecklare kan också via “App Extension” nå en rad områden i operativsystemet, t.ex. notification centre för att placera sina egna widgets (följ matchresultat m.m.), som insticksmoduler i Safari (t.ex. för att översätta webbsidor m.m.) och liknande.

Apple tillåter t.o.m. utvecklare att utveckla nya tangentbord för iOS-enheter (något som Steve Jobs skulle ha starka invändningar emot?).

Swift

Till sist, det förmodligen största för iOS- och OS X-utvecklare på många år, Apple presenterade ett helt nytt programmeringsspråk som de kallar för Swift.

Tidigare har Apple använt sig av Objective-C, en gammal relik från NeXTSTEP-eran och för många med en invecklad syntax.

Swift är designat för att vara enklare, snabbare, renare och mer modernt. Apple har redan lagt ut en bok i iBooks-store för att hjälpa en komma igång redan nu. Till hösten när nya OS X och iOS släpps så börjar de ta emot applikationer skrivna i Swift.

iOS och Mac OS Xs framtid ser mycket ljus ut.

av .

Namespawner – reloaded

Jag skrev tidigare om Forge – en ny plattform för att underlätta driften och uppsättningen av PHP-applikationer. Så efter lite “down time” de senaste dagarna så har jag mer i detalj satt in mig i hur Forge är tänkt att fungera.

Som test så skrev jag igår om Namespawner som en Laravel-applikation och deploy:ade den via ett BitBucket-repo. Tillsammans med Homestead var det hela extremt smidigt, ett par knapptryck och någon $ vagrant up är det enda som krävs för att ha en komplett utvecklingsmiljö som återspeglar ens produktionssever perfekt. Mer eller mindre noll konfiguration krävs – tror att man efter många år äntligen har hittat ett arbetssätt som faktiskt snabbar upp ens arbete avsevärt.

Namespawner var det också ja. En liten applikation som jag sjösatte för cirka 3 år sedan – mest på skoj – som av någon outgrundlig anledning får uppemot 70-80 besökare om dagen. Lite pinsamt, då den har varit trasig sedan i september i fjol. Men nu ska de flesta problemen vara åtgärdade, som så när på att de flesta som förser whois-data kör extrema rate-limits numera. Enkelt åtgärdat med ett par slumpmässiga proxy-servrar – men i utbyte att whois-lookup:en tar extremt lång tid.

Men nu finns applikationen att spana in på nytt i alla fall, på namespawner.com hittar man den.

av .

På söndag är det val

Val till Europaparlamentet – stoppa Sverigedemokraterna

Politik skriver jag inte ofta om här, men detta är så otroligt viktigt att jag måste.

På söndag är det val till Europaparlamentet, som sig brukligt är var femte år. Senast, 2009, var valdeltagandet ytterst låga 45,5% – visserligen någon procentenhet över snittet i Europa – men fortfarande riktigt uselt i en modern demokrati.

Att läsa på inför valet och faktiskt göra ett val tar endast ett par minuter – det är ens skyldighet. Att gå till vallokalen tar i de flesta fallen ännu mindre tid. Det är ett gigantiskt problem att över halva Sveriges befolkning väljer att ligga hemma i soffan och titta på Tv (eller vad man nu kan tänkas göra) istället för att säga sitt om hur vår framtid ska se ut.

Ett till problem – Sverigedemokraterna

Att vi i Sverige har människor som av någon outgrundlig anledning ogillar folk från andra länder såpass mycket att de om och om igen väljer in de mest inkompetenta människorna in i maktens korridorer är skrämmande – så otroligt skrämmande.

Tillräckligt mörkrädd är man över att clowner (den läskiga sorten) som Åkesson, Söder & Co har något som helst inflyttande över svensk politik – men nu i Europaparlamentsvalet så har en ny mästerclown uppenbarat sig – Kristina Winberg.

Problemet med Winberg är flera; hon är uppenbart okunnig och opåläst om vad hennes potentiella uppdrag innebär (länk – där hon blir fullständigt decimerad av Marit Paulsen), hon ljuger rakt upp i ansiktet på journalister (länk) och hon har absolut ingen koll på sitt egna partiprogram (länk).

Förstanamnet för SD till Europaparlamentet.

I de senaste opinionsmätningarna så får SD 8,6% – man kan bara hoppas på att de 8,6% av väljarkåren “bara” är fruktansvärt dåligt informerade, och inte delar Winbergs verklighetsuppfattning (och inkompetens).

Ta dig ett par minuter på söndag och rösta för frihet och demokratin, och emot Sverigedemokraterna.

av .

Laravel Forge och Homestead

I måndags lanserade Taylor Otwell (skaparen av Laravel) det smidiga verktyget Forge.

Med Forge får man möjligheten att från en enda plats sätta upp och konfigurera servrar på både Digital Ocean, Amazon Web Services, Linode och Rackspace med en enhetlig konfiguration – som är följande:

  • Ubuntu 14.04
  • PHP 5.5
  • Nginx
  • MySQL/PostgreSQL

En rad andra saker får man med “på köpet” också, så som Beanstalkd (perfekt för Laravels Queue-funktioner) och Memcached (för att cache:a – så klart). SSH-nycklar, ENV-variabler och liknande hanterar Forge också.

Att skicka upp ny kod är så enkelt som att pusha till GitHub (eller sedan i morse; BitBucket) så hanterar Forge resten.

Forge kostar endast $10 i månaden, och är egentligen en självklarhet om du hanterar mer än ett PHP-projekt (och speciellt då Laravel-projekt).

Men vad är då Homestead?

Homestead är en “Vagrant box” som innehåller en identisk konfiguration som de servrarna som sätts upp via Forge – på detta vis slipper man stöta på problem som orsakas av att ens utveckleckningsmiljö skiljer sig från produktionsmiljön.

Forge hittar du på forge.laravel.com, och dokumentation för hur man sätter upp homestead hittar du under dokumentationen för Laravel 4.2

Med den här länken och koden SSDMAY10 (giltig t.o.m. 31 maj) får du $10 att sätta upp en server på Digital Ocean (ja, det är en referral-länk).

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.