Xojo Conference in London

With a little over a week to go there’s still space available at the MBS Conference in London the 27th of November.  It will be held at the Antoinette Hotel in Wimbledon which is a part of greater London.  The conference homepage is at http://www.mbs-plugins.de/archive/2015-11-11/Schedule_for_MBS_Xojo_Conferen/monkeybreadsoftware_blog_xojo.  There are still spots available!

This is during the Thanksgiving Holiday weekend for the United States but if you want to avoid your crazy relatives join us in London and get your geek on.  Airfare is reasonable this time of year to London.

Give it some thought and think about joining us.  I went to one of the conferences in Koblenz, Germany a few years ago and had a blast.  There is nothing like getting together with like minded people to chat about your favorite development tool.

I’m going to give a presentation on BKS Shorts and the new Report Designer that will soon ship.  I think people will be very happy with the ability to embed a report designer into their applications AND have the ability to modify the UI as they see fit.

BKS Shorts Webinar

JpicAppIcon256oin me from 1 to 2 PM (ET) on Tuesday, March 31 as I do a webinar with Paul Lefebvre of Xojo.  In this webinar I’m going to talk about BKeeney Shorts, our reporting classes for Xojo.

Many Xojo developers are familiar with banded-style reporting tools.  They are generally easy to understand and use and are great for simple reports.  However, if you’ve struggled with complex reports that don’t easily fit in the banded reporting tool paradigm then BKS Shorts is worth looking at.

BKS Shorts is 100% native Xojo code and its strength is that you have 100% control over all of your report objects.  Its drawback is that you have to code everything!  BKS Shorts has multiple rendering options including to the Graphics object (Canvas and printer), to HTML, and to PDF  (using the MBS DynaPDF plugin).  BKS Shorts works on desktop, web and console apps on Mac, Windows, and Linux.

In this webinar I’ll go through an example or two explaining the code and answering any questions that come up.  To register for the webinar, please go to https://www.zoom.us/webinar/register/9a94b333833729fbcde7dc3c8da9331e


See you online!



One of the things that I love about the Xojo community is that it’s pretty friendly group.  You ask a question on the forums and you’ll usually get a decent answer or two.  This means that we’ve often ‘talked’ with Xojo experts but have never met them.  One of the things that stinks about the Xojo community is that we are a small enough group that it’s likely there are not a lot of Xojo developers near you.  That’s a shame because the Xojo developers I’ve met in person are as nice, if not nicer, than they were online.

If you can possibly attend the Xojo Developers Conference (this year it’s April 29 – May 1 in Austin, Texas) I highly recommend it.  Whether you are a newbie to Xojo or been around the block, as they say, a few times, I’ve always found it to be a good experience.  To be able to talk Xojo for 3 or 4 days is invaluable!  Nowhere on the planet will you find a higher concentration of Xojo developers per square foot.

Recently Paul Lefebvre, the Xojo Evangelist from Xojo, has been hosting a podcast called XojoTalk.  I love these podcasts because we get to hear from Xojo developers that we’ve ‘known’ for years through the forums and we get to learn a bit about them.  How they came to use Xojo and what they’re doing with Xojo.

Often the conversations veer off into some strange topic that you wouldn’t expect.  When I was a guest back in October the Royals were starting their playoff runs and while I’m not much a baseball fan it was a BIG deal for those of us in the Kansas City region (29 years since our last playoff appearance).  We also talked a bit about the, then, recently announced Windows 10 and what it meant for Xojo developers.  These organic conversations are entertaining and well worth a listen.  Paul does a great job so check it out!

You can subscribe to the podcast via your favorite RSS reader via http://feeds.feedburner.com/xojotalk or via iTunes at https://itunes.apple.com/us/podcast/xojotalk-podcast/id920411434

My entire team will be at XDC.  We are doing only two sessions this year.  Carol is doing a database design session and I’m doing a reporting tools session.  Hope to see you there!

Xojo Trainer Feb 2015 Update

We released an update to Xojo Trainer today.  We’ve added over 8 additional hours of Xojo Training video to our package.  This brings the total up to over 60 hours!  Here’s the complete list of new video topics:


  • iOS Walkthrough
  • 1.0 iOS App Object
  • 2.0 iOS App Icon and Launch Images
  • 3.0 iOSScreens and iOSViews
  • 4.0 iOSTextField and iOSTextArea
  • 5.0 iOSButton and iOSMessageDialog
  • 6.0 iOSCanvas
  • 7.0 iOSHTMLViewer
  • 8.0 iOSImageViewer
  • 9.0 iOS Primitive objects
  • 10.0 iOSLabel
  • 11.0 iOSSlider
  • 12.0 iOSSwitch
  • 13.0 Xojo.Core.Tiemr
  • 14.0 iOSSegmentedControl
  • 15.0 iOSTable
  • 16.0 Xojo.Net.TCPSocket

New Framework

  • 1.0 Xojo.Core.Date
  • 2.0 Xojo.Core.Dictionary

Web Edition

  • PictureShare project

These are the same videos that we’ve been streaming to thousands of Xojo developers for years at http://xojo.bkeeney.com/XojoTraining/.  Now you can view these videos and get the source code that comes with them offline at any time on your Mac or Windows computer.

We recently hit a milestone on our online Xojo Training – we’ve now streamed over 9,000 hours of video to users all over the world.  All of this via a Xojo web app!

For more information on Xojo Trainer, please visit http://www.bkeeney.com/allproducts/xojo-trainer/

iOS Development on Xojo

Xojo 2014 Release 3 was a big one for Xojo.  R3 allows the average person to create iOS applications in Xojo, in a RAD language, in an easy to use IDE.  I think most people will find developing iOS apps easy in Xojo.

The iOS applications that Xojo creates uses native controls.  This is huge because when iOS 9 comes around and Apple changes the native controls (because you know they will) Xojo iOS applications will most likely just work.  Some other iOS development environments use images for their controls which means they will have to update their tool set to work with the updated look.

For a first release, Xojo for iOS is pretty solid but it is definitely lacking in some areas.  Some of the controls are not fleshed out completely.  An example is the table.  What it does, it does well, but it is lacking in options that many developers will want.  Views aren’t scrollable yet and there are no UI pickers yet.  There is a Date and Time picker example that was done via declares but it’s not built-in to the control palette yet.

Another area that I’m sure the community will rally around is converting the iOS frameworks over to Xojo.  There is a similar project on the Mac OS side called MacOSLib and I’m sure some of the same developers will be active on both (they share some similar libraries after all).

Currently Xojo allows you to debug your application while it’s running in the iOS Simulator.  It would be awesome if Xojo could get it working so that we could debug while it’s running on the device.  Given the provisioning profile and the ability to manually add apps to the iOS device this might be possible but, to be honest, I don’t know what the sandboxing rules would be for that.  I also don’t know if that means Xojo developers in Window or Linux could deploy directly to the device or not (don’t hold your breath on this one, by the way, but one can always wish).

I am impressed with iOS in the first release.  Xojo has managed to take something that’s complex and made it easier.  If you already have some Xojo experience the transition will be a piece of cake (although there are framework differences between iOS and Desktop/Console/Web).  I think anyone with iOS development aspirations should take a look at Xojo.

We’ve been busy doing training videos!  We currently have over 4 1/2 hours (and growing) of iOS specific training videos available to subscribers over at http://xojo.bkeeney.com/XojoTraining/.  Come check it out!

[Update] I forgot to mention that the first couple of iOS apps developed with Xojo mad it through the approval process on Thursday.  Excellent news!

The Power of Face Time

Face time is very cool. No, I’m not talking about the video conferencing technology that Apple is pushing. I’m talking about sitting across the table from someone and being able to see their body language and see what they’re pointing to. If a picture is worth a thousand words, being in the same room with someone is worth a couple of hundred thousand words.

Most of our consulting projects are small enough and simple enough that email and phone calls are usually good enough. However, I’ve come to believe that the more complex projects need something more. Complex projects take consulting to a new level. Complex business requirements almost always mean more complexity in the design, coding, testing and debugging which in turn brings more complexity in interacting with the client.

There is something powerful about being in the same room with the client. You make a connection that emails, phone calls and video conferences just can’t accomplish. It’s been my experience that these clients trust you more because they’ve spent time with you. As social creatures we pick up on little things that either lead us to distrust or trust the other person. You miss most of it when you are using electronic means.

In late April 2015 the Xojo Developer Conference (XDC) will be held in Austin, Texas. Xojo developers from all over the world will come together and talk all things Xojo. More information can be found at http://www.xojo.com/xdc/HTML/index.html. The early-bird special will expire the end of November so sign up for the conference now to save $200.

Xojo will be spending a lot of time talking about iOS, what’s new in desktop and web apps. Hopefully we’ll get news on 64 bit apps, the LLVM compiler, the new framework, and whatever else they’re cooking up.

If this conference is like past conferences the real value isn’t the stuff talked about in the sessions (though that’s usually really great info!), it’s the connections with the people. People looking for a Xojo developer can sit down with several potential developers and discuss their projects and look them in the eye.

Developers can share their successes and horror stories with each other and talk about what works and what doesn’t. The conferences are a great way to network. You never know exactly how those connections will work. Consulting referrals happen all the time. I’ve received leads from developers that are too busy to handle work or on projects outside of their expertise. Likewise, I’ve given leads to some developers because of the conference networking.

Email and forums are handy for storing solutions but are awful mediums because intent and body language are missing.  People that I felt were complete jerks in emails and in forum posts turned out to be really nice when talking to them in person!  Now, the next time I see their brusque or insensitive comments I can just shrug it off because I know the person. I’ve had face time with them and that’s a pretty powerful thing.

New Video: ServerSockets

As a companion piece to the video from earlier in the week we added a new 38 minute video today on using a ServerSocket that allows your Xojo application to communication with multiple client apps that are using TCPSockets.  It turns out that it’s incredibly easy to use if you understand TCPSockets (which hopefully you know better now with that video).

I was chatting with an old developer friend this morning that I wish I had made this video a number of years ago when I was beating my head up against the wall on a big project that was using TCPSockets and ServerSockets.  Hopefully this gets you over the hump and you get some use out of it.  My pain is your gain in this case.

In this video we create a TCPSocket subclass on the ‘server’ that handles all of the communication details with the client apps.  The ServerSocket is a pretty dumb object (since it knows nothing about about our communications protocol with the client apps) but it is a pretty powerful class since you don’t have to do much to communicate to the clients other than provide a socket.

Our client apps can send a command, a single file, or a folder full of files.  Each client could potentially send a file with the same name and it would keep track of it properly.  We wrap up the video with having the server app send a message to all of the connected clients.

Direct link for subscribers:  http://www.bkeeney.com/XojoTraining/xojotraining.cgi?video=340

New Video: TCPSockets

Today, I added a new video to our Xojo training area. This new video guides you through the steps to using TCPSockets in your Xojo applications. In this nearly 90 minute video we create a sender application and a receiver application and by sending some simple data (a command and data) to the receiver to make sure we’re processing everything properly.

Then, we send a file (of any size) from the Mac sender app to the Windows receiver app. We do some basic file metrics to make sure the file we receive is the same as we sent. In the video I forget to unpack part of the data properly and it’s this file checking step that finds the problem (sometimes doing something wrong is instructive in these videos)!

Screen Shot 2014-10-08 at 10.16.38 AM

After that, sending a folder full of files is no big deal and in the video we clearly see that the sender has a queue of files that it’s going to send in multiple data segments, and the receiver only has a few of the segments yet.

Finally, we create an acknowledge message that gets sent back to the Sender application proving that we can have two way communication between the applications.


We now have over 55 hours of training video of Real Studio and Xojo.  Since we rewrote the training area using Xojo for Web we’ve served up over 8,700 hours of streaming video to thousands of developers around the world.

Data Paging Control

A lot of Xojo developers don’t give too much thought to how much data they’re loading into a listbox. For many desktop apps a couple of thousand rows is not uncommon and, frankly, not a big deal. Push that to ten thousand rows and things start to get dicey and when you get to a million rows you’re talking some serious wait time for all million rows to get added to a list box.

For web apps it’s even worse. When the server gets the request to load a WebListbox with a million rows it has to build all of the HTML, first, on the server, push it down the internet connection to your browser, and THEN the browser has to reconstruct those million rows of HTML into a display. Any time you deal with strings there is a performance penalty and needless to say a million rows of data is huge hit to performance.

Trying to show the user a million rows is bad on multiple levels. First, your application is slammed with unnecessary string handling and second, the user can’t possibly handle a million rows of data. The listbox scrolling alone would be a nightmare! Just don’t do this!

Web apps have been using paging controls for years to limit the amount of data the user sees. I’ve seen some web sites limit this data to 100 rows and some to even less unless the user specifies more. That way the onus is on the user for the webpage being slow.  And more recently I’ve seen more desktop apps limiting the amount of data too.

Data Page Control

Today we released a new 48 minute training video showing you how to build your own paging control in Xojo desktop and web apps. We build the Paging Control using a Container Control and standard controls and then use it control a listbox. Then it’s a matter of using the SQL keywords LIMIT and OFFSET to control which records are returned. Of course the video comes with a desktop and web project file with source code you can use in your own projects.

The running example of the web app is at http://xojo.bkeeney.com/BKSWebExamples/#datapaging

This video is available to subscribers at http://xojo.bkeeney.com/XojoTraining/xojotraining.cgi?video=338

If you’ve not looked at our training videos you might find some interesting things. I invite you to take a look!

Computed Properties

Computed Properties have come up several times in the past week and in both cases, the person I was talking with was having a hard time understanding them.  They are a useful tool in Xojo in the right circumstances.  So let’s dig in.

First, let’s get this out of the way.  You don’t need to use Computed Properties.  Ever.  If you don’t want to.  They are an automation feature of the Xojo IDE.  Simply, they are a lazy way to create getter and setter methods for a private property in your class.

There are times when you want to expose your private property to the outside world but not give it unrestricted access.  Usually you’d want to do this because you need to validate the input, or perhaps something needs to be done before it can be read.

Creating your private property is no problem.  In this case we’re creating moSecurity that is a reference to our clsSecurity class.

Private moSecurity As clsSecurity

You create a Getter method that checks to see if we’ve already created an instance of it.  If not, then you load it and then simply return it.  Simple enough.

Function Security() As clsSecurity
   if moSecurity = nil then
      moSecurity = me.LoadSecurity
   return moSecurity
End Function

If you want to change the Security object, you create a Setter method and use the Assigns keyword like this:

Function Security(assigns oSecurity as clsSecurity) As boolean
   if oSecurity <> nil then
      if me.CanChange(oSecurity) = false then
         return false
   moSecurity = oSecurity
End Function

Again, not terribly difficult to do.  It’s one property and two methods.  Notice that I didn’t name them GetSecurity and SetSecurity because I want these methods to act like a property to the outside world.

Return valuesThe Xojo IDE tries to be helpful by making a hierarchy of the methods that have the duplicate name.  You may (or may not) find this to be terribly useful.  I happen to dislike it because I can’t tell at a glance what the return value is, if anything, on either method without hovering my mouse over it or clicking on it and looking at the Inspector.  But then this is true of ALL functions – not just these types. Just one of the things that I miss from the Real Studio IDE.


Now repeat this sequence for every private property that you need to have exposed with Setter and Getter methods.  It’s not that it’s hard, it’s just tedious.  And if you have a particularly large class (think Formatted Text Control) that has hundreds of properties, the Method list gets HUGE.  The other drawback is that I often forget to use the Assigns keyword so I get compile errors if I attempt to use the Method as a property.

Computed Properties is a way to help make this a bit easier  We can accomplish the same thing by creating a public property called oSecurity in clsUser.

oSecurity As clsSecurity

ConvertToComputedPropertyPopupRight click on it in the Navigator and choose Convert to Computed.  You’ll see that the IDE makes a Private property called moSecurity as clsSecurity AND creates a hierarchical group for oSecurity containing a public Get and public Set method.  The default code that is in these computed properties is:




     return moSecurity
End Get

   moSecurity = value
End Set

At this point, we can modify these Get and Set methods to almost what we had before.

     if moSecurity = nil then
   moSecurity = me.LoadSecurity

return moSecurity

End Get


if oSecurity <> nil then
   if me.CanChange(oSecurity) = false then

moSecurity = oSecurity

End Set

ComputedPropertiesNotice that in the Computed Property version of the set we can’t return a value.  This is probably the biggest drawback, in my opinion, to using Computed Properties.  It’s almost the same amount of work but we have potentially saved some typing and we no longer have to worry about the assigns keyword because the IDE is automagically adding it for us behind the scenes (remember, we all want to be lazy programmers, right).  Thus our property is still treated as a property to the outside world.

One of the things that annoys me about Computed Properties is that now you have double the amount of Properties.  In the old fashioned (setter, getter) way you get a bunch of methods and in this second way double the number of properties.  Both, however, do mostly the same thing.

In my own fantasy world (believe me, it’s scary sometimes) I’d love to have the IDE group Public, Protected, and Private constants, methods, properties, etc so that I can expand only those that I want.  In this case I’d prefer to see only the Public ones.  The drawback is that you would have an additional hierarchy layer that causes clutter and may cause some confusion.  Would having the ability to hide certain scope types help?  I don’t know.

Do I have a conclusion?  Setter and Getter methods for your properties is easy enough.  It takes a little bit more work to set up and a bit more typing.  Each method, however, makes the Navigator a bit harder to read because of the added hierarchy but then so does the Computed Property.

Should you switch to using Computed Properties?  Only you can answer that.  I guess the only thing I’d recommend is be consistent throughout your project.  Consistency makes programs easier to read.

What say you, Xojo programmers?  Do you like using Computed Properties?  Why or why not?