Report from the booth at IBM ConnectED 2015

Posted by:

I know you're all dying to hear what went on at IBM ConnectED so here is my take!

We flew down on Thursday before Connected to have some time to prepare and to meet-up with customers and friends. Our hotel was not Disney this time and it felt somewhat strange, but also positive. As always, American hotel rooms are so large that Mats Ekman said that we could easily fit all 10 of us in the same room if needed.

Friday and Saturday flew by with shopping, sightseeing, meetings and preparations for the upcoming conference week. We enjoyed large American breakfasts with everything included, a good steak dinner, a delicious lobster dinner, numerous pizza slices, pool time, lots of good discussions, and most of all the ever shining Florida sun. We all concluded that this was going to be a great week!

On Saturday night we hosted our annual Infoware Collaboration Reception at Texas de Brazil. The event is a perfect way to start off the conference and to welcome customers and resellers from all over the world. This time for the 10th year in a row! We had a fabulous evening with friends, good food, lovely desserts, laughter and fun. We are also happy that we can connect our customers with each other in a steadily growing network. It always feels very good to welcome everybody to us.

And Sunday! A day of sessions and booth preparations. 7 of us are here to focus on covering all the session tracks and to gather knowledge about all the latest from IBM and other business partners. So they were off to different kind of sessions. Me, on the other hand, Daniel Svanström and Fredrik Söderquist, were busy in our booth in TechnOasis getting everything ready for the evening’s Welcome Reception. We checked our demo environments, the leads scanner and of course our t-shirts!

Every year our t-shirts make a bit of a buzz among the visitors, and also this year! The word is spreading. "Aaww, you guys have the coolest t-shirt!". "I want one of those!" and so on. Some visitors dress up wearing our shirts and our message is visible here and there. Our kick ass ninja warrior that guards all our customer’s environments and also let’s everybody know that we offer the best solutions for every IBM customer!

Infoware is exhibitors and sponsors of IBM ConnectED for the 10th time in a row! That’s something! Infoware is a true blue IBM Premier Business Partner, and has social business as one of our main areas. This year we focus wholeheartedly to promote DomainPatrol Social, our administrating tool for IBM Connections.

Luckily we got ready in time, since the TechnOasis filled up to the brim at precisely 18:30! We realized quite soon that the rumors we heard were right. The organizers had expected around 1,500 attendees, but at least 1,000 more has registered. Excellent news! This resulted in a packed TechnOasis, and also a more intimate feel of the whole conference. The atmosphere was full of expectations and everybody had happy faces.

So the reception! Refreshments were served and it was busy in the booth right away! Our well-oiled machinery chugged off and we did demo after demo. We talked about our new release, social business and a new way to work according to Infoware etc. We noticed immediately that almost every visitor were using IBM Connections one way or another. A positive trend! And of course good for us, since our tool cover the needs of an organization using IBM Connections.

We worked hard! And after opening in the TechnOasis, the Welcome Reception continued outside on the Swan Lake terrace with food, drinks and DJs who played far too modern music according to Mats Feretti. 🙂

The next day after breakfast: OGS! Exciting! What would happen? How will this conference turn out? It was big expectations in the air and good music was playing when all the people were gathered. Jeff Schick opened with a bang. Talked about taking on Google and Dropbox. About the collaboration with Apple. Go IBM! Scott Probes did a live demo IBM Verse! Very cool. Scott smiled like a kid on Christmas Eve on stage. And we smiled with him! The whole concept of IBM Verse is "A New Way to Work". IBM Verse will work for you, and not vice versa. The mail has jumped to the next step and is now a tool to sort, categorize and prioritize all the information flowing over you on a normal working day. He also showed cool Watson features. The look of Verse is totally fabulous and I for one cannot wait until I can try and use it! Then Luiz Benitez showed us the new Connections interface which seamlessly waves into Verse in a very nice way.

The week went on in similar fashion. Three whole more days in the booth with non-stop networking and connecting with new and new friends. We decided that every member of our booth crew needs to have the same amount of tattoos as Fredrik. Well, we’ll see about that.

We caught up with our resellers that attended the conference too. Very good to show them our new release of our product and talk business, but also just to spend time together over a beer or two.

I also took the opportunity to meet my friends from Social Connections! Both Lars Samuelsson, Brian O’Neill, Jan Waldman and new friend Doug Morrison. All happy faces!

Notes/Domino turns 25 this year, which raised some attention during the week. Small happenings popped up here and there at the conference to celebrate the youngster. For example bubbly champagne, cakes, and not to forget temporary tattoos handed out by Matt Newman. We all got branded!

The evenings was of course a great deal of fun too! Every night we had something to look forward to. One small disappointing thing though was that there was no theme park booked for the ConnectED Party this year. I who, love roller coasters over than many, many other things had to settle for some drinks and food at the Dolphin Hotel instead. Although, there WAS indeed a very short ConnectED Party, with food and drinks in the Atlantic Hall at Dolphin. After we had eaten, we thought it was time to start the party! We went up on the huge empty dance floor and started dancing, and soon the dance floor filled up with others. 🙂 It’s always like this!

The week went on and soon it was Wednesday, and time for the Closing Session. Somewhat tired we went into the darkness of the session room to hear IBM say thank you and goodbye for a fantastic conference week! And we agree.

Last night with the gang. The week has been long and full of hard work, rest = zero, so we decide to do something simple and just for us at Infoware. A short trip down to Downtown Disney and a burger at the House of Blues. Great place with the music scene and American good food. We had a long table where we could take a break and rest and have a good time together. When the clock was 0:00, I was at home in the room, received a glass of whiskey from a colleague and started packing my bags. #yawn

Then it was over .. the end? 🙁 The feeling when we close the booth and say goodbye to all our friends and acquaintances cannot be described. I strolled by the Dolphin fountain and listened to its noise one last time and then went out waiting taxi to take us to the hotel. For several months I have breathed #ibmconnected with all the planning and hard work. And now it's over? Impossible. But there is also joy. An incredibly joy that has spread among us throughout the week. The buzz to have scooped a number of leads, talking to "everyone", said hello to "everyone". The IBM ConnectEd Community is not like others. It’s magical and captivating. And once you have walked over the bridge between Swan and Dolphin, you know you want to do it again and again and again. Because the reward for all the hours you invested is amazing!

0

New members of the Infoware crew

Posted by:

We have had a fabulous year at Infoware, and to keep up our excellence and competence, we are always searching for new co-workers for the Infoware team. Latest addition to our crew is project leader Sofia Olsson (formerly Stockholm County Council) and developer Jenny Jutterström (formerly Bombardier).

We welcome both and hope they soon will feel at home!

 

0

Focus: the German market

Posted by:

We have experienced increased demand for our product DomainPatrol Social globally, which we of course are very happy about. To meet this interest we are doing a number of activities and promotions this year. First off, we are teaming up with one of our German partners Stefan Gebhardt at FSS, releasing a new webpage about DomainPatrol Social. Completely in German.

Now we can come closer to the German customers with first hand information and dialogue in your own language if needed. We think it's important that every customer fully shall appreciate the benefits and winnings of DomainPatrol Social, and we feel that we now are one step closer to that.

http://www.domainpatrolsocial.de/

DomainPatrol Social

 

1

A very Merry Christmas to you

Posted by:

Infoware wishes to thank all of our customers and friends for a fantastic year! We started off in January with the great conference IBM Connect in Orlando. Our product DomainPatrol Social did indeed hit the charts, and we have had a really busy year, taking care of all the new contacts we made. We are proud to announce that we now have several new customers using our IBM Connections tool. And with this, our knowledge about how you want IBM Connections shall be modeled and used, is growing by the day. All this nice feedback and credit gives us a real energy boost to continue to use our expert skills in developing DomainPatrol further!

Our room booking app for mobile devices, Rooms & Connections, has also received praise, and since we see an increasing interest for mobile apps in total, we are keeping up the speed in developing new versions and with extended functionality!

We are more global than ever! Our technical experts are increasingly demanded by customers abroad. We suspect it has something to do with our knowledge and experience within social business, infrastructure and development work.

The other day we celebrated a very sucessful, fun, challenging and rewarding year at our annual christmas party on a restaurant in the beautiful Stockholm archipelago. A relaxing evening with coworkers where we planted a seed for a promising new year 2015!

Christmas is a time of giving so our gift this year goes to Doctors without borders! They do very important work in providing medical aid where it is needed most. Why not do the same? http://www.doctorswithoutborders.org/

0

Social Connections – only 2 days away

Posted by:

 

In just 2 days Infoware will attend Social Connections in Stockholm. As Champagne Sponsor we look forward to two days full of conversations, meetings, networking and learning.

Infoware will also be on stage in two sessions:

 

Tobias Gruvfält and Christer Eklundh, Infoware

"Swap the unstoppable work spiral for a smarter way to work. All with zero friction."

Use IBM Connections for a more digitalized and social way of work. Promote business development, innovation and culture change with all the experience you have from private social media such as Instagram and Facebook. We will also highlight one of IBM Connections key components: Communities. The workspace where you meet your colleagues, share your information and experiences, take advantage of the latest news in the group, etc. Where it all happens.

 

Ulf Stider, Infoware and Per Ejnar Thomssen, TINE SA

"TINE's Intranet – 6 months later"

6 months has passed since Social Connections in Prague where TINE presented their new intranet that was launched together with business partner Infoware in May. What has happened after launch, what does the TINE organisation feel about it and has it created business value? Come to learn about TINE's experiences from launching a socially enabled intranet, and how Infoware's expertise has played an important part in the project.

 

In these two sessions we are promoting the many projects withing social business we have. Above that we will be available in our booth in the sponsor area. Here you can get a demo of a fresh release of DomainPatrol Social. The one and only tool for administering IBM Connections. Move and merge Communities, Blogs, Activities, Wikis and more. Never again feel that you content is stuck were you created it. Release your creativity and form IBM Connections the way you want to. DomainPatrol Social is also a powerful user management tool. Let IBM Connections evolve around your organisation. Let it grow together with you!

Are you attending the conference? Let us know, we would love to meet you!

Send us an email info@infoware.se

0

How to: Patch OS X / MAC against the Shellshock vulnerability

Posted by:

It may sound complicated when you read the online descriptions, but it's actually very easy!

The latest version, as of this writing, for OS X is 10.9.5 and that is susceptible to the Shellshock vulnerability.

To check your version of Bash, open a Terminal window and run: bash –version

This will probably return this: GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)

 

I just performed the following on my own machines and it works perfectly.

Make sure you copy everything below – easiest is to click the "view raw" link to the bottom right of this Gist-box.

$ # If you want to disable auto-imported functions, uncomment the following
$ # export ADD_IMPORT_FUNCTIONS_PATCH=YES
$ mkdir bash-fix
$ cd bash-fix
$ curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf -
$ cd bash-92/bash-3.2
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052 | patch -p0    
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053 | patch -p0  
$ # See note above about ADD_IMPORT_FUNCTIONS_PATCH
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] && curl http://alblue.bandlem.com/import_functions.patch | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054 | patch -p0
$ cd ..
$ # Note: DO NOT ADD SUDO TO XCODEBUILD HERE
$ xcodebuild
$ build/Release/bash --version # GNU bash, version 3.2.54(1)-release
$ build/Release/sh --version   # GNU bash, version 3.2.54(1)-release
$ sudo cp /bin/bash /bin/bash.old
$ sudo cp /bin/sh /bin/sh.old
$ sudo cp build/Release/bash /bin
$ sudo cp build/Release/sh /bin

Open a terminal window and paste the following: pbpaste | cut -c 2- | sh

Now you should see it working thru the instructions and eventually you will need to input your password.

 

To verify that everything went according to plan you can verify your bash version again, like above.

This should now return: GNU bash, version 3.2.54(1)-release (x86_64-apple-darwin13)

 

Now you beloved Mac is all safe and sound again, but just to be on the safe side you should also prevent use of the previous bash version by issuing the following command in the terminal: sudo chmod a-x /bin/bash.old /bin/sh.old

Done!

 

For more details you can read the following post where I got the above instructions from.

0

Phonegap / Cordova 3.6.3 & CDVPlugin class CDVNotification (pluginName: Notification) does not exist

Posted by:

Eager to get your hands on the new and shiny huh?

Well, if you're using the plugin: org.apache.cordova.dialogs and upgraded your project to Phonegap / Cordova 3.6.3 you're in for a world of hurt.

This plugin is what provides native notifications like alert, confirm, prompt and beep. This will, after upgrading, cease to work and you should get a confusing error message in XCode like below:

(The text from row 3 and below will vary, depending on your implementation of the plugin)

2014-09-23 08:27:40.512 Rooms[7288:414440] CDVPlugin class CDVNotification (pluginName: Notification) does not exist.
2014-09-23 08:27:40.512 Rooms[7288:414440] ERROR: Plugin 'Notification' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2014-09-23 08:27:40.512 Rooms[7288:414440] -[CDVCommandQueue executePending] [Line 158] FAILED pluginJSON = [
  "Notification1434422161",
  "Notification",
  "alert",
  [
    "You have to perform the setup, before you can use the application.",
    "Perform Setup",
    "Don't worry, it's easy"
  ]
]

This is how to solve it:

You need to add the plugin, manually, to the build phase of the project and you need to add a framework. Sounds complicated? It really isn't. Just have a look at the image below, follow the steps and…. BOOM! You're of to stardom once again!

 

4

Infoware is proud sponsors of Social Connections VII in Stockholm

Posted by:

Once again we are participating in this fantastic event arranged by IBM Connections User Group.

And we will also welcome you all to our beautiful hometown Stockholm!

The event includes leading speakers from IBM, partners and customers, and it is a fabulous opportunity to network with old and new acquaintances. To suit a larger crowd the content will be both business and technical.

Do not hesitate to register for two interesting days focused on IBM Connections and Social Business.

Read more about the event here:  socialconnections.info

 

0

JSR286 portlet unit testing with Jetty, Pluto and JWebUnit

Posted by:

Background

Unit testing using JUnit has been around for quite some time, and even though I have used in early JUnit versions, it got really going when I also started to use maven. It was quite easy to create unit tests for any of my classes. Since I worked a lot with portlets I wanted to do expand my unit tests to include portlets.

 

The JSR286 portlet standard has been around for a while and it surprised me that I couldn't find any unit tests for JSR286 portlets, only JSR168 portlets. The most helpful blog I found was this one Testing Portlets with Jetty, Pluto and JWebUnit but again it applies to JSR168 portlets. Starting from there I tried to do the same thing with JSR286 portlets, but the pluto version used wasn't designed to work with JSR286 portlet. However, it gave me a starting point to recreate the setup for JSR286 portlet unit testing.

 

Setup

I will be using only a minimalistic portlet to demonstrate the setup. My starting point is a minimalistic portlet set up with maven. I demonstrated how to set that up in my last blog entry. From there I enhanced it a bit to allow for more testing. Here is the portlet class, the portlet.xml and the jsp I am using.

package com.mycompany.myportlet;

import java.io.IOException;

import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

public class MyPortlet extends GenericPortlet {

	public void doView(RenderRequest request, RenderResponse response)
			throws PortletException, IOException {
		PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
				"/view.jsp");
		rd.include(request, response);
	}
}

<?xml version="1.0" encoding="UTF-8"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" id="MyPortlet">
	<portlet>
		<portlet-name>MyPortlet</portlet-name>
		<display-name xml:lang="en">MyPortlet</display-name>
		<display-name>MyPortlet</display-name>
		<portlet-class>com.mycompany.myportlet.MyPortlet</portlet-class>
		<expiration-cache>0</expiration-cache>
		<supports>
			<mime-type>text/html</mime-type>
			<portlet-mode>view</portlet-mode>
		</supports>
		<supported-locale>en</supported-locale>
		<resource-bundle>com.mycompany.myportlet.nl.MyPortletResource</resource-bundle>
		<portlet-info>
			<title>MyPortlet</title>
			<short-title>MyPortlet</short-title>
			<keywords>MyPortlet</keywords>
		</portlet-info>
	</portlet>
	<default-namespace>http://MyPortlet/</default-namespace>
</portlet-app>

<%@page session="false" contentType="text/html" pageEncoding="ISO-8859-1" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>                
<portlet:defineObjects/>

<div id="HelloWorldDiv">
Hello World!
</div>

Maven dependencies

Next I set up the maven configuration. For this example I am using a simple pom.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.mycompany.myportlet</groupId>
	<artifactId>MyPortlet</artifactId>
	<version>0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>My Portlet</name>
	<description>A basic portlet mavenized</description>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>2.17</version>
				<configuration>
					<useSystemClassLoader>false</useSystemClassLoader>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>javax.portlet</groupId>
			<artifactId>portlet-api</artifactId>
			<version>2.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.mortbay.jetty</groupId>
			<artifactId>jetty-maven-plugin</artifactId>
			<version>7.0.0.pre5</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>net.sf.portletunit</groupId>
			<artifactId>maven-jetty-pluto-embedded</artifactId>
			<version>2.0</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>net.sourceforge.jwebunit</groupId>
			<artifactId>jwebunit-htmlunit-plugin</artifactId>
			<version>3.0</version>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>ch.qos.logback</groupId>
					<artifactId>logback-classic</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.7</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>

I will describe what all of this does starting at the top. It starts with the basic maven configuration for the project. Moving on to the build section. There are some issues with loading classpaths and if I don't tell the surefire plugin to not use the system classloader, jetty will not be able to find the JSTL tag library and thus the entire test will fail.

 In the dependencies section I will start with the standard portlet api. This is required to compile the portlet class. Next is the jetty-maven-plugin. This is the lightweight web container used as a web server if you will when we are running the tests. This is then used together with the maven-jetty-pluto-embedded plugin. Pluto provides the portlet engine for the portlet  and maven-jetty-pluto-embedded provides the possibility to use pluto together with jetty. Starting with version 2.0 of this plugin the JSR286 portlet specification was supported. Next is jwebunit-htmlunit-plugin. This is what I use for the actual tests in my test class. The exclusion in the dependency is for us to be using my own custom logging configuration and so is slf4j-log4j12. Also note that all of these dependencies (except for the portlet api) are using the test scope. This is because I will only require these during the test phase.

Also as a sidenote. Some of these implementations have newer versions available in particular the jetty-maven-plugin, but since one of the critical components is maven-jetty-pluto-embedded, the version I use here is the latest compatible version I have found I can use.

The test class

Now off to the test class. Basically I do this in three steps. Setting up the server, running my tests and shutting down the server.

package mytest;

import static net.sourceforge.jwebunit.junit.JWebUnit.assertElementPresent;
import static net.sourceforge.jwebunit.junit.JWebUnit.assertTextPresent;
import static net.sourceforge.jwebunit.junit.JWebUnit.beginAt;
import static net.sourceforge.jwebunit.junit.JWebUnit.getTestContext;

import org.apache.pluto.container.driver.PortletServlet;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.ServletHolder;
import org.mortbay.jetty.webapp.WebAppContext;

public class MyPortletTest {
	private Server server;
	private static final int SERVER_PORT = 8080;

	@Before
	public void setUp() throws Exception {
		System.setProperty("org.apache.pluto.embedded.portletIds", "MyPortlet");
		server = new Server(SERVER_PORT);
		WebAppContext webapp = new WebAppContext("src/main/webapp", "/test");
		webapp.setDefaultsDescriptor("/WEB-INF/jetty-pluto-web-default.xml");
		ServletHolder portletServlet = new ServletHolder(new PortletServlet());
		portletServlet.setInitParameter("portlet-name", "MyPortlet");
		portletServlet.setInitOrder(1);
		webapp.addServlet(portletServlet, "/PlutoInvoker/MyPortlet");
		server.addHandler(webapp);
		server.start();
		getTestContext().setBaseUrl("http://localhost:" + SERVER_PORT + "/test");
	}

	@After
	public void tearDown() throws Exception {
		server.stop();
	}

	@Test
	public void testDoView() {
		beginAt("/portal/index.jsp");
		assertTextPresent("Hello World!");
		assertElementPresent("HelloWorldDiv");
	}
}

The startup of the server can be done also through configuration, but I extended my work starting from the blog where I found the JSR168 examples so I will continue the same way. In the setUp() method I do all of the server configuration and startup work. The exact name of the method id not important, but it must use the @Before annotation. The first line defines the portlets I use in my tests, the exact name is not important but it must match the portlet name in the portlet.xml. There can be multiple portlets as long as they are on a comma-separated list. The server is created with only a port where the server is started. The port can pretty much be any port as long as it is not already in use.

 

Next the web application context is set up. Here I define a servlet url mapping and add pluto descriptors and classes in order to get a proper portlet engine. The web application context is added to the server and the server is started. Finally the base url to use for all tests is defined.

 

The tearDown method is run after all the tests have completed (using the @After annotation). All this method does is to stop the server.

 

Finally I have the test method. This is just a simple demonstration to get started. What you want to do with your tests is up to you. Any test method can contain a number of different tests and there can be multiple tests in a test class. Here I start navigating to the pluto portals front page, making sure a certain text and div is present.

 

Reduce logging

If you run the test with only the above setup, you will find there is some extensive logging done. This is because the logging is set to debug level. I find this a bit too talky myself. In order to fix this, first we must exclude the default logging from JWebUnit. Jetty uses slf4j and all I did from there was to add the log4j impementation of slf4j using this configuration.

log4j.rootLogger=WARN, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%p] %c{1}:%L - %m%n

This configuration will set the logging to warn level. This will reduce the logging drastically but the cause will still be logged if an error fails. You may need to adjust the log level for further debugging if a test fails, but I found this to be a nice setting. I have also added a configuration which will output maven-like logging.

References

0
Page 5 of 13 «...34567...»