Category Archives: Mobile

2013 Business Intelligence Trends


A few weeks ago we posed the question of whether or not Excel had the staying power to be the next great Business Intelligence tool. An overwhelming percentage of readers said yes. This week we decided to delve further into what else is on the horizon for the Business Intelligence arena.

Each year experts and industry leaders make their predictions on what lies ahead on the Business Intelligence landscape. We’ve distilled those predictions down to ones that appeared several times over. Looking at TechTarget, InformationWeek, Forrester, and Tableau Software, we scoped out the top Business Intelligence (BI) trends for 2013 and this is what we discovered.

  1. Cloud BI – The cloud isn’t going anywhere. It still has a lot of attention, despite the reliability, performance, availability, and privacy concerns from your IT department. The cloud’s ability to adjust to larger and larger data sets and petabytes of information makes it attractive for the Business Intelligence arena. TechTarget doubts moving infrastructure to the cloud will become mainstream in 2013, but that it is definitely destined and headed in that direction.
  2. Big Data – Big Data still gets big talk. Forrester predicts a rise in Hadoop-based BI applications, particularly within the mission-critical applications. Along those same lines, Forrester sees Big Data moving out of silos and into enterprise IT. They see enterprise IT becoming more involved with enterprise BI in order to save on the costs it takes to manage Big Data.
  3. Self-Service BI – We’re seeing it with the addition of Powerview to Excel, the desire for people to be in charge of their own data with less of a reliance on IT support to pull information and make business decisions. Forrester cited: Continue reading 2013 Business Intelligence Trends

The Mobile Bandwagon: the BYOD Generation is All In, Your IT Dept Not So Much

VentureBeat Screenshot

Everyone’s jumping on the mobile bandwagon, especially the Bring Your Own Device (BYOD) generation. Advertisers are trying to harness its ability to be in front of this constantly connected audience; developers are trying to build compatible apps every user wants (ahem, shameless plug for Gander); businesses are looking for new ways to best tap into this market. There’s one group, though, that hasn’t overlooked the security challenges and additional costs this new trend brings: your dedicated, behind-the-scenes IT team.

VentureBeat wrote an article last week on the mobile BYOD trend, citing the increase in employees using their personal devices (often more than one device) to access sensitive company information and the frustration of the IT departments.

“A massive majority of companies, 81 percent, now allow employees to bring and use their own devices, and 56 percent of companies have codified that into their corporate guidelines, according to a new study by iPass and MobileIron.”

If you’re like me, you would think having employees use their own devices would lower company costs. However, factor in multiple data plans across multiple devices and things start to get messy. Continue reading The Mobile Bandwagon: the BYOD Generation is All In, Your IT Dept Not So Much

Developing Android Apps: 10 Performance-Boosting Strategies

In working on my spare-time app BostonBusMap, I’ve repeatedly run into problems where I need to cut down on memory usage or running time. It’s not difficult to hit memory limitations on Android, especially on earlier devices which may allow only 16MB per app. Garbage collection can cause noticeable hiccups (especially before Android 2.3), which is one reason why memory usage can impact an app’s sluggishness. Here’s a list of things I did to make my app more responsive:

  1. First, read the Android performance guidelines. It’s also worth rereading this page from time to time because newer Android versions have more advanced capabilities that may influence the optimizations you make.
  2. One other important thing that bears repeating from that page is, don’t optimize unless you can show that there’s a bottleneck, because optimizing is a lot of work and can make code less maintainable
  3. Memory allocations are expensive. Be lazy in allocating objects if they are only used in edge cases
  4. Use DDMS. This is available within Eclipse and as a standalone tool:
    1. Profile against smaller amounts of data at first, to make the experience less painful and time consuming for you. Debugging will slow your app down in general
    2. Click on the green cylindrical icon to the left (called “Update Heap”) to turn on heap tracking for a thread. This will update whenever a garbage collection occurs (you can also force garbage collections) Continue reading Developing Android Apps: 10 Performance-Boosting Strategies

Suspending Development of our BlackBerry client software for Microsoft SharePoint

On May 6, 2011, we suspended development of Pylon, a BlackBerry client for Microsoft SharePoint. This was a very difficult decision, as we started working on this product over three years ago and invested significant R&D, sales and marketing effort into it. Three issues factored into the decision:

  1. Breadth of Features: Microsoft SharePoint is a large and multi-dimensional product. As we narrowed the feature set to appeal to a few customers, we grappled with how to scale to a broader base. Enterprise SharePoint customers frequently build solutions assuming that Internet Explorer will be the user interface. Bringing these custom solutions to multiple mobile environments would require significant engineering work from both SoftArtisans and the customer.
  2. Microsoft’s SharePoint Protocol Patent Licensing, which imposes a significant royalty on a product like Pylon: By our reading, a client-only, software-only product like Pylon would require a minimum royalty payment of $5.80 per license, which is unfeasible in a typical app marketplace where products are either free or typically less than $20, not counting an app store’s 30% fees. Continue reading Suspending Development of our BlackBerry client software for Microsoft SharePoint

Setting An Automated BlackBerry Test Environment Against A Real BES: A Story Of Failure

We wanted to set up an automated testing environment for the Blackberry in which we could test against multiple versions of a real BES. We have a pretty solid framework for automated testing of OfficeWriter, and since it proved itself to be very beneficial, we decided to try to do the same for our BlackBerry product. We already have a framework in place which runs automated tests on the simulator using the MDS simulator. We even extended this framework to run against an actual SharePoint server, although that’s a topic for another blog post. So, if precedence counts for anything, setting up an automated test environment for BlackBerry should have been a snap, right? Wrong. Here I wish to describe the path we walked down as we tried to set up a test environment that would run automatically against a real BES.


In order for a simulator to run against a real BES, it needs to connect to Desktop Manager, so we have set up two (Windows 7 64bit) virtual machines, each with a simulator and a Desktop Manager set up with a user provisioned through BES – one for BES 4 and one for BES 5. In order to automatically access and control these machines we chose to use PsExec from our Ant script using the exec tag and passing in the needed arguments. So, for example the followings, as part of an Ant target, will restart MyRemoteMachine using PsExec: Continue reading Setting An Automated BlackBerry Test Environment Against A Real BES: A Story Of Failure

Using SQLite in BlackBerry Applications

We recently decided to add some basic persistence to Pylon, our latest mobile application for accessing SharePoint. Nothing complicated, just logging levels, username and SharePoint URI.

We decided to use SQLite for persistence instead of the BlackBerry Persistent Store  because of our previous experiences with the latter – where we encountered some stability issues such as the insidious 523 error which requires removing the battery to fix. We were also looking for an approach that would be more compatible when we port our application to iOS and Android.

The BlackBerry code samples for basic SQLite operations are straight-forward:

However after basing our code on the samples we did run into a couple of issues.

SQLite not working on some phones – “Error: file system not ready”

The first issue we ran into was that the database simply didn’t work for certain phones. The confusing thing was that it wasn’t even consistent for phones of the same model.

It turns out the key was this line in the BlackBerry documentation:

“You can create database files in eMMC memory, on devices that support it, by specifying the corresponding file system path.”

Our application would use an SD Card if there was one, otherwise we would use device memory. If the device didn’t have an SD Card AND it didn’t have eMMC memory then we would get a “file system not ready” error when creating a database.

Phones that support SQLite DB in device memory (eMMC)

  • Torch
  • Storm 2

Phones that DON’T support SQLite DB in devicememory

  • Bold
  • Curve

Even with an SD Card, SQLite might not work if Media Card Support is turned off or if the phone is tethered to a computer and Mass Storage Mode is turned ON.

Intermittent Error – “Error: File system error (12)”

Another error we ran into was that sometimes opening the database soon after reading or writing to it would fail with the error “File system error (12)”. Just for testing I added code that would try to open the database a second time in case of failure after sleeping 100 milliseconds. This second attempt to open the database would always succeed.

Looking for “File system error (12)” online I found a few instances that were determined to be caused by bad queries or by failing to close the database or a SQL Statement. However the exact same query that worked most of the time was being called when the error would occur and after reviewing the code we determined that all databases and SQL statements were being correctly closed.

It turns out that we were following the BlackBerry examples a little too closely and opening/closing the database for every read/write operation. The overhead of this meant that the database wasn’t ready to be opened in time for the next operation.

We fixed the problem by only opening the database once the first time and then reusing that handle all subsequent times until we close the database on application exit.

Working around history.back() bug in BlackBerry Torch browser widget

I’m on the team working on Pylon, a smartphone app which allows the user to approve Nintex tasks, among other things. It currently uses BlackBerry Webworks, which is a platform that uses HTML and JavaScript in the UI. On one screen we wanted functionality that would send the user back to the previous screen (as if they clicked the back button). The way to do this in JavaScript is:




However, in my testing this did nothing on the BlackBerry Torch running OS 6, or on the Torch simulator. I found a workaround which works on most OS 5 and 6 devices (see Caveat for the exception.)

Basically, I needed to write a Webworks extension function to trigger the behavior from Webworks. Continue reading Working around history.back() bug in BlackBerry Torch browser widget

Using the BlackBerry MDS-CS Simulator

Using the BlackBerry MDS-CS Simulator

Mobile Data System Connection Services (MDS-CS) is a BlackBerry Enterprise Server (BES) component that acts as a “gateway” between BlackBerry users and local network resources (i.e. intranet, SharePoint, file shares). RIM offers the MDS-CS component of BES as a free-standing simulator. This allows developers to test an application (that requires network access) against different modeled BlackBerry simulators without the complication of connecting each simulator to the BES. The easiest way to begin using the MDS-CS simulator is to download a BlackBerry JDE which includes the MDS-CS simulator and a variety of BlackBerry simulators.

Using MDS-CS Simulator packaged in the JDE Continue reading Using the BlackBerry MDS-CS Simulator

Static Initialization in the BlackBerry JVM

The Problem

I was investigating some odd behavior on the BlackBerry recently to try to diagnose a problem. Along the way, I discovered a bug in BlackBerry’s JVM, as a result of which static initialization can occur multiple times – and even static final variables can change.

Consider the following code:

public class App extends Application
	public static void main(String[] args)

public class BaseClass
		System.out.println("Static initialization called");

public class Subclass extends BaseClass


Continue reading Static Initialization in the BlackBerry JVM

SSL Certificates, Blackberries, BES, and SilverDust


Potential connection issues can occur between the SilverDust server, BES, and SilverDust blackberry client if SSL encryption is used. We recommended SSL be used in every production SilverDust environment to encrypt SharePoint content between SD Server and the BES/blackberry.

This post also serves as a general guide for accessing any SSL enabled website from the blackberry.

The Handshake

There are two ways a blackberry can complete a SSL handshake. The first option, called proxy mode, allow’s the BES to complete the handshake on a blackberry’s behalf. The second option, called handheld mode, allows the blackberry to directly complete the handshake.

Handheld Mode

To enabled handheld mode change the TLS default setting on the blackberry. This setting can be adjusted on the handheld by navigating to options->security options->advanced security options->TLS Default->change the setting between proxy and handheld. The default is proxy mode or set an IT policy value to force handheld mode. Continue reading SSL Certificates, Blackberries, BES, and SilverDust