<< Previous | Home

Salesforce week 2

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 this by clicking here, here, here. I also finally managed to get an org for my online courses. I had to connect through the US East VPN endpoint and say that I live in the US. Anyway it worked. Speaking of Trailhead I also completed my first Super-Badge (Security Specialist) and I'm up to Mountaineer status. I've also started to get a better handle on the organisation and I actually remember names and abbreviations.

Thursday we were out celebrating our Q3 result with beers and some food. A nice evening out and met new members of CSG that I'm a member of (Customer Success Group).

Next week is all about study (hopefully passing the first exam) and a two-day summit with CSG Nordic in Stockholm.

What did I learn

  • The formula language seems very limited when it comes to date manipulation ie. it lacks a calendar which I find funny. Must study more.
  • AMEX form should be scanned in high quality and not attempted printed on Mac
  • Vacation is called PTO and should not be confused with VTO (Volunteer Time Off)
  • Life in the cloud is good and I'm not using anything but a web browser to get stuff done

Status after this week

Trailhead points: 32.650
Trailhead badges: 30
Certifications: 0

Tags :

Salesforce week 1

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 Yubi-key or Salesforce Authenticator. You pick. You get the feel that Salesforce onboards loads of people every week so the guides and tutorials are slick and if they are not enough there are Chatter groups to help you (Chatter is the social network inside Salesforce).

And yes. Everything here runs on Salesforce. Everything. We drink our own champagne.

After settling in my primary focus for the first week was to get setup on my equipment and order corporate credit card, hook it up to reimbursement etc. Also reading the learning journey I'm setting out on. I need to obtain 5 certifications for Salesforce and it looks like they should be earned before I leave for Salesforce Bootcamp in San Francisco second week of January. I'm going to be busy. Most time has been spent learning the ropes, trying to remember names and abbreviations and do Trailhead. Man have I done a lot of trailhead! I broke 10k points and 11 badges on Thursday and I'm well on my way.

Great first week.

What did I learn

  • V2MOM's are important and the guiding light
  • Being part of a matrix org is - well - an interesting new thing
  • Loads of stuff to learn and I'll definitely need to speed read
  • Names and abbreviation and lots of them
  • The Salesforce infrastructure and backend is seriously cool - repeat after me: "I want my own superpod"

Status after this week

Trailhead points: 16.650
Trailhead badges: 12
Certifications: 0

Tags :

JSONata looks very nice

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.

Tags : ,

Simple speedtest app deployed using heroku

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 language of choice (Java) and wrote a simple servlet I could use using curl. The servlet responds to GET and POST requests and hence allows me to measure download and upload speed. Using curl it was very easy to capture the connection time and the actual time to do the operation. Putting it all together using cron allowed me to run it on schedule and pipe the result to CSV files for later analysis.

Now I needed a place to run the app - the obvious choice was a free dyno on Heroku. To deploy I simply created an app, set two configuration parameters and then pushed using Git which in turn built, deployed and ran the application. So easy. And all using command line.

Next steps? Send the results to a Google spreadsheet using IFTTT to allow my dad to get the data himself and analyse to his hearts content...

The application is available at github.com/lekkimworld/speedtest and the README explains the whole heroku deployment process.

Adding a new git remote to an existing project

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 actually do this use the --allow-unrelated-histories switch. Solution was to add that to my pull command I all was good.
git pull origin master --allow-unrelated-histories
Now I had the README.mf and LICENSE files from github in my local repo so I could edit I push back up. Easy!

Tags :

Revisiting my decrease in blogging year over year

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.

Tags :

It's time for something new - I'm joining Salesforce.com

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 yesteryear to try something new and seek new opportunities. And challenges.

It's difficult to understand but I've been with IntraVision for 9 years. I've learned a lot and tried a lot. I was a self-proclaimed expert in everything before I joined but my time here showed me I still had lots to learn. I've learned about leadership, finance, sales, marketing and what it really means to develop and sell a product. Not just sell it - but develop it, mature it, advocate it, market it, document it, be frustrated over it and - maybe most important of all - support it. And support it over time. I've been part of taking a mature product from Europe, reenvision it, build it and take it to new markets and cultures across the World. I've worked with great, brilliant and special people. I've formed great friendships across the World and feel incredibly humbled with the level of support and encouragement I've received from my network in this tough decision.

I've traveled across the World from Copenhagen to nearby countries in Europe, to the US, to Australia and to Japan. I've had drinks on a harbour cruise in Sydney, had a lobster roll in Boston, sung along to Elton John in Las Vegas, and had the best steak I've tried on the 50th floor overlooking Tokyo. I've ridden the skies and the Shinkansen in style and had more incredible experiences than I can count.

I've spoken at too many conference to mention, some small, some big, some huge. I've spoken on big stages and I've spoken in front of 10 people in what could probably be best characterized as a make-shift gym in Tokyo. I've spoken at too many user groups and other events to count.

My time at Intravision has proved me that I can hold my own.

So... It is with great excitement that I open a new chapter in my life. I'm leaving my old, well known and comfortable World and trying something new. On 15 November I'll join one of the most exciting companies in the World - Salesforce. I'll join as a Technical Solution Architect and could not be more excited. To all the people who've helped me, listened to me and coached me- thank you for sending the elevator back down!

Thank you for reading this and wish me luck! I'll need it!

/Mikkel

Minimal web.xml for authenticated webapp on WAS 8.5.5.x

I was doing a simple servlet based web application that should on WebSphere Application Server 8.5.5.6 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:

@WebServlet(urlPatterns={"/"}, initParams={@WebInitParam(name="foo", value="bar")})
@ServletSecurity(@HttpConstraint(rolesAllowed={"users"}))
The "users" role turned up just fine in WAS ISC but I couldn't make the authentication kick in when I accessed the resources. Changing settings and values for the @ServletSecurity annotation e.g. explicitly mentioning GET didn't do anything for me. For some reason the annotation wasn't enough. To make the authentication kick in I had to add the following web.xml which is pretty much a standard web.xml you would do without annotations. You might be able to get away with a little less but at least I got it working... Oh well...
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns="xmlns.jcp.org/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" 
  xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" 
  xsi:schemaLocation="xmlns.jcp.org/xml/ns/javaee xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd 
    http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
  id="WebApp_ID" version="3.1">
  <display-name>MyApp</display-name>
	
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Protected Area</web-resource-name>
      <url-pattern>/*</url-pattern>
      <http-method>GET</http-method>
    </web-resource-collection>
    <auth-constraint>
      <role-name>users</role-name>
    </auth-constraint>
  </security-constraint>
  
  <security-role>
  	<role-name>users</role-name>
  </security-role>
	
  <login-config>
    <auth-method>BASIC</auth-method>
  </login-config>
</web-app>