Sölutorg Umræðan Heimasíður
Mynd / Myndband
Kveðjur frá gestum
Ingi Gauti Ragnarsson
    • Ingi Gauti Ragnarsson
    • 38 ára
C#, ASP.Net, javascript(usually jQuery related), html5, css3 is mostly what I post, sometimes some other stuff. Creator of bland.is


2| 13.12.2011 18:13:40

Sent MailChimp an Email

I sent MailChimp an email today with some thoghts that I had and how I estimate how many people open up my emails when I send them out. Maybe a help to someone out there. Here is the email. 

I talked to you guys on twitter,  https://longrep.ly/r/d199dc1d

and just wanted to clarify what I meant and maybe that is something you would consider.

Pre story: I used your service for a while but I'm sending 130 thousand+ emails, so it was to expensive so I wrote my own service, I tracked opened email just like you guys with 1px image.

you explain how you track opened emails.
Then there is this sentence.
"someone clicks a link in your message, we'll register that as an "open."".

One thing that I forgot about doing in my system was to mark a message open when a user clicks a link. This misstake had a great value after all. Now I can see how many users that have click a link haven't opened up the email. This way I can estimate how many actually see the email.

Here is an example of my data
Total known open emails:13,859
Clicked & opened emails: 1,682
Clicked & not opened emails:2,218

Since I know about 57% of the users that clicked the link in my email wasn't marked as opened I can estimate total open emails as 32,230. With the number of emails I send out, I feel pretty sure that these numbers are close to the real numbers

Just wanted to share this with you guys since I haven't seen you do this or any other.

I'm also sharing this idea with you because I love the contribution that you give out as open source like the email template, it saved me ton of time

So this is how I estimate the amount of opened emails since the 1px image is really flawed. 


1| 11.7.2011 17:06:02

Lucene stop orð fyrir íslensku

Hérna er listi af orðum sem ég notaði sem stop orð fyrir Lucene(icelandic stop words), ég fór aldrei lengran en þetta, bjó ekki til íslenskan Stemmer.

"og", "að", "eða", "það", "var", "í", "við", "á", "þar", "er", "um", "til", "þetta", "sv", "ég", "br", "sem", "með", "en", "fyrir", "svo", "bara", "mér", "af", "hvað", "þá","því", "eru", "svona", "þú", "vera", "ef", "hann", "hún", "þegar", "mig", "upp", "eftir", "alveg", "þið", "finnst", "hjá", "nú", "líka", "sé", "hef", "já", "eins", "verið", "fara", "allt", "út", "ykkur", "alltaf", "gera", "þér", "einhver", "hafa", "veit", "mín", "hvernig", "búin", "mikið", "væri", "hefur", "sér", "hér", "vel", "frá", "a", "fá", "inn", "úr", "sig", "held", "href", "blank", "http","target", "kv", "qout", "þau", "eitthvað", "sko", "fór", "þeir", "þær", "..."

Listinn kemur úr algengustu orðunum sem voru í indexinum hjá mér fyrir umræðuna á bland.is 

Þetta voru orð sem mér fannst ekki eiga við og fann að listinn virkaði ágætlega. Það er síðan hægt að taka þetta lengra með því að nota ordid.is og mappa öll orð t.d. til að finna beygingar.


0| 7.7.2011 11:57:15

Changing regular website to a pushState website

For the past six months I've been moving our website from the classic type website to more modern technology ajax type website using pushState instead reloading the page each time you click a link.

The trouble that comes up when changing the website to use pushState are different then if you had designed the site originally as a ajax site. You want to try to use as much the same content as you can possible do. These are few of the issue that I had to address.

Relative links

These are bad. Always link to files on your server from the root directory. Why is this? Lets say a user clicks a link, he goes from http://bland.is/ to http://bland.is/album/, when using pushState, you simply load the content that you need, the url in the addressbar changes but the links in the content that you just loaded thinks that they should be linking from http://bland.is/ instead http://bland.is/album/. So a link pointing to http://bland.is/album/new.htm that is setup like this <a href="new.htm"> will not work. To make it work, set it as <a href="/album/new.htm">

You may be able use some sort of javascript hack and change the base address each time you load.

Clicking links  

Going from the classic app to a more modern type, you have to decide how you want to load those pages and call pushState. The way I went was using jQuery and the delegate function on all click event on <a>. Here is the code

$(document).ready(function() { if (history.pushState) { $('body').delegate('a', 'click', function (e) { var that = $(this); var url = (typeof that.attr('href') != 'undefined') ? that.attr('href').replace('http://bland.is', '') : ''; if (allowPush(e, url, that)) { e.preventDefault(); history.pushState({load:true}, '', url); loadContent(lastObj, url); } }); } });

This is simply to set the click event on <a>. Then I have the allowPush function, there are simply put 14 reasons why you shouldn't use the pushState. Maybe more with time


function allowPush(e, url, that) { return (!e.ctrlKey && !e.metaKey && !e.altKey && !e.shiftKey && url != '' && url.indexOf('#')== -1 && url.indexOf('javascript') == -1 && url.indexOf('http://') == -1 && url.indexOf('https://') == -1 && (typeof that.attr('target') == 'undefined' || that.attr('target') == '')  && !that.hasClass('nobbq') && typeof $.data(that.get(0), 'events') == 'undefined' && isHtmlPage(url) && typeof disablePush == 'undefined') }
  • You need !e.ctrlKey && !e.metaKey && !e.altKey && !e.shiftKey to allow people to Ctrl/Cmd click a link to open in a new window
  • Don't do anything if there is an anchor, url.indexOf('#')==-1
  • Don't do anything if there is javascript: in the link, url.indexOf('javascript') == -1
  • Don't do anything if there is http in the link, this is an external site then, url.indexOf('http://') ==-1
  • Don't do anything if there is a target on the link, (typeof that.attr('target') == 'undefined' || that.attr('target') == '')
  • Don't do anything if there is a event binded to a link, typeof $.data(that.get(0), 'events') == 'undefined' 
  • Don't do anything if the link is a static page
  • Enable the site that is loaded to disable pushState, typeof disablePush == 'undefined', sometimes you just want that.
  • The !that.hasClass('nobbq') is a leftover from using BBQ, but if I set that class on the link it will not use pushState

So if that all works out, I load the content

function loadContent(obj, url) { if (currentXhr != null && typeof currentXhr != 'undefined') { currentXhr.abort(); } $('body').css('cursor', 'progress'); var that = null; if (obj != null) { that = $(obj); } currentXhr = $.get(url, function (data) { currentXhr = null; if (typeof unbindWindow != 'undefined') unbindWindow(); $("#loading").hide(); $('#centercontent').html(data); $('html, body').animate({ scrollTop: $("#userInfoBar").offset().top }, 0); $('body').css('cursor', 'auto'); }); }

At the begining, start to cancel any previous xhr request, this is one of the great things about having access to request, so if the user is impatient and starts clicking ten links, only the last click will be active. This saves the server load, specially when the server usually needs it most, when it's slow and users usually make it worse by being impatient.

Now you load the content using $.get function, here comes the most important function, unbindWindow(), if there is anything that you need to take from this post, this is the function. Check it out below.

Then I simply load the content into the main content, called #centercontent, and scroll the user to the top. 

Unbind events (unbindWindow())

At first I didn't realize this, but boy this is important. When you load a content using pushState, the document.ready event may run a script something like this

$('#somebutton').click(function() {

//do stuff


You are binding a click event to #somebutton button, now the user clicks some link so the pushState happens and it loads some new content into the main content, that click event is still active in the browser, but the button doesn't exists anymore, creating a memory leak(event leak?). So when you have multiple binding on links, buttons, images, etc.

You must remember to unbind the event when you unload the content. If you forget that, with time the browser and the site will come extremly slow. Also, lets say that you don't unbind that click event, and you load the same page 3 times, each time the click event will be binded to $('#somebutton'), so when the button is click, it will fire 3 times. Not the result that you want.

So on the page that you load with pushState, you need to have the unbindWindow() function, to unbind all the binding that you have made. In the above example it would be

function unbindWindow() {



The other content

Now that you have pushState, there are some troubles. Like the content around the main content that never changes. You are always loading the main content, but the header of the site never changes, and if you have left/right sidebar, that never changes as well. Depending on your site design this can be a problem, for me it was and still is. 

For instance, in the header I have the login information, your username, access to private messages, notification, etc. but since you never reload the header, just the content, you may be logged out of the site and not know it. If a logged in user moves away from the computer and comes back after 2 hours, he expects that the next time he clicks a link he will be logged out, because of behavoiur from the old web. But even though he is logged out, he thinks that he is logged in, since the header doesn't change.

Then you have problem like advertises, since you never reload the page again, you are always displaying the same ads, so you need to write an extra module that loads new advertises every XX seconds.

Benefits of pushState

Faster. Smaller content over the wire. Faster. Lower server load. Faster. Fewer DOM for browser to parse. Faster. Enough said.



0| 6.7.2011 12:01:40

Hvað gerist þegar þú setur inn link á twitter.com

Um daginn setti ég link inná twitter.com sem vísaði inná uppitíma síðuna okkur. Hún sýnir hvernig síðustu 90 mínútur hafa verið á vefnum í sambandi við hraða og hvort vefurinn hefur svarað. Y línan sýnir sekúndur, nokkuð ánægður með að svartíminn er oftast < 1 sek. 

Þar sem þessi síða hefur ekki verið public, þá hef ég loggað niður User-Agentin niður í texta skrá þegar einhver heimsækir. Mest af því er ég að skoða þessa síðu, einstaka Bot fyrir leitarvél.

Ég skellti síðan linknum inná twitter, uppá gamanið. Ég kíki svo á textaskránna í gær og hún kom nokkuð á óvart. Þvílíkt magn af robot-um sem koma vegna linksins er alveg ótrúlegt.

Hér kemur listinn, ég tók út venjuega vefskoðara

12:42:30:Mozilla/5.0 (compatible
12:42:30:JS-Kit URL Resolver, http://js-kit.com/
12:43:05:Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
12:42:33:Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
12:42:34:Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
12:42:37:Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
12:43:11:Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
12:43:11:Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
12:43:12:Mozilla/5.0 (compatible; suggybot v0.01a, http://blog.suggy.com/was-ist-suggy/suggy-webcrawler/)
12:42:40:Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
12:42:40:Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
12:42:41:Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
12:43:14:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
12:42:41:LinkedInBot/1.0 (compatible; Mozilla/5.0; Jakarta Commons-HttpClient/3.1 +http://www.linkedin.com)
12:42:42:PostRank/2.0 (postrank.com)
12:42:43:Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
12:42:44:Mozilla/5.0 (compatible; suggybot v0.01a, http://blog.suggy.com/was-ist-suggy/suggy-webcrawler/)
12:43:18:Mozilla/5.0 (compatible; Butterfly/1.0; +http://labs.topsy.com/butterfly/) Gecko/2009032608 Firefox/3.0.8
12:44:25:Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
12:44:20:MetaURI API/2.0 +metauri.com
12:44:22:MetaURI API/2.0 +metauri.com
12:44:29:Mozilla/5.0 (compatible; U; AnyEvent-HTTP/2.12; +http://software.schmorp.de/pkg/AnyEvent)
12:51:27:Mozilla/5.0 (compatible; MSIE 6.0b; Windows NT 5.0) Gecko/2009011913 Firefox/3.0.6 TweetmemeBot
12:50:57:Mozilla/5.0 (compatible; MSIE 6.0b; Windows NT 5.0) Gecko/2009011913 Firefox/3.0.6 TweetmemeBot
12:51:43:Mozilla/5.0 (compatible; Evrinid Iudex 1.0.0; +http://www.evri.com/evrinid)
12:51:43:Summify (Summify/1.0.1; +http://summify.com)
12:52:56:Wget/1.11.4 Red Hat modified
14:08:37:AppEngine-Google; (+http://code.google.com/appengine; appid: mapthislink)
14:10:57:Showyoubot (http://showyou.com/support)
14:17:07:Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)
15:44:30:Mozilla/5.0 (compatible; TweetedTimes Bot/1.0; +http://tweetedtimes.com)
15:59:51:Mozilla/5.0 (compatible; TweetedTimes Bot/1.0; +http://tweetedtimes.com)
19:34:27:Twitturly / v0.6

6.7.2011 12:36:24
*Mjög* áhugavert. Takk fyrir þetta :)


0| 4.7.2011 17:34:19

Setja upp Google Apps fyrir lénið mitt

Google Apps býður uppá fría póstþjónustu(og svo margt annað) fyrir lítil fyrirtæki og einstaklinga sem eru með sitt lén. Hérna eru leiðbeiningar hvernig á að setja það upp. Hérna miða ég að því að nota X.is sem hýsingaraðila fyrir lénið þitt, það kostar ekkert þannig að það er tilvalið.

Byrjaðu á Google Apps, smellir á "Get started" takkann og slærði inn lénið þitt, ég ætla að nota daemi.is. Fyllir svo út allar upplýsingarnar þínar, og vistar. Næstu síðu velurðu notendanafn. Ég er alltaf með ingig, þannig að ég set ingig@daemi.is, vel lykilorð og klára restina. Þegar þú vistar, þá ertu komin inní Admin fyrir lénið þitt.

Núna skráirðu þig inn á X.is með notendanafninu þínu og lykilorði. Fyrst þarftu að fara í "Mínar Stillingar"/"My settings", þar hakarðu við "DNS viðmót fyrir lengra komna"/"Advanced DNS interface" og smellir á Vista/Save.

Smellir núna á "DNS Yfirlit"/"DNS Overview" í vinstri hliðinni á vefnum, og svo græna hnöttinn við lénið þitt til að breyta stillingunum. 

Smellir núna á "Ný DNS færsla"/"New DNS Record"

  • "Tegund"/"Type" velurðu "MX"
  • "Nafn"/"Name" slærðu inn daemi.is. (skiptu út þínu léni og passaðu að hafa punktinn þarna í endann)
  • "Efni"/"Content", slærðu inn ASPMX.L.GOOGLE.COM. (passaðu að hafa punktinn í endann)
  • TTL = 86400
  • "Forgangur"/"Priority" = 10

Nú endurtekurðu þessa aðgerð 6 sinnum, eina sem breytist er "Efni"/"Content" og "Forgangur"/"Priority"





Þegar þú hefur vistað þessar upplýsingar, þá ferðu aftur inní Google App Admin hlutann(gætir þurft að skrá þig inn með notendanafni og lykilorði, ég var með ingig@daemi.is), smellir á "Dashboard" og þar undir Email smellirðu á "Activate Email", þar neðst niðri smellirðu á "I've completed these steps". Það getur svo tekið alltað 24 klst til að staðfestast.


0| 4.7.2011 16:25:03

Að nota lén með heimasíðukerfinu hjá bland.is

Nýja heimasíðukerfið inná bland.is er mjög öflugt og gefur fyrirtækjum og einstaklingum með sín lén að hýsa síðuna hjá okkur. Hérna koma leiðbeiningar um hvernig það er gert með lágmarks kostnaði. Í þessu dæmi mun ég vera með lénið dæmi.is, þannig að þú skiptir dæmi.is út fyrir þitt lén.

Ef þú átt ekki lén, þá þarftu að byrja á að kaupa þér lén. Íslensku lénin færðu hjá isnic.is, þú kaupir það þarna inni. Þú getur notaða hvaða lénaendingu sem þú vilt. Ef þú kaupir lén á isnic.is þá mæli ég með að fyrir Vistunaraðila, þá velurðu X.is ef þú vilt hýsa lénið þitt frítt (þetta er ekki heimasíðan þín)

Ef þú átt lén, og vilt hýsa lénið þitt að kostnaðarlausu, þá geturðu breytt því í X.is undir Vistunaraðilar inná isnic.is. Þá skráirðu þig inn á isnic.is, velur lénið þitt og velur "Flytja hýsingu". Þar inni velurðu svo X.is

Þegar þú er komin með lén, þá þarftu að setja upp DNS færslu fyrir lénið þitt. X.is býður uppá að hýsa DNS færslurnar frítt, þú skráir þig hjá þeim ef þú ert ekki með notandanafn. Þegar þú hefur skráð þig inn, þá smellirðu á "DNS Yfirlit"/"DNS Overview" í vinstri hliðinni á vefnum. Nú smellirðu á "Nýtt lén"/"New domain". Í dálkinum "Lénasafn"/"Domain name", slærðu inn lénið þitt, ef ég væri með lénið dæmi.is, þá mundi ég slá inn dæmi.is, í iptöluna slærðu inn Smelltu núna á "Vista"/"Save". Nú bætist lénið þitt í listann undir "Mín lén"/"My domains".

Nú þarftu að tengja lénið þitt við kerfið inná bland.is. Þú skráir þig inná bland.is með notendanafninu þínu og ferð í "Síðurnar mínar" og smellir á "Breyta heimasíðu". Þegar þú ert kominn inná heimasíðuna, þá smellirðu á "Stillingar heimasíðu". Undir "Lén" slærðu inn lénið þitt, í mínu tilfelli dæmi.is og vistar.

Nú hefur tengt DNS færsluna við kerfið hjá okkur. Eftir nokkra klukkutíma (allt að 24 klst) mun lénið verða virkt. Þetta fer svolítið eftir stillingum sem voru á DNS færslunni.


0| 20.6.2011 17:41:05

RÍF 2011

Um helgina var haldin viðburðurinn Reynslusögur Íslenskra Frumkvöðla, þetta var mjög svo skemmtilegt og hélt ég fyrirlestur þar. Glærurnar eru hérna fyrir neðan

RÍF 2011 Um daginn hélt ég líka léttan fyrirlestur um samfélagshlutann á vefnum fyrir Íslenska Samfélagsmiðlun, glærurnar eru hérna


0| 30.5.2011 14:14:16

Connecting to twitter using a library

The easest way to connect to Twitter using their API in C# seems to be http://www.twitterizer.net/ It's quick and easy, took me about 10 minutes to figure it out and make it work. So now you can have automatic posting to Twitter from our system. I highly recomend Twitterizer.


0| 11.5.2011 10:45:16

Error with IIS app pool, compstat.dll failed to load

So I go this message

The Module DLL C:\Windows\System32\inetsrv\compstat.dll failed to load.  The data is the error.

When trying to start up application pool. I have a shared configuration between servers, the server that got the error didn't have static compression installed so it couldn't start. Even though I had disabled compression. 

The way I figured it out is because of this page http://learn.iis.net/page.aspx/101/introduction-to-iis-7-architecture/ where it says that this module is for static compression

Páll Böðvar Valgeirsson
4.7.2014 09:25:34
Þarf greinilega að laga eitthvað hér !!!!


0| 8.4.2011 12:18:50

QR kóði fyrir heimabanka

Í gær var Íslensk samfélagsmiðlun, ýmislegt skemmtilegt rætt. Eins og alltaf eftir hittinginn þá er setist niður og spjallað, og þá verða oft til skemmtilega pælingar og maður lærir eitthvað.

Eftir einhvern tíma af spjalli við @valurthor þá byrjaði spjallið að koma heimabanka forriti í farsíma, þá kviknaði hugmynd um að það væri hægt að setja formið til að greiða í heimabanka(í færslunni fyrir neðan) inn sem QR kóði. Þannig geturðu hver sem er greitt fyrir eitthvað á götunni einfaldlega með því að smella mynd af QR kóða. 

Tvær dæmisögur um hvernig hægt væri að nota þetta

  • Hljómsveitir geta verið með qr kóða til að kaupa geisladiskinn með fyrirfram ákveðnu verði á tónleikum
  • Hjálpastofnanir geta auglýst og verið með QR kóða í auglýsingunni með valdri upphæð

Einföld en sjálfsögð hugmynd