SQLite turned 20

SQLite just turned 20 years old.

The first check-in of SQLite code occurred 20 years ago.
see sqlite.org/src/timeline?c=2000-05-29

Version 1 just had a few commands. Open database, close database, execute a statement. Code for recordsets didn't exist at that time and came later.

Congratulations to Richard Hipp and his team!

see SQLite Forum

Write audio file with samples using AVFoundation

Today we have a tip for everyone using AVFoundation classes in MBS Xojo Plugins. If you work with AVAudioPCMBufferMBS objects from either an audio file or with samples from microphone, it may be useful to write them to a file. So here is a little function, which takes a memory block of samples and writes them to a file on the desktop.

To make it work, we have to add a few new methods to AVAudioPCMBufferMBS class to pass in sample data. While you could do it yourself with Ptr already, it's convenient to let the plugin handle the stride and double pointer dereferencing for you to copy values and return true on success:

  • setFloatChannelData(ChannelIndex as Integer, Data as Memoryblock) as boolean
  • setInt32ChannelData(ChannelIndex as Integer, Data as Memoryblock) as boolean
  • setInt16ChannelData(ChannelIndex as Integer, Data as Memoryblock) as boolean

As you see in the code we build two settings dictionary as we pass data in in 32-bit floating point numbers, but want to write it as 16bit integer to the file to save a bit of space:


Xojo's picture cache

The Xojo picture class internally has several platform dependent implementations with slightly different behaviors. Let's check how the implementations have an effect on memory consumption.

On MacOS the picture class implementation for an editable picture uses both a CGBitmapContext for the pixels and a CGImage for drawing it. So the pixels are hold in a CGBitmapContext for the actual picture. If the picture has a mask, there is a second CGBitmapContext for the mask, which doubles the memory usage.

When the picture is drawn or some plugin function requests a CGImage for the picture, Xojo will create one and cache it. The CGImage consumes about the same memory size as the normal picture part. And the cache stays there after the drawing for the case of another draw command. But the cache is invalidated and freed, when the graphics of the picture is used. You can clear the cache for example with the following call:

Dim g as graphics = pic.graphics
g.drawline -100, -100, -10, -10

This frees the memory for the cache and does not draw something as the coordinates are negative.

Usually you may never need to do this, but if you load a lot of images, keep them in array and draw them into smaller ones, you may need a lot of memory, so clearing the cache may be good, especially for a 32-bit application, where memory is tight. But usually it may be better to just clear last reference to picture early when you don't need the big picture any more.

First tests on Windows seem to indicate that on Windows for DirectDraw Xojo also uses a similar system as drawing as memory usage goes up when you draw a picture into another one.

HTMLViewer JavaScript communication for Xojo

The MBS Xojo Plugins provide various functions for HTMLViewer to use JavaScript in Xojo applications. Here a few details on the various ways to run JavaScript in the HTMLViewer in Xojo.

So we have WebViewMBS class (WebKit 1.x), WKWebViewControlMBS control (WebKit 2.x), Internet Explorer classes like IEDocumentMBS and IEWebBrowserMBS, ChromiumBrowserMBS class for Chromium Embedded Framework and LinuxWebViewMBS class for WebKit on Linux. (more)

Extends MBS Plugin classes in Xojo

If you miss something in our classes, feel free to extend the classes with your own utility functions. To do so in Xojo, please use a module with methods using extends keyword to add your own convenience functions. For example a client asked about a Lookup function for JSONMBS class:

Module JSONUtilModule
Function LookupValue(extends j as JSONMBS, name as string, defaultValue as string = "") As string Dim c As JSONMBS = j.Child(name) If c <> Nil Then Return c.ValueString Else Return defaultValue end if End Function
End Module

As you see this is a public method in a module and it extends the JSONMBS class with a new LookupValue method. The method can be called on all JSONMBS objects to check if a child there exists and return the string value. If the value is missing, it returns a default value.

Here is some test code checking whether the LookupValue function works:

EventHandler Sub Open() Dim jMBS As JSONMBS = JSONMBS.NewObjectNode jMBS.AddItemToObject("key1", JSONMBS.NewStringNode("aaa")) jMBS.AddItemToObject("key2", JSONMBS.NewStringNode("bbb")) jMBS.AddItemToObject("key3", JSONMBS.NewStringNode("ccc")) Dim n1 As String = jMBS.LookupValue("key1") Dim n5 As String = jMBS.LookupValue("key5", "?") Break End EventHandler

Please do not hesitate to contact us with questions.

New in the MBS Xojo Plugins Version 20.2

In this article I want to introduce you the new functionalities from the MBS Xojo Plugins in version 20.2.

The component DynaPDF has some new features for you.
With the new DynapdfGraphicsPathMBS class you can define paths. A path can be composed of different parts. So we can use the "MoveToPoint" method to navigate to our starting point and draw it from there. For example, we can draw curves and lines one after the other with methods. The path can then be drawn with the method "g.DrawPath". G stands for a graphics environment.

To enhance your tables in DynaPDF you can now specify a user defined cell picture with the method "DynaPDFTableMBS.SetCellPicture". The row and column as well as the positioning. The output size and the picture can also be specified in the parameters of the function. This is a convenience functions which takes a picture. You can of course continue to use older functions to point to picture file or picture in string/Memoryblock.

If you have EXIF data as a string or as a memory block can use the ExifTagsMBS class to read various attributes of your data, such as date, time or artist. All attributes are read only. This means that you can’t change EXIF data with this class, but you can take a template EXIF from one picture, change values and store it with another one. (more)

Show Live Photos in your Xojo application

Have you tried our recent Photos classes addition to MBS Xojo Plugins?

You can use PHPhotoLibraryMBS class to check your authorization status and ask the user for permissions to access the photo library. Once allowed, you can use fetchAssetCollectionsWithType shared method in PHAssetCollectionMBS class to query the assertion collections. Pick one PHAssetCollectionMBS and then use fetchAssetsInAssetCollection shared method in PHAssetMBS class. Then you get a PHFetchResultMBS, which is basically a kind of record set with data. This may contain PHAssetMBS objects in this case and read the properties there.

When you have the asset, check mediaSubtypes bitmap for whether this is a video, image or Live Photo. You can use PHImageManagerMBS class with RequestImageForAsset method to request an image. There you pass a delegate method and this one is usually called twice, e.g. with a quick preview and later when full image is available. Then you can display the image. For a Live Photo you can use RequestLivePhotoForAsset method in the image method. Instead of using delegates, you can use RequestImageForAssetSync to quickly ask for a thumbnail for your convenience.

The whole API is asynchronous and uses delegates a lot. We define over 20 delegate types in the plugin. All can be used including progress delegate to show a progress dialog. Our plugin handles all the asynchronous threaded callbacks for you and makes sure all delegates are routed to main thread. Also we pass through tag parameters, so you can pass reference to your window/class to manager this.

If you like, please try our example project and let us know how it works.

DynaPDF Manual online

DynaPDF has it's own documentation, which you can find included with our plugin: dynapdf_help.pdf.

In order to read it in a browser and for search engines to soon index it, I put the manual online as a webpage version:


Maybe it helps people. Updated today to current version. We link to this from our plugin documentation extensively, so you may jump right from our documentation to the original dynapdf documentation.

Dash help archives for Xojo and FileMaker

For browsing help files, the Dash application is very useful on Mac and iOS.

Here you can click to launch Dash and install our plugin help:
MBS Xojo Plugin and MBS FileMaker Plugin

You can download the archives manually on our website:
FileMaker and Xojo (Real Studio).

You can also add Xojo documentation itself to your dash set, see download in preferences dialog.
For FileMaker you find the docsets here: FileMaker Dash Docsets

For Windows and Linux, you can use Zeal application. You may need to download the archive and install manually.

Feedback is welcome.

MonkeyBread Software Releases the MBS Xojo Plugins in version 20.2

Nickenich, Germany - (May 12th, 2020) -- MonkeyBread Software today is pleased to announce MBS Xojo Plugins 20.2 for macOS, Linux and Windows, the latest update to their product that is easily the most powerful plugin collection currently available for Xojo. MBS Xojo Plugins have been updated and now includes over 2600 classes and 70,000 documented features, and the versatile plugins have gained more new functions:

With this release we include the classes for the Photos framework from Apple. This enables access to the user Photos application and allows a whole new set of Mac utility applications to be written in Xojo for assisting photographers. You can access photos, create and modify collections of photos and work on the metadata. We include a control to show live photos with animation.

The new plugin includes a set of classes to connect to SAP systems via the SAP NetWeaver RFC SDK 7.50. The SDK allows to call remote functions in the SAP application and move data to/from SAP. By connecting Xojo applications to SAP systems, we enable a whole new field of collaboration where Xojo can be used to write tools for companies using SAP.

For our DynaPDF Plugin we upgraded the graphics class integration to work with TextShape class when using drawObject method. We improved the text alignment handling to match Xojo's behavior. You can control how we process ClearRect calls to have Xojo reports draw on top of existing PDF pages. We now support drawing paths with DrawPath method in Graphics class with our DynapdfGraphicsPathMBS class. You can now assign a picture directly with SetCellPicture method in DynaPDFTableMBS class.

We added a NamedMutexMBS class to created named mutex objects cross platform. This allows to synchronize multiple applications running on one computer for access to shared resources. Works great with the shared memory functions in FileMappingMBS class.

When using SceneKit, the Apple framework for easy 3D graphics, we have a few improvements. The SCNHitTestResultMBS class provides results for hit testing, so you can for example query which object is hit by a mouse click. In the SCNControlMBS control you can use events to learn when renderer starts and finishes rendering. The SCNPhysicsWorldMBS class and related classes for physics allows you to realistically animate objects by using gravity and forces.

For our JavaScript engine embedded in the plugin, we got a great example using LibPhoneNumber. This is a library to format and validate phone numbers. The library is part of the example file and loaded in the JavaScript engine at start of the application, so you can run queries against it later. Great to format phone numbers in your text fields or to alert the user if the format is incorrect. This can be used on clients and server and does not need a HTMLViewer on the window!

For CURL we now handle IDN encoded domain names better. For Linux we now load libidn dynamically if installed and use it to resolve domain names with unicode characters. For MacOS we let the system do this as well as on Windows. We enabled SSPI, Kerberos 5 and SPNEGO for CURL functions on Windows.

Our new plugin allows you to use LibXL in version 3.9, the library we use to read and write Excel documents (xlsx and xls) without having Microsoft Excel being installed. The new version enables us to read styled text from cells in the document and return them as styled text in Xojo. In the other direction, we can pass styled text from a Xojo textarea control directly to a cell in the Excel document. For more low level access you can check XLRichStringMBS class. You can query whether a cell contains styled text and you can set the calculation mode for the whole document. For columns and rows you can now let LibXL return you the size in pixels to better adjust pictures to place to the right size.

For Elliptic Curve Cryptography we have the ECKeyMBS class, which got new properties and methods to query or set the private and public key parts.

We add NSURLSessionMBS and related classes to support HTTP/2 in Xojo on MacOS. To work with EXIF data in images, we have ExifTagsMBS and ExifTagMBS classes. For HTMLViewer using Internet Explorer on Windows, we can now enable HiDPI support. We added NSDateIntervalMBS class and accessibility properties to NSWorkspaceMBS class. The PNGReaderMBS class got new properties to control maximim chunk size and related values.

Finally we updated the plugin SDK to the new version for Xojo 2020r1, CURL to version 7.70.0, DynaPDF to, SQLAPI to 5.0.6, LibXL to 3.9 and OpenSSL to 1.1.1g.

See release notes for a complete list of changes.

70000 functions for Xojo

Did you recently look at our statistics page for the MBS Xojo Plugins?

We just realized that our next version 20.2 will ship with 70,000 items in the documentation. That is new record. We reached 60,000 in March 2018, which leads to about 10000 new items in about 2 years.

The list of classes extended and now includes over 2700 classes.

Main drivers of recent additions are:

Keep an eye on the 20.2 release, which will be announced tomorrow.

ARM Macs thoughts

Recently a client asked whether we would be ready for Apple someday switching to Mac computer with ARM based CPU design.

First we expect, if Apple does such a move, that they do announce it similar to previous switches from 68k to PPC and from PPC to Intel. At a WWDC (world wide developer conference) they announce the upcoming switch, present test computers, provide a new Xcode version to build for ARM and give developers time to try it. Months later they launch a consumer computer to let early adapters get a first ARM based device.

We expect Apple will reuse the FAT binary technique to have Mac apps contain both ARM and x86 code for a while. They did that with 68k/PPC, PPC/Intel and Intel 32/64 bit code. We even for a while packed PPC 32/64-bit and Intel 32/64bit code together for an application.

My prediction would be that Apple quickly shows an iMac like computer for developers to proof the power of the new chips and have a test/build computer for developers. Lots of cores performing quickly and show they are at the same level as the Intel iMacs. To show power consumption, something like a MacBook Air with ARM compared to Intel version and have a few extra hours of battery usage. Maybe the new ARM based computers are not much better than Intel counterpart as the goal may not be to have better chips, but to own them and allow custom changes in future.

One curious thing is how Apple can use LLVM bitcode to help automate the transition. Did you remember the Apple Watch upgrade from 32 to 64-bit? Apple internally recompiled the apps from bitcode to native 64-bit ARM code to run on the new 64-bit Watch CPU. As apps for the Mac App Store are all build with bitcode embedded nowadays, Apple may be able to use that code to build ARM versions automatically. Or use the bitcode to improve performance for any emulation layer they use. The bitcode is the intermediate code the compiler generated from source code and is used to generate the machine code.

For FileMaker, we would need Claris Inc. to start building an ARM version of FileMaker and then we can use a newer Xcode version to build our plugin. Currently we already build 64-bit ARM for the iOS version of our plugin.

For Xojo, the team already builds iOS with 64-bit and have ARM support for Linux. So we expect them to quickly enable ARM for MacOS once a new Xcode is available to build their own framework and use newer compilers.

For both we expect to quickly be able to build something. It may be some work to remove all deprecated APIs as we expect Apple to not bring those over. e.g. FSRef data tpes, Addressbook framework and OpenGL frameworks are deprecated. They still work for compatibility, but may simply not make the move to ARM versions of the software.

Building for future Xojo targets

We already upgraded our build system and can build plugins for iOS Device + Simulator and Linux 64-bit ARM. Of course we have not yet an official Plugin SDK, so we are not sure we link everything correctly. But it is great to get something going already and prepare more as time permits. Currently this MBS Xojo Plugins do already build for iOS:

In total about 200 parts do currently build for iOS. Of course Linux, Java and Win parts are just dummies, but they allow you to compile code referencing classes without getting errors because of missing #if tests.

For Linux 32-bit ARM we build currently 519 plugin parts.
From that 507 already compile for 64-bit ARM, so we are at 97% coverage.

While doing this work, we may deprecate a few things as we may not plan to port them to those new targets. And some classes were designed due to missing functionality in the Xojo framework. But as the framework catch up, we may prefer to just use the built-in function.

Xojo Hangouts

Have you joined the Xojo Hangout sessions?

For a few weeks now the Xojo team invites you to join via Zoom a short 40 minute session on Monday, Wednesday and Friday. Time is usually 14:00 or 16:00 o'clock in US east coast timezone. For me in Germany about 20:00 or 22:00 o'clock. For some it's lunch time, for others time to go to bed.

Admission is free and you are welcome to show something. Usually a few from the Xojo team join and we saw some previews on new features there, have time to ask questions or just talk about new shows on TV.

The dates and links are usually just posted on the Xojo forum a few hours before: Link for today. If I count correctly, today is the 10th time for such a hangout.

We hope to see you soon!

Deutschen FileMaker Konferenz 2020 in Malbun

Noch etwas fünf Monate bis zur FileMaker Konferenz 2020 in Malbun (Liechtenstein).

Vom 28. bis 31. Oktober findet die elfte deutschsprachige FileMaker Konferenz in Malbun, Liechtenstein statt. Ursprünglich geplant für Juni muss die Veranstaltung leider in den Oktober verschoben werden. Wir hoffen dennoch auf tolles Wetter, viele Interessante Teilnehmer und Gespräche. Eventuell könnte das die einzige Konferenz rund um FileMaker in diesem Jahr werden, die vor Ort stattfindet.

Die Veranstalter vom Verein FM Konferenz erwarten auch 2020 rund 120 Entwickler, Anwender, IT-Fachleute und Entscheidungsträger aus Wirtschaft, Bildung und Verwaltung. Rund um über 20 Fachvorträge und Workshops wird es viel Zeit zum Vernetzen in den gemeinsamen Pausen und beim Abendprogramm geben.

Für den Deutschsprachigen Raum ist diese Konferenz das Treffen des Jahres. Hier finden Sie vom Anfänger bis zum Profi Kontakte zu anderen Entwicklern. Lernen Sie was es neues gibt, nehmen Sie Impulse mit für die eigene Arbeit und erfahren Sie mehr zu FileMaker von deutschsprachigen Experten!
Bitte planen Sie wenigstens einen extra Tag ein für ihren Besuch in Liechtenstein, damit Sie die Natur in dem schönen Tal geniessen können. Den Aufstieg auf den Sareis können Sie bequem zu Fuß vom Hotel aus starten und die Turnastraße hinauf spazieren bis zum Restaurant am Gipfel. Oder alternativ die Seilbahn nehmen.

Eventuell bieten wir auch wieder einen MBS Schulungstag an am Mittwoch vorher. Bei Interesse kann man sich gerne vormerken lassen. Die Ankündigung kommt später.

MBS Xojo Plugins, version 20.2pr7

New in this prerelease of the 20.2 plugins:
  • Deprecated TimeZoneMBS class in favor of TimeZone class.
  • Deprecated our global functions to query system folders in favor of SpecialFolders module in Xojo.
  • Added CompressionBufferSize, UserWidthMaximum, UserHeightMaximum, ChunkCacheMax, and ChunkMallocMax properties to PNGReaderMBS class.
  • Deprecated old FFT*MBS functions.
  • Added kofUseOtsuFilter constant to DynaPDFMBS class.
  • Fixed issue where using AVFoundation and NSWorkspace plugin parts would show warning message about duplicate AVObjectWrapperMBS class name.
Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/.
Or ask us to be added to our shared Dropbox folder.

Xojo Design Award 2020 arrived

After a month long travel, the award made it from Texas to Germany.

Sadly the Xojo.Connect conference in Nashville was cancelled and so we don't have a ceremony this year.

All the award winners:

Congratulations to the 2020 Xojo Design Award Winners!

Best Consumer App - HDRtist NX, Ohanaware
Best iOS App - PropertyMe Manager, PropertyMe
Best Lifestyle App - Crossword Wizard, Rush Software
Best Vertical Market App - qwireCast, qWire
Best Developer Tool - RegExRX, MacTechnologies Consulting
Best Vertical Market App - bMD Medical Software
Best Plugin - MBS Plugins, MonkeyBread Software

*Yes, there are 2 Best Vertical Market Apps, they were both so good we had no choice but to award them both!

View the winners here!

Thanks Xojo, Inc. and see you all next year in London for Xojo.Connect from 21st to 23rd April 2021.

Easter holidays at home

The last weeks we stayed at home, but made trips to go for hiking in the Rhine and Moselle valleys. If you have a chance to come by someday, please enjoy

Castle Eltz, view from west side:

MBS Xojo Plugins, version 20.2pr6

New in this prerelease of the 20.2 plugins:
  • Updated CURL to version 7.70.0.
  • Added CAInfo and CAPath properties to CURLSVersionMBS class.
  • Added Valid and CanSign properties to ECKeyMBS class.
  • Added Generate, GetPublicKeyPoint, SetPublicKeyPoint, SetPublicKey, GetPublicKey, SetPrivateKey and GetPrivateKey methods to ECKeyMBS class.
  • Added Generate parameter for KeyByCurveName method in ECKeyMBS class.
  • Added accessibility properties to NSWorkspaceMBS class.
  • Updated DynaPDF to version
  • Removed dependency to libidn for CURL Plugin on Linux.
  • Changed CURL plugins for Linux to load libidn dynamically at runtime. If this works, you can use domain names in unicode characters.
  • Added IDN support for MacOS with a pull request to CURL.
Download: monkeybreadsoftware.com/xojo/download/plugin/Prerelease/.
Or ask us to be added to our shared Dropbox folder.

DynaPDF license usage

In case you buy a DynaPDF license from us, you can use it with various development tools:
  • FileMaker with MBS Plugin
  • Xojo with our MBS Xojo Plugin
  • C and C++
  • Visual Basic 6.0
  • Visual Basic .Net
  • Visual C#
  • Embarcadero Delphi
  • PHP 5 and 7

DynaPDF supports the following platforms:

  • MacOS
  • Windows
  • Linux
  • iOS
  • Android
  • HP-UX Itanium
  • Solaris
  • Tru64

As a portable C++ library it may even be compiled for other platforms.
See the feature comparison for the differences between Starter/Lite/Pro/Enterprise licenses.

Please note that the licenses for DynaPDF bought directly from DynaForms do not work with our plugins!

Xojo Developer Magazine 18.3 Issue

The May/June (18.3) issue of xDev Magazine is now available. Here's a quick preview of what's inside:

Xojo Update by Dana Brown
There was no Xojo Conference this year, but here's all the exciting stuff happening even though none of us could be there to see it.

Virus Modeling by Marc Zeedar
Every day in the news we see more COVID-19 infection models than we know what to do with, so why not write our own?

Happy Birthday, MonkeyBread Software by Stefanie Juchmes
It's hard to believe we've been relying on MonkeyBread plugins for 20 years, but it's true. And as always, the tools continue to grow and improve.

Get Your Machine Learning On by Jim Meyer
Curious about machine learning? Would you like to incorporate some intelligence into your own apps? Jim gives you a great introduction to the topic.

Xojo Maps, Part 4 by Markus Winter
Markus continues in his quest to draw maps with Xojo.

PLUS: Xojo Roadmap, enumerations, Best of the Web, and more!

Xojo Sale

Xojo Inc. announced a sale for the next five days:

If you waited to get a Xojo license or to renew your license or to upgrade to Xojo Pro, this is your chance. And as Web 2.0 is coming soon, your new license would cover it!

As usual, if your Xojo license is up for renewal in May or June, you can update now and enjoy a discount. If your Xojo license expired already, just get a new one. With discount this is cheaper than a regular update.

Conference tickets and add-ons are on sale, too. If you like to get one of the MBS articles there, you can use the sale price at Xojo Store or we match the price if you buy directly from us.
The biggest plugin in space...


Jun 2020
May 2020
Apr 2020
Mar 2020
Feb 2020
Jan 2020
Dec 2019
Nov 2019
Oct 2019
Sep 2019
Aug 2019
Jul 2019
Jun 2019
May 2019
Apr 2019
Mar 2019
Feb 2019
Jan 2019
Dec 2018
Nov 2018
Oct 2018
Sep 2018
Aug 2018
Jul 2018
Jun 2018
May 2018
Apr 2018
Mar 2018
Feb 2018
Jan 2018
Dec 2017
Nov 2017
Oct 2017
Sep 2017
Aug 2017
Jul 2017
Jun 2017
May 2017
Apr 2017
Mar 2017
Feb 2017
Jan 2017
Dec 2016
Nov 2016
Oct 2016
Sep 2016
Aug 2016
Jul 2016
Jun 2016
May 2016
Apr 2016
Mar 2016
Feb 2016
Jan 2016
Dec 2015
Nov 2015
Oct 2015
Sep 2015
Aug 2015
Jul 2015
Jun 2015
May 2015
Apr 2015
Mar 2015
Feb 2015
Jan 2015
Dec 2014
Nov 2014
Oct 2014
Sep 2014
Aug 2014
Jul 2014
Jun 2014
May 2014
Apr 2014
Mar 2014
Feb 2014
Jan 2014
Dec 2013
Nov 2013
Oct 2013
Sep 2013
Aug 2013
Jul 2013
Jun 2013
May 2013
Apr 2013
Mar 2013
Feb 2013
Jan 2013
Dec 2012
Nov 2012
Oct 2012
Sep 2012
Aug 2012
Jul 2012
Jun 2012
May 2012
Apr 2012
Mar 2012
Feb 2012
Jan 2012
Dec 2011
Nov 2011
Oct 2011
Sep 2011
Aug 2011
Jul 2011
Jun 2011
May 2011
Apr 2011
Mar 2011
Feb 2011
Jan 2011
Dec 2010
Nov 2010
Oct 2010
Sep 2010
Aug 2010
Jul 2010
Jun 2010
May 2010
Apr 2010
Mar 2010
Feb 2010
Jan 2010
Dec 2009
Nov 2009
Oct 2009
Sep 2009
Aug 2009
Jul 2009
Apr 2009
Mar 2009
Feb 2009
Dec 2008
Nov 2008
Oct 2008
Aug 2008
May 2008
Apr 2008
Mar 2008
Feb 2008