Posted by Anders Carlsen
Wed, 10 Feb 2010 19:18:00 GMT
Fornyligt fjernede jeg logging af klik på en hjemmeside for dels at få hurtigere og flere sidevisninger , dels for at højne min troværdighed i forhold til Google Bot.
Min gamle strategi
Jeg brugt en teknik hvor jeg ved hjælp af onclick function return false
skjulte at når folk klikkede på et link først blev send til en controller som loggede klikket i database inden det blev vidresendt til den ønskede adresse.
f.eks.
<a href="http://dr.dk" onclick="window.open('/links/goto/12') ; return false; >
Selvom Google skriver i deres information til webmastere at Google Bot ikke følger javascript, kunne jeg konstatere at det gør den faktisk. Dvs. Google registerede adressen links/goto og ikke dr.dk, hvilket ikke er særligt hensigtsmæssigt. Desuden koster en omdirigering ekstra tid for brugeren og ekstra resurcer på serveren, så jeg valgte at fjerne funktionen og finde en anden strategi.
Nye klik logging strategi
Så jeg tænkte, – hvordan gør Google det?
Ind på Google med Chrome, højreklik og vælg, kontroller element(Googles svar på Firebug)
<a href="http://www.1001line.dk/" class="l"
onmousedown="return
clk(this.href,'','','res',
'1','&sig2=Yd8YBx8q77M9QpTMyuWYcw'
,'0CBAQFjAA')"><em>Svendborg Web</em></a>
Aha, så Google bruger onmusedown event til at registrerer hvad brugeren klikker på.
Onmouse down er den event som indtræffer lige når brugeren har klikket inden onclick event indtræffer.
EventListener
Jeg ønskede ikke at have onmousdown tilskrevet inline til alle mine links, så jeg skulle bruge noget eventhandling og tænkte at det må jeg kunne gøre med prototype
Så jeg fandt følgende eksempel på http://www.prototypejs.org/api/function/bindaseventlistener
EventListener
var obj = { name: 'A nice demo' };
function handler(e) {
var tag = Event.element(e).tagName.toLowerCase();
var data = $A(arguments);
data.shift();
alert(this.name + '\nClick on a ' + tag +
'\nOther args: ' + data.join(', '));
}
Event.observe(document.body, 'click', handler.bindAsEventListener(obj, 1, 2, 3));
(Af en eller anden grund virkede det først for mig da jeg fjernede body fra document.body)
Da det først virkede fik jeg hurtigt omskrevet scriptet så det passer til mit formål.
function handler(e) {
var tag = Event.element(e).tagName.toLowerCase();
if(tag == "a"){
new Ajax.Request('/link_hits/click/?id='
+ Event.element(e).id + "&url="
+ eval('Event.element(e).href').escapeHTML() ,
{method: 'get', asynchronous:true, evalScripts:true})
}
}
Event.observe(document, 'mousedown', handler.bindAsEventListener());
For at spare på serveren ønskede jeg ikke at skrive loggen i databasen men i en logfil, som jeg så efterfølgende kan parse.
Min controller action kom til at se sådan her ud.
def click
render :nothing => true
logger = Logger.new("#{RAILS_ROOT}/log/hits.log", 50, 1048576)
logger.info "#{Time.now}, #{params[:url]}, #{params[:id]}, #{request.remote_ip}"
end
Og sådan ser min log info ud:
# Logfile created on Wed Feb 01 15:44:28 +0100 2010 by /
Wed Feb 10 15:44:28 +0100 2010, http://1001lin.dk/, 481, 127.0.0.1
Wed Feb 10 15:48:03 +0100 2010, http://localhost:3000/links/index/217-haandvaerk_byggeri, , 127.0.0.1
Så snart kan mine webstedsbrugere igen bruge links hits siden på mit websted.
Del
Posted in Ruby On Rails, Web Udvikling, Internet, JavaScripts | Tags Eventhandler, prototype, SEO | no comments
Posted by Anders Carlsen
Tue, 09 Feb 2010 13:27:00 GMT
Mit vejkort til at blive Facebook applikations udvikler
If you can’t beat ‘em, join ‘em
You better do it
‘Cause it makes you feel good – Queen
Facebook har ændret vilkårene på Internettet dramatisk

Lige før sommerferien 2008 besluttede jeg mig for at oprette et login til Facebook. Lige siden da har det været mit foretrukne sted på Internettet. Idag 2010 er stort set alle, som bruger Internettet på Facebook.
Facebook har på dramatisk vis ændret Internettet og den måde vi bruger det på. Og det er en udvikling som vil fortsætte.
På Google Search for Insight kan man danne sig et indtryk ovre udviklingen, ved at sammenligne søgeudtrykket
“Facebook” med f.eks. “Google” og “Twitter”.
Diagrammet giver et klart indtryk af hvor dramatisk den rolle Facebook spiller.
Hvis vi ser bort for hele snakken om sociale medier, at Facebbok introdukserer en helt ny måde at bruge nettet på, og kigger på hvilke konsekvenser Facebook har haft for faktorene besøgstal og aktiv internet tid, vil jeg slutte udfra min egen adfærd og mine Facebook venners adfærd, at disse konsekvenser også har været og fortsat vil være dramatiske.
Folk bruger mere tid på nettet, men da væksten i Internetbrugere i danmark er toppet, og da vi fortsat kun har 24 timer i døgnet. Har en af konsekvenserne ved Facebook været at andre websteder må have oplevet stagnerende eller negativ vækst i forløbne to år.
Det er Facebooks skyld
Man kan forestille sig hvordan folkene fra f.eks. Arto og Dating, efter en kort periode at have siddet på en guldgruppe, har haft det når de måned efter måned har se hvordan væksten er stagneret eller faldet de sidste to år.
Ifølge FDMI , er Arto gået fra
433000 måndlige brugere i august 2008 til 231.000 måndlige brugere i august 2009. Der kan være andre faktorer som gør tallene, men tendensen og årsagen er klar. Det er pga. Facebook.
Matthæus effekten
På Internettet som på andre frie markeder gælder Mathæus effekten
Google og Facebook vokser og vokser, på bekostning af andre spillere.
Facebook applikations udvikling
Budskabet til websstedsejere og webstedsudviklere er klart. If you can’t beat them, join them
Heldigvis er Facebook meget åben i en positiv forstand. Ok man skal have et login, for at kunne være med. Men Facebook inviterer websteder og webudviklerer med indenfor. Der er rige og muligheder for at joine Facebook ved at lave Facebook applikationer og ved at Integrerer sit websted med Facebook. Man starter med Facebook Udvikler .
Mindre kan også gøre det, ved at benytte sig af muligheden for at oprette Facebook grupper og Facebook profiler.
Facebook støtter Open Source bevægelsen
Facebook er jo lavet med PHP, og Facebook har bidraget med flere udviklingsprojekter til bla. PHP
Generelt virker det som om at danske web-udviklere endnu ikke er vågnet op til realiteterne på nettet. Jeg har dog fundet et firma, Komfo , som ser ud til at have fået fat i den lange hale( long tail).
Selv er jeg for ganske nyligt gået igang med at lære at lave Facebook applikationer med Ruby On Rails og Facebooker som jeg ser som det pt. bedste Rails plugin til Facebook. Så om alt går vel, kan jeg inden længe smykke mig med titlen – Facebook-udvikler . ;-)
Jeg håber snart at kunne dele mine erfaringer her på denne weblog.
Del
Posted in Ruby On Rails, Web Udvikling, Internet | Tags Facebook, google, trends | no comments
Posted by Anders Carlsen
Sun, 24 Jan 2010 17:06:00 GMT
Min første applikation på Google App Engine er oppe at køre.
http://bodeval.appspot.com/
Det tog ikke lang tid at sætte det op, da jeg først havde fundet den rigtige vejledning , selvom AppEngine SDK er til Python eller Java. Men med JRuby er og dygtige Rails udviklere, er der for længst fundet løsninger der gør det muligt at køre Rails på AppEngine.
Jeg brugte denne vejledning, Rails 2.3.5 on App Engine .
De sidste par år har jeg ikke rigtigt fulgt med i udviklingen på Internettet og udviklingen af Rails i særdeleshed. Det er et lidt typisk mønster. Da asp toppede ville jeg hellere arbejde med ASP.Net. Da ASP.Net toppede ville jeg hellere arbejde med Ruby On Rails, og i de sidste år hvor Rails er stormet frem, har jeg primært brugt min tid på at passe mine unger og tage en meritlærer-uddannelse.
Så der er en hel del ting jeg skal have fulgt op på med hensyn til Rails. Heldigvis er der næsten altid en god vejledning lige ved hånden.
Database integration er helt sikker en af de ting som jeg skal have fulgt op på for at få en bedre forståelse for hvordan man gør det bedst med Rails i år 2010.
Næste skridt er at jeg vil prøve at lave en Facebook applikation på Google :-)
Del
Posted in Ruby On Rails, Web Udvikling, Internet | Tags AppEngine, google, Rails | 1 comment
Posted by Anders Carlsen
Sat, 12 Jul 2008 00:48:00 GMT
Svendborgs lokale Google – Svendborg Web har fået en lillebror i form af Århus Web .
Århus Web er en opdateret version til Rails 2.1.0 af koderne fra Svendborg Web.
Det er dejligt at have tid til at hygge kode lidt efter et år med studier hvor der ikke har været meget tid til den slags.
Nu skal jeg blot have fyldt links i Århus nye lokale link index, så er vi klar til at tage kampen op mod Google.
Del
Posted in Ruby On Rails | no comments
Posted by Anders Carlsen
Mon, 09 Apr 2007 23:19:00 GMT
Så blev jeg omsider færdig med mit billedgalleri, lavet med Ruby On Rails

Det kan ses på adressen:
http://1001line.dk/galleri/1
Del
Posted in Ruby On Rails, Web Udvikling | Tags photos | no comments
Posted by Anders Carlsen
Sun, 01 Apr 2007 21:59:00 GMT
Jeg er ved at skrive et Billed Galleri komponent i Ruby On Rails. Via Flickr er jeg blevet opmærksom på at digitale kameraer gemmer meta data om billeder i selve billedet.
Så jeg tænkte hvordan får man fat i de data med Rmagick. F.eks. kunne - Camera Date - det tidspunkt billedet er taget på være interesant at få med i min billed database. Det ville gøre det lettere for mig at udvælge f.eks.
forårsbilleder, vinterbilleder, morgenbilleder eller aften billeder osv.
Så hvordan gør man det og kan man overhovedet gøre det?
Det lykkedes mig ikke at finde noget jeg kunne bruge i Rmagicks ellers så anvendelige
dokumentation. Måske gemmer det sig et eller andet sted i teksten.
Det er ikke altid at dokumentationen til diverse Ruby libs er tilstrækkelige. Tilgengæld så er Ruby stadigt et så exklusivt sprog at det som regl lykkes en at finde et eller andet stykke kode som en anden har lagt ud på nettet, som man kan bruge.
Jeg fandt denne kode på
Alexa Developers Corner
Og så er det jo ganske let at få fat i billedets metadata.
image = Magick::Image.read( "my_picture.jpg" ).first
puts image["Exif:DateTime"]
puts image["Exif:Make"]
puts image["Exif:Model"]
puts image["Exif:ExposureTime"]
puts image["Exif:FocalLength"]
Jeg er ikke kommet helt til bunds i problemstillingen, for jeg kan se i Picassa at et billede også har et UID, men det kan jeg ikke umiddelbart få fat i.
Del
Posted in Ruby On Rails, Web Udvikling | Tags Rmagick, Ruby | no comments | no trackbacks
Posted by Anders Carlsen
Fri, 23 Mar 2007 20:10:00 GMT
Hvis du skal igang med at lave page caching i Ruby On Rails kan jeg anbefale at du starter med at læsse denne blogpost.
Ruby on Rails Caching TutorialCaching i Ruby On Rails er lige så genialt skruet sammen som resten af webframworket.
Del
Posted in Ruby On Rails, Web Udvikling | no comments
Posted by Anders Carlsen
Tue, 20 Mar 2007 11:56:00 GMT
Converting Latitude/Longitude to Universal Transverse Mercator (UTM)
Adresse koordinater. Hvis man anvender
AWS webservicen og får hentet de koordinaterne til en adresse, kan man ikke umiddelbart bruge disse koordinater i Google Maps. Google Maps anvender et andet koordinatsystem kaldet UTM.
Hvis man ikke er geofysiker eller matamatik nørd kan konverteringen forekomme temmeligt uoverkommeligt
og dokumentation på området er vanskelig at finde hvis man ikke graver dybt i stoffe.
Men hvis man er så heldig at have adgang til en Linux Box er vejen til konvertering meget kort:
Der findes et perl libary som kan konverterer.
Så det skal jeg først installere:
apt-get install libgeo-coordinates-utm-perl nu kan jeg lave et perl script og køre det i konsollen:
test.pl :
---------------------------------------------------
use Geo::Coordinates::UTM;
my($latitude,$longitude)=utm_to_latlon("WGS-84","32V",$ARGV[0],$ARGV[1]);
print "$latitude $longitude";
--------------------------------------------------------
> perl test.pl 719779.29 6174497.76
resultatet bliver udskrevet på skærmen.
Men hvordan får jeg det ind i min database med adresser uden at skulle igang med at lære perl?
Jeg laver et først et lille
test ruby-script:---------------------------------------------------
args = "719779.29 6174497.76"
a = `perl test.pl #{args }`
b = a.split
puts b[0]
puts b[1]
----------------------------------------------------------------
i ruby kan man køre system-kommadoer meget let. F.eks. `dir` i windows eller `ls` i linux
det som normalt skrive i konsollen lægges over i variablen a som jeg så konvertere til et array.
At håndtere MySql med Ruby er som at klø sig selv et hvis sted.
her er mit Ruby Script
convert_to_utm.rb
-------------------------------------------------------------------------------
require "mysql"
def getgeo(lo,la)
a = `perl test.pl #{lo} #{la}`
a.split
end
my = Mysql::new("localhost", "-my_username-", "-my_password-", "-my_database-")
res = my.query("select * from addresses")
res.each_hash do |row|
a = `perl test.pl #{row['easting']} #{row['northing']}`.split
sql = "update adresser set latitude = '#{a[0]}',longitude = '#{a[1]}' WHERE id = #{row["id"]}"
my.query(sql)
end
-----------------------------------------------------------------------------------
Wupti Google Maps here we come
Både perl og ruby køre fint på windows. Så har du ikke en Linux box kan du sagtens bruge eksemplet alligevel.
Det er bare så dejligt let at installerer libaries med debian/linux.
Del
Posted in Ruby On Rails, Web Udvikling, Internet | Tags Ruby | no comments
Posted by Anders Carlsen
Wed, 14 Mar 2007 09:06:00 GMT
Pæne url'er.
Jo de er pænere at se på, men først og fremmest er de lettere at læse og tyde. Hvis man ikke ligefrem er autist har de fleste lettere ved få mening ud af f.eks
/musik_dansesteder end
category_id=260 , hvis man er ved at analysere statestik fra ens website. Andre folk som besøger ens website bliver ubevidst utrygge ved lange query strings.
Med Ruby On Rails er det meget let at håndterer sine Url'er så de bliver pæne.
Jeg har for nyligt lagt en database med
danske folkekirker på nettet. Kirkerne er delt op i de nye kommunale regioner. Regionerne er delt op i kommuner og endeligt er der så sidste led med kirkerne. I det konkrete eksempel har jeg ikke haft brug for det sidste led, men ellers ville URLen have set sådan ud uden pretty urls.
http://1001line.dk/kirker?region=syd_danmark&kommune=svendborg_kommune&kirke=egense_kirkeistedet for kommer den til at se sådan her ud:
http://1001line.dk/kirker/syddanmark/svendborg/egense_kirke
I begge tilfælde vil alle queries blive håndteret fra den samme fil (kirker).
Men med Ruby On Rails' ruting er det meget enkelt at konfigurere min web applikation så at den sidste query bliver vist det rigtige sted hen.
Konfigurationen ser sådan ud:
map.connect 'kirker/:region/:kommune', :controller => 'kirker', :action => 'index', :region => /.*/, :kommune => /.*/På den måde bliver region tilgængelig som
param[:region]
Del
Posted in Ruby On Rails, Internet | no comments
Posted by Anders Carlsen
Fri, 09 Mar 2007 18:46:00 GMT
Jeg ønskede at lave nyheder med RSS på min lokal hjemmeside
Svendborg WebRss er meget let at arbejde med når man bruger Ruby
En to tre .. så er der nyheder på min hjemmeside.
Eneste problem jeg stødte på, fordi jeg stadigt har meget at lære om Ruby, var at jeg ønskede at
sortere nyhederne fra forskellige kilder efter dato og tid.
sådan :
items.sort{ |x, y| y.pubDate <=> x.pubDate}-----------------------------------------------------------------------------------
require 'open-uri'
require 'rss/2.0'
require 'rss/parser'
def getFeeds(url,key_word)
items = []
rss = RSS::Parser.parse(open(url))
rss.items.each do |item|
if item.category.to_s.index(key_word) or item.description.to_s.index(key_word) or item.title.to_s.index(key_word) then
items << item
end
end
items
end
rss_feeds = ["http://www.tv2fyn.dk/rss",
"http://www.dr.dk/regioner/fyn/newsfeed/rss",
"http://www.jp.dk/rss_indland/",
"http://www.fyens.dk/rss.xml"]
items = []
rss_feeds.each{|feed| items.concat(getFeeds(feed,"Svendborg"))}
a = items.sort{ |x, y| y.pubDate <=> x.pubDate}
html = "<ul id=\"news_feeds\">"
a.each do |item|
html << "<li>\n<h3><a href=\"#{item.link}\" target=\"_blank\">" +item.title + "</a></h3>\n"
html << item.description + "<br />\n"
html << "<span class=\"date\">" + item.pubDate.strftime("%H:%M %d %b %y") + "</span>\n"
html << "</li>\n"
end
html << "</ul>"
File.open('news.html','w').write(html)
Her er ressultatet :
-
Sangeren og skuespilleren Otto Brandenburgs aske skal strøs ud over det sydfynske ø-hav.
14:39 09 Mar 07
-
13:14 09 Mar 07
-
Politiet i Svendborg betragter torsdagens voldsomme brand i Ryslinge som en tragisk ulykke. 31-årig mand svæver stadig i livsfare.
10:25 09 Mar 07
-
Vindmøllekoncernen Vestas har sat bygningerne på Frederiksøen, der tidligere husede Svendborg Værft, til salg.
12:19 08 Mar 07
-
Torsdag stod det fast, hvad rygterne har talt om i nogen tid. GOG Svendborg TGIs herreligahold bliver forstærket med to markante, Islandske spillere.
11:49 08 Mar 07
-
Onsdag aften blev der kastet en flaske med brændbar vædske ind af et vindue til Serapionsordenens mødelokale i Svendborg.
09:08 08 Mar 07
-
61.401 underskrifter imod lukningen af Svendborg Sygehus gør indtryk på politikerne, der nu tager de utilfredse fynboers protester til efterretning.
16:47 05 Mar 07
Del
Posted in Ruby On Rails, Web Udvikling | no comments