Xojo turns seven years old today.
On 4th June 2013, Xojo Inc. announced the name change from Real Studio to Xojo, the new IDE and the new license model.
Originally Xojo started over 20 years ago as CrossBasic, got rebranded as REALbasic and released in 1998 to the public. In 2010 the name was changed to Real Studio before in 2013 the company and its product were renamed to Xojo. See Wikipedia for details.
Congratulations to the team and looking forward to the next 20 years!
See you at the Xojo Conference in London next year.
For MBS Xojo Plugins in version 20.3 we include a new set of classes to do load C libraries and call functions there. Similar to the declare commands in Xojo, but much more dynamic and with additional features:
Our new DeclareLibraryMBS class allows you to load a library file. On MacOS you load a dylib file, on Windows a DLL file and on Linux a shared object file with so file extension.
Just pass the file path (can be relative) or the folder item for the library file to the constructor for DeclareLibraryMBS. Then you can check with SymbolNames function the array of exported functions defined in the library. Once you picked a function name, you can use Symbol function to query the function pointer for an exported function.(more)
New in this prerelease of the 20.3 plugins:
- Added clearAction method for NSMenuItemMBS class.
- Added Connected property for SSH2TunnelMBS class.
- Added DeclareCallBackMBS, DeclareLibraryMBS and DeclareFunctionMBS classes.
- Added DefineClass method to JavaVMMBS class.
- Added DirectDrawDashedLineMBS method for Graphics class.
- Added EnableFastFloatExtensions method for LCMS2MBS module.
- Added FirstFilledCol, FirstFilledRow, LastFilledCol and LastFilledRow properties to XLSheetMBS class.
- Added HTMLText and PlainText to WKWebViewMBS class.
- Added templateFont parameter for AddFont method in XLRichStringMBS class.
- Added VolumeSizePathMBS and VolumeFreeSizePathMBS functions taking path.
- Added WriteStringAsNumber method to XLSheetMBS class.
- Changed RenderSamplesMBS to raise exception for out of memory situation.
- Fixed problem with VolumeFreeSizeMBS and VolumeSizeMBS running sometimes into an endless loop on Windows.
- Removed WebSocketHelperMBS module.
- Rewrote UseSystemCertificates in CURLSMBS class to work better.
- Updated DynaPDF to version 220.127.116.11.
- Updated LCMS to version 2.10 final canditate 2.
- Updated LibXL to version 3.9.1.
- Updated SQLite to version 3.32.0.
Or ask us to be added to our shared Dropbox folder.
SQLite just turned 20 years old.
The first check-in of SQLite code occurred 20 years ago.
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
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:(more)
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.
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)
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:
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:
Please do not hesitate to contact us with questions.
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)
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 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.
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.
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 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 18.104.22.168, SQLAPI to 5.0.6, LibXL to 3.9 and OpenSSL to 1.1.1g.
See release notes for a complete list of changes.
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:
- Photos framework with 600 items.
- NSURLSession classes with over 300 items.
- New SceneKit additions with 230 items.
- RFC Connection classes with 246 items.
Keep an eye on the 20.2 release, which will be announced tomorrow.
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.
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:
- MBS Xojo Audio Plugin
- MBS Xojo Barcode Plugin
- MBS Xojo Cameras Plugin
- MBS Xojo Compression Plugin
- MBS Xojo CURL Plugin
- MBS Xojo DataTypes Plugin
- MBS Xojo DynaPDF Plugin
- MBS Xojo Encryption Plugin
- MBS Xojo Java Plugin
- MBS Xojo Linux Plugin
- MBS Xojo Main Plugin
- MBS Xojo SQL Plugin
- MBS Xojo VLC Plugin
- MBS Xojo Win Plugin
- MBS Xojo XL Plugin
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.
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!
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.
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.
Or ask us to be added to our shared Dropbox folder.
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:
Thanks Xojo, Inc. and see you all next year in London for Xojo.Connect from 21st to 23rd April 2021.
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!
Older blog entries: