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 220.127.116.11, 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).
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!
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:
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 18.104.22.168.
- 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.
Or ask us to be added to our shared Dropbox folder.
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:
- HP-UX Itanium
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!
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 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.