New Web App Training Series

BKeeney Software is proud to announce a new 4 1/2 hour video training series for subscribers at http://xojo.bkeeney.com/XojoTraining/.  The new LinkShare Web App series takes budding Xojo developers from nothing, to a fully functional web application.  This eight part series is designed to familiarize the beginning and intermediate developer on how Xojo web applications are created and how to create the basic infrastructure required for most modern web applications.

Just a few of the topics covered:
• Project organization
• Database integration using ActiveRecord and ARGen
• Safe password handling, storage and login procedures
• Sending emails and how to communicate with the app via URL parameters
• Basic WebStyles
• Basic WebPage, WebDialog and UI layout and interaction
• Much, much more

The series comes with source code the Xojo developer can use in their own projects.

BKeeney Software has 183 separate videos, with over 52 hours of Xojo and Real Studio training video and source code at http://xojo.bkeeney.com/XojoTraining/.  The site is a Xojo web app and has served up over 7,750 hours of streaming video to thousands of developers since it went live.

More information at http://xojo.bkeeney.com/XojoTraining/ or contact Bob Keeney at support at bkeeney dot com.

ARGen Version 1.6

ARGen256Today we released an update to ARGen, our utility to create ActiveRecord classes for your Xojo and Real Studio database projects. ARGen costs a mere $19.95 and can save you many hours of tedious and error-prone database coding.

ActiveRecord for Xojo does a number of things for you. First, it eliminates much (not all) of the SQL required to work with your database. Second, it lets the IDE autocomplete work for you using Table.Field notation as well as letting the compiler warn you when you are doing an illegal datatype conversion. Lastly, ActiveRecord will throw an exception if a field is missing from the AR classes (debug only).

Version 1.6 is a free update to all users of ARGen. The demo version allows you to output two AR classes at a time.

New in version 1.6:

  • ARGen now outputs the entire ActiveRecord class structure so you no longer have to download the ActiveRecord package from our website to add it to your project.
  • Outputs only for the database you’ve selected
  • Restructured the OpenDB a bit to include the table registration

Download and more info at http://www.bkeeney.com/allproducts/argen/ 

 

Custom Programming

Does your customer really need the type of custom programming you’re selling?  I often get a request for a quote that involves fairly standard business applications such as accounting and contact management.  It’s hard to justify,  to myself at least, why they’d want to spend tens of thousands of dollars when they could spend merely hundreds of dollars on off-the-shelf software.

Off-the-shelf software has some advantages over custom programming.  It’s generally cheaper.  It’s also available immediately, rather than the months (or years) it takes to develop and debug a custom application.  The off-the-shelf software usually has pretty good technical support and a community behind it that can answer those tough questions.  The customer also knows it’s likely the company behind the commercial software will be still be in existence for many years.

Custom programming, on the other hand, is expensive and time consuming.  If the customer wants you to write a QuickBooks killer they’d better be prepared to wait a while and spend some serious money.  Creating software that competes with established, feature-rich applications is a daunting task.

I am sometimes amazed at the reactions from customers when I give them estimates.  Really!?  You thought writing a QuickBooks clone would take 3 months and only cost $10k?

Most contract developers don’t provide much technical support for the product they’ve developed, leaving it up to the customer to fend for themselves.  Some clients are technically savvy, but most aren’t.  Is the customer going to fix the code themselves?  It’s been our experience that even the few clients that know Xojo aren’t capable of changing any code other than the most trivial – otherwise they’d have written it themselves.

Clients that are selling the application commercially are sometimes unprepared to handle tech support and that’s a problem as well.  If they can’t answer basic tech support questions are they going to rely on you to answer those questions?  Are they paying you to do this?  We had one client that assumed we would be providing free tech support, forever.

Is your custom programming business going to stick around for the long-haul?  Will the customer be able to come to you in five years and have you update their application for Windows 7 or Mac OS XIII or the current flavor(s) of Linux?  The customer wants and needs long-term stability.  I good portion of our clients have come from Real Studio and Xojo developers that are no longer consulting.

With all the problems associated with custom programming, why should anyone spend the money on it at all?  The customer gets exactly what they asked for.  If they’ve done a good job explaining their requirements and you’ve done a good job implementing them, they have something that makes their business very effective, very efficient, and is tailored to their business model.

Custom software might be an asset to the client in the event they sell their business.  Some of this depends upon the contract details you signed (you do have a contract, right?) before you started the project.  A lot of clients are going to want some sort of clause that allows them the rights to sell the software (with source code) to another party.

Custom software allows for additions and changes to occur over time.  Off-the-shelf software may be cheap, but try getting Intuit to change the way QuickBooks does their payroll or the way they handle payments.  Custom software allows the customer to grow their software as their company grows.  If the customer wants to integrate CRM functions into their accounting application this year and add event scheduling next year they can.  It’s really only a matter of your time and their money.

When talking to a potential customer for custom programming, be honest.  Tell them the advantages of custom programming.  You also need to be honest about the negatives as well.  A big part of dealing with clients is managing their expectations on what you can and can’t do for them.

Thankfully, by the time a client gets to us they’ve already explored off-the-shelf solutions and have ruled them out.  Usually they have a very specific need that can’t be addressed with the one-size-fits-all commercial application.

Have you ever convinced a client to use off-the-shelf software rather than your custom written solution?  Other thoughts?

Thoughts on Xojo Web Edition

When Web Edition for Xojo (then Real Studio) was released I can’t say I was overly impressed.  It was missing some features and was buggy (to put it mildly).  I was of the opinion that it just wouldn’t take off.

Since then the worst of the bugs were fixed and the worst of the framework problems were addressed and there’s been a steady improvement in the product in practically every release.  In my consulting business it’s went from being a ‘gee that’s a nice thing to have’ to being roughly half of our overall Xojo consulting business.

The fact that we had very little web development experience hasn’t stopped us from using Xojo for a lot of projects.  It’s great that a WebButton and a regular desktop Button and that a WebPage and Window act the same from a developer standpoint.  All the code experience that we learned over the course of a decade in desktop apps was, with a few notable exceptions (*cough* constructors *cough*), was immediately transferrable to web apps.  While there is a learning curve it’s not like we had to learn a completely new programming language to do some large and complex web apps.  In fact, we turned down work before Web Edition came out simply because we didn’t have the experience and in-house know how to do the work.

Our clients seem willing to forgo the numerous capabilities and power of a desktop app for the more limited capabilities of a browser based app.  I think the biggest reason being that web apps don’t have distribution issues.  There’s only one instance of the app sitting on a server somewhere.  Web apps also work in almost every desktop browser and even work with most mobile web browsers.  Heck, you can even configure the web app to look different based upon what device it’s being viewed on.

There are some disadvantages, of course, to Xojo web apps.  You can’t just put them up on any ol’ server.  You pretty much need a VPS or use the new Xojo Cloud (which is just a specially configured VPS).  Then you have to worry about 32-bit compatibility libraries but, honestly, once you get the first app running on a server the rest of them are pretty easy.  I’ve not had the pleasure of getting a Xojo web app working on IIS but I hear it’s not a pleasure, nor quick, experience.

Apps running in a web browser have a limited subset of capabilities. With Xojo web apps you can’t use drag and drop anywhere out of the box (I think you can do some of this with JQuery but I’ve not tried yet).  The controls, particularly the WebListBox, are lacking a lot of functionality, and there’s just not a wealth of 3rd party controls available for Web Edition yet.

Security-wise, Xojo web apps are compiled making it very hard to compromise an app even if a hacker gets into your server.  There’s still work to make your app secure from SQL injection attacks but that’s a relatively simple thing.  Much of the work is really securing your server so that it’s secure and that’s one thing that Xojo Cloud is doing well (perhaps too well based on my recent experience).

So the question, Dear Readers, is what are your biggest likes and dislikes about Xojo Web Edition?  What do you wish it did better or differently?

Xojo Training Area URL Change

You should get redirected there in case you use the old URL but just in case something’s not quite right yet, the Xojo Training Video area is now located at http://xojo.bkeeney.com/XojoTraining/.  The training area is now using Xojo Cloud and using Rackspace file hosting.

JavaScript Error (or Banging Your Head Up Against a Wall)

In one of our big Web Edition projects I recently added a new dynamic WebContainer option to the home screen.  It generated a JavaScript error on occasion but because it was under active development I wasn’t too worried about it.  Sometimes those errors fix themselves given some time.

I figured that I was doing something to a control before it was being shown.  I went round and round with the bug adding timers to add delays and changing the order of when things were shown.  It was really bugging me and I even contacted Xojo support because it was happening on the Xojo Cloud server during the alpha period but yet I was seeing different behavior on my VPS host.

Eventually, we really looked at the javascript error:

document.getElementById(‘EK7iZlsZ’).style.overflow = ‘hidden’;

If you go into the Web Inspector in Safari and in the console paste in document.getElementById(‘EK7iZlsZ’) it resolves to a Style.  It was confusing because that style is used everywhere and all styles are static meaning that I’m not replacing or changing that style on any control, anywhere in the project.  We all assumed it was an order issue with the web framework.

The bit that finally tipped us off to what the real problem was the ‘style.overflow’ part of the JavaScript error.  That is NOT visibility of a control, that’s the JavaScript for ScrollbarsVisible and it’s a property on all WebContainers.  This is the property that will let you change how scrollbars work on the WebContainer.

Of course, once we knew what the error was it was trivial to change it.  The line of code I had in an initialization routine of the WebContainer was self.ScrollbarsVisible = 2.  As soon as I moved this to the shown event the problem went away.

If you are a heavy user of WebContainers this might bite you at some point in the future.  Perhaps you’ll remember this blog post and remember how you thought Bob was a silly old programmer for missing something so obvious.  :)

Gotta love hours and hours of work for moving one line of code.  Of course, along the way things got more efficient and I removed a bunch of time delay code that was no longer needed.  I love programming some days.  Now to repair the dent in wall from banging my head….

Differentiating Your Services

There are hundreds of consultants out there doing the exact same thing you do.  They’re hustling to sell their services to the very same people you’re trying to sell to.  They don’t live in New York city or San Francisco and can live on $15/hour.  How can you, a good developer, compete with overseas programmers or newbies?

Let’s be honest.  If the client is evaluating potential developers solely on price then you probably don’t want them as a client anyway.  That’s not to say that price should be ignored because a client that’s not frugal with their money is a problem too.  But, it is possible to win a bid even with a higher end price.

So how do you differentiate yourself from the cheap programmers?  The first thing to have is a page on your website that shows previous projects.  This shows potential clients the type of work you’ve done before.  You have to be careful about violating any Non-Disclosure Agreements you have, but for the most part you don’t have to get into specific details about a project to portray the type of work it was.

If you’re just starting out, your previous projects page is going to be sparse.  Another drawback is when your previous projects page doesn’t show the skills the client is looking for.  Unfortunately, the only way to get around this problem is to be upfront with the client and let them know you’ve done the research and have a plan.

Do you have off-site storage of source code?  If you’re working out of your house (who needs an office anyway?) you should probably have automatic backup of source code to an off-site facility.  In the event of a disaster like a flood, fire, earthquake or someone breaks into your house, this is a simple and inexpensive way to protect your work.

We use a Subversion host that gives us gigabytes of storage that amounts to hundreds of Xojo projects files along with documentation and other supplementary info.  The host itself has offsite backup storage and hourly backups.  Does this sound paranoid?  You bet it does!  Your code is your money maker and the client isn’t going to be willing to fund several more months worth of work because your hard drive crashed or your laptop was stolen and you have to recreate your work.  They don’t care, they just want the project done.

Bug tracking systems like Bugzilla, Mantis and many others are good open source software applications that make bug tracking cheap and easy.  Using a bug tracking system is light years ahead of working strictly through email, if for nothing more than the documentation features and audit trail features.  The client can log into the system and see a bug’s status and add additional information.  You, as the developer, can request additional information, close a bug, or merge it with another one.  A good bug tracking system is a must on large projects or projects with multiple developers.

Oddly enough, the other thing that can differentiate yourself from other developers is your contract (you do have a contract, right?).  A good contract is not only protection for you and your client legally, it is also a way to document what you will and won’t do.  It’s the first step into managing the expectations of the client.

Contracts can be a pain to create.  Start with a standard contract.  I’ve been pretty impressed with the documents at www.docracy.com.  Once you have one you like you can add to it.  We use a standard boilerplate contract that is fill-in-the-blank for the basics (name, address, etc) and has general responsibilities for us and the client.  We constantly refer to Appendix A that lists all of our deliverables (source code, installers, documentation, etc), client deliverables (graphics, timely testing, etc), a brief description of what the code will do, and the payment terms.

Price is important and you’ll lose some clients because of it.  It happens.  But using some of the tools and techniques we’ve talked about you can differentiate yourself from the cheap and inexperienced developers.

What things help differentiate you from other developers?

 

XDC 2014 Random Thoughts

Anyone who has been following this blog for any length of time knows that I love the Xojo Developer Conferences.  It’s my one time of the year that I can talk shop all day and night.  Here are some random thoughts on XDC 2014.

Las Vegas: I know a lot of people love, Love, LOVE Las Vegas.  I don’t.  I don’t gamble.  I can only take so many shows, and heaven (and my wife) knows that I’m not there to chase the girls.  Las Vegas is an adult Disney World with a license to lose your inhibitions.  But besides all that I feel that we lost a major part of what I really love about the conference.  Talking with other developers.

The Monte Carlo Hotel has somewhere in the neighborhood of 10 bars and nightclubs.  As the night progresses the ones further from the gambling room close and force you towards the game room.  The music gets louder too making it tough to, you know, have a conversation.

In years past the hotels had a single bar and while it might have closed at 1 or 2 AM it was the one spot you could ALWAYS catch another developer.  This big mega hotels in Las Vegas, not so much.

Another thing that really sucked about the Monte Carlo was the WiFi.  It worked (sometimes) on the first two floors.  In our rooms we had an ethernet cable.  Hello!  2001 faxed us and wants their ethernet back.  I’ve not been in a hotel in the past 10 years that didn’t have a WiFi system (even if it was paid access).  Thankfully, people brought (or bought) Airport Express cards for in-room connectivity.

Needless to say, I will have strong reservations about going to an XDC in Las Vegas again.  Perhaps it’s time to go back to Austin for a year.  Make it a homecoming!

The Battleship Code Contest:  I understand how these things go, they just didn’t have enough time to come up with a NEW contest.  It would have been great to come up with a gambling theme since we were in Vegas.  I was not the only one that was disappointed.  Last year there were close to 30 contestants – this year 11.  It was fun to see the tournament in action.  Geeks cheering on each other is good.

Perhaps the community can come up with an alternative game for next year.  How about something that involves Xojoscript like a battle bot game?

Community Sourcing for Session Topics:  This came up in the Feedback session.  It would be nice to have a period where the community could offer and vote on ideas for sessions.  Then, those of us that would like to speak would have to pick from one of the top X voted ideas.  I think this is brilliant as it might help attendance and breath some fresh ideas into the sessions.  It might also make us get out of our comfort zones a bit and do some real research.  I realize I’m probably in the minority of speakers on this one but I love this idea!

Engineer Vetting of Session Topics:  My entire team collectively attended every session.  The feedback I received from them was that some sessions were awful from the first slide (if there were any slides).  Every session needs to have the question asked:  What is a developer going to get out of it?  And then the slides need to be reviewed with the question:  Will someone looking at these PDF’s in six months even know what they were talking about?

Recordings of Sessions:  This one comes up every year and Xojo always shoots it down.  I get their reasoning:  they want quality, blah, blah, blah.  This is the twenty-teens.  Video is everywhere and it’s SO damn easy to do it this one baffles me.  Sure, I get that they want people to attend the conference but they could also SELL these videos to the community.  Make it 4 or 5 months AFTER the event.  Income streams is a good thing.

Make Slide Decks Available:  Again, like the video, make them available to the community 4 or 5 months after the event.  In a lot of them it doesn’t matter if they were released today.  There’s not enough detail in them that really explains anything.  The details are spoken out loud and the slides are section headers.  For me, they are a reminder of what I heard at XDC.

Do you have any thoughts on XDC 2014?  Where do you want XDC to be held next year?

XDC 2014: Future Hints

In my last post I talked about what version 1 of the new compiler is going to accomplish in the first quarter of 2015.  It’s a great first step and with any switch to a newer, better technology it means some things will become easier to accomplish.

In Joe Raneri’s Compiler session he talked about several new things that the new compiler might be able to do.  I will stress the might bit.  If it doesn’t happen don’t say they promised it.  :)

Autocomplete:  The current autocomplete mechanism in Xojo is completely separate from the compiler.  It’s possible with the new compiler these are unified.  This would be great because the autocomplete code pretty much duplicates what the compiler does since it needs to process the same level of information.  I’ve been told there are dozens of autocomplete classes in Xojo.  If the compiler can process some of this information perhaps autocomplete will be even faster and more reliable.

Debugger Tooltips:  I’ve wanted this one ever since I moved to Xojo from Visual Basic.  While in the debugger it would be very cool to get the value of the variable you’re hovering over to get displayed in a tooltip.  The current object viewer in the debugger is less than ideal and I really despise using it.  I always seem to be fighting it so being able to hover over the variable to get its value would be a very welcome addition.

Xojo Plugins:  This is the long term, and only, approach to getting plugins on iOS.  Currently iOS does not allow dynamic libraries so until Xojo can create plugins, developers will have to use declares into the iOS frameworks.  This is less than ideal so the new compiler will allow iOS developers to create plugins entirely in Xojo code.

I believe that, at least for iOS, Xojo plugins is a definite.  How this affects desktop remains to be seen but what it would mean is that developers would not have to create plugins using C.  What we don’t know is what happens to the current plugin SDK.  Does it get deprecated or does the new way get more/better support over time until no one’s using the old SDK?  Only time will tell.

Other:  A few of the other possibilities that Joe shared that the new compiler might be able to do for us:  better refactoring tools, source indexing (e.g. finding the callers of a method), and more platforms or architectures.

The new compiler is a big deal and it’s been many years in the making.  Some of things that might come out of it are exciting.  It’s my opinion that if Joe is saying these things at lease some preliminary work has been done, or at least some preliminary proof-of-concept code has been completed.

What are you most excited about?

XDC 2014: Compiler News

The Xojo Developer Conference keynote address is usually where a bunch of future items are put on display.  This year it was iOS and Xojo Cloud (the latter just being released).  But sometimes the sessions that the engineers lead are just as informative.  Sometimes it’s hints about future things and sometimes it’s an outright roadmap.

In Geoff’s keynote presentation we learned that the ARM compiler and LLVM backend compiler are real and if not perfect, mostly working.  Joe Strout stated that many things still had to be finalized but it’s a good sign that a significant amount of work has already been put into them and they are functional.

In Joe Ranieri’s ‘About the Xojo Compiler’ session we learned a lot about what a compiler does.  The frontend of the compiler includes the lexer, parser, semantic analyzer, and the intermediate representation (IR) generator.  The results then get passed into the backend of the compiler which has an optimizer and code generator.  That output then gets sent to the linker.  Very technical stuff but interesting.

He then went on to explain how the compiler described isn’t actually what’s in use today. The current compiler is designed to emit machine code quickly and merges a number of the compilation steps together.  Unfortunately this results in it not being reusable for other tasks like autocomplete and there being at least two to three other parsers in the product.  The current compiler also has poor error recovery and diagnostics, and, expects 32-bit integers.  Obviously the compiler needs to be updated.

The new compiler will be designed and implemented very much like what was described earlier, providing a base for future plans. With the first release, the new compiler will create 64-bit applications.  Some of this is waiting on framework work to make sure they are capable of using 64-bits.

The new compiler will be built using LLVM, which has has some great optimization passes but they’re pretty generic to work across a lot of languages.  It will also have additional optimization passes that are specific for Xojo (the language).  This means that some things will get huge speed gains such as direct calls into the framework, redundant reference counting, and direct access to arrays.

The new compiler will have better diagnostics.  Hopefully this will turn into better compiler error messages.  So hopefully this means we can get better information than a generic ‘syntax error.’

Finally, the new compiler will have native linkers.  Currently the compiler does not have native linkers for Linux and Windows which requires the loader stub to do some work that will sometimes trigger Anti-Virus warnings.

The new compiler is scheduled for the first quarter of 2015.  It will not be an immediate replacement and the end Xojo user will be able to switch between the two compilers as fringe cases are found.  All of this is not new to anyone that was around during REALbasic version 5.

All-in-all this is good news.  It’s a little disappointing that it’s going to be another 9 months to see the new compiler but as with all things I’d much rather it work well in version 1 than have it take 3 releases to be usable.

In my next post I’ll talk a little bit about what some of these changes *might* mean in the future.