Friday, June 14, 2013

We've Moved

The new Xojo blog is live! Join us now at to learn the latest and greatest about Xojo, cross-platform development, and technology.

Thursday, June 6, 2013

Save the Date for XDC 2014!

Save the date for the 2014 Xojo Developer's Conference, to be held March 26-28 at the Monte Carlo Resort and Casino in Las Vegas!  More information coming soon.

Real Studio is now Xojo!

We have some big announcements! 2013 Release 1 is now available for download and is definitely our biggest release ever! Our IDE has had a major makeover, giving it a very sleek and modern look and making it faster and much more intuitive than ever before! Also, Cocoa is now officially shipping, we have a new forum, and our new pricing is now available!

To compliment all of these new and exciting changes, Real Studio is now Xojo!

The New IDE.  

Besides the all-new look and feel, the new IDE launches up to 33% faster!

Features of the new IDE include:
  • All-new Window Editor
  • All-new Navigator for quick project access
  • All-new Inspector for updating properties and settings
  • All-new Library for easy access to Controls and Objects
  • All-new Project Filter
  • All-new Search
  • All-new Message Pane for viewing run-time log messages
  • All-new Build Settings
  • Improved Web Page Editor
  • Improved Code Editor
  • Improved Database Editor
  • Improved Debugger Layout
  • Improved Tab Usage
  • Improved Event Handler Editing with inline event descriptions
  • Improved Profiler
  • Improved Build Script Editor
Our beta testers have reported the new IDE to be faster, more intuitive, and easier to use.

Last, but certainly not least, Cocoa is now the default OS X build setting for Xojo. In fact, Xojo itself is built with 2013 Release 1!

The IDE is free.

Xojo comes with all new pricing! To start with, the IDE is free to use for developing, testing and debugging on any platform - so tell your friends it's time to learn to code! When you need to create stand-alone builds of your apps, you buy a license. 

You can add on a new target platform at any time. When you are up for renewal, only renew the platforms you want to continue using! It's that simple.

While you can always use previous versions of Xojo, to deploy with the current version, your license must also be current. If you have questions about the new pricing or your specific license, please contact Xojo Customer Service.

Xojo Pro.Xojo Pro is now available! Xojo Pro provides everything serious developers need in a single package:
  • Single license for Desktop, Web, Database and Console
  • Priority Support
  • Guaranteed access to future betas
  • Access to a special Xojo Pro-only forum
  • 3x Feedback multiplier when ranking cases
  • License will work on 3 machines, instead of 2
Real Studio Enterprise Edition users are now Xojo Pro users, and you can upgrade at any time to get the great benefits included with Xojo Pro!


Along with Xojo 2013 Release 1 we will be including a free upgrade guide to help you learn the differences between Real Studio and Xojo. And, we are now introducing an all new user guide with 4 books -- available in PDF and iBooks formats. Each book focuses on a different element of Xojo to provide you with the most information possible to help you be a success. The 4 books are: Fundamentals, User Interface, Framework, and Development.

We have also put together an all-new Quick Start Guide for Desktop and Web applications and all-new tutorials for Desktop and Web applications, along with improved example projects. Get the new documentation!

At our new website,, you can login using the same username and password you previously used at Your account and all the information about your license keys, past orders, etc., is all still available there.

A few important links: Xojo DownloadsXojo Documentation, and Xojo FAQ.

New Support Forum!

We have an all-new support forum at The new forum has a more modern look and feel, is easier to read and has more advanced searching features. There’s no need to create an account to log in. Instead you just use the same username and password that you use on our website. You will need to enable forum access in your account settings here before you login:


Need to contact us? Any email address has been updated to so update your address book!

Get Connected!

We are so excited about everything we've been working on and we hope you are too! Our new blog will be ready very soon, but in the mean time you can join in on the fun by following us on Twitter or joining our Facebook Group! We want to stay connected with you so we can keep you updated on all of the great stuff we are working on and we want to hear about your projects too!

Download Xojo Now!

Thursday, May 16, 2013

Using Twilio to answer phone calls

In a previous post, I wrote about how to use Twilio to send an SMS message. This time, I'm going to show you how you can use Twilio in conjunction with a web app to answer phone calls made to your Twilio phone number.

First, you will want to have a Twilio developer account. If you did not create one last time, go ahead and create one now.

The Twilio dashboard provides a place for you enter an address to send HTTP POST requests. Using the App.HandleSpecialURL event handler, you can send these requests to a web application running on a publicly available server.

To get started, you need to create a web application. In the App object, go to the HandleSpecialURL event handler. This event handler has one parameter: Request As WebRequest. You can use this parameter to handle the request sent by Twilio and to send information back to Twilio.

Twilio uses something they call TwiML (Twilio Markup Language), which is essentially XML with Twilio-specific commands.

In this case, the special command you want to use is the Say command. This command will speak the provided text to the person that called the number. It is wrapped in a Response, so some simple TwiML looks like this:

  <Say>This call was answered by my web application!"</Say>

Going back to the HandleSpecialURL event handler, you just need to return the TwiML as part of the request. This is done using the Print method:

If Request.Path = "twilio" Then
  // Use TwiML to say something
  Dim now As New Date
  Request.Print("<Response>" + EndOfLine)
  Request.Print("<Say>This call was answered by my web application!</Say>" + EndOfLine)
  Request.Print("<Say>The time is " + Now.LongTime + "</Say>" + EndOfLine)
  Return True
End If

Notice that I have not created a web page. That's because this web app won't use one as its only purpose is to handle direct requests using HandleSpecial URL.

Give this app a name (TwilioCall), built it as a standalone app (or CGI if you prefer) for your deployment platform. 

Now you need to configure Twilio to use this web app.  Go back to your Twilio Dashboard and navigate to Dev Tools and select TWIML apps. Click "Create TWiML App" to create a new app.

This opens a screen to specify information about your web app:

In the "Friendly Name" field just give your app a name such as TwilioCall. In the Voice section, you specify the URL for your uploaded web app in the "Request URL" field. The URL of your app will be something like this:

With all this in place, you can now call your Twilio phone number. Twilio will then send a request to your web app which will respond by sending back a request to speak some text and the current time.

You can find more information about TwiML here:

An example project demonstrating this will be included with Xojo and is also available here.

Wednesday, May 15, 2013

Calling a SOAP web service

SOAP web services, although not as common as they once were, are still readily available on the web. And they can be incredibly easy to use with your apps.

Here is a quick example of how you would use a SOAP web service to get the conversion rate between currencies using the SOAP web service described here:

The above page describes the method call that is available to you and also provides information about the various currencies available for conversion.

Click the "ConversionRate" method to get more information on how you would call this. This opens a new page (scroll down) with a way to test the web service and a list of the various ways that it can be called.

In the SOAP 1.1 section, you can see that the function is called "ConversionRate" and that it takes two parameters: FromCurrency and ToCurrency, both of which are simply a string containing the currency code.

The last thing to determine is the actual URL to use. Often, web services use the "WSDL" query string to fetch the Web Service Description Language for the service. In the case of this web service, you will use this URL:

With this information, you can use the SOAPMethod class to call the method.

To get started, create a new project and add to the default Window these controls:

  •  two TextFields to provide the from and to currency codes (FromCurrencyField and ToCurrencyField)
  • a PushButton to do the conversion (ConvertButton)
  • a TextField to display the results (ConversionRateField)

Now you can put this code in the Action event handler of the PushButton:

  Dim sm As New SOAPMethod("")
  Dim conversionRate As String
  conversionRate = sm.ConversionRate(FromCurrencyField.Text, ToCurrencyField.Text)
  ConversionRateField.Text = conversionRate

Run the app an enter two currency codes (USD and EUR) and then press the button to get the conversion rate (0.7761 as of today).
There are many public web services that are available for you to use with your apps. Here are two sources of many web services:

Keep in mind that like anything on the web, web services can go offline from time to time so be sure to check for an error condition or invalid result from any web service call.

You can download the sample project (which will be included with Xojo) here.

Tuesday, May 14, 2013

Connecting to Oracle and Microsoft SQL Server

Some of the most common questions I get from new users relate to using databases with Real Studio. We've got lots of tips and tricks on how to connect in our Documentation and videos too.  In addition to having it's own RealSQLDatabase for single user applications, Real Studio supports database server connectivity for Oracle, ODBC, Postgre, MySQL, Microsoft SQL (Windows only).

One thing to watch our for when connecting to Oracle or Microsoft SQL Server is to make sure that you are using 32 Bit versions of Oracle Instant Client or Native Client Installer for MSSQL instead of the 64 Bit versions. Real Studio currently build 32 Bit applications and cannot use the 64 Bit libraries.

Once Real Studio builds 64 Bit apps you will be able to use the 64 Bit libraries. You can read more about the schedule for 64 Bit in this post.

Friday, May 10, 2013

Using Twilio to send an SMS message

I've been asked from time to time if it is possible to send an SMS message from your application. SMS stands for Short Message Service and is also commonly referred to as a Text Message or just a Text. SMS messages can contain up to 160 characters. To send someone an SMS, you just need their mobile phone number.

So is it possible to send an SMS message from your apps? As is the case with most things, the answer is "Yes, if you know how". And often many of these things can be accomplished using a web service of some kind.

One of the easiest ways to interface with telephones, including SMS, is using a web service called Twilio.

With Twilio, you can do all kinds of things related to telephones, including making and receiving phone calls and text messages. Twilio is not a free service, but you can get a free developer account with a credit to test it out.

To start, create a free developer account at I'll wait for you to come back...

Twilio has a lot of documentation on how to use their various services. To send an SMS message, you want to take a look at their SMS REST API which is here:

On this page you will see buttons with examples for a variety of languages. You can just click XML to see how to do this using XML and curl, which you can easily incorporate into your app.

When Xojo is released, it will include a sample project that demonstrates how to do this using just a few lines of a code and a handful of controls.

Sample Application

When you run the app, you enter your Twilio Account SID and AuthCode, your Twilio phone number, the phone number you want to send the SMS to and your message. You can get the Account SID and AuthCode on the main Dashboard page:

Twilio Dashboard Page

The app uses curl (from a Shell) to send the SMS so it will only work on OS X and Linux. The code is entirely contained (all 6 lines of it) in the Action event handler of SendButton.

This code takes what was entered in the window and creates the curl command (as described on the Twilio page) and then runs the command using a Shell. The XML results are displayed after the message is sent.

This is the message as it appears on my iPhone:
SMS Message appearing on iPhone

You can also download the sample project from here.

Tuesday, April 30, 2013

Coming Soon - New Pricing (Recap)

As we approach the June 4th Xojo ship date, we are receiving an increasing amount of questions about the new pricing.  It has been a while since we posted the information so here's a recap:

Starting with 2013 Release 1, the IDE itself will be free to use for developing, testing and debugging on any platform. When you need to create stand-alone builds of your apps, you buy a license. These are the available licenses and prices:

New Xojo Pricing
LicenseNew PurchaseRenewal
Desktop Deployment$300$150
Web Deployment$400$200
Console Deployment$100$50
DB Servers$300$150

Note: You can build for OS X, Windows and Linux for any license type. SQLite usage (RealSQLDatabase) does not require a DB Server license.

A new purchase or renewal gives you access to all updates for the next 12 months. As usual, you can continue to use versions that were released during your license period even after your license has expired.

Speaking of licenses, anyone who has or had a modern Real Studio license (2005 - present) will have their license automatically converted as follows:

Personal => Desktop
Professional => Desktop + Console + DB
Web => Web + DB
Enterprise => Desktop + Web + Console + DB (Xojo Pro)

If your license is current when 2013 R1 ships, you will be able to deploy with it immediately. If your license is expired, you can use the IDE for free, however you will not be able to deploy with it until you renew. Of course, you can continue to use any prior version of Real Studio as you always have. And as a prior license holder, you can choose to renew any of the converted licenses at the new renewal pricing.

After the license conversion, Personal users will be able to use ContainerControlsclass encryptionServerSocketSSLSocket (and its subclasses), Remote DebuggingAuto DiscoveryProfilingIDE Scripting and Build Automation. In addition, your new Desktop license will also allow you to deploy for Mac OS X, Windows and Linux. Professional users will be able to use Profiling, IDE Scripting and Build Automation.

New licenses can be used on up to two computers at one time, except with Xojo Pro (you can use three). 

You may renew at the current price before Xojo ships for up to two years.  Once Xojo ships the new pricing will go into effect.  If you have any specific questions about your license, please contact

EDIT: For clarity's sake, like your Real Studio Enterprise license key, your Xojo Pro is a single license.

Why native controls are important

9to5Mac is reporting that iOS 7 will sport a new user interface. It's said to be flatter and simpler. If this is true, it almost certainly means that controls will have a new look as well. This reminds me of when Apple shipped Mac OS X with its new Aqua interface. Every version of Windows has redefined the look and feel of most of the user interface. Ubuntu continues to improve the user interface of the popular Linux distro as well.

For some software developers, a change in the OS user interface is a problem. They are using a development tool that draws controls itself rather than going the extra mile required to use native controls. Native controls are drawn by the OS, not the application. When the app is moved from one OS to another (for example between iOS 6 and iOS 7 or between Windows XP and Windows 7), it takes on the native user interface because it's using native controls. Apps made with development tools that draw their own controls suddenly look out of place and strange.

This is why Real Studio has always used native controls ever since it was introduced in 1998. We want our user's applications to have a user interface that matches the OS. Most iOS development tools don't make the effort to use native controls. We do. We previewed our iOS development efforts at our annual user conference last week. We use all native controls for iOS because that's the level of effort our users have come to expect from us.

Monday, April 29, 2013

Best computer for cross-platform development

Today The Telegraph has a post about a study showing the MacBook Pro is the best computer for running Windows. I've heard this before and don't doubt it for a moment. Apple makes the best computers in terms of quality. They are certainly not the cheapest, but they are the best.

They are also the best for cross-platform development with Real Studio. Because you can run OS X, Windows and Linux all on one computer, what more could you ask for when it comes to convenience? At Real Software, most of us used to have at least two computers: one running OS X and the other running Windows and Linux. When Apple made the jump from PowerPC to x86, we got rid of half of our computers!

If you're developing a cross-platform solution with Real Studio that is going to include an OS X version, you'll need a Mac anyway, so why not just make it your primary computer even if your primary OS is Windows or Linux?

Here are two options for running Windows and Linux (and OS X) from a Mac:

1) Apple's Bootcamp: It's free and you can boot into Windows so you're getting the full power of the Mac running Windows, rather than sharing the processor with OS X. The downside is that you can't run both at the same time and setting it up to run Linux could prove challenging.

2) VM Ware/Parallels: Both of these software applications will allow you to run multiple OSs while running OS X. I use VM Ware and have Windows XP, Windows 7 and Ubuntu Linux available to me in addition to OS X. The downside is that when you are running one of these, you are also running OS X, so Windows or Linux can't use the full power of the computer. However, I have found that not to be much of an issue with newer Macs, as they have plenty of power. Just make sure your Mac has lots of RAM, as that's often the difference between the performance being great versus not so good.

Update: Microsoft provides most versions of Windows for testing for free download. They available in Parallels, VMWare, and VirtualBox formats.

Macs are more expensive than the average Windows PC. There's no doubt about that. But if you need a Mac, it might cost less to buy a nice one and use it as your only computer with the convenience of running OS X, Windows and Linux all from one machine.

Friday, April 26, 2013

New IDE Preview

Many have been requesting a sneak peek of the new IDE.  We have been working on this new IDE for many months and are happy to finally be putting it in your hands in just a few weeks.  So, without further ado, here is Xojo...




Our servers are down for a security update

If you regularly read our forum and/or the NUG email list, you know that our web server was attacked the day before yesterday. This attack coincided with the start of our annual user conference. However, we believe that is coincidental. Fortunately, Brent Huston, CEO of Microsolved, a company that specializes in Internet security, was speaking at our conference so we were able to consult with him to determine the type of attack and how the hacker was able to get in to our server. The attack appears to have been an automated one that took advantage of a vulnerability in the version of PostgreSQL we were using.

We take security very seriously. For example, we don’t store your credit card number. When you place an order, no information about your credit card is ever even written to a file on disk, even temporarily.  It’s in memory for less than half a second while we process your order. Your password is never stored by us. We don’t know your password. We store a hashed version of it which cannot be decrypted. When you log-in to your account on our web site, we hash what you enter as your password and compare that to the hashed version we store in our database. If they match, you entered it correctly but we can’t determine what your actual password is. Forum accounts, however, are less secure and we notified forum users that while we don’t believe the hacker was actually targeting us, it would be best if they changed their password.

When a server is hacked, it can be difficult-to-impossible to determine whether or not the hacker has installed compromised versions of the server software in use. We have to assume that the server is compromised. Based on our assessments, we decided that the best course of action was to take our servers off-line then rebuild them from scratch so we could be certain no compromised server software could remain and the integrity and security of our servers could be assured.

As you know, we have developed industrial-strength security for the Xojo Cloud web application hosting service that we will be launching in June. Because of this, we had planned on migrating our web servers to the Xojo Cloud. This attack has simply accelerated those plans.

No company likes having its public-facing servers off line. In addition to the web site, our servers host our forums, mailing lists, wiki, and customer database. However, we did not want to take any chances that we could be potentially allowing a hacker access to your information so we have taken down the servers while we migrate them to the Xojo Cloud. We are taking this opportunity to do some planned updating of our server software as well.

At Real Software, we eat our own dog food. Our IDE is written in Real Studio. We create most of our internal tools that run our business using Real Studio as well. Moving our servers to the Xojo Cloud is another way for us to eat our own dog food. We believe the Xojo Cloud provides best-of-class, industrial-strength server security and we would not expect you to use it unless we used it as well.

There is a saying that “What doesn’t kill you, makes you stronger,” and that’s certainly the case here. This attack didn’t kill us (far from it) but it is making us stronger. We will be far better off once the migration is completed. As CEO, I apologize for any inconvenience this has caused you and appreciate your patience and understanding during this unexpected, but necessary, server migration. There is nothing we care about more than your confidence and trust in us. Having our servers off-line for a day or two, even though that means that our revenue comes to a full-stop for a few days, is a small price for us to pay for your continued confidence and trust.

Geoff Perlman
Founder and CEO
Real Software, Inc.



Nuestros servidores están caídos por una actualización de seguridad

Si lees con frecuencia nuestro foro y/o la lista de correo electrónico NUG, entonces sabrás que nuestro servidor web ha sido atacado hace tres días. Este ataque ha coincidido con el inicio de nuestra conferencia anual de usuarios. Sin embargo, creemos que se trata de una coincidencia. Afortunadamente, Brent Huston, CEO de Microsolved (, una compañía especializada en segudidad Internet, ha sido uno de los ponentes en nuestra conferencia de modo que hemos tenido la ocasión de consutar con él para determinar el tipo de ataque y cómo ha podido acceder el atacante a nuestro servidor. Parece que el ataque ha sido uno de tipo automatizado y que se centraba en una vulnerabilidad de la versión de PostgreSQL que estábamos usando.

Nos tomamos la seguridad muy en serio. Por ejemplo, nunca almacenamos el número de tu tarjeta de crédito. Cuando realizas un pedido nunca se llega a escribir la información de la tarjeta de crédito a disco, incluso aunque sea de forma temporal. Está en memoria durante el medio segundo que tarda el proceso del pedido. Tu contraseña nunca está almacenada por nosotros. No sabemos cuál es tu contraseña. Almacenamos una versión hash de ella y que no puede ser descifrada. Cuando te conectas en tu cuenta de nuestro sitio web, creamos el hash de lo que introduces como contraseña y lo comparamos con la versión hash que almacenamos en nuestra base de datos. Si se corresponden, la has introducido correctamente pero no podemos determinar cuál es tu contraseña. Las contraseñas del foro, sin embargo, son menos seguras y hemos notificado a los usuarios del foro que si bien no creemos que el hacker se haya centrado en nosotros, sería una buena medida cambiar la contraseña de

Cuando se hackea un servidor, resulta difícil por no decir imposible determinar si el hacker ha instalado versiones comprometidas del software servidor utilizado. Tenemos que asumir que el servidor se ha visto comprometido. Basándonos en nuestras suposiciones, hemos decidido que la mejor acción posible es la de desconectar nuestros servidores y volver a crearlos desde cero, de modo que podamos tener la certeza de que no se esté ejecutando ningún software que se haya visto comprometido, y que se restablezca por tanto la integridad y seguridad de nuestros servidores.

Como sabes, hemos desarrollado seguridad de nivel industrial para nuestro servicio de hospedaje web de aplicaciones Xojo Cloud, y que estará disponible en junio. Teniendo esto en cuenta, teníamos previsto migrar nuestros servidores a Xojo Cloud. Este ataque simplemente ha acelerado dichos planes.

Ninguna empresa quiere tener sus servidores de acceso público fuera de servicio. Además del sitio web, nuestros servidores también alojan nuestros foros, listas de correo, wiki y bases de datos de usuarios. Sin embargo, no queremos pasar por alto ninguna posibilidad que pueda permitir el acceso potencial de un hacker a tu información; de modo que hemos desconectado todos los servidores mientras que los migramos a Xojo Cloud. También estamos aprovechando esta oportunidad para llevar a cabo algunas actualizaciones planificadas de nuestro software servidor.

En Real Software comemos nuestra propia comida. Nuestro IDE está escrito con Real Studio. Creamos la mayoría de nuestras herramientas internas, utilizadas en nuestro negocio, utilizando Real Studio. El cambio de nuestros servidores a Xojo Cloud es otro modo de comer nuestra propia comida. Creemos que Xojo Cloud proporciona la mejor seguridad servidor de nivel industrial, excepcional en su categoría, y no esperamos que tu lo uses si nosotros no lo usamos también.

Existe un refrán que dice "Lo que no te mata, te hará más fuerte", y esto es ciertamente el caso que nos ocupa. Este ataque no nos ha matado (de hecho está muy lejos de que eso sea así), sino que nos hace más fuertes. Estaremos mucho mejor cuando se haya completado la migración. Como CEO, me disculpo por cualquier inconveniente que esto haya podido causar y valoramos tu paciencia y comprensión durante esta inesperada, pero necesaria, migración del servidor. No hay nada que nos importe más que tu confianza en nosotros. El hecho de que nuestros servidores estén fuera de línea durante un día o dos, incluso teniendo en cuenta que eso significa que nuestros ingresos quedan detenidos durante algunos días, es un precio muy pequeño para nosotros por tu continuada fidelidad y confianza.

Geoff Perlman
Fundador y CEO
Real Software, Inc.

Thursday, April 25, 2013

Highlights from the Keynote

Greetings from the Real Studio Developer Conference!  As you have probably heard by now, during the keynote Geoff announced that with 2013r1 Real Studio will be called Xojo and Real Software will be called Xojo, Inc.

Everyone here at the conference is really excited about this change, as are we!  Besides the name change, we made some other announcements and updates at the keynote.  Here are the highlights!

2013r1 will be in your hands on June 4th!  First, Cocoa will no longer be beta (woo hoo)! This is a big release for us.  It includes a dramatic new UI for the IDE, new licensing model, new pricing, and our new cloud-based app hosting service.

New License Model
The Xojo IDE is free!  You can create, develop and debug your projects in the new IDE at absolutely no cost.  Plus, all of the features are included in the free IDE, so if you have a Personal or Professional Real Studio license, you will be able to access more features than ever before!  Every Xojo IDE user will be able to take advantage of the following IDE features: encrypting project items, server sockets, SSL support, database encryption, remote debugging, container controls, auto discovery, code profiling, IDE scripting, build automation.  And, you can use the IDE to develop on all platforms!

Announcing Xojo Pro
  • Desktop, Web, Console and Database Server Licenses  (Save $100)
  • Priority Support
  • Access to Betas
  •  “Xojo Pro Only” Forum
  • 3x Feedback Multiplier
  • License key works on 3 computers
Installing Xojo licenses couldn't be easier. After purchasing your licenses, just launch the IDE and sign in.  Any license keys that are not installed will automatically be downloaded and installed.

You can see which of your keys are installed by opening the About Xojo box and clicking on Licenses no more long, cryptic keys or license key emails getting caught in SPAM filters.  And if your computer isn't connected to the Internet, you can download your keys from, move them to your computer via a flash drive, and install them by just dragging them into this window.

The new system also allows you to distribute license keys to your team members and revoke those license keys as well.

We've created an Upgrade Guide which will tell you everything you need to know about the new IDE.  Also, we have made a dramatically updated User's Guide and split it into 4 separate books.  The Fundamentals book starts with the Xojo IDE and then moves onto the Xojo Programming Language, Modules and Classes.  It closes with the chapter on Application Structure.

The User Interface book covers the Controls and Classes used to create Desktop and Web apps.

The Framework book builds on what you learned in the User Interface and Fundamentals books, covering the major framework areas in Xojo, including Files, Text, Graphics and Multimedia, Databases, Printing and Reports, Communication and Networking, Concurrency and Debugging.

We’ve had a lot of requests for documentation in PDF format. All of the documentation except the Language Reference, will be available in PDF format. And it’s formatted for tablets so if you have one, it will be a great experience on that.  we are providing an iBooks-native version for iPad as well. Using the new documentation on the iPad is a really great experience!

We also have a new book, Introduction to Programming with Xojo, which will be available when Xojo ships. The primary purpose of this book is to introduce people to programming.  This book was written to teach programming. Students will learn about variables, loops, arrays, object-oriented programming and more. The goal of the book is to teach programming, not Xojo. In fact, throughout the book it points out programming concepts that are common to many programming languages. It will be great for anyone who wants to learn programming or teach programming. And best of all, the book is free and will be provided in PDF and iBooks formats.

Hosting can be a very painful process but we have eliminated this stress with a simple, yet powerful solution Xojo Cloud.

Xojo Cloud requires ZERO configuration, one click app installation, industrial strength security, and includes automatic backups and predictable pricing.  UPDATE: This will be available late 2013, pricing starts at $49/month.

We plan to be in beta by late summer.  iOS will be shipping in December 2013.

64 Bit
The extra 8 months we needed for Cocoa and supporting iOS has delayed 64 bit.
While we are more than 70% of the way through building the framework for all platforms for 64 bit, we still need to update the compiler itself for 64 bit. That work will start after iOS ships.

Thus 64 bit support is delayed until summer of next year.

Wednesday, April 24, 2013

Get it all with Xojo Pro

The new pricing will officially launch when Xojo ships on June 4th. Additionally, today at the conference we announced Xojo Pro, which will be available on June 4th. With Xojo Pro, you will enjoy the following great features:
  • Single license for Desktop, Web, Database and Console 
  • Priority Support 
  • Guaranteed access to future betas 
  • Access to a special Xojo Pro-only forum 
  • 3x Feedback multiplier when ranking cases 
  • License will work on 3 machines, instead of 2 
This is a must for the professional Xojo developer! For new licenses the cost is $995. All current Enterprise licenses will automatically receive Xojo Pro on June 4th.

A New Beginning with Xojo

Starting with the 2013 R1 release, Real Studio will become Xojo and Real Software, Inc. will become Xojo, Inc. We are still the same company and Xojo (2013r1) is the same great IDE you have come to know and love, with a brand new interface and some great new features. For more information about this upcoming change, announced today at the Real Studio Developer Conference, please visit the FAQ. We are all very excited about this change and growing the Xojo community! Xojo will be shipping on Tuesday, June 4th.

Live from the Real Studio Developer Conference

In just a couple of hours the Real Studio Developer Conference will begin. We have a great crowd this year and an amazing session lineup! If you want to stay connected and get the latest announcements from the conference, join our discussion on Twitter (@realsoftware) or Facebook. The keynote starts at 9am ET!

Tuesday, April 2, 2013

Inside the Real Studio Developer Conference

If you've been paying attention, you know that the Real Studio Developer Conference starts three weeks from today.  In three weeks we will arrive at the Holiday Inn at Downtown Disney, pass familiar faces in the lobby, exchange greetings with users we only knew about from their forum handle, maybe buy a beer for that developer who has helped you so much throughout the years.  Yes, the Real Studio Developer Conference is a conference, full of great educational content, networking opportunities  and more, but it's also a great place to meet other like-minded individuals and I know many people leave here feeling like they've grown their programming family.  

This conference takes months and months of planning.  I think we started last June, just as the dust was settling from the 2012 conference.  Every detail of the conference takes time and consideration so we can put on a great event for you.  The speakers were selected in the Fall and have been working extremely hard to deliver rich and exciting content to you.  (They actually turned in their presentations last week and I have to say, I am impressed!)

The menus have been selected (Lots of bacon, per the attendees who specifically requested it in their registration forms -- I do read those!), name badges and conference brochure are printed and we are ready to go!  (I just have to keep my 3 year old and her crayons and glitter away from everything!)  

I can already tell we have a great group of developers coming to the conference. At the end of every conference we have what is the most valuable session for me from a planning standpoint, the Feedback Session.  All of the attendees just throw out suggestions or feedback for the next conference.  A suggestion from last year was to email out the attendee list prior to the conference.  We did one better!  This year we have a private mailing list set up for attendees to plan before the conference, talk during and share contact information after!  They have already started planning to share taxis and cars from the airport and have a dinner set up for the night before everything starts so no one has to eat alone!

The conference itself won't be all work with no play!  During the evenings we have some great events planned for everyone to unwind, talk about their day and the sessions they attended (and the BIG announcements from the keynote), and make connections.  The first night will be at Fulton's Crab House.  I LOVE this place.  It's set on an old Disney Cruise ship replica and we have rented the third floor deck.  This place is perfect to get to know one another a little better while enjoying the water and lights from Downtown Disney.  The food is exquisite and no, it's not all crab (attendees can pick one of three options)!  But this year we will have a crab option - it IS a crab house, after all!  

The second night will include dinner and a little friendly competition... of bowling!  Watch out everyone, Norman is bringing his own shoes!  (Attendees, I will remind you again but don't leave your house without packing socks!) I bowl about once every 5 years, so I'll probably need bumpers to get the ball down the lane.  For the non-bowlers we will have a couple of billiards tables as well.  

Friday night after the conference ends, ELO is playing at Epcot Center and I know a small group is already talking about attending.  

This will be a great event to get to know each other, learn a lot and ultimately become a better programmer.  The entire Real team will be in attendance and you can talk to us all about our areas of expertise and pick our brains.  We are here to help you - after all, you are why we do what we do.  

We already have developers from all over the world, 13 countries to be exact (Current list is 42% international), the farthest coming from Australia!  There is still time to register.  And I am still seeing great last minute deals on flights to Orlando.  We will take registrations up until Tuesday (April 23), even onsite!  See you in Orlando!

Monday, March 25, 2013

Observer Pattern

Did you know Real Studio includes several "design pattern" example projects, including: Decorator, Factory, Interpreter, LazyInitialization and Singleton?

Recently, someone on the mailing list asked how to do the Observer pattern using Real Studio. Here is a quick example to demonstrate it.

What is the Observer pattern?

You use the observer pattern when you have an object that needs to notify one or more other objects of specific changes. This is the definition from wikipedia:

"The observer pattern is a software design pattern in which an object, called the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes, usually by calling one of their methods."

For this example, I have a window with three radio buttons to set a color (Red, Green, Blue). When a radio button is clicked, the "observer" windows are notified of the change and change their background color to match what was clicked.

You can download the project from here:

Implementation Details
This design pattern is implemented using two interfaces: SubjectInterface and ObserverInterface.

The MainWindow implements SubjectInterface. It is responsible for tracking all the objects that want to observer (get notified of ) the change in color. This is done using an array of ObserverInterface objects.

The ObserverWindow implements ObserverInterface. This has one method (Notify) to implement which changes the background color of the window to the selected color.

When you click the "Add Observer" button, a new ObserverWindow is created and added to the array of observer objects.

When the color is changed by clicking a RadioButton, the code loops through all the observer objects in the array and call their Notify method.

The Remove All Observers button removes the open windows from the observer objects array. They will no longer get notified when the color changes.

This example project will also be included with Real Studio starting with 2013r1.

Monday, March 18, 2013

Firefox 19 & Real Studio Web Applications

A bug report was filed with us recently that troubled me a bit, regarding WebPopupMenus not working in the recently released Firefox 19. The bug is that when the user clicks on a WebPopupMenu, they are not able to select anything using the mouse.

I've done some research into this and it appears to be a bug in Firefox 19. Here's what we know:
  • It only manifests in Firefox 19 on OS X
  • It is related to the use of the CSS3 transform-3d property (which we use for other things)
Unfortunately, this is a particularly nasty bug because users have no way to knowing it's coming and when most other sites work perfectly fine, they usually assume that the bug is with your app.

It's worth pointing out that:
  • Firefox 18 does not exhibit this behavior
  • Firefox 20 (now in beta) does not exhibit this behavior (Due April 1, 2013)
The pain regarding this bug should only last a couple more weeks as Firefox 20 should run perfectly fine on any system that supports Firefox 19. 

For those of you that want to be able to detect Firefox 19 in your apps (in case you want to warn your users), you can put this code in the Session.Open event handler:

If Session.Platform = WebSession.PlatformType.Macintosh and _
    Session.Browser = WebSession.BrowserType.Firefox and _
    CDbl(NthField(Session.BrowserVersion,".",1)) = 19 then

  MsgBox("Please upgrade your browser to Firefox 20")
End If


I rather admire bridges - both the real ones that cross chasms, channels & all other manner of things, but also those in programming.


They both make it possible to solve difficult problems with very elegant solutions, but both can take some time to construct.  And, both are extremely useful.  For instance, in the IDE we use a bridge pattern to deal with Preferences on a platform specific basis - except for the small chunk of code that is the Preferences public API - nothing else in the IDE is even aware that there are underlying differences in how they are handled.  And therein lies the beauty of the bridge pattern.

So, how do you construct such a thing?

For something like Preferences it is reasonably straight forward. I know people would love to peek at the IDE code.  I'm not going to publish that, but I will give you a sample that is similar.

I've used a Module as a namespace to contain everything AND so I can actually have private classes that can be hidden away - they can be opened & reviewed, but they have no public API so the rest of your code can only use the one public class.

First things first - the public API - this is the module itself. (I'm going to trim some bits out to keep things short but you'll get the idea)

Module CrossPlatformPrefs

  Private Sub InitMPrefs()

    #if TargetWin32
      mPrefsImpl = new WindowsPrefs
    #elseIf TargetMacOS
      mPrefsImpl = new OSXPrefs
    #elseif TargetLinux
      mPrefsImpl = new LinuxPrefs
  End Sub

  Function ReadPreferenceString(name as String) As String

    // may raise a "Preference not found exception"
    if mPrefsImpl is nil then
    end if
    if mPrefsImpl is nil then
      raise new PrefsNotUsableException
    end if
    return mPrefsImpl.ReadPreferenceString( name )
  End Function

  Function ReadPreferenceStringArray(name as String) As String()

    // may raise a "Preference not found exception"
    if mPrefsImpl is nil then
    end if
    if mPrefsImpl is nil then
      raise new PrefsNotUsableException
    end if
    return mPrefsImpl.ReadPreferenceStringArray( name )
  End Function

  Sub WritePreferenceString(name as string, value as String)  

    // may raise a "Preference not usable exception" - can't initialize
    // may raise a "Preference not found exception" - no such preference
    if mPrefsImpl is nil then
    end if
    if mPrefsImpl is nil then
      raise new PrefsNotUsableException
    end if
    mPrefsImpl.WritePreferenceString( name, value )
  End Sub

  Sub WritePreferenceStringArray(name as string, value() as String)

    // may raise a "Preference not usable exception" - can't initialize
    // may raise a "Preference not found exception" - no such preference
    if mPrefsImpl is nil then
    end if
    if mPrefsImpl is nil then
      raise new PrefsNotUsableException
    end if
    mPrefsImpl.WritePreferenceStringArray( name, value )
  End Sub

  Private mPrefsImpl As PrefsReaderWriter

End Module

You'll notice that the Module itself mostly just instantiates the right preferences implementation then passes any other method calls along to that implementor. And thats the beauty of the bridge pattern.

You can have many different implementations with one public API.

Each of the implementors implements a common interface - PrefsReaderWriter.

Protected Interface PrefsReaderWriter
  Function ReadPreferenceString(name as String) As String

  Function ReadPreferenceStringArray(name as String) As String()

  Sub WritePreferenceString(name as string, value as string)

  Sub WritePreferenceStringArray(name as string, value() as string)  

End Interface

(again for brevity I've not listed EVERY method just a handful for illustrative purposes)

This interface is IN the module and Private so only classes in the module can use it and nothing outside the module can use it. We want ALL access to Prefs to go through the methods in the module.

One implementor for OS X might look like (with the guts removed again to keep this article short)

Private Class OSXPrefs
Implements PrefsReaderWriter
  Function ReadPreferenceString(name as String) As String
  End Function

  Function ReadPreferenceStringArray(name as String) As string()       
  End Function

  Sub WritePreferenceString(name as string, value as String)
  End Sub

  Sub WritePreferenceStringArray(name as string, value() as String)   
  End Sub

End Class

Windows & Linux implementations would be similar but their internals would vary from the OS X one.  On Windows you'd read & write to the Registry. On Linux perhaps a configuration xml list or key value pair in a file that is prepended with a period so its hidden in most UI's and directory listings (this is very common). And, on OS X you'd used code to write to the property list - perhaps code from MacOSLib to read and write CFPreferences as Apple suggests.

Oh, and yes, I even included a couple of exceptions so you can tell what happened 

Private Class PrefsNotUsableException
Inherits RuntimeException

Private Class PrefsNotFoundException
Inherits RuntimeException

And all of this is private inside the module so the ONLY public API to the Preferences is through the API the module provides.

The bridge is a very handy pattern and really useful especially when you need to have a common API cross platform but need different implementations.