Publicerad 25 mars, 2009 av Johan Beronius
Athega har sedan länge, ända sedan starten 1997, arbetat mycket med programmeringsspråket Perl. Vi använder oss i mycket stor utsträckning av öppna och fria mjukvaror och verktyg för de system vi bygger. Därför är även en stor del av den kod vi själva producerar befriad från licenskostnader och betraktas som ”open source” även om den kanske i vissa fall inte finns publikt tillgänglig på nätet.
Saker som går att återanvända och andra kan ha nytta av delar vi gärna med oss av. Ett exempel på detta är Perl-modulen Geo::SweGrid som används för att konvertera geografiska koordinater mellan det system som används globalt och det som används på vissa svenska kartor.
Det distribuerade arkivet för Perl-moduler heter CPAN, dit kan alla bidra med sin kod. När en modul väl finns i arkivet kan den lätt installeras på vilken dator som helst så här:
[user@host ~]$ sudo cpan
cpan shell -- CPAN exploration and modules installation (v1.9304)
ReadLine support enabled
cpan> install Geo::SweGrid
Etiketter: CPAN, GPS, Perl, Positionering
Postat i Kod, Webbutveckling, Öppen källkod | Inga kommentarer »
Publicerad 14 mars, 2009 av Johan Beronius
Bloggportalen, som byggts av Athega, har en ny funktion för att visa relaterade nyheter från Sesam när man tittar på en av de mest diskterade nyheterna i bloggvärlden. Exempel på detta kan ses här.
Funktionen är liksom Bloggportalen i övrigt byggd i Java med Struts som applikationsramverk och Hibernate som ORM / Object-relational mapping och persistenslager. Data hämtas som XML över nätet från en webbtjänst hos Sesam. Sedan används XPath för att välja ut relevant data att presentera.
Detta sätt att presentera information och funktionalitet från flera olika källor på en och samma webbplats kallas ibland för en ”mashup”. Ett annat exempel på detta är kartorna på Bloggportalen som skapas med hjälp av en tjänst från Google Maps.
Postat i Sociala nätverk, Webbutveckling | Inga kommentarer »
Publicerad 8 mars, 2009 av Peter Hellberg
Efter att ha sett scriptet follow_iphone_devs.rb fick jag idén att kombinera Sinatra och google-spreadsheet-ruby som ett exempel på vad man kan göra i Ruby om man inte har behov av ett större ramverk som Ruby on Rails.

Sinatra är ett DSL för att snabbt och enkelt skapa webbapplikationer i Ruby:
# myapp.rb
require 'rubygems'
require 'sinatra'
get '/' do
'Hello world!'
end
Komma igång
Först av allt behöver vi Ruby och RubyGems. Eftersom jag använder OS X så är de redan installerade. (Men se till att du har en uppdaterad version av RubyGems)
Om du inte redan har lagt till GitHub i listan över dina gem sources:
gem sources -a http://gems.github.com
Nu är vi redo att installera de gems vi kommer att använda:
sudo gem install sinatra gimite-google-spreadsheet-ruby haml
Nu är vi redo att börja skriva vårt script:
sinatra-and-google-spreadsheet.rb
Först tar vi och laddar in de gems vi kommer använda (Sinatra kommer att ladda in Haml åt oss):
require 'rubygems'
require 'sinatra'
require 'google_spreadsheet'
Nu tar vi och aktiverar sessioner:
# We want to save the posts in a session variable
set :sessions, true
OBS: Detta är självklart ingen lösning som skalar men det fungerar bra för vårt syfte.
Metoderna för att hämta datat från Google Spreadsheet:
def get_posts
# Retrieve and return the posts
session["posts"] ||= retrieve_posts
end
def retrieve_posts
# Empty posts hash
posts = {}
# Log in to Google Spreadsheet
session = GoogleSpreadsheet.login('xxxxxxxx', 'xxxxxxxx')
# First worksheet of
# http://spreadsheets.google.com/ccc?key=peGTxx6h1WT0ihw9-QETbQg
ws = session.spreadsheet_by_key("peGTxx6h1WT0ihw9-QETbQg").worksheets[0]
# Iterate over all the rows in the spreadsheet
for i in 1...ws.num_rows
# Store the data Identify data using the slug
posts[ws[i+1,5]] = {
:title => ws[i+1,1],
:content => ws[i+1,2],
:date => Date.parse(ws[i+1,3]),
:author => ws[i+1,4],
}
end
# Return the retrieved posts
posts
end
Vi använder memoization för att det bara ska bli en förfrågning till Google per session
Startsida listar helt enkelt alla poster:
get '/' do
# Get all the posts
@posts = get_posts
# Render the index template
haml :index
end
Respektive post har en ”slug” som används i urlen:
get '/:slug' do
# Get the post
@post = get_posts[params[:slug]]
# Render the post template
haml :post
end
Nu definierar vi de Haml-mallar vi använder på sidorna:
__END__
@@ layout
%html
%head
%title Sinatra and Google Spreadsheet
%body
= yield
@@ index
%h1.title All posts
- @posts.each do |slug, post|
%ul
%li
%a{:href => slug}
= post[:title]
@@ post
%h1.title
= @post[:title]
%div
Published
%span.date
= @post[:date]
by
%span.author
= @post[:author]
%p.content
= @post[:content]
%a{:href => '/'} << Back
Starta scriptet
$ ruby sinatra-and-google-spreadsheet.rb
== Sinatra/0.9.1 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.0.0 codename That´s What She Said)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop
Om allt går som det ska så ska vi nu ha en server på http://localhost:4567/.
Resultat
Från ett kalkylblad på Google Spreadsheet:

Data från Google Spreadsheet
Till en sida serverad med Sinatra:

Resultatet
Att man kan åstadkomma så mycket med under 100 rader Rubykod är rätt imponerande, speciellt om man tänker på att vi då även räknar in kommentarer och mallar.
Etiketter: Google, Haml, Ruby, Sinatra
Postat i Kod, Webbutveckling | 1 kommentar »
Publicerad 4 mars, 2009 av Johan Beronius
Att geotagga bilder är att lagra koordinaterna för den geografiska positionen där bilden fotograferades i själva bildfilen. Det skapar många nya möjligheter för att t.ex. söka fram bilder och presentera dem på en karta. Tyvärr är det fortfarande inte många riktiga kameror (och då menar jag inte mobiltelefoner) som har inbyggd GPS vilket krävs för detta. Däremot är vanliga GPS-navigatorer väldigt vanliga nu för tiden, vissa av dem kan kontinuerligt lagra positionen till en spårfil.
Jag tänkte därför presentera en liten guide hur man kan kombinera denna information i efterhand så att man får geotaggade bilder när man laddar över dem till datorn.
- Ladda över spårfilen/filerna i GPX-format från navigatorn till datorn. Du behöver vara så noga med att du hittar spåret från det exakta fototillfället. Om du t.ex. har en fil från varje dag på en resa, ta med allihopa.

- Ladda över bilderna som JPG-filer från kameran till datorn. En viktig sak man inte får glömma innan man börjar fotografera är att ställa klockan rätt i kameran. Detta är avgörande för att kunna hitta positionen för det exakta tillfället för varje bild. Glöm inte eventuella inställningar för sommar/vintertid och tidszon. Om du märker tiden är fel för bilder du redan tagit bör du korrigera detta innan du fortsätter. ExifTool kan justera tiden, t.ex. framåt eller bakåt en timme om man har glömt ställa om för sommar/vintertid. Ett annat verktyg som klarar detta och möjligtvis är lite enklare är jhead.

- Nu behöver vi ett program som läser positionerna från spårfilen och skriver till bilderna. Programmet Geotag är just ett sådant som dessutom är snyggt, enkelt och gratis. (Open Source – GPL)
- Kolla sidorna Quick start och Requirements vad som krävs för att köra programmet. Man behöver Java och verktyget ExifTool, ladda ned det först och lägg filen i en körbar programkatalog. (t.ex. C:\Windows på Windows)
- Har du redan Java 6 är det jätteenkelt, klicka bara Run it now så körs programmet direkt via Java Webstart utan att man behöver installera något. Första gången laddas det ned men sedan finns det sparat på datorn och en genväg har skapats på skrivbordet. Klicka på ”Kör” för att lita på utgivaren av progmmet.
- Välj Load tracks from file från File-menyn. Du kan välja en eller flera filer, det gör som sagt inget om du får med spår från innan eller efter fototillfället. Ingenting syns på skärmen än.

- Välj sedan Add image eller Add images from directory beroende på om det är ett fåtal eller en alla bilder i en katalog du vill geotagga. Nu dyker alla bilder upp i en lista.
- Högerklicka på en godtycklig bild, välj Find locations > for all images. Nu kommer listan uppdateras med latitud och longitud för alla bilder.

- Om det finns luckor i spåret från din GPS, dvs. att den inte har spelat in någon position för det exakta tillfället då bilden togs kan du använda funktionen Fill gaps för att räkna ut en mellanliggande position från de två närmast kända.
- Nästa steg är frivilligt men kan vara skoj. Högerklicka på en godtycklig bild, välj Location names > for all images. Nu kommer programmet att gå ut på nätet och söka upp ortsnamn för alla positioner från Geonames. Ortsnamnen kommer att lagras som text i bildfilerna.

- Nu kan du spara ändringarna till bildfilerna. Välj Save new locations > All images.

- Verktyget ExifTool som används för att skriva till bildfilerna kommer att skapa en backup-kopia av alla filer. Om man redan har en kopia av bildfilerna eller om de finns kvar på kamerans minneskort så är detta onödigt och tar bara extra lagringsutrymme. Detta kan man stänga av med inställningen -overwrite_original. Vill man att filerna skall behålla sin ”Senast ändrad”-tid kan man även lägga in inställningen -preserve.

- Klart!
Etiketter: Bilder, Foto, GPS, Positionering
Postat i Teknik och prylar | Inga kommentarer »
Publicerad 3 mars, 2009 av Peter Hellberg

Här kommer vi på Athega att blogga om våra respektive intresseområden, saker vi lärt oss under olika projekt och mycket mer. Några exempel på ämnen kan vara:
Ni kan även följa @athega på Twitter för uppdateringar om vad som sker på företaget.
Postat i Okategoriserade | Inga kommentarer »