Connect 2016 – People, not technology

For the 20th time I am heading to the conference previously known as Lotusphere. IBM has renamed it Connect, but to me it still is the same conference. The focus may have changed from Notes and Domino to Connections, Cloud and Mobile, but the people is largely the same: a mix of developers, administrators and managers who all are interested in or using the IBM collaboration products. As a wise man said: it's not about technology, it's about the people. And I am looking forward to the people. I have many good friends in the Yellowsphere community (I don't have a better name for the IBM Collaboration Software community), people I admire and have learned much from over the years. I hope that speaking at Connect 2016 (a first for me) will help others like I been helped in the past. That is why I enjoy helping people out in the forums and on Stack Overflow, and why I blog and share code: a way to give back to the community. Lotusphere/Connect is a way to connect with the community. Every year I leave the conference revitalized and energized. I have been hanging out with my peers, sharing a couple of adult beverages, having dinners with some of them and -- most of all -- getting ideas and inspiration. Working as the only Notes developer at a company gets lonely, and Lotusphere/Connect is the one of the few time of the year I get to "talk shop" with people that do the same thing as I do. No mater how understanding and technical my wife is, when I start talking about some cool Lotusscript class or the benefits of list over arrays her eyes glace over and she is gone... As I write this, my workplace is migrating from Notes to Outlook/Exchange for email. A pilot group (including me) was migrated last weekend, and the rest of the users will be migrated this coming weekend. Applications will stay in Notes for a long time, though. They are not going anywhere. Even if I would have switch to a different platform for development at work, I hope to still be involved in the Yellowsphere community. I am also working on some cool side projects where I use Domino as the data backend but where the browser based front-end is built using modern web technologies like Bootstrap and jQuery. So I hope to be doing things with Notes and Domino for many more years. So if you haven't registered for Connect 2016 yet, hurry up. We are getting close. I booked my flight and my room earlier today and for the first time since 1999 I will not be staying at the conference hotel. Instead I found a good rate at Days Inn across the street, about a 5 minutes walk away away and at 25% of the cost. Since I am once again paying out of my own pocket, I could not justify the cost of staying at Hilton where the conference takes place. If you want to listen to…

0 Comments

IBM Connect 2016 coming up!

In the end of January it is once again time to head to Orlando for the yearly conference that for many years was known as Lotusphere. For the last few years it have been renamed IBM Connect (as well as ConnectED in 2014), and last year most people (including me) thought that 2015 was the end of this conference. But perhaps due to the popularity of the 2015 edition, IBM decided to have the conference again this year, but in a new location as the contract with Swan and Dolphin (where the conference had been held since the first one in 1993) had expired. The new venue is Hilton Orlando. It is closer to the airport and there are also more restaurants around than at Swan and Dolphin. It is close to SeaWorld as well as to the Universal Studios theme parks. Personally I am excited about the new venue. "Swolphin" (as Swan and Dolphin often was referred to) started to get old and worn down, despite a refresh of the rooms back in 2003-2005 some time. Yes, after this many years (18 in a row for me) Swolphin started feeling like a home away from home. You know where everything is, you know the staff and the shortcuts between hotels and sections within the hotel. So a new location makes Connect 2016 more exciting, it will feel like a new conference but hopefully with many of my old friends attending. I have already found several interesting sessions using the session tool. Philippe Riand and Jesse Gallagher will for example talk about the Darwino application development platform, which allows you to integrate your Domino applications with IBM Bluemix an IBM Connections. Another must-attend session is called IBM Domino App.Net and talks about how to utilize Bluemix to build XPages applications in the cloud. In addition we of course have all the sessions we have come to know and love: UserBlast with Mat Newman, Admin Tips Power Hour presented by Chris Miller, Spark Ideas, and of course the Opening General Session (OGS) with a secret guest speaker as the tradition requires. After the fiasco last year with the Tuesday evening special event the organizers went back to holding the event in one of the local theme parks. For the second time it will be held in the Wizarding World of Harry Potter - Hogsmead, which is part of Universal's Islands of Adventure. Last time I had a blast, so much that last year I took a couple of vacation days to visit Hogsmead again as well as the then newly opened Diagon Alley extension over in the Universal Studios park next-door. You need a park-to-park admission pass to visit both parks, but that allows you to take the Hogwarts Express between the two parks. For me personally Connect 2016 is a milestone. It will be my 20th Lotusphere/Connect and for the first time I will present a session! This is not a full one hour session, but a new format called Lightning Talk. Those are shorter 20 minute sessions,…

1 Comment

IBM Champion 2016

Yesterday I got the following email from IBM: For the third year in a row I have been honored as an IBM Champion for Social Business. There are 101 total IBM Champions for 2016, 39 newcomers and 64 returning ones. And the number of Swedish Champions doubled with the addition of Lars Samuelsson and Maria Enderstam. The final Swede is Fredrik Norling, already a multi-year Champion. So congratulations to all IBM Champions 2016, I am honored to be included in this group of brilliant people. You can find the announcement here.

1 Comment

Calling a Notes web agent from another server using JSONP

In my MWLUG presentation (as well as in a couple of entries on this blog) I talk about how you can access Domino data from a regular webpage using jQuery and a Lotusscript agent returning data as JSON. The issue with this solution is that the web page must be on the same web application path as the Domino agent. You can't do what's known as cross-domain Ajax. For example if the Domino server is domino.texasswede.com but you have the webpage hosted at www.texasswede.com, it will not work. The security in Javascript does not allow calls across servers like that. There is however an easy solution, and it is called JSONP. What you do is to return not JSON but a call-back function with the JSON data as the argument. So instead of returning this: { "firstName":"Karl-Henry", "lastname":"Martinsson","email":"texasswede@gmail.com" } you would have the Lotuscript agent return this: personCallBack({ "firstName":"Karl-Henry", "lastname":"Martinsson","email":"texasswede@gmail.com" }) Let's assume we call the agent GetPersonData.jsonp.  On the calling side (in the jQuery code) you would then use this code: $.ajax({ url : "http://domino.texasswede.com/database.nsf/GetPersonData.jsonp?OpenAgent", dataType:"jsonp" }); Finally you write the Javascript call-back function that will accept the data: function personCallBack(data) { $("#firstName").html(data["firstName"]);     $("#lastName").html(data["lastName"]);     $("#emailAddress").html(data["email"]); } You can of course make this as advanced as you like but this is the basics. I have updated the JSON class I use for stuff like this to include a method to return JSONP. The new function is called SendJSONPToBrowser() and takes a string with the name of the call-back function as argument, for example like this: Call json.SendJSONPToBrowser("personCallBack") Below is the updated class (if you downloaded my sample database from MWLUG you have the older version of it). Enjoy!   %REM Library Class.JSON by Karl-Henry Martinsson Created Oct 9, 2014 - Initial version Updated Nov 6, 2015 - Added JSONP support Description: Class to generate simple JSON from values %END REM Option Public Option Declare Class JSONdata Private p_json List As String Public Sub New() '*** Set default value(s) me.p_json("ajaxstatus") = "" End Sub %REM Property Set success Description: Set success to true or false %END REM Public Property Set success As Boolean If me.success Then Call me.SetValue("ajaxstatus","success") Else Call me.SetValue("ajaxstatus","error") End If End Property %REM Property Get success Description: Not really used... %END REM Public Property Get success As Boolean If me.p_json("ajaxstatus") = |"success"| Then me.success = True Else me.success = False End If End Property %REM Sub SetMsg Description: Set msg item %END REM Public Sub SetMsg(message As String) Call me.SetValue("msg",message) End Sub Public Sub SetErrorMsg(message As String) Call me.SetValue("errormsg",message) me.success = False End Sub Public Sub SetValue(itemname As String, value As String) Dim tmp As String Dim delimiter As String '*** Check for quote (double and single) and fix value if needed tmp = Replace(value,Chr$(13),"<br>") tmp = FullTrim(Replace(tmp,Chr$(10),"")) If InStr(tmp,|"|)>0 Then If InStr(tmp,|'|)>0 Then tmp = Replace(tmp,|"|,|"|) delimiter = |"| Else delimiter = |'| End If Else delimiter = |"| End If '*** Store value with delimiter in list me.p_json(itemname) = delimiter & tmp & delimiter End Sub Public Sub SetData(itemname As String, value As…

0 Comments

IBM Insight 2015 coming up

I won't be able to attend IBM Insight in Las Vegas later this month, but I know several of my fellow ESS (formerly known as ICS, formerly known as Lotus) Champion will be there, as well as champions from some of the other divisions of IBM. This will be a massive conference, with over 1,600 sessions, technical training and labs. It will cover data management, cloud, analytics, content management, Watson and much more.  I really wish I could go, but I hope some of the session will be streamed.

0 Comments

Microsoft goes NoSQL with DocumentDB

"Flexible schemas", "automatic indexing"... Sounds interesting, I can see this for some companies as a way to migrate Domino applications to Azure. Put your .NSF based data there and use different technologies to work with it. Also, it has a "pay-as-you-go" pricing, making it even more attractive. More info here.

0 Comments

It’s that time of the year – IBM Champion nominations are open!

Today the nominations opened for IBM Champions in three categories: IBM Social Business (AKA Lotus, ICS, ESS) IBM Power Systems IBM Middleware (AKA Tivoli, Rational, WebSphere) Here is how IBM presents it: Do you know someone who deserves to be an IBM Champion?  The IBM Champion program recognizes innovative thought leaders in the technical community. An IBM Champion is an IT professional, business leader, or educator who influences and mentors others to help them make the best use of IBM software, solutions, and services, shares knowledge and expertise, and helps nurture and grow the community. If you know anyone matching the description above, go to https://ibm.biz/NominateChamps and nominate that person! You can read more about IBM Champions on Wikipedia as well as on the IBM website.

0 Comments

MWLUG schedule now available!

The session schedule for MWLUG in Atlanta is now online. The conference is less than 4 weeks, and there is a very strong lineup of speakers. Many have been presenting in the Best Practices track at Lotussphere fo years, and this conference is well worth attending. The cost is only $50, and there are still inexpensive flights left. Registration is still open, as I write this. I will present my session AD102 Break out of the box - Integrate existing Domino data with modern websites on Wednesday afternoon, starting at 4.30pm. Hope to see you in Atlanta!

0 Comments

Microsoft releases Visual Studio 2015

Microsoft today released the latest version of their development environment Visual Studio. There are even free versions, including the complete IDE Visual Studio Community and the code editor Visual Studio Code (available for Widnows, Linux and OSX). Visual Studio now includes even more tools for cross platform mobile development for iOS  and Android. There is even an Android emulator included. The web development part supports tools and frameworks like Angular, Bootstrap, jQuery, Backbone and Django. And naturally the IDE also supports Windows, including Windows 10 (expected to be released at the end of the month). I have been using tools in the Visual Studio family for many years, I started with a beta of Visual Basic 1.0 a long time ago, and used all version up to and including VB 6.0. I also played around some with Visual C++ and even Visual J++. After that I focused mainly on Lotus Notes development, but recently I have started some C#/.NET projects at work using Visual Studio Community 2013.

0 Comments

Video from David Leedy about MWLUG

David Leedy from Notes-in-9 just posted a video where he talks about the upcoming MWLUG conference in Atlanta in just over a month. As I wrote the other day, I will be speaking there. David is actually mentioning me and my session, and I am humbled by his nice words. Hope to see you in Atlanta! https://youtu.be/dAN1iGaOv2s

0 Comments

MWLUG in Atlanta – I will be presenting!

It is less than 7 weeks left until MWLUG, the Midwest Lotus User Group conference. This year the conference takes place in Atlanta, between August 19 and 21. During the three days there will be over 40 technical session and workshops on collaboration, receptions and networking opportunities, as well as access to experts of IBM solutions, both from IBM and other companies. The topics includes application development, system administration, best practices, customer buisness cases and innovation/future plans by IBM. Breakfast and lunch is included for two days as well. And all this for the cost of only $50 per person! The event takes place at Ritz-Carlton in downtown Atlanta. There is a block of rooms reserved at a special conference rate of $149.00 per night. One of the sessions will also mark my personal debute as a speaker at a conference. I will present "Break out of the box - Integrate existing Domino data with modern websites" where I will talk about how to integrate websites built either within Domino or on other platforms with backend data that resides in a Domino database. I will talk about how you can build a modern looking website using tools like jQuery and Bootstrap and seamlessly integrate them with existing data on your trusty Domino server using JSON and Ajax. I will also provide plenty of example code ready for you to bring home and start playing with. A number of IBM Champions will be presenting, as well as IBMers and other industry experts. So no matter your interest, I am sure you will find plenty of good sessions. I am sure I will have a hard time picking which sessions to attend! So what are you waiting for? Go to http://www.mwlug.com and register! See you there!  

1 Comment

Code – Get date range as years, months and days

There is a question in the IBM DeveloperWorks forum for Notes/Domino 8 about how to calculate the number of years, months and days between two dates. Then the poster wanted to calculate the sum of two such date ranges and return that as years, months and days as well. Since the lack of formatting in the forum makes it hard to read the code, I decided to simply post it here on my blog. As always, there are several ways to write the code. One could for example use Mod (a very under-used function that many developers don't even know about) to help calculate the number of years, months and days. I also include a function I use to calculate the number of business days between two dates. This could be used to calculate how long a ticket has been open in a help desk system, where you usually don't want to include Saturday and Sunday in the count. Simply change diffOne = Days(startDate,endDate) to diffOne = BusinessDays(startDate,endDate). Enjoy! Option Public Option Declare Type Components yearCount As Integer monthCount As Integer dayCount As Integer End Type Sub Initialize '*** Declare variable for componentized date Dim compOne As Components Dim compTwo As Components Dim compSum As Components '*** Declare variables for day difference count Dim diffOne As Integer Dim diffTwo As Integer '*** Declare start and end date variables Dim startDate As String Dim endDate As String '*** First date range startDate = "01/01/2011" endDate = "03/02/2013" diffOne = Days(startDate,endDate) Call DayCountToComponents(diffOne, compOne) MsgBox compOne.yearCount & " years " & _ compOne.monthCount & " months " & compOne.dayCount & " days" '*** Second date range startDate = "04/03/2012" endDate = "08/17/2015" diffTwo = Days(startDate,endDate) Call DayCountToComponents(diffTwo, compTwo) MsgBox compTwo.yearCount & " years " & _ compTwo.monthCount & " months " & compTwo.dayCount & " days" '*** Sum of first and second date range Call DayCountToComponents(diffOne + diffTwo, compSum) MsgBox compSum.yearCount & " years " & _ compSum.monthCount & " months " & compSum.dayCount & " days" End Sub %REM Function DayCountToComponents Description: Convert day count to years, month and days %END REM Function DayCountToComponents(dayCount As Integer,components As Components) As Boolean Dim daysLeft As Integer On Error GoTo errHandler components.yearCount = Int(dayCount/365) daysLeft = dayCount - components.yearCount * 365 components.monthCount = Int(daysLeft/30) daysLeft = dayCount - (components.yearCount * 365) - (components.monthCount * 30) components.dayCount = daysLeft '*** Return DayCountToComponents = True exitFunction: Exit Function errHandler: DayCountToComponents = True Resume exitFunction End Function %REM Function Days Description: Get the number of days between two dates %END REM Function Days(startDate As Variant,endDate As Variant) As Integer Days = Int(CDbl(CDat(endDate))-CDbl(CDat(startDate))) End Function %REM Function BusinessDays Description: Get the number of business days (Monday-Friday) between two dates %END REM Function BusinessDays(startDate As Variant,endDate As Variant) As Integer Dim startDT As NotesDateTime Dim endDT As NotesDateTime Dim cnt As Integer On Error GoTo errHandler Set startDT = New NotesDateTime(startDate) Set endDT = New NotesDateTime(endDate) cnt = 0 Do Until CDbl(startDT.Lslocaltime) > CDbl(endDT.Lslocaltime) If Weekday(startDT.Lslocaltime)<7 Then If Weekday(startDT.Lslocaltime)>1…

1 Comment

Code – Read from and Write to Windows Registry in Lotusscript

A question was posted in the IBM DeveloperWorks forum for Notes/Domino 8 about the possibility to detect from within Notes if a computer is equipped with a touch screen. The answer was that you have to check if a specific DLL is installed, which is done though the registry. The original posted then asked how to do that in Lotusscript, so I deceded to simply post some code I am using. I did not write this code, and I don't know who originally did. I think I may have taken some VB code and simply adapted it for Lotusscript. I plan to rewrite this a s a class when I have some time. In the mean time, here is the code.   Option Public Option Declare Dim REG_NONE As Long Dim REG_SZ As Long Dim REG_EXPAND_SZ As Long Dim REG_BINARY As Long Dim REG_DWORD As Long Dim REG_DWORD_LITTLE_ENDIAN As Long Dim REG_DWORD_BIG_ENDIAN As Long Dim REG_LINK As Long Dim REG_MULTI_SZ As Long Dim REG_RESOURCE_LIST As Long Dim REG_FULL_RESOURCE_DESCRIPTOR As Long Declare Function RegCloseKey Lib "advapi32.dll" (Byval hKey As Long) As Long Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (Byval hKey As Long, _ Byval lpSubKey As String, Byval Reserved As Long, Byval lpClass As String, _ Byval dwOptions As Long, Byval samDesired As Long, Byval lpSecurityAttributes As Long, _ phkResult As Long, lpdwDisposition As Long) As Long Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (Byval hKey As Long, _ Byval lpSubKey As String, Byval ulOptions As Long, Byval samDesired As Long, _ phkResult As Long) As Long Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (Byval hKey As Long, _ Byval lpValueName As String, Byval Reserved As Long, Byval dwType As Long, Byval lpValue As String, _ Byval cbData As Long) As Long Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (Byval hKey As Long, _ Byval lpValueName As String, Byval Reserved As Long, Byval dwType As Long, lpValue As Long, _ Byval cbData As Long) As Long Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" _ (Byval hKey As Long, Byval lpValueName As String, Byval lpReserved As Long, lpType As Long, _ Byval lpData As String, lpcbData As Long) As Long Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" _ (Byval hKey As Long, Byval lpValueName As String, Byval lpReserved As Long, lpType As Long, _ lpData As Long, lpcbData As Long) As Long Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" _ (Byval hKey As Long, Byval lpValueName As String, Byval lpReserved As Long, lpType As Long, _ Byval lpData As Long, lpcbData As Long) As Long ' --- Registry key values Const HKEY_CLASSES_ROOT = &H80000000 Const HKEY_CURRENT_USER = &H80000001 Const HKEY_LOCAL_MACHINE = &H80000002 Const HKEY_USERS = &H80000003 Const HKEY_CURRENT_CONFIG = &H80000005 ' --- Registry return values Const ERROR_NONE = 0 Const ERROR_BADDB = 1 Const ERROR_BADKEY = 2 Const ERROR_CANTOPEN = 3 Const ERROR_CANTREAD = 4 Const ERROR_CANTWRITE = 5 Const ERROR_OUTOFMEMORY = 6 Const ERROR_INVALID_PARAMETER = 7 Const ERROR_ACCESS_DENIED = 8 Const ERROR_INVALID_PARAMETERS = 87 Const ERROR_NO_MORE_ITEMS = 259 ' --- Registry access key Const…

3 Comments

IBM Connect 2016 announced – in Orlando!

IBM just published information about the future of the conference known as Lotusphere/IBM Connect/IBM ConnectED. To the contrary of what probably everyone thought, the conference will be back in Orlando in January 2016, reverting back to the name IBM Connect. It's long run at Walt Disney Dolphin and Swan (affectionate known as Swolphin) will however be over. In 2016 the conference will take place at The Hilton Orlando, between January 31 and February 3. So the length of the conference will be the same as IBM ConnectED earlier this year. The rate (on the hotel website) is currently $219/night plus a $22/night resort fee (which includes free in-room wifi). A bit less expensive than Dolphin and Swan. I hope to see a lot of my old friends (and make some new ones) in a little over 7 months.

2 Comments

Coming Soon – Interesting Webinars

The Notes training company TLCC has two very interesting webinars coming up, especially for anyone that were not able to attende ConnectED in January. On May 14 the IBM development team will talk about the Domino development landscape, including new features for Domino on-premises as well as for the cloud through IBM Bluemix. IBM:ers Pete Janzen, Martin Donnelly and Brian Gleeson will be featured. Then on June 16 the IBM product team will be featured. Scott Vrusho and Scott Souder is going to talk about where Notes, Domino and Verse are heading, while Dave Kern and Kevin Lynch will talk about recent security related changes to the Domino server. You can find out more at http://www.tlcc.com/admin/tlccsite.nsf/pages/xpages-webinar

0 Comments

WWII – 75 years since Denmark and Norway were occupied

In the morning of April 9, 1940 Germany invaded Denmark and Norway in a surprise attack. Denmark had virtually no chance at all and was quickly overrun by the well-trained and experienced Wehrmacht. After six hours Denmark had no choice but to surrender. The quick surrender is thought to have resulted in a more lenient treatment of the country, and also delayed deportation of jews until late in the war, when most had already been able to escape. Norway fought longer, and managed to sink the heavy cruiser Blücher just outside Oslo during the initial phase of the invasion. The southern part of the country fell fairly quickly, but it took 62 days before Germany had full control of the country, making Norway the nation that withstood a German invasion for the second longest period of time, after the Soviet Union. Growing up in neighboring Sweden the events of April 9 were well-known to me, and since I have always been very interested in history (and especially conflict history like WWII) I did read a lot about this. I remember reading stories about Norwegian bus drivers who had their busses confiscated and loaded with German soldiers and then promptly driving themselves off the steep mountain roads, taking dozens of enemy soldiers with them in death. They were as brave as the soldiers fighting the invading forces on the different battle fields. Sweden was never invaded or directly attacked during WWII, and that was probably very good. Despite starting to rebuild the (by then almost non-existing) military in the late 30's when the threat from Hitler could no longer be ignored it would have taken until around 1950 until Sweden had a military force that could stop an invasion. It takes time to build up a military force, aquire equipment and teach the soldiers to use it, train officers in sufficient numbers and give them enough experience to lead troops. The time when I grew up was at the tail end of the Cold War (even if we did not know it then). I remember the Soviet submarine U137 (actual designation S-363) running aground in southern Sweden in 1981, causing a tense stand-off between Swedish and Soviet military forces. Swedish fighter pilots had young eastern european men visiting them at home, posing as Polish students wanting to sell paintings or books in order to finance their studies. But strangely enough they only visited pilots, not their neighbors... They were most probably mapping out where the pilots were living, for Soviet special operations units to be able to assassinate them right before an attack on Sweden and thereby cripple the Swedish air defenses. We also had the Soviet invasion of Afghanistan in 1979, as well as numerous other conflicts all over the world. Not to mention the threat/fear of nuclear war. So in short, it was an interesting and somewhat scary period to grow up, especially living so close to the "Russian Bear". Sweden have a long history of war with Russia. This was of course…

0 Comments

IBM Verse – Features I would like to see

I have been testing IBM Verse Preview a little now, and I have compiled a list of some features I would like to see implemented. I have not included things in the UI (User Interface), because it is clear that part is still being polished/developed, and have some ways to go. I am going to focus on actual functionality, the UI items I will wait with until we are closer to the official March 31 launch date.   Connect IBM Verse to GMail, Hotmail and Yahoo Mail This is needed for several reasons. First to import existing calendar entries, contacts (including pictures, e.g. in Google Contact) and even existing email. Say the last 3 months or 6 months or even 12 months of email. The connection should also be used to retrieve any new email coming to those acounts and display them in Verse. This way Verse can act as a federated email client, replacing the need to login to 3 or 4 different webmail systems. This requires one more function: the ability to change the sender address to match the account it was sent to. For example, if I get a mail delivered to texasswede@gmail.com and it get imported into IBM Verse, when I respond to it I need to be able to select that texasswede@gmail.com is the sender, not karl-henry.martinsson@ibmverse.com. Outlook Express could do this this 15 years ago...   Signatures (including graphic elements) Nobody will be taking Verse serious if you can't create a signature for your outgoing email. Even for personal mail that is pretty much required today, and if you are trying to showcase a product intended for enterprises, don't cripple it like this.   Allow custom usernames and aliases In all/most other systems I use the nickname TexasSwede. In IBM Verse I have to be karl-henry.martinsson, which is longer, harder to remember (and to get right for people) and also annoying to have to type every time I login. Talking about login, the login screen does not remember my username and I have to enter my username as well as the domain. Not fun, especially when the mailbox times out every 30 minutes. If you like to keep your mail open all day, that is not useful. While we are on the subject of account/user settings, it would be nice to be able to change the password...   Make Verse freemium, not crippleware Nobody will bother testing IBM Verse if you are limited to 25 emails per 24 hour period and a 500 MB mailbox. Even GMail had 2GB at it's launch in 2004 (if I recall correctly). I am sure there are many other things in the full version that have been removed in the preview version (if it has been developed yet). From what I understand, there is quite a bit of work left on the full (paid) version as well...   Mail Rules For any kind of corporate/enterprise email you need rules to sort incoming mail into folders. With the integration of Watson in IBM Verse,…

1 Comment

IBM dropped the ball on IBM Verse

At IBM ConnectED in January IBM promised that all attendees would get early access to the next generation web-based email presented at the conference, IBM Verse. Jeff Schick initially promised it for february, but after several emails where the attendees were offered to sign up, it got very very quiet. Today the real invitation finally arrived in my mailbox, and I signed up. After signing up I was told it would take up to a day before my mailbox would be setup and available, but after about 30 minutes I got the welcome email. What I noticed is that there are a number of functions not working or not available yet. This is something one would expect of a beta product, so not something I react negative to, even if it would have been nice to see a more polished product being introduced, even if it just labeled "IBM Verse Preview". Among the functions missing is a way to create a mail signature. There is also a limit to 25 emails in a 24 hour period, as well as no more than 10 recipients for any email. Storages is limited to 500 MB. According to a response in the support forum, IBM have dropped the Freemium idea. IBM Verse Preview replaces it, and will be just a demo version to try to get customers to buy the full version, where signatures and other features not present in the crippled Preview version will be available. If you want to hear Jeff Schick announce the Freemium version (and personally invite ConnectED attendees to get early access to Verse Freemium), watch this video (starts at 42 minutes in): https://youtu.be/RKYkOCwyUKE?t=42m4s In my opinion, IBM need to drop the 25 email and 10 recipient limit, increase the mailbox to at least 2 GB and add at least the functionality GMail offers, which include signatures (with graphics). Then there is quite a bit of polish left, if you mail a non-existing user you get the message "User XXX not listed in Domino Directory". Yes, we are all happy that IBM Verse actually uses Domino and .NSF for mail storage, but it should probably be hidden from users. There are also parts that look totally different, a lot of Connections stuff like profile settings, inviting users to your network, etc. Finally, Internet Explorer should be supported. Not that it is my favorite browser, but many companies are still standardized on that browser. In my opinion, IBM dropped the ball. As my instructors in the Swedish army would have said: "Do it over, do it right".  IBM Verse has potential, but not as crippleware.

6 Comments

Microsoft and jQuery Ajax calls – not using standards

I recently started using C# and .NET for the first time to build a web application. It is just a proof of concept application where I am trying to implement CRUD (Create, Read, Update and Delete) though jQuery and Ajax calls from a simple webpage. The application should let me retrieve a list of all companies in the database, get information about a specific company (based on a company id), update an existing company (and create a new company in the database if it does not exist) and finally allow a company to be deleted. I been doing these things for years using IBM Domino as the backend, simple reading the query string and parsing the name-value pairs before performing actions based on the values. So when I started using Visual Studio I naturally thought things would work the same there. But I found out that ASP.NET is using a different method to address web resources. It uses the concept of routes, so instead of adding information passed to the server using the query string, the data is passed in the actual URL: To get a list of all companies you would call /api/Company, and to get information about a specific company you add the company id (/api/Company/Q1234). If I want to pass two arguments to the server, for example to get all companies in a specific city and state, you would call /api/Company/TX/Dallas. In my opinion, this gives you much less flexibility than if  you pass arguments in the query string. You must put the arguments in the correct order, and it is much harder to use optional arguments. One example of where I used optional argumenst is for sort order. In some cases I want the companies to be returned in descending order, instead of the default ascending. Or I want to sort on a specific column/values. In those cases I pass along a special argument, but normally I don't. Less data to transfer that way, and cleaner code. But it still works. It is when you want to perform a POST of form data to the server that it get really complicated and annoying. This is the sample code using the ASP.NET Web API generated by Visual Studio 2013: // POST: api/Company public void Post([FromBody]string value) {     ... do stuff here } As you perhaps can tell, this function only take one argument, which is pretty useless in a real application. And you can't just add additional arguments in the declaration. One way to do it (as described here) is to use a data transfer object containing all the arguments, which then is used in the function: public class CompanyDTO {     public string CompanyID { get; set; }     public string LegalName { get; set; }     public string Address { get; set; }     public string City { get; set; }     public string State { get; set; }     public string ZIP { get; set; } } // POST: api/Company public string Post(CompanyDTO Company) {…

3 Comments

End of content

No more pages to load