<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>(╯°□°）╯︵ ┻━┻</title><link>https://johan.karlsteen.com/</link><description>Recent content on (╯°□°）╯︵ ┻━┻</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 13 Feb 2026 12:00:00 +0100</lastBuildDate><atom:link href="https://johan.karlsteen.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Heimdall - Building an Open Source Salesforce Backup from Scratch</title><link>https://johan.karlsteen.com/2026/02/13/heimdall-open-source-salesforce-backup/</link><pubDate>Fri, 13 Feb 2026 12:00:00 +0100</pubDate><guid>https://johan.karlsteen.com/2026/02/13/heimdall-open-source-salesforce-backup/</guid><description>&lt;h2 id="the-problem">The Problem&lt;/h2>
&lt;p>If you&amp;rsquo;ve ever managed a Salesforce org of any meaningful size, you know the backup situation is&amp;hellip; not great. Salesforce gives you Weekly Export, which is a manual process that dumps CSVs once a week. For anything more sophisticated you&amp;rsquo;re looking at commercial solutions like OwnBackup or GRAX, which charge per user per month and quickly add up.&lt;/p>
&lt;p>I&amp;rsquo;ve seen the full spectrum. When I joined my current org, someone was manually downloading Weekly Export and dropping it on a file server. We moved to GRAX, which worked but cost a fortune at scale. After about a year of that I started building my own solution. It&amp;rsquo;s been running in production for years now, and I recently open-sourced it. Here&amp;rsquo;s the story of how it evolved.&lt;/p></description></item><item><title>Tracking File Downloads in Salesforce using Platform Events and Big Objects</title><link>https://johan.karlsteen.com/2019/07/02/tracking-downloads-in-salesforce/</link><pubDate>Tue, 02 Jul 2019 11:20:42 +0200</pubDate><guid>https://johan.karlsteen.com/2019/07/02/tracking-downloads-in-salesforce/</guid><description>&lt;h3 id="the-problem">The problem&lt;/h3>
&lt;p>Recently I was tasked with tracking downloads of certain files in Salesforce, more specifically files related to Opportunities. This is a common problem where you want to know if a Sales person is downloading customer data to be able to bring some customers with them when they move on to a new employer.&lt;/p>
&lt;p>Using Salesforce shield was not an option, mainly because of the price, so it had to be done with &amp;ldquo;Standard Salesforce&amp;rdquo;, this is a term often heard but it usually means that we&amp;rsquo;re going to customise as hard as possible without installing anything from a 3rd party.&lt;/p></description></item><item><title>Why I Left Facebook et al. and You Should Too</title><link>https://johan.karlsteen.com/2019/04/03/why-i-left-facebook-et-al-and-you-should-too/</link><pubDate>Wed, 03 Apr 2019 09:39:51 +0200</pubDate><guid>https://johan.karlsteen.com/2019/04/03/why-i-left-facebook-et-al-and-you-should-too/</guid><description>&lt;!-- raw HTML omitted -->
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Ever since that GDPR date last year I&amp;rsquo;ve thinking a lot about social media and especially Facebook and Instagram. When I logged into Instagram the day after GDPR went into effect I just couldn&amp;rsquo;t accept the new terms, which is weird because blindly accepting EULAs has kind of been a think ever since I installed Windows for the first time.&lt;/p>
&lt;p>I just never accepted it and suddenly I didn&amp;rsquo;t have to endlessly scroll that feed while commuting, I listened more to my audiobooks instead. Still I sometimes ended up scrolling in the video feed of Facebook which was probably even worse.&lt;/p></description></item><item><title>Migrating from Wordpress to Hugo</title><link>https://johan.karlsteen.com/2019/04/02/moving-from-wordpress-to-hugo/</link><pubDate>Tue, 02 Apr 2019 14:39:41 +0200</pubDate><guid>https://johan.karlsteen.com/2019/04/02/moving-from-wordpress-to-hugo/</guid><description>&lt;p>About a year ago a friend made fun of me when I said I was using Wordpress, apparently Wordpress was not that hot anymore and he started talking about &lt;a href="https://gohugo.io">Hugo&lt;/a>.&lt;/p>
&lt;p>Hugo is a static site generator where you write your posts in markdown and a generator written in Go generates your site as static content. There are some benefits here:&lt;/p>
&lt;ol>
&lt;li>You don&amp;rsquo;t rely on a database and an internet connection when writing a draft post&lt;/li>
&lt;li>You can host the site in an S3 bucket which means you don&amp;rsquo;t have to have a Linux server.&lt;/li>
&lt;li>Having no server means that you can&amp;rsquo;t be hacked&lt;/li>
&lt;/ol>
&lt;p>One drawback is that a static site cannot have search and comments but these can be mitigated by using &lt;a href="https://www.algolia.com/">Algolia&lt;/a> and &lt;a href="https://disqus.com">Disqus&lt;/a>.&lt;/p></description></item><item><title>Mass deleting picklist values in Salesforce with AJAX javascript hack (2018 version)</title><link>https://johan.karlsteen.com/2018/09/11/mass-deleting-picklist-values-in-salesforce-with-ajax-javascript-hack-2018-version/</link><pubDate>Tue, 11 Sep 2018 13:10:06 +0000</pubDate><guid>https://johan.karlsteen.com/2018/09/11/mass-deleting-picklist-values-in-salesforce-with-ajax-javascript-hack-2018-version/</guid><description>&lt;p>
 &lt;img src="https://johan.karlsteen.com/img/2018-09-11/delete-all-the-things.jpg" alt="">

&lt;/p>
&lt;p>More than 5 years ago I wrote an article on how to &lt;a href="https://johan.karlsteen.com/2013/04/20/mass-deleting-picklist-values-in-salesforce-with-ajax-javascript-hack/">Mass delete Picklist values in Salesforce&lt;/a>, this is still my most visited article and I have been meaning to get back to it for years. At least now it seems like it will be a part of the standard functionality sometime in the near future (&lt;a href="https://success.salesforce.com/ideaview?id=08730000000Bp3fAAC(setup)">mass delete picklist values (setup)&lt;/a>) but today I had to do this at a customer so I had to solve it once again.&lt;/p></description></item><item><title>Streaming Steam games from Amazon EC2 to Steam Link over OpenVPN tunnel featuring Pfsense and VMware</title><link>https://johan.karlsteen.com/2018/07/03/streaming-steam-games-ec2-steamlink-openvpn-pfsense/</link><pubDate>Tue, 03 Jul 2018 18:00:11 +0000</pubDate><guid>https://johan.karlsteen.com/2018/07/03/streaming-steam-games-ec2-steamlink-openvpn-pfsense/</guid><description>&lt;p>
 &lt;img src="https://johan.karlsteen.com/img/2018-07-03/ec2-steam-pfsense-steamlink-1024x576.png" alt="">

&lt;/p>
&lt;p>Oh have I longed to write this blog post, ever since I bought a Steam Link for myself as a christmas gift I&amp;rsquo;ve been wanting to make use of it. I&amp;rsquo;m the kind of person who sometimes (a bit too often) buys stuff first and motivates the purchase later (sometimes with a bit too much infrastructure).&lt;/p>
&lt;p>Anyways this blog post was a starting point for me:
&lt;a href="https://lg.io/2015/07/05/revised-and-much-faster-run-your-own-highend-cloud-gaming-service-on-ec2.html#setting-up-steam">Revised and much faster, run your own high-end cloud gaming service on EC2!&lt;/a>&lt;/p></description></item><item><title>Exporting Salesforce Files (aka ContentDocument)</title><link>https://johan.karlsteen.com/2018/07/03/exporting-salesforce-files-aka-contentdocument/</link><pubDate>Tue, 03 Jul 2018 11:15:15 +0000</pubDate><guid>https://johan.karlsteen.com/2018/07/03/exporting-salesforce-files-aka-contentdocument/</guid><description>&lt;p>Last week a client asked me to help out, we had been creating a system that creates PDF files in Salesforce using &lt;a href="https://www.docusign.com/partner/drawloop">Drawloop&lt;/a> (today known as Nintex Document Generation which is a boring name).&lt;/p>
&lt;p>Anyways, we had about 2000 PDF created in the system and after looking into it there doesn&amp;rsquo;t seem to be a way to download them in bulk. Sure you can use the Dataloader and download them but you&amp;rsquo;ll get the content in a CSV column and that doesn&amp;rsquo;t really fly with most customers.&lt;/p></description></item><item><title>Talk to the fridge! (using Alexa, Salesforce and Electric Imp)</title><link>https://johan.karlsteen.com/2018/01/24/talk-to-the-fridge-using-alexa-salesforce-and-electric-imp/</link><pubDate>Wed, 24 Jan 2018 18:08:10 +0000</pubDate><guid>https://johan.karlsteen.com/2018/01/24/talk-to-the-fridge-using-alexa-salesforce-and-electric-imp/</guid><description>&lt;p>
 &lt;img src="https://johan.karlsteen.com/img/2018-01-24/23a3ra.jpg" alt="">

&lt;/p>
&lt;p>Long time no blog post, sorry. I have meant to write this post forever but I have managed to avoid it.&lt;/p>
&lt;p>Anyways, consider the scenario when you sit in your couch and you wonder:&lt;/p>
&lt;ul>
&lt;li>&amp;ldquo;What&amp;rsquo;s the temperature in my fridge?&amp;rdquo;&lt;/li>
&lt;li>&amp;ldquo;Did I close the door?&amp;rdquo;&lt;/li>
&lt;li>&amp;ldquo;What&amp;rsquo;s the humidity?&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;p>You have already installed your Electric Imp hardware in the Fridge (&lt;a href="https://trailhead.salesforce.com/en/projects/workshop-electric-imp">Best Trailhead Badge Ever&lt;/a>) and it&amp;rsquo;s speaking to Salesforce via platform events, you even get a case when the temperature or humidity reaches a threshold or the door is open for too long.&lt;/p></description></item><item><title>Visualise Big Object data in a Lightning Component</title><link>https://johan.karlsteen.com/2017/10/15/visualise-big-object-data-in-a-lightning-component/</link><pubDate>Sun, 15 Oct 2017 13:00:27 +0000</pubDate><guid>https://johan.karlsteen.com/2017/10/15/visualise-big-object-data-in-a-lightning-component/</guid><description>&lt;p>Good evening,&lt;/p>
&lt;p>In my previous post (&lt;a href="https://johan.karlsteen.com/2017/10/14/upgrade-your-electric-imp-iot-trailhead-project-to-use-big-objects/">Upgrade your Electric Imp IoT Trailhead Project to use Big Objects
&lt;/a>) I showed how you can use Big Objects to archive data and now I will show how you can visualise the data in a Lightning Component.&lt;/p>
&lt;p>So now we have big objects being created but the only way to see them is by executing a SOQL query in the Developer Console (&lt;code>SELECT DeviceId__c, Temperature__c, Humidity__c, ts__c FROM Fridge_Reading_History__b&lt;/code>).&lt;/p></description></item><item><title>Upgrade your Electric Imp IoT Trailhead Project to use Big Objects</title><link>https://johan.karlsteen.com/2017/10/14/upgrade-your-electric-imp-iot-trailhead-project-to-use-big-objects/</link><pubDate>Sat, 14 Oct 2017 13:12:38 +0000</pubDate><guid>https://johan.karlsteen.com/2017/10/14/upgrade-your-electric-imp-iot-trailhead-project-to-use-big-objects/</guid><description>&lt;p>I first heard about &lt;a href="https://resources.docs.salesforce.com/210/latest/en-us/sfdc/pdf/big_objects_guide.pdf">Big Objects&lt;/a> in a webinar and at first I didn&amp;rsquo;t really see a use case, and it was in BETA so I didn&amp;rsquo;t care that much but now that it was released in Winter &amp;lsquo;18 everything changed.&lt;/p>
&lt;p>My favourite Trailhead Badge is still the &lt;a href="https://trailhead.salesforce.com/projects/workshop-electric-imp">Electric Imp IoT&lt;/a> one and I had thought it would be fun to store the temperature readings over a longer period of time. Since I run my integration in a Developer Editions I have 5 MB of storage available, this is not that much given that I receive between 1 and 2 Platform Events per minute.&lt;/p></description></item><item><title>Uploading CSV data to Einstein Analytics with AWS Lambda (Python)</title><link>https://johan.karlsteen.com/2017/10/06/uploading-csv-data-to-einstein-analytics-with-aws-lambda-python/</link><pubDate>Fri, 06 Oct 2017 14:08:21 +0000</pubDate><guid>https://johan.karlsteen.com/2017/10/06/uploading-csv-data-to-einstein-analytics-with-aws-lambda-python/</guid><description>&lt;p>
 &lt;img src="https://johan.karlsteen.com/wp-content/uploads/2017/10/einstein-section-intro.png" alt="">

&lt;/p>
&lt;p>I have been playing around with Einstein Analytics (the thing they used to call Wave) and I wanted to automate the upload of data since there&amp;rsquo;s no reason on having dashboards and lenses if the data is stale.&lt;/p>
&lt;p>After &lt;a href="https://johan.karlsteen.com/2017/09/12/using-aws-lambda-functions-with-the-salesforce-bulk-api/">using Lambda functions against the Bulk API&lt;/a> I wanted to have something similar and I found another nice project over at Heroku&amp;rsquo;s GitHub account called &lt;a href="https://github.com/heroku/pyAnalyticsCloud">pyAnalyticsCloud&lt;/a>&lt;/p>
&lt;p>I don&amp;rsquo;t have a Postgres Database so I ended up using only the uploader.py file and wrote this Lambda function to use it:&lt;/p></description></item><item><title>Upgrade your Electric Imp IoT Trailhead Project to use Platform Events</title><link>https://johan.karlsteen.com/2017/10/05/upgrade-your-electric-imp-iot-trailhead-project-to-use-platform-events/</link><pubDate>Thu, 05 Oct 2017 16:00:54 +0000</pubDate><guid>https://johan.karlsteen.com/2017/10/05/upgrade-your-electric-imp-iot-trailhead-project-to-use-platform-events/</guid><description>&lt;p>As an avid trailblazer I just have to Catch &amp;lsquo;Em All (Trailblazer badges) and the project to integrate Electric Imp in my fridge was a fun one.
[caption width=&amp;ldquo;200&amp;rdquo; align=&amp;ldquo;alignnone&amp;rdquo;]&lt;a href="https://trailhead.salesforce.com/projects/workshop-electric-imp">
 &lt;img src="https://developer.salesforce.com/resource/images/trailhead/badges/projects/trailhead_project_build_an_iot_integration_with_electric_imp.png" alt="">


&lt;/a> Build an IoT Integration with Electric Imp[/caption]
After buying an USB cable to supply it with power it now runs 24/7 and I get cases all the time, haven&amp;rsquo;t really tweaked the setup yet.&lt;/p>
&lt;p>I have looked at the new Platform Events and I thought that this integration can&amp;rsquo;t be using a simple upsert operation on an SObject, it&amp;rsquo;s 2017 for gods sake! Said and done, I set out to change the agent code in the Trailhead project to insert a Platform Event every time it&amp;rsquo;s time to update to Salesforce.&lt;/p></description></item><item><title>Sous Vide Ginger Shots with Chili</title><link>https://johan.karlsteen.com/2017/10/03/sous-vide-ginger-shots-with-chili/</link><pubDate>Tue, 03 Oct 2017 17:00:12 +0000</pubDate><guid>https://johan.karlsteen.com/2017/10/03/sous-vide-ginger-shots-with-chili/</guid><description>&lt;p>Autumn means darkness, less sunlight and people sneezing wherever you go. One way to mitigate this is to make your own ginger shots with chili, honey and lemon.&lt;/p>
&lt;p>I&amp;rsquo;ve gotten this recipe from my mom and I do it regularly.&lt;/p>
&lt;pre>&lt;code> * 200 grams of fresh ginger
 * 1 liter of water
 * 1/2 deciliter of honey
 * 2 lemons
 * Chili (optional)
&lt;/code>&lt;/pre>
&lt;p>[caption id=&amp;ldquo;attachment_314&amp;rdquo; align=&amp;ldquo;alignnone&amp;rdquo; width=&amp;ldquo;584&amp;rdquo;]
 &lt;img src="https://johan.karlsteen.com/img/2017-10-03/resized001-e1507031529214-1024x768.jpg" alt="">


ginger habanero lemon[/caption]&lt;/p></description></item><item><title>Using AWS Lambda functions with the Salesforce Bulk API</title><link>https://johan.karlsteen.com/2017/09/12/using-aws-lambda-functions-with-the-salesforce-bulk-api/</link><pubDate>Tue, 12 Sep 2017 15:47:45 +0000</pubDate><guid>https://johan.karlsteen.com/2017/09/12/using-aws-lambda-functions-with-the-salesforce-bulk-api/</guid><description>&lt;p>
 &lt;img src="https://johan.karlsteen.com/wp-content/uploads/2017/09/s3-lambda-salesforce.png" alt="">

&lt;/p>
&lt;p>One common task when integrating Salesforce with customers system is to import data, either as a one time task or regularly.&lt;/p>
&lt;p>This can be done in several ways depending on the inhouse technical level and the simplest way might be to use the Import Wizard or the Data Loader. If you want to do it regularly in a batch fashion and are fortunate enough to have AWS infrastructure available using Lambda functions is an alternative.&lt;/p></description></item><item><title>Trailhead is awesome and gamification totally works!</title><link>https://johan.karlsteen.com/2017/09/03/trailhead-is-awesome-and-gamification-totally-works/</link><pubDate>Sun, 03 Sep 2017 20:15:11 +0000</pubDate><guid>https://johan.karlsteen.com/2017/09/03/trailhead-is-awesome-and-gamification-totally-works/</guid><description>&lt;p>About this time last year I decided to pursue a career within Salesforce, I was a bit tired of my current job and wanted a change. It was either a backend engineer role at iZettle or becoming a Salesforce Consultant. The consultant role was not new to me since that&amp;rsquo;s how I started my career. After signing the contract I decided to look at Trailhead since I heard a lot of good things about it.&lt;/p></description></item><item><title>Using Jenkins and Git for Metadata backups and running Test Cases</title><link>https://johan.karlsteen.com/2017/09/03/using-jenkins-and-git-for-metadata-backup-and-running-test-cases/</link><pubDate>Sun, 03 Sep 2017 10:15:08 +0000</pubDate><guid>https://johan.karlsteen.com/2017/09/03/using-jenkins-and-git-for-metadata-backup-and-running-test-cases/</guid><description>&lt;p>One thing that makes Salesforce great is the possibility to use it and customize it quite far without having to invite developers. I can see the beauty of this since developers are expensive and slow, before you think about writing a comment on that last statement keep in mind I&amp;rsquo;m a developer myself. One thing that code developers (as opposed to click developers) bring to the table is source control. This is mostly because anyone who has ever written a piece of code bigger than &amp;ldquo;hello world&amp;rdquo; knows that it&amp;rsquo;s super hard to get code right the first time, or the second time, and so on.&lt;/p></description></item><item><title>Time for a new start</title><link>https://johan.karlsteen.com/2017/08/06/time-for-a-new-start/</link><pubDate>Sun, 06 Aug 2017 18:22:55 +0000</pubDate><guid>https://johan.karlsteen.com/2017/08/06/time-for-a-new-start/</guid><description>&lt;p>So I haven&amp;rsquo;t posted anything for 4 years and I think it&amp;rsquo;s time for a fresh start. Nowadays I work as a Salesforce Consultant and I will try to share any knowledge I get about the force.com platform and hopefully it will be helpful. As any other developer I learn a lot of things by reading blogs and Stackoverflow so I&amp;rsquo;m hoping to give back in some way to the community.&lt;/p></description></item><item><title>Mass deleting picklist values in Salesforce with AJAX javascript hack</title><link>https://johan.karlsteen.com/2013/04/20/mass-deleting-picklist-values-in-salesforce-with-ajax-javascript-hack/</link><pubDate>Sat, 20 Apr 2013 09:52:02 +0000</pubDate><guid>https://johan.karlsteen.com/2013/04/20/mass-deleting-picklist-values-in-salesforce-with-ajax-javascript-hack/</guid><description>&lt;p>I have written an updated version of this post &lt;a href="https://johan.karlsteen.com/2018/09/11/mass-deleting-picklist-values-in-salesforce-with-ajax-javascript-hack-2018-version">Mass deleting picklist values in Salesforce with AJAX javascript hack (2018 version)&lt;/a>&lt;/p>
&lt;p>Today I was gonna do a small change in our Salesforce instance, namely replacing to 1100+ picklists with brand new values. Last time I did this I used Eclipse and just saved the file (Lead.object for example).&lt;/p>
&lt;p>But I realized that only new values are added and old ones are not removed and as usual there are number of requests on success.salesforce.com for this feature but it is not implemented yet.&lt;/p></description></item><item><title>Why you should have a theme song (or why it is important to be happy at work)</title><link>https://johan.karlsteen.com/2013/01/23/why-you-should-have-a-theme-song-or-why-it-is-important-to-be-happy-at-work/</link><pubDate>Wed, 23 Jan 2013 17:56:00 +0000</pubDate><guid>https://johan.karlsteen.com/2013/01/23/why-you-should-have-a-theme-song-or-why-it-is-important-to-be-happy-at-work/</guid><description>&lt;p>Long time no see, a lot has happened and at the moment I work in Stockholm and live in a basement which is perfect.&lt;/p>
&lt;p>I have thought about this many times before and this morning it struck me once again: You should have a theme song in your head when you wake up and on your way to work.&lt;/p>
&lt;p>Say what? Is probably the sane reaction to my last sentence but let me explain.&lt;/p></description></item><item><title>Using SHA-1 to generate passwords</title><link>https://johan.karlsteen.com/2012/03/10/using-sha-1-to-generate-passwords/</link><pubDate>Sat, 10 Mar 2012 09:41:36 +0000</pubDate><guid>https://johan.karlsteen.com/2012/03/10/using-sha-1-to-generate-passwords/</guid><description>&lt;p>This is probably the worst thing about the Internet, remembering passwords.&lt;/p>
&lt;p>Until about a year ago I had the same password for almost every service, sometimes I spiced it up by adding a character in the start representing the service (F for facebook, G for Gmail and so on).&lt;/p>
&lt;p>A &lt;a href="https://github.com/larsabrasha">colleague&lt;/a> had a different approach, he used simple &amp;ldquo;passwords&amp;rdquo; which he then computed SHA-1 on. He had developed a simple java script that performed the SHA-1 conversion.&lt;/p></description></item><item><title>Polygon with holes in aggdraw</title><link>https://johan.karlsteen.com/2012/03/06/polygon-with-holes-in-aggdraw/</link><pubDate>Tue, 06 Mar 2012 17:36:31 +0000</pubDate><guid>https://johan.karlsteen.com/2012/03/06/polygon-with-holes-in-aggdraw/</guid><description>&lt;p>Drawing polygons with holes have haunted me for a while and recently I had to do it in Python with PIL.&lt;/p>
&lt;p>Googling the subject gives you a &lt;a href="http://mail.python.org/pipermail/image-sig/2006-October/004132.html">hint&lt;/a>.&lt;/p>
&lt;p>This code:&lt;br>
import os
import Image
import aggdraw&lt;/p>
&lt;pre>&lt;code>draw = aggdraw.Draw('RGB', (100, 100), 'white')

path = aggdraw.Path()
path.moveto(10, 10)
path.lineto(10,60,60,60)
path.lineto(60,10)
path.lineto(10,10)
path.moveto(20,20)
path.lineto(40,20)
path.lineto(40,40)
path.lineto(20,40)
path.lineto(20,20)

pen = aggdraw.Brush(&amp;quot;black&amp;quot;)
draw.path((25, 25), path, pen, None)

img = Image.fromstring('RGB', (100, 100), draw.tostring())
p = os.path.join(os.path.dirname(__file__), 'box.png')
img.save(p)
&lt;/code>&lt;/pre>
&lt;p> Gives the following image:&lt;/p></description></item><item><title>Compiling scipy in 32 bit in a 64 bit environment (el5)</title><link>https://johan.karlsteen.com/2012/03/01/compiling-scipy-in-32-bit-in-a-64-bit-environment-el5/</link><pubDate>Thu, 01 Mar 2012 06:38:31 +0000</pubDate><guid>https://johan.karlsteen.com/2012/03/01/compiling-scipy-in-32-bit-in-a-64-bit-environment-el5/</guid><description>&lt;p>During the last 2 days I&amp;rsquo;ve been trying to compile an old product in 32 bit mode on a 64 bit Redhat Enterprise Linux 5 environment which should not be that hard.&lt;/p>
&lt;p>Python itself is no problem:&lt;br>
TCC=&amp;ldquo;gcc -m32&amp;rdquo; ./configure&lt;/p>
&lt;p>(got information from &lt;a href="http://blog.devork.be/2009/02/compiling-32-bit-python-on-amd64.html">here&lt;/a>)&lt;/p>
&lt;p>And this approach works for almost every 3rd party software, except for Scipy.&lt;/p>
&lt;p>Scipy contains a lot of FORTRAN code and it wasn&amp;rsquo;t obvious how to get setup.py to understand that it should both build and link with the -m32 flag.&lt;/p></description></item><item><title>Using your smartphone in the US on vacation (T-mobile rocks)</title><link>https://johan.karlsteen.com/2011/10/09/using-your-smartphone-in-the-us-on-vacation-t-mobile-rocks/</link><pubDate>Sat, 08 Oct 2011 22:22:40 +0000</pubDate><guid>https://johan.karlsteen.com/2011/10/09/using-your-smartphone-in-the-us-on-vacation-t-mobile-rocks/</guid><description>&lt;p>This is something that has been discussed on forums everywhere and there is no real answer.&lt;/p>
&lt;p>Just arrived in San Francisco with my swedish iPhone 4, went into a T-mobile store and bought a &lt;a href="http://prepaid-phones.t-mobile.com/prepaid-plans">Monthly4G&lt;/a> package for 50$, this gives me unlimited data, talk and text for one month.&lt;/p>
&lt;p>Added 10$ and I got free text and landline calls to Sweden.&lt;/p>
&lt;p>The only bad thing is that T-mobile 3G network uses a frequency that the iPhone (and many smartphones) cannot use so I&amp;rsquo;m limited to Edge data transfer.&lt;/p></description></item><item><title>Login on Microsoft IAS from IOS SDK (cookie/form based login)</title><link>https://johan.karlsteen.com/2011/09/27/login-on-microsoft-ias-from-ios-sdk-cookieform-based-login/</link><pubDate>Tue, 27 Sep 2011 08:10:48 +0000</pubDate><guid>https://johan.karlsteen.com/2011/09/27/login-on-microsoft-ias-from-ios-sdk-cookieform-based-login/</guid><description>&lt;p>Recently I had to authenticate from an iOS device against a Microsoft IAS. Had never done this before and it was not that easy to find out how so I&amp;rsquo;m posting my solution here.&lt;/p>
&lt;p>For the record, I am not sure which version of IAS I&amp;rsquo;m authenticating against and actually I&amp;rsquo;m not even sure it&amp;rsquo;s IAS but still this solution should work for form based authentications.&lt;/p>
&lt;p>I&amp;rsquo;m using &lt;a href="http://allseeing-i.com/ASIHTTPRequest/">ASIHTTPRequest&lt;/a> in iOS.&lt;br>
- (void)loginWith:(NSString*)userName andPassword:(NSString*)password {
NSLog(@&amp;ldquo;Login with user: %@ and pass: %@&amp;rdquo;, userName, password);
NSURL *url = [NSURL URLWithString:
@&amp;ldquo;https://domain.com/CookieAuth.dll?Logon&amp;rdquo;];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    [request setPostValue:@&amp;ldquo;Z2F&amp;rdquo; forKey:@&amp;ldquo;curl&amp;rdquo;];
    [request setPostValue:@&amp;ldquo;0&amp;rdquo; forKey:@&amp;ldquo;flags&amp;rdquo;];
    [request setPostValue:@&amp;ldquo;0&amp;rdquo; forKey:@&amp;ldquo;forcedownlevel&amp;rdquo;];
    [request setPostValue:@&amp;ldquo;20&amp;rdquo; forKey:@&amp;ldquo;formdir&amp;rdquo;];
    [request setPostValue:@&amp;ldquo;4&amp;rdquo; forKey:@&amp;ldquo;trusted&amp;rdquo;];
    [request setPostValue:userName forKey:@&amp;ldquo;username&amp;rdquo;];
    [request setPostValue:password forKey:@&amp;ldquo;password&amp;rdquo;];
    [request setPostValue:@&amp;ldquo;Log On&amp;rdquo; forKey:@&amp;ldquo;SubmitCreds&amp;rdquo;];&lt;/p></description></item><item><title>Cloud Computing Economies of Scale</title><link>https://johan.karlsteen.com/2011/08/30/cloud-computing-economies-of-scale/</link><pubDate>Tue, 30 Aug 2011 08:58:55 +0000</pubDate><guid>https://johan.karlsteen.com/2011/08/30/cloud-computing-economies-of-scale/</guid><description>&lt;p>Just watched a very interesting session on Cloud Computing by James Hamilton from MIX10.&lt;/p>
&lt;p>&lt;a href="http://channel9.msdn.com/events/MIX/MIX10/EX01">http://channel9.msdn.com/events/MIX/MIX10/EX01&lt;/a>&lt;/p>
&lt;p>Really interesting about why you should use cloud computing instead of buying servers. Personally I already run my personal stuff in EC2, S3 and GAE and I will not go back to running an SMTP-server in the closet.&lt;/p>
&lt;p>Also my ISP had a 10 day outage this summer and emails don&amp;rsquo;t like that ;)&lt;/p></description></item><item><title>Google Maps polygons with holes</title><link>https://johan.karlsteen.com/2011/08/12/google-maps-polygons-with-holes/</link><pubDate>Fri, 12 Aug 2011 17:27:22 +0000</pubDate><guid>https://johan.karlsteen.com/2011/08/12/google-maps-polygons-with-holes/</guid><description>&lt;p>The last couple of weeks I have been experimenting with Google Maps trying to draw filled polygons that look alright. I&amp;rsquo;m using matplotlib for making the polygons and I&amp;rsquo;ve figured out that the output from &lt;a href="http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.contourf">contourf&lt;/a>(&amp;hellip;) is like a plotting routine where you first get a polygon that should be filled with the current level and the following ones are holes in it.&lt;/p>
&lt;p>Before I just draw them all, coloring the holes with a lower color. This forced me to sort the polygons according to size which worked ok but didn&amp;rsquo;t look good.&lt;/p></description></item><item><title>Improving Google Maps polygons with b-splines</title><link>https://johan.karlsteen.com/2011/07/30/improving-google-maps-polygons-with-b-splines/</link><pubDate>Sat, 30 Jul 2011 12:04:34 +0000</pubDate><guid>https://johan.karlsteen.com/2011/07/30/improving-google-maps-polygons-with-b-splines/</guid><description>&lt;p>Google Maps is great, you get an extremely nice background map for free. I know that there are alternatives (Bing, OpenLayers, etc) out there but since I&amp;rsquo;m running Google App Engine it seems easier to go Google all the way.&lt;/p>
&lt;p>I&amp;rsquo;m plotting polygons and polylines (that&amp;rsquo;s what weather is about) and it works great but my input data is kind of sparse so the polygons look very rough.&lt;/p>
&lt;p>To improve them I&amp;rsquo;m using b-splines. Found a very nice article &lt;a href="http://www.maissan.net/articles/simulating-vines/2">here&lt;/a>. I just changed the javascript so it works with lat/lon-arrays and the output is an array of google.maps.LatLng.&lt;/p></description></item><item><title>Google App Engine ReferenceProperty and HTML5 local storage</title><link>https://johan.karlsteen.com/2011/07/22/google-app-engine-referenceproperty-and-html5-local-storage/</link><pubDate>Fri, 22 Jul 2011 16:58:26 +0000</pubDate><guid>https://johan.karlsteen.com/2011/07/22/google-app-engine-referenceproperty-and-html5-local-storage/</guid><description>&lt;p>The best thing with my job is that I work with the same things that I can spend hours doing in my free time. Too bad you don&amp;rsquo;t have 40 hours a week free time.&lt;/p>
&lt;p>It&amp;rsquo;s been a while but I have finally made som progress.&lt;/p>
&lt;p>I had some troubles with BigTable (the database that you use in Google App Engine). I put pretty large arrays with weather data in db.BlobProperty but when I read this back from the database GAE ran out of memory, even if I didn&amp;rsquo;t touch the blob. After reading up on this I found out that I had to use db.ReferenceProperty.&lt;/p></description></item><item><title>Solving the UTC problem again and again... (Setting default time zone in JVM)</title><link>https://johan.karlsteen.com/2011/07/06/solving-the-utc-problem-again-and-again-setting-default-time-zone-in-jvm/</link><pubDate>Wed, 06 Jul 2011 07:45:44 +0000</pubDate><guid>https://johan.karlsteen.com/2011/07/06/solving-the-utc-problem-again-and-again-setting-default-time-zone-in-jvm/</guid><description>&lt;p>I the world of weather everything is done according to UTC and this causes problems, time zones always does.&lt;/p>
&lt;p>Yesterday I was debugging an error (not related to weather) in a Spring/GWT/Hibernate app where we are scheduling things. Everything works perfect in the development and test environments but as soon as it is deployed to EC2 it fails. I had a hunch that this was time zone related (EC2 servers on Ireland). Some debugging code was added and the problem was found.&lt;/p></description></item><item><title>Kindle</title><link>https://johan.karlsteen.com/2011/06/16/kindle/</link><pubDate>Thu, 16 Jun 2011 16:33:18 +0000</pubDate><guid>https://johan.karlsteen.com/2011/06/16/kindle/</guid><description>&lt;p>Given the exchange rate for dollars and my never ending need for toys I got a Kindle yesterday. During unboxing I thought that they had glued the instructions onto the screen until I realized that it was the screen.&lt;/p>
&lt;p>
 &lt;img src="https://johan.karlsteen.com/img/2011-06-16/kindle.jpg" alt="">

&lt;/p>
&lt;p>The books I have bought on the iPad earlier synced right in and it remembered which page I was reading.&lt;/p>
&lt;p>My hope is that it will help me start reading regular books again and I really like the idea that I can buy a book anywhere (where there is 3G coverage) and get it delivered instantly. Also nice that I can listen to my audible books and buy new ones.&lt;/p></description></item><item><title>Progress report</title><link>https://johan.karlsteen.com/2011/06/08/progress-report/</link><pubDate>Wed, 08 Jun 2011 21:38:16 +0000</pubDate><guid>https://johan.karlsteen.com/2011/06/08/progress-report/</guid><description>&lt;p>I have successfully extracted some temperature data from the &lt;a href="http://www.ecmwf.int/products/data/software/grib_api.html">grib&lt;/a> files, created a basic data model in Google App Engine and a very basic site in Django.&lt;/p>
&lt;p>I use matplotlib to create isolines that are drawn with Google Maps Api.&lt;/p>
&lt;p>It&amp;rsquo;t not that beautiful but there is room for improvement ;)&lt;/p>
&lt;p>
 &lt;img src="https://johan.karlsteen.com/img/2011-06-08/Screen-shot-2011-06-08-at-22.54.14.png" alt="Example of temperature drawn on google maps">

&lt;/p></description></item><item><title>Weather and clouds</title><link>https://johan.karlsteen.com/2011/05/31/weather-and-clouds/</link><pubDate>Tue, 31 May 2011 15:30:15 +0000</pubDate><guid>https://johan.karlsteen.com/2011/05/31/weather-and-clouds/</guid><description>&lt;p>Ever since I wrote my master thesis I have had an interest in weather. My thesis was about metadata updates in a real time database at the &lt;a href="http://www.smhi.com">Swedish Meteorological and Hydrological institute&lt;/a>. The thesis was mainly about weather stations that deliver observations used when running weather models.&lt;/p>
&lt;p>After my thesis I ended up as a consultant but for the last 2,5 years I&amp;rsquo;m back at SMHI doing various work, mostly backend. I have worked with real time deliveries of weather along with processing, visualisation etc. I worked with Diana (&lt;a href="http://diana.met.no/">diana.met.no&lt;/a>), a weather workstation software developed by Met.no.&lt;/p></description></item><item><title>Why?</title><link>https://johan.karlsteen.com/2011/05/31/why/</link><pubDate>Tue, 31 May 2011 11:53:55 +0000</pubDate><guid>https://johan.karlsteen.com/2011/05/31/why/</guid><description>&lt;p>Because I have a lot of things on my mind all the time and I think that some of them are worth sharing.&lt;/p>
&lt;p>I spend a lot of time coding and trying new technologies and I will try to collect pros and cons here along with pitfalls and other interesting things.&lt;/p>
&lt;p>Hopefully I will help at least one fellow system developer since I get a lot of help from blogs in my daily work.&lt;/p></description></item><item><title/><link>https://johan.karlsteen.com/search/placeholder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://johan.karlsteen.com/search/placeholder/</guid><description/></item><item><title/><link>https://johan.karlsteen.com/top/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://johan.karlsteen.com/top/about/</guid><description>&lt;p>
 &lt;img src="https://johan.karlsteen.com/img/johankarlsteen.jpg" alt="">

 &lt;strong>&lt;em>Johan Karlsteen&lt;/em>&lt;/strong> as a Software Engineer living and working in Stockholm, Sweden.&lt;/p>
&lt;p>I have been working with Salesforce since 2012 and currently I&amp;rsquo;m a freelance consultant.&lt;/p>
&lt;p>I will try to share tips and tricks relating to Salesforce and the occasional rant about completely pointless things.&lt;/p></description></item><item><title/><link>https://johan.karlsteen.com/top/cv/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://johan.karlsteen.com/top/cv/</guid><description>&lt;p>For the moment you can check out my LinkedIn profile:
&lt;a href="https://se.linkedin.com/in/jkarlsteen">
 &lt;img src="https://www.linkedin.com/img/webpromo/btn_viewmy_160x33.png" alt="View Johan Karlsteen&amp;rsquo;s profile on LinkedIn">


&lt;/a>&lt;/p>
&lt;p>Or my Vizualize.me infographic:
&lt;a href="http://vizualize.me/jkarlsteen?r=jkarlsteen">
 &lt;img src="https://johan.karlsteen.com/wp-content/uploads/2017/08/viewmyviz.png" alt="">


&lt;/a>&lt;/p></description></item></channel></rss>