EnglishSvenska

Hur man flyttar en EC2 Instance till ett annat konto

Det går tyvärr inte att ändra ägandeskapet för en EC2 instance så det man får göra är att dela den och skapa på nytt. Guide för flytt av EC2 Instance från Konto A till Konto B:

  1. Konto A. Create snapshot.
  2. Konto A. Create image from snapshot
  3. Konto A. AMIs. Edit permissions.
  4. Konto B. Gå till https://aws-portal.amazon.com/gp/aws/developer/account?ie=UTF8&action=payment-method och se account number i hörnet.
  5. Konto A. Skriv in account number utan bindesstreck i edit permissions.
  6. Konto B. AMIs. Välj Private Images. Det kan ta ett tag innan den dyker upp.
  7. Konto B. Launch. Välj din AMI. Sätt upp servern som vanligt.

Om servern har en webbserver behöver man låta båda servrarna köras parallellt ett tag för att ge dns-servrarna en chans att förnya sin cache:

  1. Konto B. Associera en ny Elastic ip till den nya servern.
  2. Konto A. Koppla databasen mot den nya servern. På detta sätt låter man endast en databas vara aktiv.
  3. Ändra dns-installningarna för domännamn. Peka mot det nya ip-nummret.
  4. Kontrollera att båda servrarna är igång och går att komma åt från webbläsaren. Efter något dygn kommer alla endast att besöka den nya servern. Gör då Terminate på instancen i Konto A.

Standalone Arduino med en Atmega328

Att sätta ihop sin egen Arduino på en labbplatta är ingen större konst. Visar här några illustrationer som förklarar hur man gör. Du kan köpa ett arduino-kit från mät.se för att få allt du behöver.

Enklaste konfigurationen som kräver en ftdi-kabel:

Vill man kunna mata denna koppling med ström från ett batteri lägger man bara till en några få komponenter. Finns att köpa här.

Istället för en ftdi-kabel kan man sätta dit en usb-modul såhär. Länk till usb-modul.

Klistermärken till Atmega328P-PU, Atmega328P-PN

För att snabbare se vilka portar som är vilka. Skriv ut arket nedan:
Klistermärke Arduino Atmega328

Komponenter finns här:

Du kan också köpa Atmega med Arduino bootloader och klisterlapp:

För att göra detta själv så är det bara att klippa ut och klistra på:

Tagged with: ,

Bränn Arduino bootloader till Atmega328-PU

Jag köpte ett gäng nya Atmega328-PU. Eftersom det finns två varianter av detta mikrochip nämligen Atmega328p-pu och Atmega328-pu. P efter 328 innebär "pico-power" vilket betyder att den drar mindre ström. När man försöker bränna en bootloader ett icke pico-power-chip så får man felmeddelande om ogiltig signatur:

Expected signature for ATMEGA328P is 1E 95 0F Double check chip, or use -F to override this

Snabbaste sättet att lösa detta är att lägga till non-pico-power som en Arduino-typ. Gå till mappen där Arduino IDE är installerat. Öppna filen /hardware/tools/avr/etc/avrdude.conf. Lägg till detta:

#------------------------------------------------------------
# ATmega328
#------------------------------------------------------------

part
    id     = "m328";
    desc   = "ATMEGA328";
    has_debugwire = yes;
    flash_instr   = 0xB6, 0x01, 0x11;
    eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
       0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
       0x99, 0xF9, 0xBB, 0xAF;
    stk500_devcode = 0x86;
    # avr910_devcode = 0x;
    signature    = 0x1e 0x95 0x14;
    pagel    = 0xd7;
    bs2      = 0xc2;
    chip_erase_delay = 9000;
    pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
     "x x x x x x x x x x x x x x x x";

    chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
     "x x x x x x x x x x x x x x x x";

    timeout  = 200;
    stabdelay = 100;
    cmdexedelay = 25;
    synchloops = 32;
    bytedelay  = 0;
    pollindex = 3;
    pollvalue = 0x53;
    predelay = 1;
    postdelay = 1;
    pollmethod  = 1;

    pp_controlstack =
 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    hventerstabdelay = 100;
    progmodedelay = 0;
    latchcycles   = 5;
    togglevtg   = 1;
    poweroffdelay = 15;
    resetdelayms = 1;
    resetdelayus  = 0;
    hvleavestabdelay  = 15;
    resetdelay   = 15;
    chiperasepulsewidth  = 0;
    chiperasepolltimeout = 10;
    programfusepulsewidth = 0;
    programfusepolltimeout = 5;
    programlockpulsewidth = 0;
    programlockpolltimeout = 5;

    memory "eeprom"
 paged   = no;
 page_size = 4;
  size    = 1024;
 min_write_delay = 3600;
 max_write_delay = 3600;
 readback_p1 = 0xff;
 readback_p2 = 0xff;
 read = " 1 0 1 0 0 0 0 0",
         " 0 0 0 x x x a9 a8",
         " a7 a6 a5 a4 a3 a2 a1 a0",
         " o o o o o o o o";

  write = " 1 1 0 0 0 0 0 0",
         " 0 0 0 x x x a9 a8",
   " a7 a6 a5 a4 a3 a2 a1 a0",
   " i i i i i i i i";

 loadpage_lo = " 1 1 0 0 0 0 0 1",
         " 0 0 0 0 0 0 0 0",
         " 0 0 0 0 0 0 a1 a0",
         " i i i i i i i i";

 writepage = " 1 1 0 0 0 0 1 0",
       " 0 0 x x x x a9 a8",
       " a7 a6 a5 a4 a3 a2 0 0",
       " x x x x x x x x";

 mode    = 0x41;
 delay   = 20;
 blocksize = 4;
  readsize  = 256;
    ;

    memory "flash"
 paged   = yes;
  size    = 32768;
  page_size = 128;
  num_pages = 256;
  min_write_delay = 4500;
 max_write_delay = 4500;
 readback_p1 = 0xff;
 readback_p2 = 0xff;
 read_lo = " 0 0 1 0 0 0 0 0",
     " 0 0 a13 a12 a11 a10 a9 a8",
     " a7 a6 a5 a4 a3 a2 a1 a0",
     " o o o o o o o o";

 read_hi = " 0 0 1 0 1 0 0 0",
     " 0 0 a13 a12 a11 a10 a9 a8",
     " a7 a6 a5 a4 a3 a2 a1 a0",
     " o o o o o o o o";

 loadpage_lo = " 0 1 0 0 0 0 0 0",
         " 0 0 0 x x x x x",
         " x x a5 a4 a3 a2 a1 a0",
         " i i i i i i i i";

 loadpage_hi = " 0 1 0 0 1 0 0 0",
         " 0 0 0 x x x x x",
         " x x a5 a4 a3 a2 a1 a0",
         " i i i i i i i i";

 writepage = " 0 1 0 0 1 1 0 0",
       " 0 0 a13 a12 a11 a10 a9 a8",
       " a7 a6 x x x x x x",
       " x x x x x x x x";

 mode    = 0x41;
 delay   = 6;
  blocksize = 128;
  readsize  = 256;

    ;

    memory "lfuse"
 size = 1;
 min_write_delay = 4500;
 max_write_delay = 4500;
 read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
        "x x x x x x x x o o o o o o o o";

 write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
          "x x x x x x x x i i i i i i i i";
    ;

    memory "hfuse"
 size = 1;
 min_write_delay = 4500;
 max_write_delay = 4500;
 read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
        "x x x x x x x x o o o o o o o o";

 write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
          "x x x x x x x x i i i i i i i i";
    ;

    memory "efuse"
 size = 1;
 min_write_delay = 4500;
 max_write_delay = 4500;
 read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
        "x x x x x x x x x x x x x o o o";

 write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
          "x x x x x x x x x x x x x i i i";
    ;

    memory "lock"
  size = 1;
 min_write_delay = 4500;
 max_write_delay = 4500;
 read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
        "x x x x x x x x x x o o o o o o";

 write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
          "x x x x x x x x 1 1 i i i i i i";
    ;

    memory "calibration"
 size = 1;
 read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
        "0 0 0 0 0 0 0 0 o o o o o o o o";
    ;

    memory "signature"
  size = 3;
 read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
        "x x x x x x a1 a0 o o o o o o o o";
    ;
;

Hitta därefter filen /hardware/arduino/boards.txt och lägg till:

##############################################################

uno328.name=Arduino Uno w/ ATmega328 (non-P)
uno328.upload.protocol=arduino
uno328.upload.maximum_size=32256
uno328.upload.speed=115200
uno328.bootloader.low_fuses=0xff
uno328.bootloader.high_fuses=0xde
uno328.bootloader.extended_fuses=0x05
uno328.bootloader.path=optiboot
uno328.bootloader.file=optiboot_atmega328.hex
uno328.bootloader.unlock_bits=0x3F
uno328.bootloader.lock_bits=0x0F
uno328.build.mcu=atmega328
uno328.build.f_cpu=16000000L
uno328.build.core=arduino
uno328.build.variant=standard

Därefter ska det från Arduinos IDE se ut såhär:

 

Komponenter finns här:

Du kan också köpa Atmega med Arduino bootloader och klisterlapp:
Tagged with: , , ,

Gjorde min egen bootloader ISP till Arduino

Eftersom jag inte har en egen programmerare för att bränna bootloaders till Atmega-chip valde jag att göra en egen. Såhär blev den:

Eftersom jag använder en dip-socket kan jag lätt programmera massvis av chip efter varandra om jag vill. Det är bara att knäppa loss och stoppa i nästa.

En fördel med att ha en dedikerad programmerare till Arduino är att man inte behöver dra kablar från en officiell Uno varje gång som man vill bootloada en ny Atmega.

Arduinos webbplats har också några egna guider som beskriver mer utförligt: http://arduino.cc/en/Tutorial/ArduinoISP

 

Komponenter finns här:

Du kan också köpa Atmega med Arduino bootloader och klisterlapp:
Tagged with: , , ,

2D Bilspel i Android (hjälp gärna till att färdigställa)

För ett tag sedan började jag programmera ett spel till android. Eftersom jag inte har tid att göra klart det så tänkte jag här visa hur långt jag kommit och vad som är kvar att göra. Allt är open source och ligger på Github: https://github.com/sebnil/Sketchy-Truck

Jag ser väldigt gärna att spelet blir klart istället för att det ligger och samlar damm i ett privat repository.

Uppdateringar

[2012-06-03] Build path i Eclipse IDE ska fungera. Tidigare behövdes vissa inställningar göras för att få igång spelet.

Sammanfattning

Spelet är ungefär som MX Mayhem fast med en monstertruck istället för en cykel.
Denna video visar den senaste koden:




Bibliotek och teknik som använts

- Andengine
- Box2d extension
- Fysikeditor http://www.physicseditor.de

Fungerar just nu

- Andengine och box2d extension.
- Grundläggande fysik. Bilen beter sig ganska bra men förbättringar kan göras.
- Lutning av bilen med mobilens accelerometer. Tippa telefonen åt vänster och höger kommer att lägga en liten roterande moment på bilen.
- Världens skapas från att redigera XML-filer. Jag har skapat en XML-struktur för att lättare skapa nya världar. Denna generator kan behöva några förbättringar.

Spagettikod

Du är fri att göra förbättringar i kodstruktur om du vill. Jag skulle rekommendera en rengöring eftersom detta var mitt första medelstora projekt till android.

Separation mellan nivåerna och spelmotor

Just nu har jag bara lägga till en ny mapp att lägga till en ny bana till spelet. Däri läggs XML-och bildfiler och på så sätt kommer man att kunna skapa nya banor utan att röra spelmotor. Se world.xml för ett exempel:
https://github.com/sebnil/Sketchy-Truck/blob/master/assets/levels/level1/world.xml

Exempel på resterande struktur: https://github.com/sebnil/Sketchy-Truck/tree/master/assets/levels/level1
shapes.xml innehåller shapes från physicseditor. World.xml innehåller föremål och bakgrund. GFX innehåller grafik. Ganska enkelt.

Testat på

Jag har testat på HTC Desire, Google Galaxy Nexus och Samsung S2. Borde fungera på det mesta.

Källkod och copyright

Allt är på GitHub. Använd koden till det du tycker blir bäst men hjälp till att göra den bättre. Om du gör en förändring som är bra så se till att skicka in den till Github-projektet. Målet med att jag lägger ut allt är för att spelet ska bli närmre klart. Om du använder koden till något annat (exempelvis som material i en 2d andengine tutorial) så lämna en referens till den här bloggen.

Och tack till Emanuele Feronato för det exemplet du skrev om hur man använder box2d för att göra en bil med bra fysik.

Föreslagen todo:

- Ta bort oanvända tillgångar. typsnitt, bilder, ljud etc.
- Menyer ser inte bra ut.
- Lägg z-index för parallax backgrounds. Ange i xml med "zindex = #".
- Olika hastigheter på parallax bakgrunder. Ange i xml.
- Motorljud låter inte bra.
- Formen för bilen verkar vara en liten felaktig. När man rullar med bilen blir kontaktpunkterna inte ok.
- Ta bort laddningstiden vid omstart.
- Att trycka på menyknappen ska pausa spelet och öppna menyn.
- När man klickar på knappen Bakåt ingame ska man komma tillbaka till menyn.
- Lägg till stoppuret och lista bästa tider. Highscore.

Ansikte i Google-resultatet

Google la nyligen till en funktion där man ser ansiktet på författare i Google-resultat. Kul funktion tycker jag. Så här gör du för att få det att fungera:

  1. Lägg in en länk till din google-profil på varje sida på domännamnet. På den här sajten finns det exempelvis en länk längst ner i sidfoten som ser ut såhär:
    <a href="https://plus.google.com/110721217141229430919?rel=author" target="_blank">Google +</a>
  2. Gå in här för att testa att det fungerar: http://www.google.com/webmasters/tools/richsnippets
Tagged with: , ,

Migrerar bloggen från Joomla till WordPress

Dels för att testa något nytt men också för att jag känner att WordPress har bättre tillägg har jag migrerat från Joomla. När jag böt platform passade jag också på att uppdatera utseendet till något mer minimalistiskt.

Gammalt utseende jämfört med det nya:

 

Tagged with:

CakePHP Database Logger

I needed to replace the default file log in CakePHP with one based on mysql instead. I shared the project on Bitbucket if someone else would like to do something similar.

https://bitbucket.org/sebnil/cakephp-database-logger/wiki/Home

Why is this better than file log?

  1. Easier to search
  2. Handles large amount of logging much better
  3. Has better performance (at least in some cases)
Tagged with: , ,

Sök och ersätt sträng i MySQL

Jag behövde nyligen söka i en tabell och ersätta kolumnvärden. Exempelvis kan detta användas för att över en hel blogg ersätta ett visst ord eller fras med något annat.

UPDATE table_name SET column_name = REPLACE(column_name,'original_string','replace_string');