While we interact a lot with each other in your development community via forum, social media and tons of emails, we should not forget the importance of being in a live face-to-face setting with others. Being active in the developer community can bring many benefits. There is power in being connected to other developers who are active in the same area. It can be easy to skip meetings and not come to the annual conferences, but soon you may have skipped them for several years. Joining the forums is not enough, you need to be active and post regularly. But to build personal connections, you need to join the conferences and meet the persons behind the forum avatar.
We have some new functions for you related to the Windows standard font dialog.
For FileMaker, the new TextView.ShowFontPanel function can show the font dialog and let user change the font settings. For MacOS, the function will show the system font panel, which allows you to adjust font information asynchronously.
For Xojo, the new TextArea.WinShowFontPanelMBS function can show the font dialog for a text area. Please use NSColorPanelMBS class and NSTextViewMBS usesFontPanel property for MacOS. The panel floats and allows to change font information for current text area.
In both cases, the dialog shows with current font selection, than user can change them and the new font settings are applied to the current selection in the text.
Changes are coming to next prerelease of our FileMaker and Xojo Plugins. If you like to test today, please email us.
Due to WWDC, I'll come for a visit to California in June. As usual I like to meet other developers beside the conference and like to join local meetings for FileMaker developers in Los Angeles and San José area.
13rd June 2019 @ DIGFM
Database Interest Group for FileMaker: The user group hosted at FileMaker Inc. headquarters in Santa Clara, California. It's like a free DevCon in monthly doses. Meets 2nd Thursday of the month: 1:30pm, Meet & Greet; 2:00pm, Presentation
FileMaker, Inc (The Wedge), 5201 Patrick Henry Dr., Santa Clara CA 95054
FileMaker Developers in Southern California started in March of 1999 with a small group of FileMaker Pro developers getting together once a month to exchange development tips and ideas. Meets 2nd Friday at 9:30am
As you may know we have a JSONMBS class in our MBS Xojo Util Plugin to work with JSON data. The class is optimized for best performance, but some people prefer to use native Xojo classes like dictionary for representing objects.
For the upcoming 19.2 release, we'll add new convert methods to our class. You can convert from Xojo objects to JSON and back. This involves using dictionaries for the objects and Xojo arrays for the arrays in JSON. As we don't know what is in the array, we use arrays of variants.
This function checks what is in the variant and returns a matching JSONMBS object. String, boolean, integers and doubles are just wrapped with JSONMBS objects. Dictionaries are converted to JSON objects, but we only use text for the keys. Currency values are converted to double, colors to integers, dates and texts are converted to strings before processing them. We detect arrays of String, Object, Variant, Single, Double, Int32, Int64, Boolean and Currency and convert them to JSON arrays. Anything else can raise an exception about an unsupported type.
Convert as Variant
The counter-part function on the JSONMBS class returns the varisant matching whatever is in the JSON data. The plugin will create arrays of variant, dictionaries and values (string, double, int64, boolean and nil).
You probably saw the Workspace Innovation Platform campagne from FileMaker?
Use FileMaker to escape the work rut and automate manual processes. Two things that really help here: First the Perform Script on Server script step to offload work to the server and to do things in background. Than the use of plugins to provide the toolbox to do all the things which are not built-in to FileMaker itself.
We like to show you a few example workflows and how various plugin functions can help:
1. Image upload
User takes a new picture on iPad for new product to go into the webshop
FileMaker Go puts it in a record, triggers script on server.
On server using GraphicsMagick functions, a script normalizes image orientation to 0°, image file format is converted if needed to PNG or JPEG. Colorspace may be conveyed to SRGB if needed. Borders can be automatically removed. Thumbnails are made as needed with removed metadata for images going to public (e.g. GPS removed).
CoreML functions in MBS Plugins are used with machine learning model to detect image content and assign tags automatically to image to help to find this image later by keyword.
User has interface to add documents to FileMaker database.
DragDrop functions are used to allow dropping multiple files directly on the FileMaker script and process them.
Alternatively FSEvents or Windows DirectoryWatcher functions can be used to watch an import folder and trigger script when new images arrive.
A record is created for each file. Container functions help to read files and for folders, the plugin can get file listings.
DynaPDF or PDFKit functions are used to generate a preview image for the PDF document, so it can show in a non-interactive container and without relaying on a PDF browser plugin.
For each page, a separate record is created with the page extracted as it's own one page PDF document. The text of the page is put in a text field. Later users can search in PDFs and find pages containing search terms. Our DynaPDF highlight function can be used to show PDF pages and highlight search terms in the PDF page image.
The original PDF is checked whether it is signed. If signed, we can verify signature and alert user about modified PDF. If not, we can sign it now ourselves. This way we can in years verify the PDFs are not modified.
For archiving we use DynaPDF.Optimize function to repair errors, scale down images and remove private data. Than we convert PDF to PDF/A, so we can be sure it can be read in 10 years.
Again the files can be uploaded to Webserver via SFTP, to Amazon S3 or copied to network drive to access later from other places.
ProgressDialog functions in our plugin can be used to show overall progress.
3. Scanning papers
User puts a stack of papers on the document scanner device in the office. The auto feeder grabs the papers and scans them with both sides (duplex mode).
MBS Plugin functions for WIA (Windows), ImageCapture (Mac) or TWAIN (Mac & Win) are used to control scanner and get scanned documents into FileMaker. With dialog and interaction or completely automated without dialogs. See Scanning Options
OCR functions in MBS Plugin are used to recognize text. Various languages and rotations can be tried to find the version with highest confidence. This is best done on server in background with PSoS.
If documents got labeled with barcodes before scanning, the portion where bar code may be is sent to barcode detection function in our plugin.
DynaPDF functions are used to generate PDF with scanned images. Text from OCR result is layered on top of each image to allow search and select & copy in PDF viewer later.
Final PDF is signed and archived as PDF/A.
OCR text is searched for key terms to automatically identify vendors or extract total amount for invoices. This can be done with RegEx functions or with CoreML functions and machine learning.
4. Order to Invoice
Sales rep enters order on iPad with customer. When done, record is saved and script on server gets triggered.
The server script generates invoice PDF.
DynaPDF functions are used to add extra pages to invoice PDF for terms of order and current promotions. PDF can be signed digitally. Clickable links are added to the PDF for convenience.
Barcode functions are used to create barcodes and put them on invoice, on package, on retour label and other documents. When anything comes back, you can scan barcode and find the record in database directly.
SendMail functions are used to generate nice email with HTML and includes order confirmation PDF.
Each email sent to customer includes unique ID in header, so bounce emails can be processed automatically. If client gave a wrong email and email bounces, we may get corrected email while client is still in the shop.
SQL functions in MBS Plugin are used to connect to MySQL server for website and update the inventory counts for the webshop. If needed SSH functions can be used for tunneling remote database access though SSH tunnel.
SQL functions for direct database access or CURL functions for web service are used to move invoice data to accounting software, if that is not done in FileMaker.
PDF for customer may be printed at a printer near sales rep based on location (see iBeacons functions in FileMaker Go) to pickup, if physical signature is needed or paper should be given to client. DynaPDF.Print and PDFKit.Print functions send PDFs directly to printer on Mac/Windows.
If needed, we can use label printer via CUPS, serial port or socket functions directly to send control commands to printer and print labels as needed.
SerialPort or Socket functions are used to talk to scale and makes sure the package weight matches the expected weight for the items inside. Avoids packages with wrong or too many/few items.
CURL functions are used to talk to post service (e.g. UPS) and generate a package label.
SerialPort or Socket functions may be used to talk to POS system, credit card reader or cash drawer.
As you see we combine dozens of MBS functions to do various tasks and support a big solution in FileMaker to automate the processes. Not mentioned are all the utility functions you may need to process text, lists, have global variables or data structures.
Please do not hesitate to contact us with your questions. If needed, we can provide help implementing features.
At FileMaker conference in Tulúm, we got a feature request to see invisible characters in FileMaker calculations dialog. With next MBS Plugin 9.2, you can press Command-I in the text editor and to toggle showing invisible characters. You may see tab characters, new lines and even unprintable control characters show. This applies both to calculation dialog and custom functions dialog.
Another thing we got are tab stops. By default there are 12 and we just double this to 24 for you. So you can use tab characters to organize your bigger statements. Pressing Command-R will show the ruler if you need it, so you can see the tab stops. While you can use various options there, the formatting will not be saved in FileMaker.
You can press Command-F to search for text, press Command-G to continue search and press Command-Option-C to copy text with style.
We try to make memory leak free plugins. That is difficult and may even be impossible to do 100%. But we try our best and if you find a memory leak, please let us know.
Especially for server applications running a long time, a leak can bring down a server. If you just leak 5 KB per second on a server script, this may be over 2 GB in a week ending up in swap storage. If it's slow enough, it will fill your server's disk with swap files, but if it leaks fast, it will also hit performance a lot!
We do static analyses on our source code to find leaks. We do use C++ classes to automatically free memory when they are released, e.g. on function end. And we use NSAutoreleasePools on Mac to collect objects and release later. We try to get memory management right and automatically get there. But there may always be things not found by us.
A memory leak you report should be reproduced in a small script/method, which can be run several times. First call my do initialization steps and trigger some framework initialization, but any subsequent call should result in a higher memory usage each time. This method may have a loop to the relevant steps a 1000 times to make it a significant leak. On the end, you should have leaked a few Megabytes, so we can look for big objects not freed or thousands of small objects of the same type. Make sure you do all the release/free calls as provided by the plugin.
Due to memory management, memory is allocated in chunks. Memory is freed with delay, so you may need a short pause for memory pools to be cleared. So two or three runs may allocate the chunks
A lot of frameworks we use do leak themselves. e.g. Cocoa framework on Mac has a lot of small leaks. So in general we are not really looking for leaks which just leak a few kilobytes every few minutes. Watching a Cocoa app in Instruments we see a lot of small leaks. We prefer to fix the leaks in our code!
The FileMaker unconference in Tulúm, México started. About 45 people sitting on the stage on a mixture of seats. Looks like not everyone is here yet, maybe due to the fabulous reception yesterday in the garden?
Looking forward to meet the FileMaker developers here and get new ideas. This is much different than the mass meeting at FileMaker Inc's DevCon.
With the new Continuity camera feature in MacOS Mojave and your iOS device, you can scan documents:
So you place the document on a table, you start the process on your Mac and than you take the iOS device to take a picture. The yellow area shows where the document is recognized, so you can scan it. iOS will do the crop and rectify steps and store the document as PDF. I needed, you can add more pages.
We'll also offer the possibility to show the popup menu with all options including selecting device for more than one of them. Screenshot is in German, but the texts are actually localized to your language.
As you may know there is a feature in MacOS Mojave called Continuity Camera. When an application shows a view which accepts services bringing in photos, you may receive photos from your iPhone. So when you are in TextEdit application, you can use contextual menu on the text area and choose Insert Photo from your phone. The iPhone asks you to shoot a photo and the image file gets transported back and inserted into the text view on your Mac.
Changed Printer.Print to only set collatePages is 0 or 1 and ignore parameter otherwise.
Changed ProgressDialog on Windows to respect DPI of display.
Changed SQL functions to not complain about missing functions with freetds.
Changed SQL.SetConnectionOption to pass more options to commands for MS SQL: SQL_ATTR_CURSOR_TYPE, SQL_ATTR_QUERY_TIMEOUT, SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_SCROLLABLE and SQL_ATTR_CURSOR_SENSITIVITY.
Disabled HealthKit for public release due to Apple's automatic tests. If you need a plugin with HealthKit, please contact us.
Fixed a problem with FMWrapper loading for Mac runtime apps.
Fixed a problem with NTML authentication with CURL functions on Windows.
Fixed an issue where notification on iOS would not show up in the app or trigger script.