Kategoriarkiv: Ingen kategori

Google Adsense nu med https-stöd

Google har nu lagt in stöd för https-sajter för de som använder Google Adsense. Rätt minimal förändring som behövs göras för att visa koden:

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">
</script>

Denna kodsnutt gäller så klart om du använder asynkron annonskod, vilket jag hoppas att du gör. Denna förändring gör bl.a. att eventuella felmeddelanden i webbläsaren såsom nedan försvinner om du visar annonser på en https-sajt:

https varning

Att lämna ute http eller https i sökvägen och i stället börja med två slash \\ kallas för protokoll-relativa URL:er och är ett bra sätt att ej erhålla en mixad http/https-sida av misstag.

PS: Använd rabattkoden UTVBLG för 100 kr rabatt på SSL-certifikat via min tjänst https.se

Källa: Google

DevOps med Python Fabric

DevOpsOm du har precis som mig många servrar som är utspridda på flertalet leverantörer så finns det några smarta hjälpmedel för att underlätta administration och deployment av ny kod. Ett av dessa hjälpmedel heter Fabric och är snarlikt med Capistrano för Ruby.

På en Ubuntu-kärra så är det lättast att bara köra apt-get install fabric så får du prylarna du behöver på ett nafs (alternativt pip install fabric).

Testa sedan med:


$ fab

Fatal error: Couldn't find any fabfiles!

Remember that -f can be used to specify fabfile path, and use -h for help.

Aborting.

Det finns olika sätt att sedan använda fabric för att exekvera kommandon på flertalet servrar. De vanliga är att man skapar fabfiles eller bakar in det man vill göra direkt i sin Python-kod efter en import fabric.

Fabric i Python via import fabric

Rätt enkelt och behövs inte så många rader kod. Vår kod ser ut enligt nedan och startas med python kodnamn.py:

#!env python
from fabric.api import run,env,hosts,execute

env.key_filename = "/home/jonasl/jonasl.pem"
env.user = "ubuntu"

@hosts(['79.125.115.128'])
def uname():
  return run("uname -a")

execute(uname)

Ovan kod beskriver först vilken nyckelfil (pem) vi använder. Precis samma sak som att köra ssh -i jonasl.pem. Och env.user berättar vilken användare vi loggar in med.

Sen använder vi en rolig sak i Python som kallas för dekorator (decorator) och den sätter vilken IP-adress vi ska ansluta mot. Denna dekorator behövs inte i nästa exempel som skiljer sig lite.

Fabric direkt via kommandoskal och fabfile

När man använder kommandot fab så läser Fabric direkt en fil som heter fabfile.py i samma katalog som man står i och där kan man placera kommandon såsom ovan uname som ska köras mot olika servrar. Först skapar vi fabfile.py som ser ut så här:

#!env python
from fabric.api import run,env,hosts,execute

env.key_filename = "/home/jonasl/jonasl.pem"
env.user = "ubuntu"

def uname():
  return run("uname -a")

Sen kör vi bara fab -H ip-nummer uname på följande sätt:

$ fab -H 79.125.115.128 uname
[79.125.115.128] Executing task 'uname'
[79.125.115.128] run: uname -a
[79.125.115.128] out: Linux syslog 3.2.0-53-virtual #81-Ubuntu SMP Thu Aug 22 21:21:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Done.
Disconnecting from 79.125.115.128... done.
$

I nästa avsnitt ska jag gå igenom lite mer hur man kan använda olika server-roller för att skjuta utkod via git.

Lär dig JavaScript

Jag har kodat JQuery i många år och har aldrig riktigt skrivit sådär jättemånga rader kod i enbart JavaScript måste jag erkänna. Så tänkte att det nu är dags att tag i JavaScript-kompetensen.

Sökte av marknaden lite efter böcker och införskaffade några stycken som jag skickade in på min läsplatta med hjälp av grymma ReadMill som jag använder för alla mina eBöcker nuförtiden.

Så nu har jag nästan läst klart min första JavaScript-bok och känner att jag har äntligen har mer koll. Testade att göra ett enkelt script som loggar musrörelser på en webbsida och skickar över till servern regelbundet.  Testa mousemove.html här.

Boken som är ett måsteläsning om man vill lära sig JavaScript är följande:

lär dig javascript

Eloquent JavaScript

Stötta gärna den andra upplagan som nu crowdfoundas (första utgåvan av boken är från 2007). Tipstack till Patrik Spathon.

Vad händer?

blogbackupr

En liten statusuppdatering vad jag pysslar med eftersom jag är så dålig på att uppdatera bloggen:

Håller på att sälja av Blogbackupr + Bloggbackup och kommer snart att läggas upp på Flippa.

Har byggt om lite på https.se så det är lättare att beställa SSL-certifikat. Bl.a. möjligheten att välja faktura direkt och använder Billogram. Dock ej deras API ännu, men det kommer nog.

Förbereder sista delarna på en ny startup som kommer att ha release på Internetdagarna.

Underlättar administration av alla mina servrar med Python + Fabric och försöker bli en ninja på JavaScript.

På det mer personliga planet så har jag anmält mig till IRONMAN Kalmar 2014 och tränar en hel del inför tävlingen.

Internetdagarna 2013

Internetdagarna

Det är inte så många veckor kvar till min favoritkonferens Internetdagarna. Konferensen har alltid så många intressanta föredrag att jag alltid har svårt att välja vilket jag ska gå på. Synd att jag inte kan klona mig!

Förutom Internet Discovery Days som går dag två så finns det ett antal intressanta spår dag ett:

  • Swedish Startup Sessions
  • Domännamnsbranschen just nu
  • Öppna data – vad händer under 2014?
  • En dag med WordPress

Använder du bokningskod IND13 så erhåller du rabatt.

Transparens: Jag hjälper till att marknadsföra Internetdagarna mot för att jag får marknadsföra min nya startup på Internetdagarna. Återkommer med mer information när det beger sig.

Så fixar du en krashad MySQL-databas

Flertalet gånger så har jag stött på problem då mysqld vägrar starta på grund av olika orsaker. Den absolut vanligaste orsaken är att hårddisken blivit full. Den näst vanligaste orsaken är att AppArmor gör DENIED då datakatalogen ligger utanför standardkatalogen för MySQL.

Men, om du nu har felsökt och stöter på problem som ger felmeddelanden såsom:

130423 13:08:09 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 709 555107725
InnoDB: 1 transaction(s) which must be rolled back or cleaned up
InnoDB: in total 1 row operations to undo
InnoDB: Trx id counter is 1 3738915328
130423 13:08:09 InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percents: 1 2 3 4 5 InnoDB: Probable data corruption on page 14686502
InnoDB: Original record (compact record)
InnoDB: on that page.
InnoDB: Cannot find the dir slot for record (compact record)
InnoDB: on that page!
130423 13:08:09 InnoDB: Page dump in ascii and hex (16384 bytes):
InnoDB: stored checksum 1683902533, prior-to-4.0.14-form stored checksum 3027438534
InnoDB: Page lsn 709 555059595, low 4 bytes of lsn at page end 555059595
InnoDB: Page number (if stored to page already) 14686502,
InnoDB: space id (if created with >= MySQL-4.1.1 and stored already) 0
InnoDB: Page may be an index page where index id is 0 375
130423 13:08:10 InnoDB: Assertion failure in thread 139759355893504 in file ../../../storage/innobase/page/page0page.c line 133
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
11:08:10 UTC - mysqld got signal 6 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed,
something is definitely wrong and this may fail.

Då rekommenderar jag att du testar InnoDB recovery tool. Som återfinnes här:  InnoDB Recovery Tool. Obs du bör ha minst lika mycket hårddisk ledigt som storleken på din databas.

Sociala nyheter, Osom och API:er

OsomDet händer en hel del här i Sverige när det gäller startups och intressanta projekt, här är några:

Osom

Björn Fant och Anton Johanssons nya projekt som är en mashup mellan Blocket och Instagram. Sälj dina gamla prylar med ett klick och lägg på ett filter. Uttalas Awesome!

Sociala nyheter

Vilka nyheter förekommer mest på Twitter och Facebook? Ted Valentin har skapat en tjänst som tar redan på det. Lätt sätt att hålla koll på vad som snackas om i sociala medier.

SCB API

Statistiska Centralbyrån har äntligen lanserat ett API. Med detta API så får du tillgång till samtliga tabeller i Statistikdatabasen. Här finns en dokumentation som PDF-fil.

.SE släpper spärrade domäner

.SE stiftelsen (IIS) kommer att släppa upp ett gäng härliga domäner som tidigare varit spärrade. Om jag får gissa så kommer dessa att släppas med ett auktionsförfarande där den som betalar mest får domännamnet. Här kan du se samtliga spärrade domäner: https://www.iis.se/data/barred_domains_list.txt

Webbutveckling för framtiden

HTML5Att webbutveckla för framtiden eller åtminstone anamma nya tekniker är något som jag gör ständigt. Här är några av de förbättringar/framsteg jag gör:

  • Från MySQL till Redis
  • Från HTML4 till HTML5
  • Från Apache till Nginx
  • Från sed/awk etc till MapReduce med Hadoop

Sen försöker jag i viss mån även att förbättra följande:

  • Nyttja PHP-frameworks i större omfattning
  • Webb-frameworks (typ Twitter Bootstrap)
  • Från PayPal till DIBS eller motsvarande för betalningslösningar
  • Och även uppgradera gammal kod att fungera med nya PHP-versioner, några saker jag ändrar är bl.a. mysql_* till mysqli_ och php short tags
  • Cufón

Så man slipper uppfinna hjulet allt för många gånger och att kod slutar fungera vid uppgraderingar. Men det finns även ett antal nya tekniker som jag önskar att jag hade mer tid att testa:

Något fundamentalt som jag missat?