Feb 19

What Facebook says about HTML5 mobile apps

“We’ve tried in the past to just build web apps that we could wrap in thin native wrappers, but it doesn’t work. […] Anytime somebody tries to reimplement a native widget using HTML, CSS and JavaScript it always feels like shit.” – Tom Occhino while introducing Facebook’s new React Native

It’s exactly my experience since I started developing mobile apps four years ago. Therefore, I focused on Appcelerator Titanium which does for years what Facebook tries to do now.

Nevertheless, at the moment I’m developing a BlackBerry 10 app using HTML5, and I’m quite satisfied with the outcome – but only because it’s a relatively small app that only needs to store small amounts of data on the device, and where small UI glitches are acceptable.

But in the end, there are UI glitches. Like a bar at the top that should be fixed, but scrolls with the content for a small moment before it’s being placed at the top again. Or small, subtile differences in transition animations. On the other hand, I like that I can control the UI as much as I want – since it’s only HTML that can be modified at any time using JavaScript.

So it’s as always: there is no “one solution that rules them all”. HTML5 apps are fine in several cases. But if you want to develop huge, complex apps I’m sure an approach like Titanium is the better way. And if you want to synchronize with Notes, you need to do it in Titanium anyway, so that you can use DominoToGo.

Jan 14

News about BlackBerry 10 development

Some weeks ago I wrote about my efforts do build a BlackBerry 10 app with DominoToGo and Titanium.

I made progress with the app since then. I can synchronize data from IBM Domino using DominoToGo, I can display the data in views and forms. So is everything good?

Unfortunately: no.

During the work on this Titanium based BlackBerry 10 app I discovered several features that were unstable, and I discovered a lot of Titanium features that are simply not implemented for BlackBerry 10. Furthermore, there is no word from Appcelerator that they will continue to support BlackBerry 10 (although there is no word against that, too).

In the end, working on that app felt more and more like riding a dead horse. So my customer and I made a decision: move away from Titanium for this BlackBerry 10 app (while staying with Titanium for another complex, iOS based app).

It’s a tough decision since time is pressing. But what’s an app without future and with potential stability problems good for?

Now I’m re-implementing the app with BlackBerry WebWorks, which is an enhanced Apache Cordova (Phonegap) version for BlackBerry. So basically I’m developing HTML5 now.

One bad thing about mobile development with HTML5 is how to style the app so that it looks and feels like a native app. Yes, there are apps where users accept that they look different, but in most cases users like it when the app looks and feels the way they know.

I looked at Sencha, Dojo mobile, jQuery mobile etc. But for BlackBerry, they all didn’t convinced me. The solution seems to be bbUI.js. That framework not only does a good job in providing UI controls, but delivers an easy to use screen architecture, too. Each screen is simply an HTML file with a special DIV as root element.

Furthermore, each screen can use it’s own JavaScript resources. That way, I can separate UI from logic similar to Titanium’s model-view-controller architecture.

In addition I’m using underscore.js, Backbone.js and the core of jQuery.

I still don’t like Cordova’s way of using callbacks in callbacks in callbacks in callbacks. It’s hard to write clean, readable code when you’re forced to deal with so many callbacks. I understand why they chose this architecture, nevertheless, using too many callbacks lead to code that’s hard to understand.

The good part is that I can re-use much code I already wrote in Titanium, so it’s not a start from the beginning. And so far the performance on an old Z10 device is surprisingly good.

Dec 09

That was hard. Problems with BlackBerry deployment fixed by changing “ü” against “u”.

I fought with this issue for a week: when trying to deploy a BlackBerry 10 app to a device, I got this error:

result::failure 500 ‘ascii’ codec can’t decode byte 0xc3 in position 111: ordinal not in range(128)

I posted the issue in the developer forum, asked fellow developers and asked for help in this blog, with no results. Every day I thought about the problem and tried new approaches, without any luck. Today I finally found a way to submit a ticket to a BlackBerry issue tracker, and shortly after en engineer responded. After some exchange of comments and files the issue was found: I used an umlaut in the author name in the debug token’s certificate. The author was set to “Ingenieurbüro Julian Buss”, and the “ü” was the problem. After I changed the author name to “Julian Buss” and recreated the debug token, the deployment ran without any problem.

In my last comment in the issue I suggested to improve the error message in this case. It’s really hard to believe that this issue slipped through quality assurance.

Nevertheless, now I’m able to test my Titanium and DominoToGo BlackBerry app on the device and so far it runs fine!

Oct 27

Triff mich am 13. November bei der SNoUG Tagung in Zürich

Ich werde am 13. November bei der SNoUG Tagung über “Native, echte, offline-first mobile Apps für Notes bauen und Daten synchronisieren” sprechen. Hier könnt Ihr lernen, wie die Technologie hinter DominoToGo funktioniert.

Bei der SNoUG gibt es noch viele weitere sehr interessante Sessions! Ich freue mich darauf!

Also, wer in der Gegend ist, sollte da hin gehen!

Oct 21

First steps and issues with Titanium, DominoToGo and Blackberry 10

Today I started with Blackberry 10 development using Appcelerator Titanium and DominoToGo. Setup of the development environment was easy since there is a good guide in the Titanium documentation.

There are a few things to watch out for, though:

  • Make sure you follow the guide to create a debug token. That’s NOT the BlackBerry ID token created in the BlackBerry Deployment Setup Wizard in the Momentics IDE! See Momentics IDE – Properties – BlackBerry – Signing to create a debug token. It will create a *.bar file which you can use in Titanium’s Studio properties.
  • To access the file system of the BlackBerry simulator, use a ftp client and log into the IP that is displayed in the lower left corner of the simulator. Use “devuser” as user and passwort.
  • In BlackBerry’s file system the app data is stored in /accounts/1000/appdata/<app id>.
  • Do not switch off development mode in the simulator! If you ever switched that off, you need to enter a device password in order to enable development mode again. And if you did that, you cannot use the standard run command of Titanium Studio, since it doesn’t use the password you may have set in the run configuration.
    There is a workaround for that, too, using CLI in terminal. But it’s annoying, so better don’t touch the development mode switch in the first place.

The most recent version of DominoToGo has issues on BlackBerry 10 because Appcelerator simply didn’t implemented some features of the Titanium SDK for BlackBerry yet. One missing functionality is a file stream, which DominoToGo uses when data downloaded from Domino is huge (multiple megabytes). So far I’m using in-memory processing instead of file streams as a workaround.

The SQLite database implementation is missing the ‘rowsAffected’ property which I’m using in some database operations. I have to find a workaround for that, too.

I’m sure there will be more issues I will come across in the next weeks. But the good news is that a lot of important functionality is working just fine on BlackBerry 10, such as HTTP connectivity, reading and writing files and most database operations.


Oct 09

Just ordered a Blackberry Passport instead of iPhone 6

So far I’ve used an iPhone 4S and I’m still happy with it. Nevertheless, time nags on the 4S and it’s not really capable of running iOS 8 (which I will only start to use when Mac OS Yosemite is available, by the way).

So I prepared myself to spend a lot of money on a new iPhone sometimes in the next weeks.

But yesterday I saw a Blackberry Passport while working at a customer’s office. The form factor is unusual, but not bad – not bad at all. The more I played with it, the more I liked it. And the final nail to iPhone’s coffin was that the customer needs me to build a Blackberry 10 app with Appcelerator and DominoToGo – which means I need a device to test the app anyway 🙂

So I just ordered the Blackberry Passport. And I’m really looking forward to use it. Especially because

  • It has a hardware keyboard. I never get really used to the onscreen keyboard of the iPhone where I still make type errors every single time I’m writing something.
  • Using the keyboard as touchpad as well seems to work really good.
  • It has a hardware keyboard.
  • The Blackberry Hub seems to be really useful.
  • I like the square screen size because I don’t need to turn the device in order to read longer texts.
  • Did I say that it has a hardware keyboard?
  • The Blackberry 10.3 software looks really good.


Sep 23

Some more recent changes in DominoToGo

Beside the multiple category filter feature DominoToGo evolves in other areas, too:

  • The architecture has been re-engineered to use require() and be ready for future Titanium SDK versions (where the Ti.include() call will not be available anymore).
  • When creating a NotesDocument locally in the app, DominoToGo will create a local XML representation of that NotesDocument automatically. You don’t need to upload the data to Domino and download the NotesDocument from Domino in order to work with the NotesDocument in the app.
  • Support for Notes views where documents are displayed multiple times. They can be synchronized for offline usage as every other Notes view now.
  • Improvements for uploading attachments to a Notes document in Domino (for example, take a photo and upload to Domino).
  • As always, even more performance improvements. DominoToGo is the fastest way I’m aware of to synchronize a lot of data to a mobile app.
  • Complete new documentation.

Plus there is a full UI framework for Titanium Alloy now as an option. The framework offers ready-to-use controls for a Domino view, picker dialogs, form fields, validation and more. The documentation for that UI framework starts here.

So, there are new features and improvements – but what’s most important is that the core of DominoToGo is still very stable and reliable. If you want offline first mobile apps, DominoToGo is the way to go.

Sep 23

New in DominoToGo: filter view data by multiple categories

In Notes and XPages you can filter a view by one category using the single category feature. In the most recent version of DominoToGo, one can now use multiple categories to filter a view – again a feature that Notes and XPages don’t offer!

When synchronizing the data of a Notes view to the mobile app, you can now use something like this:

var db = new NotesDatabase("http://acme.com/somepath/database.nsf", "dbid");
var view = db.getView("dataByName");
var callback = function(success, e) {
DTG.log("update completed");
view.update(callback, true, "", {
singleCategory: ["Ben Sisko", "Elim Garak", "Worf", "Odo"]

Using this feature, you have way more possibilities to filter the data you want to synchronize to the mobile app for offline usage. I wish I would have this feature in Notes and XPages, too 🙂

See the documentation for more.

Jul 01

Quote about DominoToGo

“Thank you for continued hard work. Domino to Go is becoming an indispensable tool for mobile Notes development and it’s getting better with each release.” – a DominoToGo customer


Jun 30

New DominoToGo documentation released!

In preparation for the upcoming DominoToGo Version 3 release I’ve created a new documentation using JSDuck. It’s more complete, contains some best practices and is much easier to use. Have a look at http://youatnotes.com/dtgdoc!

(Note: the URL redirects to a julianbuss.com URL at the moment)