Categories
Programming

Hett tips för Androidutvecklare, trådlös ADB

För alla er som utvecklar för Android och har en rootad telefon, kolla in adbWireless som är en gratis programvara för att kunna köra ADB trådlöst över wifi.

Underskatta inte känslan av att kunna testa och köra ADB trådlöst!

Categories
Programming

Använd Mogenerator med Core Data och Xcode

Sedan i början av sommaren har jag jobbat med att utveckla iOS-applikationer och har spenderat en hel del tid de senaste månaderna med Objetive-C, Xcode och Core Data. Core Data är utvecklat av Apple och har funnits med sedan ett par releaser av iOS tillbaka. Core Data är enkelt uttryckt Apples svar på modell-delen i MVC-paradigmen (Model View Controller). Det hanterar migreringar, serialisering av data och manipulation samt läsning av data i databasen.

Det funkar riktigt bra för det mesta, däremot har jag dragit mig för att göra vissa ändringar i modellen för att det blir så rörigt med mina “custom entity files”. Då kan vi passa på att säga välkommen till Mogenerator!

mogenerator generates Objective-C code for your Core Data custom classes. Unlike Xcode, mogenerator manages two classes per entity: one for machines, one for humans. The machine class can always be overwritten to match the data model, with humans’ work effortlessly preserved

Xmo’d seamlessly integrates mogenerator into Xcode

Mogenerator hjälper oss med att generera nya entity filer utifrån vår modell, nu slipper jag alltså göra det manuellt (och ofta göra fel på vägen). Dessa filer håller sig synkroniserade och uppdaterade mot min modell.

Börja med att installera Mogenerator från webbplatsen.

Installera i Xcode

  • Öppna projektinställningarna, skapa ett nytt target (“Add Target”)
  • Skapa ett “Aggregate target”, finns under Other.
  • Välj ett namn och tryck “Done”.
  • Välj det target som du nyss skapade och tryck “Add Build Phase” och sedan “Add Run Script”.
  • Fyll i följande information i scriptet, justera såklart med vad som gäller för din modell:
cd dinapp/coredata/
mogenerator -m app.xcdatamodeld/app.xcdatamodel/

Nu kan du sedan välja detta target uppe i vänstra hörnet och trycka Command+B (Build) och luta dig tillbaka medans Mogenerator skapar dina filer.

Glöm inte bort att välja samma klassnamn i fältet för “Class” när du modifierar din entity i modellen, annars genererar inte Mogenerator några filer. Första gången du skapar dina modeller kommer du behöva lägga till filerna i Xcode manuellt, sedan sköts detta genom att filerna bara skrivs över.

För mer information om fördelarna med att använda Mogenerator så rekommenderar jag följande inlägg: Getting Started with Mogenerator.

Categories
Programming

Att skriva en egen parser och kompilator i Ruby

I Februari bestämde jag mig för att ta en titt på hur parsing och kompilatorer fungerar, jag valde att imlementera en i Ruby och här kan ni se resultatet.

Det påminner väldigt mycket om tankesättet vi hade när vi gjorde en kalkylator i Java för några år sedan i en kurs jag hade på Uppsala Universitet. Jag implementerade allt fram tills dess att jag skulle generera den slutliga koden. Kunde inte riktigt bestämma mig för vilket språk jag ville generera, ren Rubykod, Assembler eller C.

Exempelprogram

Se online på GitHub

/* PROGRAM NAME: nxx1.txt

nxx is a simple programming language that provides:
 numbers
 strings
 assignment statements
 string concatenation
 simple arithmetic operations
 print capability

comments may be enclosed in slash+asterisk .. asterisk+slash
*/
alpha = 16 ;
beta = 2 ;
resultName = "delta" ;
delta = alpha / beta ;
print "Value of " || resultName || " is: " ;
print delta ;
print "\n" ;

Här är syntaxträdet som produceras av ovanstående kod:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Here is the abstract syntax tree:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ROOT
    =
        alpha
        16
    =
        beta
        2
    =
        resultName
        "delta"
    =
        delta
        alpha
        /
        beta
    print
        "Value of "
        resultName
        " is: "
    print
        delta
    print
        "\n"

Lärdomar

Själva implementeringen av parsern, lexern och scannern gick bra. Dock märkte jag i slutet att jag saknade en del kunskap om teorin bakom, vilket gjorde det svårt att slutföra. Dessutom fick jag annat att göra så det hamnade i skymundan.

I höst kommer jag läsa en kurs i kompilatorteknik, det ska bli roligt eftersom jag har gett mig på en del av begreppen tidigare och kommer förhoppningsvis ha nytta av mina tidigare erfarenheter och på så sätt ha mer nytta av kursen.