| Recent Blog Posts
.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 126.96.36.199 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 188.8.131.52 and support suggested we try and upgrade to 184.108.40.206
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
Wed, Feb 17th 2016 4:19a Mikkel Heisterberg
Have a Synology Diskstation at home which I among other things use as an OpenVPN server. When I'm traveling I enjoy being able to watch Danish TV without any geographical restrictions. I do this by having my OpenVPN profile (ovpn file) tunnel all traffic through the VPN incl. DNS. It also means that I can use it to safely browse if on a questionable wifi such as no-encryption hotel wifi or conference wifi. The two commands you need to add to the configuration generated by the OpenVPN server on
Wed, Feb 17th 2016 3:29a Mikkel Heisterberg
Helped a collegue yesterday for a few hours configuring his system with TLS certificates and showed code to enable authentication using client certificates. All easy enough if you know how... :) Start by creating keys and certificates for a server and a person and create a Domino KYR keystore using the kyrtool from IBM. The below commands were all executed on Linux.
# change dir
# generate key and self-signed cert for server
openssl genrsa -out server.key 4096
Custom widgets for IBM Connections v.5.5 and what the "themes" attribute mean|
Tue, Jan 26th 2016 8:27a Mikkel Heisterberg
Starting with IBM Connections v. 5.5 a new required attribute was added to the widgets-config.xml file that controls how widgets are rendered for Profiles and Communities. IBM addresses the issue by referring to a technote (Custom widgets not displaying correctly after migrating to IBM Connections 5.5) that mentions just adding an attribute. The fact that simply requiring customers to add static text is lunacy for a product - if you need something where a static text will do for most cases and i