| Recent Blog Posts
Salesforce week 14|
Sun, Feb 19th 2017 7:33p Mikkel Heisterberg
Short week as I had Thursday and Friday off - or PTO as we call vacation. But a great week. Monday and Tuesday I spent on-site in Stockholm and Monday night I finally got my act together and took the final certification exam of my onboarding and I'm very happy to report that I passed. Yay!! I now have passed all the 5 certifications I needed to pass. #happyDays
It was also my first week of being billable at the customer which was great. Wednesday was spent in the home office. All good stuff!
Salesforce week 13|
Mon, Feb 13th 2017 7:44p Mikkel Heisterberg
Last week I spent two days at the customer site in Stockholm and 3 days at home in the home office. I think. Cannot really remember. Maybe I was in the office one of the days. Oh well :) It's starting to become normal to go to Stockholm and family life and work life is starting to work out. It seems like it will work for us. Customer project wise I almost finished the Lightning Component I've been working on for the customer and even made small changes to also make it work in Salesforce1. With
Salesforce for Newcomers - Introduction to orgs, sandboxes, API login and Salesforce security|
Fri, Feb 10th 2017 8:24a Mikkel Heisterberg
As I venture into the Salesforce Universe myself there are many areas that I would have wished had been easier to figure out. So what better than remedying that with a series of blog posts. Maybe there will be one post and maybe more. We'll see... This first instalment is on some of the basics in Salesforce namely the org, sandboxes and some of the security implications of logging in. I'm pretty technical so some of this will be from a technical angle so please forgive me and stay with me.
Lightning Components as Quick Actions in Salesforce1 and padding|
Wed, Feb 8th 2017 7:05p Mikkel Heisterberg
Since Winter 17 we have had the option of using a Using Lightning Component as a Quick Action. In the Lightning Experience in a desktop browser the component is shown as a popup (actually a lightbox) in the UI and in Salesforce1 (the Salesforce mobile app) it's more of a modal fullscreen dialog. All this is great. Only thing you have to do is to make your component implement force:lightningQuickAction (all declaratively) and it can be added as a Quick Action. The resulting lightbox / dialog wil
Salesforce Platform Cache|
Mon, Feb 6th 2017 9:48a Mikkel Heisterberg
Stumbled over the Salesforce Platform Cache the other day and just discovered this nice Trailhead Module on it (Platform Cache Basics). Worth 30 minutes if you're developing on the platform.
Salesforce week 12|
Mon, Feb 6th 2017 8:31a Mikkel Heisterberg
Week 12 brought me to Stockholm for 3 days, had 1 day in our new shiny Salesforce office in Hellerup (closer to Copenhagen center) and 1 day working from home. I spent most of the week getting up to speed on Salesforce Lightning and developing mockups for a custom component for the customer. All in all it was a great week where I learned a lot and made significant contribution to the customer project although I'm not officially assigned and billable yet (I'm shadowing).
Salesforce week 11|
Tue, Jan 31st 2017 5:21p Mikkel Heisterberg
First week on "the job" brought me to the customer I'll most likely be assigned to in Stockholm. I spent Tuesday to Thursday there and have already delivered something that will go into production in a couple of weeks. Both exciting and scary... The week was basically spent learning about the project, the phases, deliverables and a whole slew of new terminology. All good stuff. Nothing much else to report for now besides Stockholm being a nice city.
What did I learn
Some customers actually
Salesforce username/password OAuth flow against a sandbox|
Tue, Jan 31st 2017 8:29a Mikkel Heisterberg
We had issues today because our OAuth password flow wouldn't work against one of our sandboxes although the code worked against production. Instead we got this error:
After Googling and finding this thread it turned out that when using the username/password flow against a sandbox you have to either relax IP restrictions for login or authenticate against test.salesforce.com instead of login.salesforce.com (which of
Arlanda Express app|
Mon, Jan 30th 2017 10:23a Mikkel Heisterberg
These weeks - and probably through the end of the year - I'm going quite a lot to Stockholm so like any respectable geek I'm trying my best to make my travels more productive and easier to manage. Flying is easy - booking is all online and trips, boarding cards and receipts are managed entirely mobile. Easy. Next was hotels - also easy using existing apps except for the actual check in process.
This Monday I found the Arlanda Express app. Excellent!! Tickets are bought and paid in the app u
Quick CLI aliases for Salesforce instance info|
Wed, Jan 25th 2017 9:50p Mikkel Heisterberg
Today when at a customer we were trying to figure out the release versions the various sandboxes and development environments and compare this info with the version of the production instance. Of course all this is available from status.salesforce.com but clicking around got a bit tedious so I whipped up a quick set of bash aliases for the Terminal. Since the output is also available as JSON it was pretty easy. First I grabbed the jq JSON parser for bash and then I wrote 4 aliases for bash:
Salesforce week 10|
Wed, Jan 25th 2017 7:25p Mikkel Heisterberg
Week 10 it all started to get real... All in all my last quiet week. I actually met my manager in person (she's based in Amsterdam) and I spent more time playing with the Salesforce platform with a specific focus on Service Cloud, Lightning and Salesforce Lightning Design System (SLDS). I also got my first customer project in Stockholm which will be fun. With the planning on my first customer visits came fun experiments planning flights, hotels etc. All good fun.
What did I learn
Salesforce week 7-9|
Wed, Jan 25th 2017 7:18p Mikkel Heisterberg
Wow! Time is starting to fly by. Week 7 I took vacation and relaxed by taking time off between Christmas and New Years. I got back into the office on Tuesday following New Years Eve and promptly started studying for my Salesforce bootcamp. The bootcamp is in San Francisco and I spent all of week 7 preparing and studying for that. We are very much into gamification as is obvious if you've ever visited Trailhead. I flew off to San Francisco on Friday and spent all of Saturday and Sunday settling
.gitignore for MavensMate|
Mon, Jan 9th 2017 12:02a Mikkel Heisterberg
Note to self... Exclude the workspace and project files as well as /config from Git so a .gitignore file should be something iike this:
So in bash something like:
$ echo *-workspace > .gitignore
$ echo *-project >> .gitignore
$ echo config >> .gitignore
Salesforce week 6|
Mon, Dec 26th 2016 9:38p Mikkel Heisterberg
Again study, study, study... Since last week I completed 2 certifications which takes me to 4 of the 5 I need. The last is Certified Salesforce Service Cloud Consultant which is looking pretty tricky but I have to find some material on the exam. Did my second round of volunteering - felt good. Closing off the year having volunteered 13 hours. Okay I think. Looking into how I can help for a Salesforce project in Africa. Interesting.
From here on it's xmas, then new years and it's time to thin
Salesforce week 5|
Sun, Dec 18th 2016 8:05p Mikkel Heisterberg
All (well most) of this week was spent - you guessed it! - studying for exams... I tried to take the Salesforce Certified Advanced Admin on Wednesday but due to hickups in the system at Webassessor I had to exit the exam and the new time slot I got I couldn't do. So the exam is now scheduled for Monday. It's going to be exciting. Whether I pass or not I'm at the point where I need to see some actual questions to gauge what they are asking for instead of simply trying to guess. My take on exam
Inspecting Force.com IDE traffic|
Tue, Dec 13th 2016 9:21a Mikkel Heisterberg
For my studies for the Certified Salesforce Advanced Admin I needed to understand the various code deployment options for the force.com platform including the Force.com IDE based on Eclipse. Installing the IDE was pretty straight forward and creating a force.com project and adding an APEX trigger was likewise easy. As I like to understand what's going on under the covers I went to inspect the traffic but of course everything is encrypted using TLS so I went to my favorite tool for these kinds o
Salesforce week 4|
Sun, Dec 11th 2016 9:02p Mikkel Heisterberg
It's been another week of training, training, training. I've watched a LOT of video and started the week studying for the AppBuilder certification only to find out that maybe Certified Advanced Admin was a better place to go after Certified Admin. So Wednesday or so I rebooted and refocused on that certification which really has set me a while back on making another cert by this week or early next week. We'll have to see how it goes. This week I made a new level on Trailhead and I'm now at t
Salesforce week 3|
Sun, Dec 4th 2016 8:24p Mikkel Heisterberg
I spent 2 days in Stockholm at the Nordic Winter Summit. The summit gathered all of Salesforce from Denmark, Sweden and Finland (no Norway office yet) for two days of get together. It was 2 very nice days hearing about that went down the last year, what's on the top of the agenda currently and what's the plan for the next year. We heard about some of the great volunteering that's being done by Salesforce employees across the Nordics and what cool new customers we have. We also saw demos of so
Salesforce week 2|
Sun, Nov 27th 2016 11:43p Mikkel Heisterberg
So another week went and passed. I got my phone number ported and I'm now fully setup technology wise. I spent the entire week reading, reading, reading getting ready for my first certification which is a Salesforce Certified Administrator. Aiming to take it Monday or Tuesday this week. I've used both the online courses from the Salesforce help but also a lot of Trailhead. I like the latter much more as it validates the assignments you complete in a training org. The online courses are just do
Salesforce week 1|
Sun, Nov 20th 2016 8:37p Mikkel Heisterberg
So that was week 1. I started with Salesforce on Tuesday and I'm up and running with my new MacBook Pro and a new phone. Well I'm not actually using my new phone as I'm porting my old number over to Salesforce but it should be ported by Thursday next week. IT wise everything is pretty smooth and between TechForce and Concierge (IT helpdesk and IT self-service) it was very easy. Everything here is done in the cloud if possible and everything is using SAML and/or two factor auth. Either using Y
JSONata looks very nice|
Mon, Nov 14th 2016 12:44p Mikkel Heisterberg
While JSON is a very nice and concise data format it lacks the structure and query capabilities of XML and XPath. Often times querying JSON leads to line on line of code to do proper error checking and retrieve the proper value and - if need be - a default value. Meet JSONata! JSONata is a query language plus so much more. I invite you to look at the slides from the recent IBM tech talk on the matter or visit the JSONata Exerciser to try it out.
JSONata is also available as a NPM module.
Simple speedtest app deployed using heroku|
Sat, Nov 12th 2016 10:43a Mikkel Heisterberg
My parents mobile broadband connection in their summer house seemed a little flaky and my father asked me how we could monitor it. Easy I thought. I would simply grab a Raspberry pi and one of the available tools so I googled and found a nice tutorial. Getting it to work was easy enough but after having this run for a few days the results were weird and didn't match what we saw while there. So what do any self-respecting programmer do? Write his/her own of course... :)
So I broke out my langu
Adding a new git remote to an existing project|
Sat, Nov 12th 2016 10:16a Mikkel Heisterberg
Today I had a project that I already had in git and I had an existing remote I had already pushed to. Now I wanted to add github as well so I added the repo on github and initialized the repo with a README.mf and a LICENSE file. After adding the remote to the local repo and attempting to pull from it I got the following error:
fatal: refusing to merge unrelated histories
Apparent the way the merge command work has been changed in git v. 2.9 to make sure you do not mix histories by accident. To
Revisiting my decrease in blogging year over year|
Sat, Nov 12th 2016 9:36a Mikkel Heisterberg
Almost 4 years ago I posted about my decrease in blogging year over year (Decrease in blogging year over year - is it a problem?) and thought it would be interesting to revisit the subject. For one because I've actually blogged more this year than in previous years and because I'll be moving to a new technology and I suspect blogging will increase.
It's time for something new - I'm joining Salesforce.com|
Tue, Nov 1st 2016 3:55p Mikkel Heisterberg
I'm writing this not sure who - if any - will ever read this. Sometimes writing is like therapy and can help you get on and move on. So - dear IntraVision - I'm leaving you. It's not you. It's me.
It's with both a heavy heart and tremendous excitement I'm finally posting this. As of November 14 I'm closing a big chapter in my life and career by leaving IntraVision. It has been a difficult decision and not one I've taken lightly but I decided it was time to step out of the shadows of ye
Minimal web.xml for authenticated webapp on WAS 8.5.5.x|
Mon, Oct 17th 2016 9:09a Mikkel Heisterberg
I was doing a simple servlet based web application that should on WebSphere Application Server 220.127.116.11 the other day. The servlet should require authentication. I really wanted to avoid using web.xml and go annotation based but it turned out that it wasn't possible - at least for me. Servlets are secured using the @ServletSecurity and you specify required role(s) and HTTP constraints e.g. is HTTPS required etc.
I added the following annotations:
Fun demo of Watson IoT|
Fri, Oct 14th 2016 5:50a Mikkel Heisterberg
Pretty cool demo of Watson IoT using your phone or other device. Access the page, scroll down about a page and try it out.
Explore IBM Watson Internet of Things
Fri, Oct 14th 2016 5:19a Mikkel Heisterberg
Nice videos with Self-Paced Training on Docker right from the source...
Git reflog to the rescue|
Fri, Sep 30th 2016 8:23a Mikkel Heisterberg
Earlier today while slaving away on my code I did some wizard-like changes and solved an issue I had been having with packaging Visual Studio Tools for Office (VSTO) add-ins for Microsoft Outlook. It was soooo cool that I just had to record a video on it as it involved a number of steps and it would be easier to record a video than describing it in text. So I commited my changes and reverted to an easier commit without thinking. And boom!! All my changes was gone - including some stuff I actuall
Date and time in Java 8|
Wed, Sep 28th 2016 5:40a Mikkel Heisterberg
IBM Connections application development state of the union - part 6|
Wed, Sep 14th 2016 5:39a Mikkel Heisterberg
Part 5 was about extensions/apps on-premises and this - probably final post - will be about extensions for IBM Connections Cloud. There are different ways to extend IBM Connections Cloud - one is to add links to the app menu and another is to add actual UI extensions to the applications within IBM Connections. This post is about the latter (although the observations about the administration UI applies to both). To get it out of the way from the beginning I might as well say it flat out. IBM has
IBM Connections application development state of the union - part 5|
Tue, Sep 13th 2016 4:18a Mikkel Heisterberg
Part 1 was about API's and SPI's, part 2 about Mobile, part 3 about security and "coherent-ness". This part will be about apps/extensions this time moving to on-premises.
For on-premises the extension model for IBM Connections is iWidgets and OpenSocial gadgets. You can extend Profiles, Communities and Homepage. OpenSocial is only supported in Homepage. IMO the former two (Profiles and Communities) are probably the ones mostly extended using widgets. Unfortunately these also use the oldest
IBM Connections application development state of the union - part 4|
Tue, Sep 13th 2016 4:14a Mikkel Heisterberg
While previous posts in this series has been about specific parts of the IBM Connections platform this is a bit more generic setting the stage for the next two ports. The next two posts are about extensions/apps for IBM Connections on-premises and in the cloud. Setting the stage for this is talking about the difference scenarios for extensions and what they would like to to and what capabilities they would need from the platform (IBM Connections).
In my mind when you provide a platform that al
IBM Connections application development state of the union - part 3|
Mon, Sep 5th 2016 3:59a Mikkel Heisterberg
While part 2 was about IBM Connections Mobile this post will be about security and the "coherent-ness" of the platform.
IBM Connections runs/builds on IBM WebSphere Application Server (WAS) and much of the functionality is delegated to the underlying application server. Delegated responsibility is topics ranging from messaging to SMTP transport to database access and security. WAS also handles the clustering and fault tolerance and does it very well. Being built on WAS is a good thing for s
Developing plugins for IBM Notes on Mac|
Sun, Sep 4th 2016 3:21p Mikkel Heisterberg
I've been developing plugins for IBM Notes on Mac for years now but never really got around to sharing the steps on the blog. The below steps - in very crude form - works with Java 8 on Mac OS El Capitan (v. 10.11) using IBM Notes 9.0.1. The below sections are additions to the regular steps on creating a target platform documented otherwise on this blog
Run a product: com.ibm.notes.branding.notes
Execution Envionment: JavaSE-1.6
Developing code using IBM Notes in Eclipse on Mac OS|
Sun, Sep 4th 2016 2:48p Mikkel Heisterberg
I'm cleaning out my drafts folder and stumbled unto this one I never posted. The steps has changed slightly after IBM Notes 9.0.1 for Mac was released as that release works fine with the never JVM's for the Mac. Actually there are very few steps you need to do to make the code work. To complete a standard console app that prints the username from the current session to stdout do the following:
Write the code - could be something like this:
IBM Connections application development state of the union - part 2|
Wed, Aug 31st 2016 10:04a Mikkel Heisterberg
Part 1 was about API's and SPI's - this part will be about widgets or apps as IBM likes to call them now. There are big differences between how widgets / apps works for on-premises, cloud and on Mobile. Let us starts with Mobile as it's the quickest one to address but also the most depressing...
Besides adding menu items to the IBM Connections mobile app menu (the one that slides in from the left) and having the content load in an embedded browser control there is no support for widgets / a
IBM Connections application development state of the union - part 1|
Tue, Aug 30th 2016 4:34a Mikkel Heisterberg
IBM Connections has been on the market for a lot of time now and has always been a real strong player when it comes to application development. I thought it was time to review where we are application development wise over what will probably be a couple of posts. First off is API's...
IBM Connections is and has always been strong from the point of API's - there is an API for almost all areas of the product and always has. I think IBM Connections was the first product (maybe still the only on
Software Dependency Management and the associated risks|
Mon, Aug 29th 2016 4:16a Mikkel Heisterberg
Being a Maven convert and a guy that likes to dabble in programming this topic is very interesting albeit not one I've thought much about - and I guess this is true for most. Or let's put it another way. After you start using Maven, npm, flask or whatever other dependency management tool you use for the job you think of dependency management as a done deal. Not having to download a jar / package makes it easier and thus, for some reason, less worrisome to add a dependency. Until this morning w
Simple tool to save certificate chain certificates as PEM files|
Mon, Jul 25th 2016 11:04a Mikkel Heisterberg
It's been increasingly frustrating to support our OnTime Group Calendar for Microsoft customers with on-prem Exchange as they usually use a self-signed certificate for TLS resulting in Java throwing a fit. Getting the certificate chain using a browser or OpenSSL is easy enough but for some customers that still prove too difficult. I couldn't find a tool to automate the export so I wrote a small tool in Java. The tool simply takes the address of the site to contact and saves the certificate cha
Actually making Eclipse work for plugin appdev on Windows 10 64 bit|
Fri, Jul 15th 2016 3:34a Mikkel Heisterberg
Just yesterday I blogged about how easy it was to get Eclipse configured for IBM Notes 9.0.1 plugin appdev. And it was easy - it just didn't work for real development. After I imported all the plugins for the OnTime Group Calendar clients nothing would compile. After looking for a while I could see that most errors was from resolving the SWT classes such as Display, Canvas and so on and that made me think of a similar issue I had on Mac. I dove into the target platform definition. In the target
Thu, Jul 14th 2016 9:08a Mikkel Heisterberg
Needed to generate fake names and emails today for a stub API I'm developing. Found a github gist that did the trick. Very easy. Just had to install the faker gem first:
$ sudo gem install faker
The example generates to CSV but I needed from object instances for C# so changed the code as such:
File.open("output.txt", "wb") do |file|
until i == 500
uuid = SecureRandom.uuid
fake = "new SearchUserResult("" + Faker::Name.name + "", "
Configuring Eclipse Neon on Windows 10 64 bit for Notes plugin development|
Thu, Jul 14th 2016 4:37a Mikkel Heisterberg
A member of the community reached out to me yesterday to ask whether I recognized a specific error message he was encountering trying to make Eclipse launch Notes 9 correctly for plugin development. I came back with a few suggestions but as I hadn't tried on Windows 10 yet I really couldn't offer much help. This morning I tried configuring Notes 9.0.1 for plugin development on Windows 10 and it went smoothly. Here are the steps I took:
Download Eclipse Neon for RCP and RAP development bundle
Reserved characters in WebSphere Application Server passwords... Really!?|
Thu, Jun 2nd 2016 11:01a Mikkel Heisterberg
Had somewhat of a surprise today when IBM Support informed us that the issue our customer was experiencing could be due to unsupported characters in the password of the user mapped to the connectionsAdmin J2C alias. Say what!? But apparently there are restrictions on the different characters one can use. The password we were using had exclamation point (!) in it which is a no no. The customer is currently on WebSphere Application Server 18.104.22.168 and support suggested we try and upgrade to 22.214.171.124
First Git hook for Atlassian Bitbucket (formerly Atlassian Stash)|
Thu, Jun 2nd 2016 10:55a Mikkel Heisterberg
Using Tomcat APR (Apache Native Runtime) on Mac|
Sun, May 15th 2016 5:30a Mikkel Heisterberg
I had to document some steps using the Apache Portable Runtime (APR) and TLS configuration and for that needed APR on my Mac. I couldn't really make it work at first but after fiddling a bit I figured it out. There are the steps in bullet form:
Download APR and compile
Download APR from Apache (http://apr.apache.org/). I downloaded v. 1.5.2.
Compile in Terminal.
CFLAGS='-arch x86_64' ./configure
Install OpenSSL with headers
The OpenSSL on Mac doesn't come wi
Test agents in Eclipse by extending AgentBase|
Wed, Mar 30th 2016 3:27p Mikkel Heisterberg
I continuously get questions on how I do Java agent development and I'm happy to answer them as I hope that some of the answers I provide means that more and more Domino developers see Java as a strong alternative to LotusScript for background processing. Most times the approach I recommend is a mock object approach that I wrote about waaaaaay back in 2006 (did I really write that 10 years ago?!?!?).
If / when you want to read the posts please start from part no. 1. Here's a link to all 5 pa
Working with routes from the IBM Bluemix CLI|
Tue, Mar 29th 2016 4:48p Mikkel Heisterberg
Today I played with routes on IBM Bluemix. Routes are how you access the app on IBM Bluemix so basically they are hostnames mapped to apps. By default apps are assigned a hostname under mybluemix.net but once you've proved a domain belongs to you you may also may custom domain names to your apps. Of course you still need to create a CNAME record in DNS to make it map correctly but you get the point. Working with routes is possible from the GUI but the command line interface (CLI) is more effici
Slides and recorded, narrated, demo from my Engage.ug session on OAuth|
Tue, Mar 29th 2016 6:41a Mikkel Heisterberg
Last week at the Engage user group in Eindhoven, The Netherlands, I gave a session on OAuth 2.0, how the protocol works and how easy it is the code against. The demo I showed at the end of the session showed just how easy it is and how little code is required to make a fully functioning OAuth 2.0 Client. Below you'll find the slides on Slideshare as well as a recorded, narrated, demo. The demo walks you through coding an OAuth 2.0 app in Eclipse and deploying it to IBM Bluemix.
Oh and do rem