The fine people at WolfSSL have a few impressive products around SSL, Encryption and SSH with an emphasis on the performance and on a small footprint. Since CURL already offers multiple SSL backends, we could build our plugins using wolfSSL.
CURL is doing well and we are using it now for over 10 years in our plugins for various tasks including HTTP, FTP, SFTP and email via IMAP or SMTP protocols. See the state of CURL video where Daniel explains the progress.
Compared to the OpenSSL library we use currently for most things, wolfSSL has a lot to offer:
If you are concerned about memory usage, check wolfSSL as it uses less memory.
When you need a cross platform SSL library, it offers latest TLS 1.3 with DTLS 1.2.
They include hardware support for encryption, so if you have acceleration hardware in your computer, they can use it.
While wolfSSL has its own interface, they also have a compatibility interface matching OpenSSL, so a transition would be easy.
You may benefit from additional progressive ciphers such as ChaCha20, Curve25519, NTRU, and Blake2b.
wolfSSL can be used for free with the GPL license option or used with commercial license and they offer paid support.
If you have a need for use of wolfSSL, please let us know. We can offer to use CURL functions using wolfSSL as SLL backend for your projects in Xojo and FileMaker.
Together with wolfSSL, we can offer customization to CURL library itself. We corodinate with Daniel Stenberg from wolfSSL to get changes made for you in CURL and then integrate those into our plugin functionality to get you the features you need the most.
Xojo has a very unique feature: the assigns keyword. You use it to have two methods (getter and setter) with parameters work like a property. e.g. in the dictionary, you have those methods:
Value(Key as Variant) as Variant
Value(Key as Variant, assigns Value as Variant)
The first is a normal method returning the result. But the second one has an extra parameter, which is then filled with an assign operation. You write something like d.value(1) = 2, where the 2 is internally put as a parameter and internally calls Value(1,2).
To replicate this in C++, we got a way to replicate this by using a temporary object and two blocks for getter and setter. So the value() function in C++ returns the IntPropertyAssign object, which knows how to get or set the value. Then we can either assign a value, which calls to the operator= and calls setter. If you query the value, it calls through to the getter.
You may have used a delegate in Xojo before. Technically a delegate is an object encapsulating a function pointer and if needed a reference to the object reference for a non-global method. As delegates are objects, you can store delegates in a dictionary or array and reference them later by name or index.
Although delegates are objects and they point to a class definition for a "Delegate" class, there is no such class known to the Xojo compiler. You can't use isA with Delegate or extend Delegate via extends or a plugin class extension. The only way to detect if an object or variant is a delegate object is to use introspection and check the full name there:
Dim aDelegate As ADelegate = AddressOf someFunction
Dim i As Introspection.TypeInfo = Introspection.GetType(aDelegate)
When you create a delegate, Xojo allocates an object for you. If you pass in a global method, it just reference the function pointer. But for a method from an object, the object is also referenced. Such a reference may be weak if you use weakAddressOf operator in Xojo. There is no built-in way to get the weak status or the target object, but there are feedback cases and we may be able to do something via plugin.
If you assign the delegate to the Ptr, you get the internal function pointer. This pointer doesn't point to the object, but to the actual Xojo function to be called through the Invoke method. If you assign one delegate to another delegate, that will work as long as the parameters are the same for both types.
We'd love to see Xojo Inc. add some properties to the Delegate class like "Target as Object", where you can see the target object. For weak delegates, a weak property may be great to see the status. And of course the target should become nil if the weak reference got invalid. Currently we can only handle that with catching NilObjectException when invoking them and then set delegate to nil to clear it. More great properties may be the parameters as string as well as a the delegate name itself.
To mitigate the issue for us, we add three functions GetDelegateParametersMBS, GetDelegateTargetMBS and GetDelegateWeakMBS. All take a variant with a delegate. They check whether this may be a delegate and if those, return you the parameter string, the target object or the weak flag. They do work in current and older Xojo version on macOS, Windows and Linux as we see, but may break with a future Xojo update. For weak references, the target is nil when the reference is broken.
Fixed setDefaultColors, setTransparentColors and setWhiteOnBlackColors for CDBaseChartMBS to work in 64-bit applications.
Removed appearance property and NSPopoverAppearanceMinimal plus NSPopoverAppearanceHUD constants from NSPopoverMBS class.
For next MBS Xojo Plugins we add classes for Windows Photos Acquire API on Windows 7 and newer. Our new WinPhotoAcquireMBS class lets you open a source and acquire the pictures from it, e.g. import from digital camera to local folder.
Please use WinPhotoAcquireDeviceSelectionDialogMBS class to ask the user to pick a device. That may be a WIA, STI, File System, WPD, STI or TWAIN device as long as Windows has drivers for it. The dialog looks like the screenshot on the right.
The source may provide pictures dynamically without importing via WinPhotoAcquireSourceMBS class. Check there for the items() and inspect them. Each WinPhotoAcquireItemMBS object may give you the name, thumbnail and you can request the data.
You can acquire pictures with or without progress dialog. If you request without dialog, you can still use WinPhotoProgressDialogMBS class to show progress. Via WinPhotoAcquireProgressCallBackMBS you receive updates from Acquire method on how processing is going, e.g. when a transfer starts, ends and how the progress is made. You can return true in Cancelled event to cancel it at any time.
Those new classes accomplish the ImageCapture class for MacOS and the WIA classes for Windows to access cameras and scanners.
Let us explain a bit the small print. The bundle is mainly for new users coming to the platform to give them a kick start with various tools available. But we know a lot of existing customers may be interested to get a license.
For ChartDirector, you get a new license with one year of updates. If you have a ChartDirector license, we can extend your license for another year.
With ChartDirector you can charts for desktop, console and web applications. The charts can be changed and animated if needed. You can check our examples to handle mouse clicks on them and you can output charts as picture, PDF or SVG files.
For DynaPDF you get a new Starter license. If you have an expired starter license already, we renew the license with a new year. If you have a higher level of license, we contact you to whether you want to order the update for your license with a discount.
For this year we also offer discounted upgrades from the OmegaBundle to DynaPDF Lite versions. Special price for Lite upgrade is $129 USD plus tax (or similar in other currency). You can get the Pro or Enterprise upgrade in addition for regular pricing.
If you are interested in an upgrade, please contact us. You first buy OmegaBundle and then we can bill you any difference needed to reach the items you like to get. And of course that bill could include our other plugins.
We watched the Apple WWDC keynote. From all the announcements Apple made, the one causing the most work for us, will be the transition to Apple Silicon, their own CPUs based on the ARM 64-bit design.
As the rumors were around, we expected that to come and look forward to see what they can do. We started already and got Xcode 12 beta and built our plugins for ARM. It works mostly and a few little adjustments are needed. Currently it doesn't link yet as libraries are still in need to be rebuild. We started to build various libraries and I can say zlib, openssl, curl, sqlite, png and others build just fine.
Building them doesn't mean everything will work, so we have to wait for a test device to show up here. But that may happen in the next weeks.
We will be ready when the first devices go to public and Claris or Xojo ship their updated applications to use with our plugins.
But such a change reiterates how important it is to work with supported applications, where some developer takes care and provides regularly updates. In the last 5 years, a lot of clients came back to ask for 64-bit versions for MacOS, Windows and Linux as all operation systems moved to 64-bit. Now quite a few will come back to ask for ARM versions later this year.
Update: It's Friday, 26th June and I am done. All plugins for Xojo and FileMaker build for Apple Silicon. Once the test Mac arrives, we can try them.
Just ten months till the XDC 2021 in London, England. Tickets are still available for $650 USD till 30th June 2020 instead of $950 later.
It will be held April 21-23, 2021 in London, England at the Holiday Inn Bloomsbury. This conferences is the best place to meet Xojo developers from around the world in real live, make contacts, present yourself as expert and learn what is new in Xojo. Tickets are available in the Xojo store and if you bring your partner, you can order an extra guest ticket for the dinner events.
Wether you are full or part time Xojo developer, this is your chance to learn all about the Web 2.0 framework, the Android progress and what's new in the Xojo world.
To get there, please use public transportation. The piccadilly line brings you right from Heathrow Airport to Russell Square Station, just next to the hotel. That trip should cost about 3 £ and you may just pay by tap in/out with your NFC enabled credit card or phone. Otherwise buy an Oyster card and load money on it if you don't have such a card. If you come by Eurostar train through the tunnel from France, you can exit Pancras station and just walk to the hotel. Otherwise take one station via subway to Russell Square Station. That station is right behind the hotel block.
Finally we moved to macOS Catalina just before the next version is announced on Monday at WWDC. On the way there a few apps stopped working like the older Real Studio and FileMaker versions. DragThing didn't make to the new OS and for some old buddies like Fetch, we got updates.
The old Xcode 9.4 doesn't work any more, so that may be the end of the 32-bit Mac plugin for FileMaker here. You can still get version 10.2 from us in 32-bit if needed, e.g. you still have FileMaker 13 and need to use the plugin to push data as JSON e.g. to the DATA API in newer FileMaker servers.
For Xojo the 32-bit Mac compilation via command line still works, so we can keep that a bit longer, but can't test anymore here without a VM. We now build 32-bit and 64-bit MacOS plugin via command line using Xcode 11.5.
One thing we had to adjust a lot of file paths is that, we can't put a folder any more on root folder of the start volume. The disk now has internally two partitions with a read only one for the system and a writable with my data. Great to protect me against applications trying to hack into the system. But inconvenient as I had to move my build system to move a folder in my user folder.
As the new MacOS version is upcoming, we will mark a couple of classes/functions as deprecated, e.g. Addressbook functions. Please move to newer Contacts functions as we are not sure whether Apple will keep the older APIs around in case they change something like the CPU architecture.
If all parts of the chart can be drawn in a PDF with the PDF support by ChartDirector, you get a vector graphics with lines, rectangles and paths. Text is drawn in PDF, so it can be selected later and copied.
If some features are used, which are not supported for PDF output, you get a picture rendered and this picture is placed inside the PDF wrapper. Not perfect, but it preserves some 3D graphic effects, which can't be drawn natively in the PDF. If you set bitmap flag in the output options, you can enforce the bitmap mode.
To enable PDF output, please call MakeChart() function and pass the kPDF constant. If you are interested in SVG output, please pass kSVG or kSVGZ constants. The second one is for compressed output.
If you pass an optional FolderItem parameter to MakeChart, you write an image file directly to that location. The file extension on the file name in the FolderItem defines the type, so please use png, jpg, jpeg, gif, wbmp, wmp, pdf, svg or bmp.
For a draw area, you can just ask it for PDF output using the outPDF() function. Either pass a FolderItem to create a PDF file or pass no parameter to get the PDF as text back. To get a draw area, you can for example call MakeChart without parameters.
You can configure the PDF output with various options and the setOutputOptions method. You pass options with key=value separated by semicolons. e.g. you can use "pagewidth=595;pageheight=842" to use A4 paper size.
Render the chart as a bitmap and output the bitmap as PDF.
The width of the chart in the PDF in pixel unit.
By default, ChartDirector will use the pixel width of the chart as the width of the chart in PDF. The "width" attribute can be used to specify an alternative value. The value must be a number.
The width of the chart in the PDF in pixel unit.
See the description on "width" above for how to use it.
The page width in pixel unit.
By default, ChartDirector will set the page width to the same width as the chart. The "pagewidth" attribute can be used to specify an alternative value. The value must be a number.
The page height in pixel unit.
By default, ChartDirector will set the page height to the same height as the chart. The "pageheight" attribute can be used to specify an alternative value. The value must be a number.
The x coordinate of the left side of the chart within the page in pixel unit.
By default, ChartDirector will center the chart in the page. The "leftx" attribute can be used to specify an alternative horizontal position. The coordinate must be a number.
The y coordinate of the top side of the chart within the page in pixel unit.
By default, ChartDirector will center the chart in the page. The "topy" attribute can be used to specify an alternative vertical position. The coordinate must be a number.
Specify the factor for conversion from pixel to physical unit.
The PDF viewer will convert the pixel unit into physical unit (eg. inches) so that it can be layout on paper or other physical media. The default conversion factor for the chart is 96 pixels per inch. The "dpi" attribute can be used to specify an alternative value. The value must be a number.
The test PDF on the right shown as picture is available here: finance.pdf
Please do not hesitate to contact us with questions.
To show an example, let us convert a Word file to PDF on MacOS:
/Applications/LibreOffice.app/Contents/MacOS/soffice --convert-to pdf --outdir /Users/cs/Desktop /Users/cs/Documents/test.doc
"C:\Program Files\LibreOffice\program\soffice.exe" --convert-to pdf --outdir C:\Users\Christian\Desktop C:\Users\Christian\Desktop\test.docx
To run this, you can use Shell class in Xojo or Shell functions for FileMaker in MBS Plugin.
In Xojo, you can run this with the Shell class like this:
dim InputFile as FolderItem = SpecialFolder.Desktop.Child("test2.docx") dim OutputFolder as FolderItem = SpecialFolder.Desktop
const AppPath = "C:\ProgramFiles\LibreOffice\program\soffice.exe" dim AppFile asnew FolderItem(AppPath, FolderItem.PathModes.Native)
Get the top developer tools and third party components for the Xojo cross-platform development platform at a huge savings.
Omegabundle for Xojo 2020 is a collection of the most useful tool sets, add-ons, digital books and components for use with Xojo Inc's Xojo development environment. If purchased separately and not including any additional offers, the total cost would be over $3,711.00. Omegabundle for Xojo 2020 costs $399. Buy now on the Paradigma Software store.
Xojo is an award-winning, cross-platform development tool for the Desktop (macOS, Windows, Linux), Web, iOS (iPad/iPhone) and Raspberry Pi. With Xojo, you can create native applications by using drag-and-drop to build your user interface and then one straight-forward programming language to enable the functionality. Xojo is powerful and modern, yet easy to use and learn.
Did you know that you can use our DynaPDF graphics class integration in our MBS Xojo DynaPDF Plugin with the Xojo's report engine and output your reports as PDF files?
And while you are using DynaPDF, enjoy all the other features like importing existing pages and using them as background. This allows your application to take a PDF created by your user to put behind the reports to customize them.
Of course you can also use DynaPDF drawing functions to draw the report yourself. Or maybe better use DynaPDFTableMBS class to create tables for the layout. We have an excellent invoices examples for this.
To add a background, you can just drop in this code to load a PDF page from a template PDF instead of the normal append call to create a new blank PDF page:
//optionallyputabackgroundinthePDFDim fi As FolderItem = SpecialFolder.Desktop.Child("template.pdf")
If fi <> NilAnd fi.Exists Then//askplugintoignoreclearRectcallfromXojo,soweseewhat'sbehindreport
pdf.ClearRectMode = pdf.kClearRectModeIgnoreBig
Call pdf.OpenImportFile(fi) //needsLite'Callpdf.ImportPDFFile//needsLiteCall pdf.ImportPDFPage(1) //needsProIf pdf.GetPageCount = 1Then//okayCall pdf.EditPage(1)
As you see we have to set our ClearRectMode property to ignore any ClearRect call which would clear the page. Otherwise the background is replaced with a white rectangle. The property is new in version 20.2 of our MBS Xojo DynaPDF Plugin.
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!
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.