XDC 2019 – API 2.0

At XDC 2019 Paul Lefebvre and Travis Hill did a session on API 2.0.  For those not familiar with API 2.0 it’s the result of the best parts of the Xojo Framework getting merged back into the global framework without the heavy use of the Text and Auto datatypes.

The first version of Xojo (AKA REALbasic) was in 1998.  Supported Mac 8.  Now in 2019 MacOS, Linux, Windows, iOS, Web, Raspberry Pi and soon to be Android.

The goals of API 2.0:

Utilities language improvements.  In 1998 no shared methods and other features available now.

Improve Consistency.  Naming was often based on specific OS things that don’t exist before.  

Better Naming.  

Exceptions, not Error Codes.  Error codes get ignored – Exceptions are now.

Fewer Globals.

More Enumerations.  Constants lead to enforcement issues.

Similar API for Controls

But overall, don’t want to change what works.  The global framework has worked great for many years.

Progress Update:

Large portion of API 2.0 will be rolled out soon.  “All” from Geoff’s keynote may not be accurate

When it happens they’ll be deprecated – NOT removed.  It’ll be there for many many years.

Stop using in documentation and code examples.

API 2.0 Benefits

Code is more readable.

Easier for new users to learn.  Most consistent for existing users.

Easier for all when working across project types.

Notable New Features

URLConnection.  New in 2018 R4.  Added Synchronous to the Asynchronous option.  Uses OS API’s.

Var and ResizeTo.  Synonyms for Dim and Redim.  Var is better term and used in other languages.  

Notable Changes

Databases

Exception Handling.  No longer uses error checking.  Works on Connect, ExcecuteSQL, SelectSQL.  

DatabaseField -> DatabaseColumn

DatabaseRecord ->DatabaseRow

Recordset -> RowSet

BeginTransaction

Binding is now embedded in the SelectSQL.  Infers the BindType from the DataType.  

FolderItem

Uses Exceptions

Open methods moved to more appropriate classes (OpenAsMovie, OpenAsSound, OpenAsVector)

Item -> Child

Listbox

ListCount -> RowCount

ListINdex -> SelectedIndex

Cell -> CellValueAt

DeleteAllRows -> RemoveAllRows

RemoveRow -> RemoveRowAt

ColumnFromXY -> ColumnAtPoint

Header -> HeaderAt

Other

ToString/FromString on Date and numeric types

String.BeginsWith, EndWith, IndexOf.  All methods will be zero based.

Timer.CallLater, Tolerance

Date intervals and time zones

Random is now a singleton class.

Point, Size, Rect no longer need the “Realbasic” prefix.

Desktop is first.  Then Web 2.0 and then mobile (first with Android then iOS).

You’ll be able to change code at your own pace.  None of the existing methods are going away.

This is a one way move.  The goal is to let older versions of the IDE still *open* API 2.0 projects.  Obviously you’ll get compile errors then.

Will deprecated stuff will not show in AutoComplete.  It’s doubtful if it will improve AutoComplete performance.

XDC 2019: Web Framework 2.0

At XDC 2019 Greg O’Lone of Xojo showed us the current status of Web Framework 2.0.

The design goals for the web framework:

Update the server technologies.

Improve responsiveness

Modernize the framework

New and Updated Controls

Improved Browser Support

HTTP 1.1 compliant server.

Minified frameworks and Client Rendering (more done on the browser now)

jQuery – feature rich JavaScript library

Boostrap and FuelUX controls

Browsers:

Support as many of the current browsers as possible.  Current framework parses headers to determine what to support but most browsers lie.  Going to ask the browser what it supports.  The controls themselves will determine what they can do.  Things like TouchEvents and File API support might change.

Adding Browser History triggers.  Can tell the session that something happened.  For example if user was filling out form partially and hit back button.  When they come back to the site the HashTagChanged event fires can allow you to get that information back

Visual Session Controls.

Server Connection Monitor.  New dialog to show user that it’s having problems communicating.

Layout Modes:  Fixed, put a control on a layout and it just stays there.  Fluid layout lets controls flow around in the container.  Auto(layout) – not in version 1.

Big list of already supported controls.  New ones:  MessageDialog, PagePanel, Breadcrumb, Rich Text Editor.

Big functionality updates:  File Uploader (splitting engine from the interface).  Listbox has pagination, dynamic data sources, sortable columns, built-in filtering, custom column types.  Canvas has layers, events, and Drag and Drop on browser side.  Toolbar is Bootstrap (but will have icons) and it will act more like the desktop toolbar.  TextFields gets browser side text formatting and validation.  MenuItems are theme compliant, disabled items, hierarchical, separators, and headers.

Styles:  Existing editor is painful.  All projects will get the global Bootstrap theme.  Drop-in theme replacement.  Themes can be previewed in the IDE!!!  Selective control-level customization more like what we get on the desktop.  Property-level style access which means will be able to change styles via code!

Project transition is a one way operation.  Using API 2.0 but will still use the deprecated API.  Some things like ListBox.AddRow will automatically converted to new API.  CGI projects are going away and the only option will be standalone.

Xojo Cloud will be using only 64-bit standalone apps.  You’ll get Load balancing and multiple domain names.  Must be using the newer server configurations.

WebSDK 2.0:  jQuery, Bootstrap and FuelUX will be included.  Browser feature detection and we’ll be able to query to see if a browser can do something.  

TypeScript allows us to compile the Javascript that all browsers use.  Get some definition files and other things.

Greg shows us a demo of the Web Framework 2.0:

Shows a WebPage that has working TabPanel.  Layout Editor drag and drop not working quite like it will in release version.  Shows me MessageDialog.  Shows new ChartingControl.

He then shows us changing the theme.  Simple drag and drop of Cyborg theme changed everything in the project.  Very nifty.

Greg shows us pre-Alpha Feedback using Web Framework 2.0.  TextField support password managers now!   Buttons are Escape and Enter sensitive now.  Listbox has custom column types:  Picture column and URL column.  Clicked on a link (Feedback report) and then opened it.  Showed use of the back button that took us to previous action.  Then showed Dynamically Load listbox an dhow it loaded more data as he scrolled to the bottom of the list.

Very functional demo!

Q & A:

Message Dialogs have icons?  Yes, just like current desktop.

The demo showed 3 buttons.  Will it return values?  Yes, just like current desktop.

Will container control will be draggable?  Redesigning drag and drop.  So maybe?  Might not be right away.

Pushing more stuff down to the client will be have access to hardware/devices on client side?  You’d have to use Internet Explorer and the WebSDK to load and ActiveX control.

How easy to support Dark Mode in web apps?  Only supported in Safari.  Answer is maybe and change the stylesheet on the fly.

Recommend load balancer for new web framework?  No.  Used it with several load balancers and they all worked.  Changed how much data is being transferred between client and server.  Transmissions cut down by 60%.

Can users change theme at runtime?  Yes.  Maybe not in version 1.

With Xojo Cloud load balancing is there any scheduling or rules?  Control distribution is up front – no thoughts on scheduling.

With new Canvas control would you be able to create a game with it?  Their intention is to expose the canvas handle to developers.  Some restrictions.

Custom skinning on progress wheels?  Yes.  Current one is SVG and it just rotates it.

How will editing in web listbox work?  Custom column type.  Doesn’t work today but a huge want.

Listbox has a built-in Search Field.  ListBox in general has a number of things built-in.  By Default has pagination and search field.  Will eventually support multiple layout types (list, picture) but not for version 1.

Open events work by the way.

Will tags be available in more places?  We haven’t done that yet.  Unknown if it will get into version 1.

User get click happy is there a way to prevent weird stuff from happening?  Still have the Auto Disable for buttons.  There is some mechanism in place to prevent the exact same event from being sent to server.

Column sorting and pagination?  Adopted desktop behavior for column sorting.  Sorting a column will requery the database.  Always goes back to the data source.

XDC 2019: Android Walkthrough

During the Android Walkthrough session at XDC Travis Hill and Paul Lefebvre showed us the current status of making Android apps via Xojo.  As Geoff said in his keynote there is considerable amount of work left to be done.

Last XDC had some compiled code running in the emulator and one control.  That was it.  

Today they have compiled code running in emulator and devices for both 32-bit and 64-bit.  APK creation.  Emulator installation and execution.  Control positioning and locking.  Now has 25 controls which is a bulk of the controls for version 1.

Buttons:  Regular, Segments, and Toolbar

Pickers:  DateChooser, Slider, Switch

Inputs:  TextField and TextArea

Decorations:  Label, canvas, oval, rectangle, and separator

Organizers:  TabPanel

Indicators:  ProgressBar, ProgressWheel

Viewers:  HTMLViewer, ImageViewer, ScrollableArea, Table, VideoViewer

NonVisual:  ImageChooser, Location, MessageBox, Timer

Tech Details:

Android is unique.  Code that executes via Java Virtual Machine and Native.  They communicate via the Java Native Interface.  The Xojo framework is built with Xojo and Kotlin.  Kotlin is recommend by Google.  But essentially we don’t have to worry about.

Application execution works with both 32-bit and 64-bit.  32-bit OS is still popular on devices.  Support ARM (devices) and x86 (emulator).  Xojo figures it out for you automatically.

Typical data types:  Integer, Double, String, Variants.

Layout editor is what we’re familiar with.  An Android ‘view’ is really just a Window.  

Uses API 2.0.   Which means Standardized naming.  Errors are exceptions.  Zero based offsets.

Requirements:  Mac/Windows 64-bit for the first version.  Linux has some unique issues.  Android Studio required to provide the emulator and debugging tools.  Android 9.0 (Pie) SDK.  Target Android 4.4 and better.  Will run on a vast majority of devices in the world.  SDK version can change.

What’s Left?  Largest piece left is Framework completion.  The other big piece is the Debugger – there are some technical challenges in debugging with the native and JVN code.  

So, no answer to when it will be available.

The Future:  After initial release Auto Layout (used control locking to begin with).  Will eventually support plugins (those built in Xojo) and those can call OS API’s (JVM) and/or include native libraries.  Most of the focus on phones and should work on tablets.

Travis showed us a demo of Android:

Layout Editor looks very much like iOS – except it looks like Android.  Drag and Drop and resizing the Layout Editor looks pretty smooth but nothing that iOS doesn’t already do.

Hitting Run for a simple app didn’t take too long and it opened it in the emulator.

Travis mentioned that even with debugging you have to do Code Signing.

In 2nd example he showed an Android table with some initial values.  Table scrolled properly.    He flipped the phone in the emulator and showed that the control didn’t adjust.  Went back and used the Lock control properties in the inspector and then took it back into emulator to see it in action.

Q & A:  

No container container in list.  Yes, there will be.

Can you write an iOS and Android from same project?  No.  Not today.

Currently it builds 32-bit and 64-bit builds automatically.

Why do plugins need to be in new format?  The plugin format allows you to call the JVM and native libraries.

API 2.0 is changing the offset of strings?  Some confusion on what that will mean.

Using constants in the app, can it be decompiled and be seen?  Important strings should be obfuscated.

XDC 2019 Keynote

The annual Xojo Developer Conference (XDC) kicked off in Miami, Florida.  Geoff Perlman, CEO and founder of Xojo  took to the stage to welcome conference attendees and give us an update on Xojo.

Attendees:  

15% new to the conference.  40% outside of the United States.  11 different country.

Community:

New users up over 200% (this is web site and  account creation).

Special recognition for Hal Gumbert and Tim Dietrich for evangelizing Xojo on Twitter and social media.

Thomas Tempelmann was also recognized for his efforts to get Xojo recognized on Slant

Demographics:

2017:  half of all users under 35.  20% were women

2019:  60% of all user under 25.  40% are women

Forum:  over 19,000 members,  Over 47,000 conversations.  Over 400,000 posts.  Currently use EsoTalk and they are working to move to Flarum (flarum.org).  All of the content will be converted over so nothing will be lost.

Xojo Design Awards:

Consumer:  Goldfish for designing we applications.

iOS:  snow Maps by Jérémie Leroy.

Education:  AcaStat – AcaStat Software

Vertical Market:  Script Studio – Nuvotech Limited

Cross-Platform:  Studiometry – Orange Software

Developer Tool:  Graffiti Suite – Graffitti Suite

Honorable Mention:  Mike Cotrone, developing app and was asking how to structure the database to track chicken and egg tracking application.

Last 12 Months:

48 features

75 changes

465 bug fixes

New stuff:

Dark mode caused issues with schedule.  Turned out to be non-trivial.  Took an entire release cycle.  

iOS Table

Native labels in Windows

Better text rendering in Windows

API 2.0 – URLConnection

Incremental compilation for 64-bit and ARM

IDE faster Layout Editor

The Path Forward

Xojo Cloud:  

64-Bit

Named Hosts

Stand Alone Apps

Load Balancing

Interops:

Less complicated way to call into the OS.  No conversion of data between OS and Xojo data types.  The XDC iOS app is using Interops.  Geoff showed an example of old declares and the same thing with new Interops.  Interops AutoComplete and are available in the Inspector.  Using it to build the Android framework.

Plugins:

Development is paused for now to get Android out.

IDE Update:

Idea is to improve the user experience.  2019 R1 had improvements to the Layout Editor.  Navigator is going to change.  It can work with or without tabs but essentially the Navigator is becoming the Home listing and once you double click it dives into that object.

Coming soon.

API 2.0

URLConnection is out and improved.  Bezier Curves is coming.  FolderItem for MacOS is getting revamped and the API’s from Apple are deprecated.  Better speed.  New Date class is getting many of the features that Xojo framework Date class has.

Most API’s not changing.  That that are replaced will remain for many years.  You don’t have to rewrite code right away.  Analyze Project will tell you what you’re using that is deprecated.  Replaced API’s will no longer auto-complete.  Documentation pages will no longer list the replaced API’s.

Rolling it out in one release.  

Web Framework 2.0:

Current web framework was released in 2009.  A lot has changed in web technologies.  With Web 2.0 it was a ground up rewrite.  Significant optimizations.  Far great speed between client and server.  Overhauling 6 controls.  13 new controls.  Greatly improved style management.  Improved the look and feel.

To test they ported Feedback to Web 2.0.  Greg will be showing it in his session.  Long term goal is to replace the desktop version of Feedback with a web version.

Android:

Last year they showed a simple Hello World application.  Very cobbled together.  Now they’ve got IDE integration, running in the Android simulator.  Run on actual hardware.  Building is now working.

XDC app is now available for Android.  It’s available in the Google Play store.  The caveat is that it’s really just an HTML viewer so obviously there’s a lot of work left.

Hard parts are done.  What’s left is implementing the Xojo framework.  Porting the Debugger is also another big step.

One Last Thing….

Geoff promotes the MBS European Conference in Cologne, Germany.

That it!