Microsoft Flight Simulator – It will be back!

I am not a gamer, but there are a couple of games I do enjoy. One of them is Microsoft Flight Simulator, which I have been playing since 1988 or so. Yes, since version 3.0 for PC.

With each version it became more and more realistic looking, you could even buy third-party maps that used satellite images. I was able to fly over my house and identify it. The graphics was good, but not spectacular compared to the games of today. Then in 2009 Microsoft closed down the studio that had been developing the game, to the big upset of the flight sim community. The last version, Flight Simulator X (version 10) was to be the last.

There are a couple of alternatives today, the two major ones are X-Plane and DCS World. I recently started looking at DCS World, and it is pretty impressive. It also supports Virtual Reality headsets out-of-the-box. The game itself is free, you get a couple of airplanes and one region where you can fly. You then purchase the planes and regions you like, over time. The graphics in the game is stunning.

Recently, during the E3 trade show, Microsoft announced that there will be a new version of Flight Simulator in 2020. A 4K video was shown, and the graphics is amazing. The terrain is generated from satellite images, and the environment (ground vehicles, animals on the ground, etc) are controlled by AI. Looking at the video, the graphics is way ahead of anything I have seen.

I really hope Microsoft will be able to deliver, and that it really will be available in the end of 2020. I have been planning to build a new computer for a while, but now I will probably hold off until closer to the Flight Simulator release, in order to get the best and newest components. I have a feeling the game will use every ounce of power available for this level of realism.

6 Comments

CollabSphere 2019 – Registration and Call for Abstracts

The registration for CollabSphere in Boston this fall is now open. This conference, formerly known as MWLUG, is a great opportunity to learn more about the future of the IBM/HCL Collaboration products (Notes, Domino, Sametime, Connections, and more) directly from the product managers and executives at HCL. When CollabSphere takes place on October 28 to 30, the HCL acquisition of the products should have taken place, but you will still see many familiar faces on stage and at the round-table discussions, as a large number of IBM:ers followed the products over to HCL. This is obviously a sign that they belive in the future of the collaboration tools under HCL’s control.

In addition there will be many other sessions from business partners and customers, where you will learn the latest and greatest, as well as best practices, for everything related to the platforms. I have attending MWLUG and CollabSphere for several years, and the sessions are always top notch. Not only do I always learn new things, I also get inspired and energized to do new things with Notes and Domino.

This is also a great opportunity to network, both with HCL executives, product managers and developers, and with other customers and business partners.

The cost of the conference is only $100, which is a steal if you look at what you get. Most of the cost for the conference is covered by sponsors.

If you want to share your knowledge at CollabSphere, the call for abstracts is also open now. Submit your session, and perhaps you get to present to your peers in Boston in the end of October!

I hope to see you in Boston!

0 Comments

Run Notes applications on iPad!

IBM and HCL has released an amazing product, IBM Domino Apps for iPad. They have been showing early versions at IBM Think and other events for the last year, but now it is here, and you can download it in the Apple App Store!

I have seen earlier versions of the product, and I have to say that the developers at HCL did an excellent job. Your existing Notes applications can now run right out of the box with full fidelity and functionality, including formula language and Lotusscript, with no changes needed.

Even features like replication to a local database and working offline works. It is simply a full Notes application client for the iPad.

This is something that people have been asking IBM to develop for at least a decade. And finally we have it available.

There is a version for Android in the works as well, but no official release date has been set for it yet.

So what does this mean? It means that not only can you run your current applications on an iPad, you can develop new applications specifically for tablets. The applications can be styled to work better on tablets, for example larger fonts and buttons. HCL even added some tablet specific functions, like camera integration, to the core Notes functionality.

There are a couple of limitations in the first versions, most notable that there is no support for the mail template, and no support for Xpages in the Notes client.

If you are using Notes and have users with iPads, install IBM Domino Apps for iPad and be prepared to be amazed!

0 Comments

HCL has impressed me!

It has now been just over four months since it was announced that HCL would purchase the IP (intellectual property) of Notes, Domino, Sametime, Connections, Verse, Traveler, and several other products from IBM.

When the announcement was made in 2017 that HCL would take over development and support of Notes and Domino, many IBM:ers with long experience of developing the products moved over to HCL. I talked to several of them back then, and also at the Factory Tour in July 2018. The excitement was amazing to see, it took me back to the days of Lotusphere in the early 2000’s. They were all very excited about the new opportunity to create new functions and expand/modernize the products. Very quickly the development of Domino 10 took off.

Another thing that impress me is how HCL seeks feedbacks from customers and business partners. Even as HCL is hiring on a large number of new developers, there are still limitations on what they can accomplish. It is very clear that they want to build a product for the customers, and they need to know where to focus their development efforts.  HCL and IBM held a number of jams during the first half of 2018, both online and physically around the world, where customers and business partners could give feedback on functionality and priorities.

On October 10, 2018 Domino 10 was released, with many of the improvements requested implemented. Some additional functions, like the support for node.js, were released a few months later.  I think the decision not to rush out everything is the right one. As a developer, I want all the functions right now, or even better yesterday. But at the same time, I want it to work properly. HCL has done a good job at balancing this, at least this far. I want HCL to continue working this way.

The development of Notes and Domino 11 has already started. As a matter of fact, HCL started working on that version even before Domino 10 was released. Several Domino 11 jams have been taking place already, withmore to come. Version 11 will focus on the client, while version 10 had the focus on the server and development functionality. But we developers have things to look forward to in Notes 11 as well.

One of the items IBM and HCL have been talking about is low-code/no-code rapid development. This is something that we are promised to be available in Domino 11, as a browser-based development environment. It would bring the power of Notes and Domino development back to the “citizen developers”, allowing regular business users to be able to build custom applications/solution without writing any code. This used to be a strength of Notes in earlier versions, but in the late 1990’s IBM moved the development functions from the regular Notes client into a separate IDE, Domino Designer. This took away the ability for regular users to build their own solution, and made them have to rely on the IT department or dedicated developers to build applications. Bringing this back would give a new generation of users access to this powerful platform.

I think it is very important that the new low-code development functionality work seamlessly with traditional Domino development, like HCL is aiming for. Imagine a user in the accounting department who comes up with an ide for an application that would improve their efficiency. The user begins to build a simple application using the Domino low-code/no-code environment. Perhaps a form or two, some simple views and a simple workflow. The development is done in a sectioned off part of the server, as the regular users don’t have access to create database/applications in the general Domino data location. Data is then loaded though an import from an Excel spreadsheet,

When the first iteration of the application is done, the user shows the result to the CFO, who loves it. But there are a couple of functions that would be nice to have, like integration with another, existing Domino application. This is something that the IT department and their developers need to handle. So the application is handed over to them. IT takes a look at the application, and either leaves it in the end-user area on the server or move it over to the general data storage. The assigned developer then opens up Domino Designer or perhaps even Visual Studio Code, and add the code needed. The developer only spends a fraction of the development time previously needed, as the end user already built much of the infrastructure of the application. Another benefit is that the developer does not need to collect requirements for how the full application needs to work, only the small part they are modifying/adding.

The application is updated, and the users can start using it. The IT manager is happy, as the developer only spent an hour or two on the project instead of a couple of days, and can now be moved on to the next project. The CFO and end-users are happy because they got their application built quickly, without having to wait for IT to get the bandwidth to develop a complete application, and they can improve their efficiency and get more done quicker.

If HCL can deliver a low-code/no-code solution like this, perhaps with data storage not only in Domino .NSF files but also with connections to other data stores like perhaps SQL and Mongo DB, this could be an amazing collaborative development platform, where end-users and professional developers work together on improving the application landscape of their company.

I can’t wait to see what HCL delivers later this year!

 

 

 

0 Comments

We live in interesting times.

Yesterday it was announced that HCL Technologies will purchase the IP (intellectual property) of seven IBM-owned products, including Notes/Domino, Sametime and Connections, for a total of 1.8 billion dollar.

HCL and IBM already had a partnership on the product development side, with HCL doing the development and support with IBM still owning the products and handling sales and marketing. Now HCL is fully in charge of the product, and is not tied down by what IBM decides.

As soon as the HCL-IBM agreement was announced last year, HCL aggressively went on the offensive. They announced not one but two additional versions of Notes and Domino. Domino 10 was delivered just two months ago, and version 11 is promised in 2019.

HCL reached out to business partners and IBM Champions, as well as to the rest of the user community, to get feedback about what features were the most critical. Despite the quick release of Domino 10, a number of suggested features were included, as were several other impressive improvements.

Notable among these features is the new (and extremely fast) Domino Query Language as we as support for node.js through the domino-db module. On the administration side there were several improvements that will lower the TCO (total cost of ownership).

HCL has already announced several so called Jams in the near future to collect feedback on what the users want to see in the upcoming Domino 11.

So what does yesterday’s announcement mean for the future of Notes, Domino and Connections? I belive it will be extremely beneficial. HCL can take the products where they want them, adding functions requested by small and medium sized businesses instead of focusing on what a few very large customers wants, which is what IBM seemed to do.

By adding back low-code/no-code development into the core product, the citizen developers can again be engaged to create simple applications for their own or their department’s use. If they then need more advanced functions they can hand the application over to a traditional developer for further enhancements. This is what Notes looked like in the beginning, back in the early to mid 90’s. This is the strength of the platform, and what brought it its success.

The weakness of Notes and Domino has always been IBM:s (seemingly) lack of understanding of the product, and how it fits smaller and medium sized businesses. By going back to the original use of Domino, combined with HCL:s focus on on-premises (as opposed to IBM:s attempt to move everything to the cloud, despite what the customers want), I think HCL can bring a new life to Notes and Domino, and combine Collaborations into the mix. I can see an upcoming release of Collaboration where the data lives in a Domino database.

So for any Domino and Connections customers and business partners, I think the future looks bright. My belief is that HCL will bring new life and new functionality into the products.

1 Comment

Free Code – Wrapper for searches in NetSuite

About a year ago I wrote a SuiteScript 1.0 class as a wrapper around the search functionality in NetSuite. I have updated the code over time, and I want to share the latest version. Among the new features is support for formulas and search expressions. The class should be backwards compatible with the original version, but in addition you can also pass an object to most functions, instead of passing separate parameters. This makes it more flexible and allows me to add more functionality.

Enjoy!

 

/**
 * Encapsulate NetSuite search functionality in an easy-to-use object for SuiteScript 1.0.
 *  
 * Version    Date            Author           Remarks
 * 1.0        11 Nov 2016     kmartinsson      Initial version
 * 1.5        06 Jul 2017     kmartinsson      Added record type to constructor
 * 2.0        23 Aug 2017     kmartinsson      Added Search2 function, with support for objects and adding multiple columns/filters
 * 2.0.1      01 Sep 2017     kmartinsson      Bug-fixes
 * 2.0.2      01 Sep 2017     kmartinsson      Fixed issue with join not being null, added hasOwnProperty check 
 * 3.0        20 Nov 2017     kmartinsson      Removed v1.x code stream, renamed Search2 to Search
 * 3.0.1      06 Dec 2017     kmartinsson      Added JSDoc style comments, updated comments to new JSDoc style
 * 3.0.2      28 Feb 2018     kmartinsson      Fixed bug in sort key which prevented proper sorting. Added alternative keys.
 * 3.0.3      15 Jul 2018     kmartinsson      Added filter expression support
 * 3.0.4      01 Oct 2018     kmartinsson      Added method removeColumns() for use on (external) saved search
 * 
 */

/**
 * Search object
 * @constructor
 * @param {string} recordtype - Optional NetSuite recordtype (internalid)
 */
function Search(recordtype) {
    this.recordType = null;
    this.columns = [];
    this.filters = [];
    this.filterExpressions = [];
    // Set internal id of saved search to null
    this.internalId = null;
    this.noSavedColumns = false;
    // If record type/ID is supplied, set it now, otherwise default to null
    if (recordtype != null && recordtype != "") {
        this.recordType = recordtype;
    }

    // Helper function to verify the value is empty or null
    function isNullOrEmpty(val) {
        if (val == null || val == '' || val ==[] || val == {}) {
            return true;
        } else {
            return false;
        }
    }

    
    /**
     * Remove all columns included in the search
     * @param none
     * 
     */
    this.removeColumns = function() {
        this.noSavedColumns = true;
    }

    /**
     * Add a column to include in the search
     * @param {object}|{string} column - Object specifying a column to return or string containing columnId
     * @param {string} join - Joined record (internalid) (optional)
     * @param {boolean}|{string} sorting - Sorting (optional)
     *         Options: true = descending, false = ascending, empty/null = no sorting, "yes" (ascending), 
     *         "no", "ascending", "descending" (can be abbreviated "a" and "d" respectively).
     */
    this.addColumn = function(column, join, sorting) {
            var nsSearchColumn = null;
            var paramColName = null;
            var paramJoin = null;
            var paramSummary = null;
            var paramSorted = null;
            // Check if first argument is string or object
            if (typeof column == "string") {
                paramColName = column;
                // Check if second argument is null (for no join)
                if (isNullOrEmpty(join)) {
                    paramJoin = null;
                    // Check if arguent for sorting was provided
                    if (!isNullOrEmpty(sorting)) {
                        paramSorted = sorting;
                    }
                } else {
                    // Check if second argument is boolean, then it is not 'join' but 'sorting'
                    if (typeof join == "boolean") {
                        paramSorted = join;
                        paramJoin = null;
                    } else {
                        paramSorted = sorting;//sorted;
                        paramJoin = join;
                    }
                }
                // Now paramJoin and paramSorted are assigned properly
                if (typeof paramSorted == "boolean") {
                    if (paramSorted == true) {
                        paramSorted = "des";
                    } else {
                        paramSorted = "asc";
                    }
                } else if (typeof paramSorted == "string") {
                    // Get first character of string, in lower case
                    var tmp = paramSorted.slice(0, 1).toLowerCase();
                    // y = ascending sorting, n = no sorting, a = ascending, d = descending
                    if (tmp == 'y' || tmp == 'a') {
                        paramSorted = "asc";
                    } else if (tmp == 'd') {
                        paramSorted = "des";
                    } else {
                        paramSorted = null;
                    }
                }

            } else {
                if (column.hasOwnProperty("name") && column.name != null) {
                    paramColName = column.name;
                } else if (column.hasOwnProperty("columnName") && column.columnName != null) {
                    paramColName = column.columnName;
                } else if (column.hasOwnProperty("columnname") && column.columnname != null) {
                    paramColName = column.columnname;
                } else if (column.hasOwnProperty("column") && column.column != null) {
                    paramColName = column.column;
                } else {
                    throw nlapiCreateError('search.addColumn() - Required Argument Missing', 'The required argument <em>columnName</em> is missing. This argument is required.<br>Received: ' + JSON.stringify(column));
                }
                if (column.hasOwnProperty("join") && column.join != null) {
                    paramJoin = column.join;
                }
                if (column.hasOwnProperty("summary") && column.summary != null) {
                    paramSummary = column.summary;
                }
            }
            nsSearchColumn = new nlobjSearchColumn(paramColName, paramJoin, paramSummary);
            // Check if 'sorted' value exists in object
            if (column.hasOwnProperty("sorted") && column.sorted != null) {
                // Get first 3 characters as lower case
                paramSorted = column.sorted.toLowerCase().substring(0, 3);
            } else if (column.hasOwnProperty("sorting") && column.sorting != null) {
                // Get first 3 characters as lower case
                paramSorted = column.sorting.toLowerCase().substring(0, 3);
            } else if (column.hasOwnProperty("sort") && column.sort != null) {
                // Get first 3 characters as lower case
                paramSorted = column.sort.toLowerCase().substring(0, 3);
            }
            if (paramSorted!= null && paramSorted!="") {
                if (paramSorted == "asc") {
                    nsSearchColumn.setSort(false);
                } else if (paramSorted == "des") {
                    nsSearchColumn.setSort(true);
                } else {
                }
            }
            // Check if 'formula' value exists in object, then add to column object
            if (column.hasOwnProperty("formula") && column.formula != null) {
                nsSearchColumn.setFormula(column.formula);
            }
            // Check if 'functionId' value exists in object, then add to column object
            if (column.hasOwnProperty("functionId") && column.functionId1 != null) {
                nsSearchColumn.setFunction(column.functionId);
                // Push new nlobjSearchColumn into array
            }
            // Check if 'label' value exists in object, then add to column object
            if (column.hasOwnProperty("label") && column.label != null) {
                nsSearchColumn.setLabel(column.label);
            }
            this.columns.push(nsSearchColumn);
            return nsSearchColumn;
        } // end function addColumn


    /**
     * Add multiple columns to include in the search
     * @param {array} columns - array of column objects
     */
    this.addColumns = function(columns) {
            for (var i = 0; i < columns.length; i++) {
                this.addColumn(columns[i]);
            }
        } // end function addColumns

    /**
     * Add a search filter
     * @param {object}|{string} filter - filter object or string containing fieldId
     * @param {string} fieldJoinId - field to use for join (optional)
     * @param {string} operator - operator for filter (optional)
     * @param {string} value - value to filter for (optional)
     */
    this.addFilter = function(filter, fieldJoinId, operator, value) {
            if (typeof filter == "object") {
                var obj = filter;
                var fieldId = obj.field;
                var fieldJoinId = null;
                if (filter.hasOwnProperty("join")) {
                    fieldJoinId = obj.join;
                }
                var operator = obj.operator;
                var value = obj.value;
                // Create filter object
                var nsSearchFilter = new nlobjSearchFilter(fieldId, fieldJoinId, operator, value);
                // Check if 'formula' value exists in object, then add to filter object
                if (obj.hasOwnProperty("formula") && obj.formula != null) {
                    nsSearchFilter.setFormula(obj.formula);
                }
                // Check if 'functionId' value exists in object,then add to filter object
                if (obj.hasOwnProperty("functionId") && obj.functionId != null) {
                    nsSearchFilter.setFunction(obj.functionId);
                }
                this.filters.push(nsSearchFilter);
            } else {
                var fieldId = filter;
                this.filters.push(new nlobjSearchFilter(fieldId, fieldJoinId, operator, value));
            }
        } // end function addFilter


    /**
     * Add multiple search filters
     * @param {array}filters - array of filter objects
     */
    this.addFilters = function(filters) {
            for (var i = 0; i < filters.length; i++) {
                this.addFilter(filters[i]);
            }
        } // end function addFilters

    /**
     * Add filter expression
     * @param {array} expression - array structure describing search expression
     */
    this.addFilterExpression = function(expression) {
        this.filters.push(JSON.parse(expression));
    }

    /**
     * Set filter expression - Replaces any existing filters
     * @param {array} expression - array structure describing search expression
     */
    this.setFilter = function(filterArray) {
        this.filters = filterArray;
    }
    
    /**
     * Set the type of record to search for
     * @param {string} type - internalid of record type to search for
     */
    this.setRecordType = function(type) {
            this.recordType = type;
        } // end function setRecordType


    /**
     * Use an existing saved search as starting point for this search
     * @param {string} internalid - internalid of existing saved search
     */
    this.useSavedSearch = function(internalid) {
        if (!isNullOrEmpty(internalid)) {
            this.internalId = internalid;
            // If internal id of a saved search is provided, load that saved search
            this.savedsearch = nlapiLoadSearch(this.recordType, this.internalId);
        }
    } // end function useSavedSearch


    /**
     * Return search results as a nlobjSearchResult object
     * @param {string} recordtype - Optional NetSuite recordtype (internalid)
     */
    this.getResults = function(recordtype) {
            var results = [];
            if (recordtype != null && recordtype != "") {
                this.recordType = recordtype;
            }
            if (this.internalId != null) {
                // If internal id of a saved search is provided, load that saved search
                var savedsearch = nlapiLoadSearch(this.recordType, this.internalId);
                // Add new filters to saved search filters
                var newfilters = savedsearch.getFilters().concat(this.filters);
                // If existing columns in saved search should not be use, replace then
                var newcolumns = [];
                if (this.noSavedColumns) {
                    savedsearch.setColumns(this.columns);
                    newcolumns = this.columns;
                } else {
                    // Add new columns to saved search columns
                    newcolumns = savedsearch.getColumns().concat(this.columns);
                }
                // Perform the search
                var newsearch = nlapiCreateSearch(savedsearch.getSearchType(), newfilters, newcolumns);
                // 
            } else {
                // Otherwise build the search ad-hoc and set columns and filters
                var newsearch = nlapiCreateSearch(this.recordType, this.filters, this.columns);
            }
            var resultset = newsearch.runSearch();
            // Loop through the search result set 900 results at a time and build an array
            // of results. This way the search can return more than 1000 records.
            var searchid = 0;
            do {
                var resultslice = resultset.getResults(searchid, searchid + 900);
                for (var rs in resultslice) {
                    results.push(resultslice[rs]);
                    searchid++;
                }
            } while (resultslice != null && resultslice != undefined && resultslice.length >= 900);
            return results;

        } // end function getResults

} // end class search
0 Comments

Are you a Champion? Nominate yourself or someone else!


The yearly nomination of IBM Champions is once again open. Do you know someone who deserves to be recognized for their contributions to the community or to IBM? Nominate that person!

Do you think you deserve to be an IBM Champion? Nominate yourself! I know it feels strange to nominate yourself, but you are the one that knows best what you have been contributing. There is no way for IBM to know what everyone out there have been doing during the last year, not even if they enlisted IBM Watson…

So how are the IBM Champions selected? Here is the list of criteria IBM published:

We want IBM Champions who:

  • Demonstrate both expertise in and extraordinary support and advocacy for IBM technology, communities, and solutions.
  • Share advocacy and influence within and outside their organizations or customer engagements.
  • Influence and mentor to help others make the most of investments in IBM software, solutions and services.

[Significant] contributions [over the last 12 months] must be above and beyond a nominee’s job duties, but may be internal or external. The list below is just a few examples:

  • Regularly blogging or creating other technical content
  • Speaking at multiple events
  • User Group Conference Committee member (involves the planning and execution of one or more conferences, events, or meetups)
  • President, Leader, or Board member of a worldwide or local user group
  • Providing customer references
  • Regularly being an advocate for IBM products inside your organization, making connections, and educating users

Now is your opportunity to recognize people for what they have been doing during the last 12 months. And don’t be shy, submit a self nomination as well, if you think you deserve it.

Nominations are open until October 22 at https://www.ibm.com/developerworks/community/blogs/ibmchampion/entry/2018ChampionNominations. Don’t miss the deadline!

 

0 Comments

Thirty Years – What A Ride!

Thirty years. It can feel like an eternity, or like just yesterday. That is how long I have been working in the IT industry, as of 2 weeks ago.

When I graduated the Swedish equivalent of High School in the spring of 1988, I did not know what lay ahead. If anyone would have told me where I would be 30 years later, I am not sure I would have believed them.

Computers, and especially programming, was my big interest. I had spent every available hour in the computer room in school. I went there during breaks between classes (if only 15-20 minutes) as well as during lunch break (usually 1 hour long. I learned to eat really fast, to maximize my time in front of the computer… Then after school I often spent 4-5 hours learning to program, either from books, magazines, or from other students.

After I graduated, I was not really motivated to go to college. But I found an intensive one-year college level education in systems programming and computer science. It would be classes 8am to 5pm, 5 days a week. Today you would probably call it boot-camp…

Unfortunately the class did not make, it needed a couple more students. So in the beginning OS September 1988,after about 2 weeks of classes, we were told to come back in January. We were encouraged to find a job or internship in the mean time. So I started to call around to different companies I found in the yellow pages.

After a few days I got a hit, a company was looking for a first line support technician. I sent in my application (I did not even have a formal resume) and a copy of my high school grades. A week later (on a Friday) I had an interview, and the following Monday I started working there. This company was Microsoft.

Needless to say, I learned a lot at Microsoft. I return to the class during the spring semester, worked at Microsoft during the summer break and then again after I graduated at Christmas.

After a year in the Air Force for the (then) mandatory military service, I intended to go back to Microsoft, but I was offered a job as a programmer at another company, and I jumped at that option. From there it just continued, via 5 years as an IT journalist and then over 20 years working mainly with Lotus (later IBM) Notes and Domino.

There are times when it feels it was just like yesterday I was writing Pascal code for a computer running CP/M-86 as operating system. Or when my coworker and I, who lived in the same apartment building (but on different floors and in different ends of the building) decided to run RG58 coax cable between out apartments, so we could network our computers. Or when I went scuba diving in Egypt and brought an IBM ThinkPad 701C (the model with the expanding keyboard) and a digital camera with me, so I could write a diary to publish on my personal website. Yes, it was pretty much a blog, way back in 1995…

But when I look at how technology has changed, it feel like the middle ages.

Our network at school (yes, we actually has one!) had a hard disk the size of a small shoebox, and with a capacity of 30 MB, to be shared between students and teachers. Yes, it’s not a typo. 30 Megabyte! Today most hard drives have at least twice that amount of memory just for cache…

Compare that with my mobile phone, on which I am writing this post while riding a bus from Dallas to Houston. It has 2185 times that memory (64 GB) built in. I have an additional 200 GB in the form of a micro SD card. This amount of storage would have been unfathomable 30 years ago.

Today we have internet access everywhere. I can sit in my car, in a restaurant or on a bus in the middle of nowhere and still have access to all the knowledge (not to mention cat videos) in the world. In fractions of a second I can perform a search that would have been virtually impossible 30 years ago.

I can turn on and off the lights at home, no matter where in the world I am. I can check the temperature in the different rooms and change the AC settings, if needed. I get an automatic alert if there is smoke I the house, or water where it is not supposed to be. And I can check the status of my laundry remotely.

I can talk to the computer, phone and other devices and have them turn lights on or off, tell me what the weather will be later that day or the next few days, or play any music I ask it to play. This is just like in Star Trek or 2001, except it is for real.

I can buy anything I need from the comfort of my home, or from anywhere in the world, and get it delivered within a day or two, sometimes even the same day.

At the same time I do miss the days back when I started with computers. It was like a new frontier, an unknown area where you had no idea what could happen next.

I still remember the excitement when I managed to create something new and cool, and I got it to work after spending countless hours working on it and troubleshooting the code. It is rare that I feel that excitement today, in the same way. But it still happens. .

I am very fortunate to be able to work with what I love, and have been able to do it for this long. I am looking forward to the next 30 years with great excitement.

1 Comment

#DominoForever – Release Day

Finally it is here, the new version of IBM Domino. After the world premiere yesterday in Frankfurt, the world-wide launch is taking place today.

The focus in this release is on application development and administration. Features like self-healing of databases and increase of the maximum database size to 256 GB are among the most popular with administrators, while developers have a number of exciting additions.

The two most talked about features are the new Domino Query Language and node.js integration with Domino. Domino Query Language has been written from the bottom up to be fast, and the demonstrations I have seen confirms this. It is fast, very fast! And it can handle searches that would not only take a long time to create in earlier versions of Domino, but would take forever to run. Now the result comes back in a second, or even less. This really blew my mind when I first saw it earlier this year. John Curtis, the engineer that pretty much single handed wrote this code, did an amazing job, fully on par with when Damien Katz rewrote the formula language in ND6 and increased the performance several times over.

The second big feature of Domino 10 is the integration with node.js through the domino-db connector. It will be delivered in a separate application development pack, which will enter beta this week. This is a slight disappointment, I had been hoping this functionality would be available at the launch. But I rather wait the time that is needed for IBM and HCL to make it a fully stable product, instead of rushing something unfinished to the market.

Another product announced today was Notes for iPad, which makes it possible to run existing Notes applications unmodified on an iPad. All the functions we know and love are supported, like replication, offline access to applications, Lotusscript, Formula language, and more.

To support mobile Notes applications, there are enhancements in Lotusscript, for example camera and GPS support. Lotusscript has also been extended with other new classes, for HTTP requests and JSON parsing directly in native Lotusscript. No need to call Java or system API:s anymore!

HCL has done an amazing job in a short time, and Domino is on its way to become a very powerful and extendable platform for modern web development. A company can now not only deploy their existing business applications on iPads, they can also hire young developers who have experience of node.js and modern frameworks/libraries like Angular and React, and have them develop new solutions that can access existing data in Domino databases. Why use Mongo DB for data storage, when you have the much more secure Domino server available?

Domino 10 is not the end point. Domino 11 will be out next year, and IBM/HCL have committed to a long future for Domino. Forget #domino2025, now it is #DominoForever!

If you were not able to attend any of the launch events, here is the live stream from Frankfurt :

https://m.facebook.com/story.php?story_fbid=310707186390803&id=111720058922703

1 Comment

8 hours left to Domino 10

It is now just 8 hours until IBM and HCL will unveil the brand new version of the collaboration platform Domino. On October 9, at 10:15 CEST, the audience at Think Germany in Frankfurt, Germany will be the first to see the new version of Domino and Notes 10. The next day, October 10,there will be launch events all around the world.

Personally I am very excited about this launch. It has been 5 years since the last major version was released. In 2017 IBM switched from numbered releases to feature releases, keeping the version number 9.0.1 even when new features were added. This of course confused customers, who got the impression that Notes and Domino were in maintenence mode, with plans to eventually disbanding the product.

After HCL took over the development of the platform last year, the (in my opinion) smart decision was made to change the version number, to make it clear to the market that it is a brand new version, and that development is continuing.

A number of the new features in Domino 10 have already been demonstrated and talked about, but I am sure IBM and HCL have been holding out on some exciting features, and I am looking forward to hear about it tomorrow and on Wednesday.

Join the live streams, if you can’t attend in person. You can find them at https://www.ibm.com/collaboration/ibm-domino.

2 Comments

Domino 10 – Almost here!

[ujicountdown id=”Countdown to Domino V10 ” expire=”2018/10/09 03:15″ hide=”false” url=”” subscr=”Countdown to Domino V10″ recurring=”” rectype=”second” repeats=””]

In just a few days, on October 9, IBM and HCL will unveil the new version of IBM Notes and Domino at an event in Frankfurt, Germany. The next day, October 10 (or 10/10, if you so like), there will be events in cities around the world. You can attend in person or watch a live stream. Find out all the details at https://www.ibm.com/collaboration/ibm-domino.

 

0 Comments

A New Badge

A few years ago IBM started using Open Badges from Acclaim to indicate accomplishments, and as an IBM Champion I was awarded several over the years. Yesterday I received another one, I am now an IBM Domino 10 Sales Advisor V1.

This is how IBM describes it:

This badge earner has shown a detailed understanding of IBM Domino 10 and the #domino2025 roadmap and has successfully demonstrated, through taking an online exam, how customers can benefit from the advances in Domino 10.   They will have achieved a passing score of 75% or higher in the online exam.

There are rumors that IBM is considering to move away from traditional certifications and replace them with badges. This may not be a bad idea, if done right it will be much more granular, and your skills will be better defined. I expect more certification tests and badges to become available as we get near the launch of IBM Domino V10 in less than a month and a half.

1 Comment

Domino V10 – The Countdown Is On!

The release date for Notes and Domino V10 has been announced. On October 9, at 10:00 CET, there will be a live unveiling of the brand new version during IBM Think in Frankfurt, Germany.

There will be a number of other release events around the world in the days following. For a deep-dive inte the new features I would highly recommend attending ICON UK. This year this conference is taking place in Birmingham, UK on September 13 and 14.

Learn more at https://www.ibm.com/collaboration/ibm-domino.

0 Comments

Six Days Left…

I have finished the slides for my presentation at CollabSphere in Ann Arbor next week. I just have a little more code to add to demo database, and perhaps throw in a bonus or two…

My session will be next Wednesday (July 24) at 9am in Grande III.  There are still a few seats available for CollabSphere 2018. The cost is only $100 for 3 days of presentations, workshops, and networking, This is great value for the money!
Don’t miss the latest from IBM and HCL on Notes and Domino 10, Nomad and probably a surprise or two.

 

 

1 Comment

I’ve Seen Things You People Wouldn’t Believe…

This last week about 50 other specially invited people visited HCL America in Chelmsford, MA for a tour of their Collaboration Workflow Platforms (CWP) office. I was one of the lucky ones, and for two days we got to meet many of the engineers at HCL and see what they were working on around Notes and Domino. There are some parts that are under NDA, but I will talk about what I am allowed to mention.

We got to play with the latest build of Notes 10, compiled that same morning. It included some of the new Lotusscript classes we have heard about before, like the NotesHTTPRequest class and NoteJSONParser class. That functionality had just been added in right before our visit (it is not available in the private beta that was released a few weeks ago), but when I tested it (yes, we got to play with the code right there!) it worked perfectly.

This is a testament to the skills of the HCL developers. Most of them came over from IBM, and you probably know many by name. But there were also new-hires, and HCL is looking to fill many more positions in the US. The investments HCL is doing in this is impressive, and the whole atmosphere was extremely positive and filled with excitement.

We were split up into smaller groups and were treated to a number of very interactive presentations of the directions taken in different areas. The biggest focus was on application development, and with the addition of support for node.s to the platform and the new classes in Lotusscript, the engineers were visibly excited to be able to show off what they have accomplished.

The HCL developers have the right to be excited and proud. We were treated to two major announcements. The first one is a new extremely fast query language called DGQF (Domino General Query Facility). It is not an add-on, but part of the core code. It will be available in Notes/Domino 10, and can be called from everywhere, using Lotusscript, Java, Formula, and Javascript. Initially the searches can be made only in one database at a time, but in the future there will be support for multi-database searches.
At CollabSphere 2018 in just over a week, there will be presentations on DGQF. If you have’t registered yet, do it now. You don’t want to miss this!

The second announcement is under NDA for now, but I would expect for something exciting to be announced at CollabSphere, as well as at later conferences like ICON UK in September.

So stay updated by attending user group conferences during the fall, leading up to the release of Domino 10 at some day in some month, who may or may not contain a 10. I am very excited about the future of Notes and Domino!

 

0 Comments

My session at CollabSphere 2018

My session Elementary! – Consume Watson Services using Node-RED and Domino 10 has been accepted at CollabSphere 2018. It has been scheduled for first thing in the morning on Wednesday, July 25 at 9.00 am.

During my presentation, I will show how you can integrate IBM Watson into both Notes applications and web applications. You will see how you can use the new Lotusscript classes for HTTP and JSON in Notes/Domino 10. These classes will be used to connect to IBM Cloud, where a Node-RED instance will be used to consume Watson services. By using just a few lines of Javascript, we will translate text between different languages, as well as converting text to speech.

CollabSphere will be a great learning opportunity, especially if you are interested in node.js and how it will be integrated into the upcoming Domino 10. There are a number of sessions focusing on Node.js and Node-RED, and I highly encourage every Notes developer to attend them. Here are just some of the sessions:

This three-day conference will immerse you in an intensive exchange of knowledge and fun with other members of the ICS community. If you have not registered yet, it is about time.  Note that the guaranteed room rate will only be available for one more week.

I hope to see you in Ann Arbor, MI in a few weeks.

0 Comments

Come see me at CollabSphere 2018!


I will be presenting my session Elementary – Consume Watson Services using Node-RED and Domino 10 at CollabSphere 2018, taking place in Ann Arbor, MI inn just a little over a month (July 23-23). If you haven’t registered yet, hurry up! This amazing conference that Richard Moy have been arranging for 10 years now will be full of news and sessions about Domino 10. If you are a developer, you should be very excited. There are a large number of session focusing on everything from classic Lotusscript and the new improvements coming in Domino 10 to sessions about Node.js and how it is supported in Domino 10. There are even introductions to Node.js and Node-RED, and how you can use them in your Domino environment as well as making yourself more marketable.

In addition to all the technical sessons you also have networking and social events. Don’t miss out on this great and inexpensive ($75) conference!

0 Comments

You can now sign up for Beta 1 of Domino 10!

June 25 is the date when the first beta version of IBM Notes and Domino version 10 will be released to a selected group of testers. If you are interested in testing this beta version, you can apply to be a part of the closed beta program here.

This first beta version will be Windows only, and will not contain the DominoDB NPN package for node.js. The second beta, due in the second half of July, will include clients for MacOS, server for Linux, Verse-on-Premises and DominoDB for node.js.

The support for node.js in Domino 10 is something I am looking forward to. This is huge, not only can you integrate Domino with other solutions and components available through NPM, but any developers can now take advantage of Domino and it’s secure data storage. Products like Mongo DB does not have the built-in security we are used to from IBM Domino, but now developers can build secure applications using DominoDB, and not have to worry about building their own security solutions.

I will be checking my mail on June 25!

0 Comments

CollabSphere 2018 – Still time to submit abstracts

The deadline for submissions of session abstracts for CollabSphere 2018 has been extended to Sunday, June 3. This is your opportunity to share your knowledge with the community. Register on the brand new CollabSphere website. The link is http://collabsphere.org/ug/collabsphere2018.nsf/sessionabstract.xsp.

This year we can expect a number of session on technologies more or less new to the Domino community, for example Node.js and React.js, as well as what’s new in the upcoming Notes and Domino 10. So if you haven’t registered for Collabsphere yet, take this opportunity to register and experience the learning atmosphere, networking and a lot of fun.

Hope to see you in Ann Arbor in July for the 10th MWLUG/CollabSphere conference!

 

 

0 Comments

LEGO meets IKEA

This evening I stumbled upon a Kickstarter from a Swedish company called Cribble. It was posted in a Facebook group for furniture carpentry, and as soon as I saw it I thought that this is a very cool product. The easiest way I can describe it is LEGO meet IKEA.

Here is how it is described on Kickstarter:

Cribble is a kit of building pieces to create your own mini house. A blank canvas for your craftyness. Plan and build the foundation, wallpaper the walls, place the floors and put together some furniture according to plan, or your very own way. This is an inclusive project and it’s meant to integrate with other toys, crafts and stuff you find around the house.

The two founders, Josefin and Anna, realized that most toys for girls miss the construction and engineering aspects that toys aimed at boys usually have. So they set out to create a modular construction set to allow children to build a house, using the similar construction techniques as in real life.

So we think that if we increase the opportunity for girls to delve into building and technology they won’t just have a much more fun playtime but also even out one of the biggest mediators for the wage gap between men and women.
Cribble is dipping into the traditional girl play area and giving opportunity for all genders to play around with technology, room and space without overwhelming them with signals that this are meant for boys.

Now they are looking for help to get this product going. Take a look at the video and read more on Kickstarter. I think this is an amazing toy! And I think it is priced very nicely, when you think about what you get.

0 Comments

End of content

No more pages to load