Software maintenance contract (Softwarewartungsvertrag)

Friday 30 September 2016 at 9:59 pm
If you need our plugins for a bigger organization, it may be difficult to order each license or consulting service on it's own. For some organizations it can take a year between someone needing a license an the delivery of a license key! The bigger the organization the longer orders may take due to bureaucracy.

So instead of going through specifications, offer, purchase order, invoice and license delivery, we can offer alternatives.

First, you can order license with updates for several years included. This way you don't need to come back every year for a license update.

Second, we can setup a software maintenance contract. This gives you a subscription for the plugins you need. We would send license keys and invoice for initial purchase or when old keys expire. If you need help with using a plugin, your support requests gets priority and of course billed. On the month end, we send an invoice for development time. The contract defines rates and availability.

If you are interested, please contact us.

Packing for conferences

Thursday 29 September 2016 at 5:28 pm
I just packed a few hundred pens in my bags for the conferences in Houston and Salzburg.
If you want one, be sure to visit the conference and look for me.

As you see over the years we got different designs for the pens. Xojo used to be named Real Studio and REALbasic. We even fixed the typo in FileMaker and capitalized the M. Next time we make pens, I will probably change again and use the .com domain.

Did you get one of my pens the last year?
If you have a different design, please let me know.

Listbox.CellTextPaint examples

Thursday 29 September 2016 at 11:37 am
Xojo LogoHere are three examples from our own Xojo made applications on what you can do with the Listbox.CellTextPaint event:

The first one takes the text from the cell and reduces text size until the text fits or we are down to 8 point font size. This is useful if you for example display a postal address in a 40 pixel height row Listbox. As we don't know how long an address is, we scale it down. So a 2 line one shows in a bigger font than a 4 line one.

The font is set by the listbox properties including any italic, bold or underline flag.

EventHandler Function CellTextPaint(g As Graphics, row As Integer, column As Integer, x as Integer, y as Integer) As Boolean dim s as string = me.Cell(row, column) g.TextSize = 13 dim h as integer = g.StringHeight(s, g.Width) while h > g.height and g.textsize > 8 g.textsize = g.textsize - 1 h = g.StringHeight(s, g.Width-4) wend g.DrawString s, 2, g.textsize, g.Width-2 Return true End EventHandler

Thoughts about visiting Conferences

Wednesday 28 September 2016 at 11:06 pm
Recently I visited developers in Switzerland and we discussed visiting conferences. Some developers love to go to conferences and others are skeptical whether the cost is worth it. So lets think about reasons why you should go:

1. Get out of your office

Some developers have not much contacts to other developers. They code in their offices or at home. Some have no colleagues to talk with or don't participate in the forums.

So please use the conference as a chance to get out of office and meet others. A little bit travel may make a difference to your normal work week. Meet other people who may have the same problems and give you conceptions to solve them. Get a different point of view on your development workflow.

2. Add extra days

When you decide to visit a conference, please add a few extra days. No need to rush to save a few bucks. Stay at least a day before and after the conference to relax a bit, join any before/after activity with other attendees and enjoy a bit of sight seeing.
Especially when I fly internationally I often need a day to do the work left on the desk while I was in the airplane.

Often it can be much cheaper to fly to another city, enjoy a few more days there and drive to the conference city.
As far as I see my ticket price to Dallas is about half of the cost to flight to Austin. And Frankfurt Dallas would be a direct flight. With the savings on airfare, I can easily pay a few extra hotel nights. And even the accounting will not complain if I show them the cost for short stay (expensive) vs. longer stay (cheaper).
(Last year's Xojo conference was in Austin. But for next year's FileMaker DevCon in Phoenix, I may get a flight to Los Angeles or Denver.)

3. Learn something

At the conference, go and visit a few sessions. The title often doesn't tell whether this will be interesting or not. Don't go to topics where you know most already as that could be a waste of time. If some sessions are recorded, go into the others who aren't. You can watch recordings later. Try to pick sessions with new topics you are not familiar with or at least some which have a different view on something you know. This way you have more things to learn about.

Be sure to visit the keynotes to learn what is new and coming soon. You depend on our development tools and if something is going to change soon, you should know it first hand. And later on the conference ask all the questions you may have.

4. Get contacts

Simple rule: Try to talk to everyone a few minutes. Ask what they do, what they think about the news at the keynote and how they enjoy the conference. It is always good to have contacts to people which may at some day help you. For example in a forum, or as contractor or employee. For self employed developers, it may be good to present yourself and maybe someone will hire you in future.

5. Talk to engineers

Talk to the developers writing your tool. Know who does what in the company, so you can email them directly with problems to get a quick answer.
Tell the engineers what you need, what you like, what you don't like. Telling them what concerns you have could lead to a change in some things. If you have concerns about licensing, platform support, upcoming features or problems they may not be aware of, please tell them.
Also fill bug reports and send them the IDs, so they can keep an eye on the cases and follow up with you.

6. Show problems to experts

If you have a problem, bring an example project to the conference. Show it some engineers and ask for help. Maybe they can run Xojo/FileMaker in debugger itself and see what line in the C code causes the exception you see. The conference visit may be paid if a big problem is solved for you at the conference!
At least you may find a workaround with the engineer and get a fix with the next version.

7. Lobby

Stay at the conference. Don't go shopping in-between. You are here to learn and get contacts. So use the time between sessions or if no interesting session is running to talk to people. Especially use the time to have some private time with a tool vendor in the exhibition area or an engineer. You easily pay $100 per hour at the conference for your trip, so don't waste it.

I highly recommend everyone to visit a conference if they can. If the conference is in a holiday destination, maybe bring family and enjoy a few extra days. If the company pays for your flight, your hotel room and a rental car, it should be no big problem to buy an additional flight ticket and just take your wife to a holiday with low cost for yourself.

See you at the next conferences:

Xojo at the rescue

Wednesday 28 September 2016 at 11:18 am
Xojo LogoToday I once again got a winmail.dat from a Windows Outlook user. None of my unarchiver tool can read that. I dropped it on a text editor and saw it has an uncompressed PDF inside. So I quickly wrote this little Xojo app to extract it:

// pick the winmail file dim f as FolderItem = SpecialFolder.Desktop.Child("winmail.dat") // read it to memory dim b as BinaryStream = BinaryStream.Open(f) dim s as string = b.Read(b.Length) // as I know it has a PDF, we look for typical header/footer dim p1 as integer = instrb(s, "%PDF-1") if p1 > 0 then dim p2 as integer = instrb(s, "%%EOF") if p2 > 0 then p2 = p2 + 5 // extract PDF portion dim PDFData as string = midb(s, p1, p2-p1) // write to file dim o as FolderItem = SpecialFolder.Desktop.Child("winmail.pdf") b = BinaryStream.Create(o, true) b.Write PDFData end if end if
That is why I love Xojo so much. I just fire up the IDE, type 10 lines and a little problem is solved. Others may write a shell script, a php script or whatever to do the same. But I know Xojo well and so I prefer writing it in Xojo.

FileMaker Cloud with MBS Plugin

Wednesday 28 September 2016 at 09:48 am
FileMaker Inc. announced their new FileMaker Cloud service. In your amazon account add can add an EC2 instance for a virtual private server. Inside you can now install CentOS 7 64-bit with FileMaker Server for Linux. This gives you a server in the cloud which you don't need to maintain yourself. Amazon will keep it updated and running. You can upload your database on the admin panel and use your solution. The use case for this could be:
  • You have a team of users needing a solution, so FLT is the matching licensing scheme.
  • You don't want to host yourself.
  • You are okay with hosting your server with Amazon.
  • You are okay with using data centers in US. Other data centers will come in next months.
  • You are okay with using FileMaker Server 15 and clients in version 15.
If you met those criteria, you should try it. Those virtual servers are great for temporary solutions. If a client needs a new solution for a sale promotion for a few months, you can start a server today. Run it for 3 months, download a copy of the database and stop the server. No need to sign up for a year long contract.

We'll see how this works for people in US trying it. This is a 1.0 release, so there will be issues. Other data centers will be added according to FileMaker Inc. And once we have data centers within the same jurisdiction as our company, we can start using this for real testing. Currently I have myself a small test server in Ireland and it is pretty responsive.

MBS Plugin for Linux is available if you need. We will include it in 6.5 betas soon. Gladly I started building libraries for Linux at DevCon in July when we heard first time about FileMaker Cloud. Be sure to watch the Cloud Videos:

MBS Releases the MBS Xojo / Real Studio plug-ins in version 16.4

Tuesday 27 September 2016 at 12:56 pm
NICKENICH, Germany (September 27th, 2016) -- Monkeybread Software releases version 16.4 of the MBS plug-in for Xojo and Real Studio.

The MBS plug-in comprises a collection of several plug-in parts which extend the Xojo (Real Studio) development environment with 2,300 classes featuring over 59,000 documented functions. Our plugins support all three platforms Mac OS X, Windows and Linux with all project types desktop, web and console including 64-bit and ARM targets.

Some of the highlights on the 16.4 update:

With our new plugin version we add a class to use the camera of a Raspberry Pi for capturing images. You can enumerate devices, connect to one, select various options, capture pictures or get a preview image. If you have a similar camera on a desktop linux, you can of course use the same class there.

This release improves a lot of linux classes. The DirectorySizeMBS class now fully supports linux to quickly check the size of a directory. The module for extended attributes now works on Linux as well as the SystemInformationMBS.MACAddressMBS function.

If you need to securly create password hashes, we recommend checking the new Argon2MBS class. Argon2 is a price winning key derivation function which you can now use to generate encryption keys.

For our SQL Plugin, the internal SQLite library now allows you to run the same commands as the SQLite shell tool. Use this to benefit from various import and export functions there. For SQLValueMBS class, we added new properties to easier read/write blob values. You can now stream them from/to folderitem or streams. You can set a BLOB from memoryblock directly without converting to a string, from a variant as well as all parameters in a SQLCommandMBS from a dictionary. Our SQLite3MBS can now load extensions directly. For prepared statements, the BindType function is now optional.

On Windows we can now read/write/delete file streams. So beside some data your files can have additional metadata which your app can use, e.g. to store backup state. Our LargeBinaryStreamMBS class can now handles long file paths better. And our windows list class can now enumerate child windows.

We added a new WebKit 2 control for Mac. This allows you to have one HTMLViewer replacement which dynamically switches between WebKit 1 (32-bit) and WebKit 2 (64-bit) depending of the host application.

With the new MBS.Has*Plugin constants, you can write conditional code which uses plugin functions only if the plugin is installed. This helps for bigger source code libraries.

We got new CRC, more GraphicsMagick and a new SplitMBS function. Our MemoryStorageMBS class helps to break 32-bit memory limits. We improved several Cocoa related classes including NSLayoutManagerMBS, NSURLRequestMBS and NSFontManagerMBS

Finally we updated LCMS 2 to version 2.8, OpenSSL to 1.0.2i, SQLite to 3.14.2 and DynaPDF to The UniKey plugin now uses 6.5 SDK and supports 32 and 64bit targets on Mac, Windows and Linux including ARM.

See release notes for a complete list of changes.

MBS FileMaker Plugin 6.4 for OS X/Windows

Tuesday 27 September 2016 at 10:32 am
Nickenich, Germany - (September 27th, 2016) -- MonkeyBread Software today is pleased to announce MBS FileMaker Plugin 6.4 for Mac OS X or Windows, the latest update to their product that is easily the most powerful plugin currently available for FileMaker Pro. As the leading database management solution for Windows, Mac, and the web, the FileMaker Pro Integrated Development Environment supports a plugin architecture that can easily extend the feature set of the application. MBS FileMaker Plugin 6.4 has been updated and now includes over 4100 different functions, and the versatile plugin has gained more new functions:

For Mac we now support scanning directly via the OS APIs called ImageCapture. So we can support all the scanners supported by Image Capture application by Apple. For Windows we now support TWAIN with 64-bit better.

When using FileMaker on Mac you can now enjoy our contextual menus. We add a generic contextual menu to all table controls. We used to have a menu there since version 6.0 to copy the content of the table. Now you can use copy, cut, paste and delete in addition. For the script workspace we have a command to activate and deactivate script steps.

If you like SQL, you can now use the queries made with FM.SQL.Execute and insert the records via FM.SQL.InsertRecords into your FileMaker database, e.g. another table. Or you use FM.SQL.InsertRecordsToSQL and insert the result of the query into another SQL database, e.g. MySQL. Both functions help to easily copy records from one table to other.

With DynaPDF you can now create interactive buttons in your PDFs and link them to javascript actions. We now provide details on all colorspaces and allow to easily list and extract embedded images.

The new time parse and format functions help you with importing or exporting times and dates. You can specify the format and let the plugin parse any date, time or timestamp. Of course you can format times, dates or timestamps as well.

We improved our dialog, toolbar, list, LDAP, PHP, RichText, RunTask, slideshow, file and email parser functions. We rewrote the AppleScript functions to better work in 64-bit applications and prepared the plugin for future FileMaker releases.

Finally we updated OpenSSL to version 1.0.2i, SQLite to 3.14.2 and DynaPDF to

More details in the release notes. Please take the time to check our 400 example databases and check where you can use our plugin features in your solutions.

PS: We have a version for Linux, if you like to try it with FileMaker Cloud, too.

Tip of the day: Calling function name

Sunday 25 September 2016 at 9:18 pm
Just talked today about how to know the calling function name. Solution can be to ask this by getting call stack. So here a code snippet:
Function CallingFunction() As string // Query name of calling function of a function #Pragma BreakOnExceptions false try // raise a dummy exception dim r as new NilObjectException raise r catch x as NilObjectException // get stack dim stack() as string = x.Stack // pick function name and return dim name as string = stack(2) Return name end try End Function
The name is encoded name including parameter hints for the compiler.

MBS FileMaker Plugin, version 6.4pr9

Saturday 24 September 2016 at 3:34 pm
New in this prerelease of the 6.4 plugins: Download at or ask for being added to the dropbox shared folder.

MBS Xojo / Real Studio Plugins, version 16.4pr9

Saturday 24 September 2016 at 3:25 pm
New in this prerelease of the 16.4 plugins:
  • Added orderFrontStylesPanel and orderFrontFontPanel for NSFontManagerMBS class.
  • Updated OpenSSL to 1.0.2i
  • Upgraded Unikey plugin to use latest 6.5 SDK and supports 64-bit and Linux ARM.
  • Added IOPowerSourcesMBS.ExternalPowerAdapterDetails function.
Download: Or ask us to be added to our shared Dropbox folder.

Todo/Reminder Synchronization for FileMaker on Mac using MBS Plugin

Thursday 22 September 2016 at 7:11 pm

Do you have a need to synchronize Todos from your FileMaker database to the Mac, iPad or iPhone?

Today I have a script which may serve as an example on how to synchronize from a table in FileMaker with Todos to the Reminders app on a Mac. Those reminders can than be sychronized via iCloud to your iPhones and iPads. For a Server based solution, you need a Mac (a robot) doing this with FM Pro and share reminder lists from there to your devices.

The script needs to be compatible for us with FileMaker 13, so we use the older Calendar API. For newer projects with 64-bit only (and possibly iOS), you prefer the newer Events API. Be aware that in the older Calendar API in newer OS X versions the DueDate is no longer a timestamp, but just a date. The Events API can do it correctly and use a timestamp. FileMaker 15 is 64-bit only, so you can use both function sets, but please decide which is better for you.

The script can be run regularly, e.g. via Schedule functions. It loops over current set of records. You may want to limit the records to only the ToDos for the next three weeks. If there is an UID saved for the todo, the reminder is checked. If it exists and is newer, we sync back title, notes and completed flag. You can add more fields. A special case here is to allow user to store in notes how long it took to do the job. That value is stored in a field in FileMaker. If the event is newer in FileMaker, we overwrite all values. If we have no UID, we create a new reminder in the right reminder list (calendar). How you map your priorities and completed state, is of course dependent to your database. But please save the UID for later sychronization.

If you build a solution with this scirpt please edit it. Change all fields to your field names and add some more error checking. You may want to implement slightly different rules for synchronization, especially on who wins in case of conflicts.


Xojo Optimization

Thursday 22 September 2016 at 2:54 pm
Xojo LogoThe last Xojo release brought us an optimization switch. We can now decide whether we want default, moderate or aggressive optimization. I just finished an article for Xojo Developer Magazine about some good optimization things happening. But there is still room for improvement.

For my article I have three nice cases to show you what is generated for default, moderate and aggressive, so you learn what the optimizer does. I see optimizations going on for loops, common subexpression and recalculating expressions.

But looking for optimization cases with math functions, the code generator could be better. As it does not use the standard functions for e.g. sqrt, but calls Xojo's runtime functions, the compiler can't optimize them away. (Feedback case 45298). And for multiple calls to object methods, the code generator could provide hints to compiler that self is not going to change while a method runs, so a lot of nil object checks could be optimized away. (Feedback case 45299)

We'll see what Xojo Inc. will reveal on future development at XDC. Be sure to join the conference and visit the sessions about the compiler to learn how it works.

Select Internet Explorer version for FileMaker

Wednesday 21 September 2016 at 08:39 am
As you may know the Webviewer in FileMaker uses Internet Explorer version 7 for rendering websites, even if you have a newer version of Internet Explorer installed.
We can change that version to 10 or 11 if you need with our new Webview.SetInternetExplorerVersion function. There we can switch FileMaker to use a newer version, e.g. version 11.

In a test on Windows 10, we get by default this browser version:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)

and with setting it to 11000, we get this:

Mozilla/5.0 (Windows NT 6.2; Win64; x64; Trident/7.0; rv:11.0) like Gecko

Just call the function once when running your solution.
Available for 6.4pr9 plugin or by email on request.

Split and Join strings

Tuesday 20 September 2016 at 10:45 am
Splitting and joining string arrays is a common operation in Xojo projects. Beside the built-in Join and Split functions, we do have a couple of alternatives, optimized in their way.

First we have Split:

SplitMBS(value as String, delimiter as String = " ") as String()

This takes the string and if it is unicode convert it to UTF-8 and split it. If delimiter is nil, splits into an array of letters.
If encoding is different, we split it and keep the original encoding.

For joining, we have 5 alternatives:

JoinStringMBS(strings() as string) as string
JoinStringMBS(values() as variant) as string
JoinDataMBS(values() as variant) as string
JoinDataMBS(strings() as string) as string
JoinDataMBS(blocks() as memoryblock) as string

So we can join Strings as well as MemoryBlocks. As convenience we can also join arrays of variant with them mixed. JoinDataMBS joins data, so all the bytes are just added up ignoring any encoding. JoinStringMBS converts first all to UTF-8 and returns the text back as UTF-8.

Please try them. SplitMBS is in 16.4pr8.

MBS FileMaker Plugin, version 6.4pr8

Monday 19 September 2016 at 2:46 pm
New in this prerelease of the 6.4 plugins:
  • Added FM.GetSQLBatchMode and FM.SetSQLBatchMode functions to speed up some SQL inserts.
  • Changed trace feature to not log calls to Log function.
  • Added List.HasValue function.
  • Trace now logs duration in seconds for long running SQL commands.
  • Added contextual menu commands for copy/paste to script workspace and other list controls.
  • Changed plugin to show dialogs when using expired license key.
  • Fixed Dialog.AddField to work on OS X 10.9 or older. Also fixed black label background for FileMaker 11.
Download at or ask for being added to the dropbox shared folder.

MBS Xojo / Real Studio Plugins, version 16.4pr8

Monday 19 September 2016 at 2:24 pm
New in this prerelease of the 16.4 plugins:
  • Changed AliasInfoMBS properties to be read only.
  • Changed SplitMBS to be encoding aware for 8bit encodings. So you now split a Windows ANSI string and get back Windows ANSI strings.
Download: Or ask us to be added to our shared Dropbox folder.

Developer Meeting in Zurich, Swiss

Friday 16 September 2016 at 11:57 pm
This evening we had an excellent dinner together with FileMaker and Xojo developers in Zurich:

Second meeting with 12 people in total (and 8 the day before).
Interesting what people do and what they can show. The LehrerOffice application, made in Xojo, has an impressive feature set with custom reporting, self written controls including a grid and impressive user interface.

Sett you at the next conference in Houston, Salzburg, Berlin or Phoenix.

Plugin SDK related product ideas for FileMaker

Friday 16 September 2016 at 10:31 pm
The following product ideas for FileMaker are related to the plugin SDK and plugin usage. I appreciate if your vote helps getting some attention for them from FileMaker Inc.. If the plugin SDK improves over future releases, the plugin authors can write better plugins and provide better features to you. Here 5 new ones which I got the idea from our FileMaker developer meeting in Zurich today:
As you see some basic needs like having any idea why a plugin doesn't load, or easily access content of a container or just getting a 64-bit number precisely returned to you from a plugin.

And some older ideas:
Thanks for reading and voting.

Two ideas for "no editor" panel

Friday 16 September 2016 at 11:31 am
When you select a class in your project in the list of project items, you see in the middle of the Xojo window nothing. There is no editor open, but this space could be used. At our meeting yesterday we discussed the idea to have there some information visible:

The first idea (Feedback case 43673) would simply fill the space with a note. That would be a note you normally add to the class. But if you assign it a special name, e.g. "About", it will be shown as default content there. If no such note exists, we still would get the no editor panel.

With that default note, we can have a convenient place to put documentation for your classes and everyone new to the class can easily find it.

The second idea (Feedback case 45236) is a bit more. There we ask for showing the public interface of a class. This would make the use easy as it is a kind of documentation. We see what methods and properties are there and all the private stuff and the code is hidden.

Especially for encrypted classes, where you can't look inside without password.

If you like this ideas, please add your comments and let's discuss that in Houston at XDC with Xojo engineers.

Developer Meeting in Zurich, Swiss

Thursday 15 September 2016 at 11:09 pm
This evening we had an excellent dinner together with FileMaker and Xojo developers in Zurich:

We had a lovely talk about plugins, Xojo and FileMaker and about the things people do with the tools. Amazing how many here use both tools to build solutions!
Talking about conferences, I hope to see you guys again in Houston, Salzburg, Berlin and Phoenix.

PS: Tomorrow the second round, maybe with double the number of people.

Contextual Menu in FileMaker

Thursday 15 September 2016 at 2:45 pm
On the trip to Zurich I had some spare time and worked on extending the contextual menu for use in FileMaker. So the plugin will simply provide in contextual menu some menu entries from FileMaker's menu. If you choose a menu entry, we redirect the call to trigger the original menu command internally. So FileMaker doesn't notice. We even take the txt from FileMaker menu bar so they are localized automatically.

Here in German FileMaker 15 with script workspace:
FileMaker 15 Script Workspace
and in English FileMaker 13 with script editor:
FileMaker 13 Script Editor
Soon available with next plugin. Or earlier if you ask kindly by email.

Register MBS Xojo Plugins

Thursday 15 September 2016 at 1:07 pm
When you get your emails for the license keys, you find the key inside in clear text. Also we provide a function call to register with clear text and one with a bit of encoding. So you can just add those to your event and be happy:
// in a Register method called from App.Open // Complete Set: User Tester, MBS Complete, 201704, 5234524524352435 dim s as string = decodeBase64("S1JiU24523451liVG9oVUpybUQ=", encodings.UTF8) dim p as string = decodeBase64("TUJTI24352345sZXRl", encodings.UTF8) dim n as string = decodeBase64("V245435230ZXI=", encodings.UTF8) dim e as integer = 201704 dim t as string = decodeBase64("cWJWY3254325245xSWYxYk4=", encodings.UTF8) if not registerMBSPlugin(n, p, e, s+t) then MsgBox "MBS Plugin serial not valid?" end if // DynaPDF: "31452345-4523452345-23452345" dim key as string = DecodeBase64("IjMxNDUyMzQ1LTQ1MjM0NTIzNDUtMjM0NTIzNDUi", encodings.UTF8) DynaPDFMBS.setLicenseKeyGlobal key // ChartDirector: User Tester, 201704, 34234234, -202995723 dim serial1 as integer = 342342 dim serial2 as integer = -2029957 dim year as integer = 2017 dim month as integer = 4 dim x100 as integer = 100 dim name as string = DecodeBase64("VXNlciBUZXN0ZXI=", encodings.UTF8) // User Tester CDBaseChartMBS.setLicenseCode name, year*x100+month, serial1*x100+11, serial2*x100+23 // SQL Plugin: User Tester, 201704, 523452345, -203134534 dim serial1 as integer = 5234523 dim serial2 as integer = -2031345 dim year as integer = 2017 dim month as integer = 4 dim x100 as integer = 100 dim name as string = DecodeBase64("VXNlciBUZXN0ZXI=", encodings.UTF8) // User Tester SQLGlobalsMBS.setLicenseCode name, year*x100+month, serial1*x100+02, serial2*x100+-40 // LibXL with platform depending keys #if TargetMacOS then XLBookMBS.SetKeyGlobal "Test User", "mac-239487652908567926" #elseif TargetLinux then XLBookMBS.SetKeyGlobal "Test User", "linux-563547357345735475" #elseif TargetWindows then XLBookMBS.SetKeyGlobal "Test User", "windows-375473457345735473" #endif
Of course the standard encoding is very easy to break and when a key is leaked on the usual sites on the Internet, we have to block it. So please hide the keys a bit and help to make sure your key isn't going to be blocked. For LibXL you get keys per platform. You may not need all variants, but for those you use, please include the key like above.

Properly register MBS FileMaker Plugin

Thursday 15 September 2016 at 10:48 am

Today we want to show you how to register our plugins properly in a solution.

This is the start script for your solution which calls the InitMBS script to register: 

#Register for client

Perform Script [“InitMBS”]

#Register for server. Will be ignored if no server or no plugin installed on server

Perform Script on Server [“InitMBS”]

As you see we register both locally for the client and for the server. As we don't wait for server script to finish, it can run on server when there is time. And if there is no server, the line will be ignored. The InitMBS script looks like this:

#Enable debug logging. Shows messages in DebugView/

Set Variable [$r; Value:MBS("Trace")]

#Register if needed for right platform

If [MBS("IsRegistered") = 0]

If [MBS("IsRuntime")]

Set Variable [$r; Value:MBS("Register"; "test"; "Complete"; "Runtime"; 123; 123)]

Else If [MBS("IsServer")]

Set Variable [$r; Value:MBS("Register"; "test"; "Complete"; "Server"; 123; 123)]

Else If [MBS("IsClient")]

Set Variable [$r; Value:MBS("Register"; "test"; "Complete"; "5 Seats"; 123; 123)]


Set Variable [$r; Value:"Unknown platform: " & MBS("Platform")]

End If

#Show errors, so developer can fix them

If [$r ≠ "OK"]

Show Custom Dialog ["InitMBS failed."; $r]

End If

End If

#May initialize other stuff

#like dynapdf with library in extensions folder

If [MBS("DynaPDF.IsInitialized") = 0]

Set Variable [$DynaPDFLicense; Value:"1003637-16022016-3-8-12-685C57F..."]

If [MBS("IsWindows")]

Set Variable [$r; Value:MBS( "DynaPDF.Initialize"; "dynapdf.dll"; $DynaPDFLicense)]

Else If [MBS("IsMacOSX")]

Set Variable [$r; Value:MBS( "DynaPDF.Initialize"; "dynapdf.dylib"; $DynaPDFLicense)]


Set Variable [$r; Value:"Unknown platform: " & MBS("Platform")]

End If

#Show errors, so developer can fix them

If [$r ≠ "OK"]

Show Custom Dialog ["InitMBS failed."; $r]

End If

End If

As you see we enable Trace. This is useful to see calls to the plugin in DebugView application (Windows) and (Mac). For Server the messages are written to /Library/FileMaker Server/Logs/stderr.log file. On Windows you need to run DebugView as admin and enable Global Win32 Debug logging to see messages from Server plugin.

Next we check if plugins are not registered and register them with the right key depending on whether we are a client or server. If this fails, we show an error message. Next we check for DynaPDF and register it with a license key and the right name of the library. By just passing the library name, the plugin will look for this file in the same folder as the plugin itself.

If you have questions, please do not hesitate to contact us.

MBS Xojo / Real Studio Plugins, version 16.4pr7

Wednesday 14 September 2016 at 10:16 pm
New in this prerelease of the 16.4 plugins:
  • Added SplitMBS function.
  • Added InternalSQLiteLibraryMBS.Shell function.
  • Updated SQLite to 3.14.2.
  • Fixed ScreenShotDisplayMBS to return nil instead of black picture on Windows when copying screenshot fails.
  • Added NSLayoutManagerMBS.usesFontLeading property.
  • Added more GraphicsMagick functions.
Download: Or ask us to be added to our shared Dropbox folder.

MBS FileMaker Plugin, version 6.4pr7

Wednesday 14 September 2016 at 7:37 pm
New in this prerelease of the 6.4 plugins:
  • Updated SQLite to 3.14.2.
  • Added Toolbar.SetImage, Toolbar.SetLabel, Toolbar.SetPaletteLabel, Toolbar.SetTooltip.
  • Added Dialog.AddField, Dialog.ClearFields, Dialog.GetFieldText and Dialog.SetFieldText.
  • Added SQL.ListCommands and SQL.ListConnections.
  • Changed SQL.NewCommand and SQL.NewConnection so you can pass your own ID instead of getting one from plugin.
  • Added SQL.GetCommandTag, SQL.GetConnectionTag, SQL.SetCommandTag and SQL.SetConnectionTag.
  • Added ImageCapture functions to replace TWAIN on Mac.
  • Added ProgressDialog.Reset function.
Download at or ask for being added to the dropbox shared folder.

SQLite3 command line tool in Xojo

Wednesday 14 September 2016 at 2:37 pm
With next plugin version we allow you to run shell commands with SQLite3 within the plugin. This way you can easily script import/export things and use all the commands the SQLite3 command line tool offers.
dim arguments() as string dim f as FolderItem = SpecialFolder.Desktop.Child("test.sqlite") dim o as FolderItem = SpecialFolder.Desktop.Child("out.csv") arguments.Append "sqlite3" // path to app arguments.Append f.NativePath arguments.Append "-csv" arguments.Append "-header" arguments.Append "-cmd" arguments.Append ".output "+o.NativePath arguments.Append "-cmd" arguments.Append "select * from Documentation;" dim n as integer = InternalSQLiteLibraryMBS.Shell(arguments) Break
As our plugin supports encryption (SEE), JSON extension and full text indexing (FTS5), you can benefit from those, too. I think a few things can easily be automated in Xojo using this new interface. Please make sure you have the same database not open in your Xojo app the same time to avoid cache issues when writing to database.

FileMaker Magazin - MBS Artikel

Tuesday 13 September 2016 at 3:21 pm

For our Germans speaking users:

Wir haben die Artikel zum MBS Plugin aus dem FileMaker Magazin gesammelt hier online gestellt: FileMaker Magazin Artikel:

Wir empfehlen allen FileMaker Anwender ein Abo vom Magazin und den Kauf der alten Ausgaben. Das FileMaker Magazin ist eine excellente Quelle von Informationen, Anleitungen und Profitips.

Xojo 2016 Release 3 Available

Tuesday 13 September 2016 at 1:45 pm
Xojo LogoXojo 2016 Release 3 is now available for download at This release adds 90 improvements and 11 new features, including optimization settings to produce faster apps.

Xojo 2016 Release 3 features include:
  • Added Moderate and Aggressive compilation for 64-bit and ARM builds
  • SQLiteDatabase upgraded to v3.14.1 and now supports FTS5 for full-text searching
  • Additions to refactoring features of the IDE and Code Editor
  • Save Code Editor color schemes to easily share and re-use
  • ICU library included with Linux builds for improved compatibility
  • Easily convert Pictures in projects to Image Sets
The complete list of updates is available in the release notes.

Reddit AMA - Join us in the Xojo sub-Reddit today for an "Ask Me Anything" with Geoff Perlman at 1 PM CT. Bring your questions about the release, Xojo, running a software business, XDC, and everything else!

PS: Please make sure you have MBS Plugin in version 16.3 or newer to avoid trouble.

Replace toolbar images and labels

Monday 12 September 2016 at 9:08 pm
A little idea which came to mind today:

FileMaker 11, 12, 13, 14 and 15.

As you see we put a custom label and image on the toolbar items for delete and add record buttons.
You may know that we can create our own toolbar buttons. But we can now also modify existing toolbar items. You can now tell the plugin to keep an eye on the toolbar items which FileMaker uses. And when the plugin sees a FileMaker button being created, it can put a modified label on the button. Enjoy!

PS: You can even use triggers to setup this before you open a new window, so the new window will use the customized icons/labels.

ImageCapture functions for Mac OS X

Monday 12 September 2016 at 11:59 am

For next version of our FileMaker plugin, got a few new ImageCapture functions.

Those functions should allow you to scan images from a flatbed or document feeder scanner. Even for 64-bit and without TWAIN drivers.

So all scanners working in Digital Images application coming with OS X should work just fine in FileMaker. You can query device informations and parameters. And of course you can set parameters like whether you like to get gray scale or color images, the file type, resolution or the area to scan. All scans are performed to files on disk in a given directory. Than you can import them to container fields. Here a sample script:

# set parameters

Set Variable [$physicalWidth; Value:MBS("ImageCapture.GetParameter"; "physicalWidth")]

Set Variable [$physicalHeight; Value:MBS("ImageCapture.GetParameter"; "physicalHeight")]

Set Variable [$r; Value:MBS("ImageCapture.SetParameter"; "documentType"; "USLetter")]

Set Variable [$r; Value:MBS("ImageCapture.SetParameter"; "documentName"; "Scan")]

Set Variable [$r; Value:MBS("ImageCapture.SetParameter"; "resolution"; 300)]

Set Variable [$r; Value:MBS("ImageCapture.SetParameter"; "bitDepth"; 8)]

Set Variable [$r; Value:MBS("ImageCapture.SetParameter"; "pixelDataType"; "RGB")]

Set Variable [$r; Value:MBS("ImageCapture.SetParameter"; "documentUTI"; "jpeg")]

Set Variable [$r; Value:MBS("ImageCapture.SetParameter"; "downloadsDirectory"; "temp")]

Set Variable [$r; Value:MBS("ImageCapture.SetParameter"; "scanArea"; 0; 0; $physicalWidth; $physicalHeight)]

Set Variable [$p; Value:MBS( "ProgressDialog.Reset")]

Set Variable [$p; Value:MBS( "ProgressDialog.SetTitle"; "Scanning" )]

Set Variable [$p; Value:MBS( "ProgressDialog.SetBottomText"; "" )]

Set Variable [$p; Value:MBS( "ProgressDialog.SetTopText"; "Scan from Flatbet scanner." )]

Set Variable [$p; Value:MBS( "ProgressDialog.SetButtonCaption"; "Cancel" )]

Set Variable [$p; Value:MBS( "ProgressDialog.SetProgress"; -1 )]

Set Variable [$p; Value:MBS( "ProgressDialog.Show" )]

Set Variable [$r; Value:MBS("ImageCapture.requestScan")]

Set Variable [$p; Value:MBS( "ProgressDialog.Hide" )]

If [MBS("iserror")]

Show Custom Dialog ["Failed start scan"; MBS("Text.RemovePrefix"; $r; "[MBS] ")]

Exit Script []

End If

Set Variable [$Paths; Value:MBS("ImageCapture.ImagePaths")]

Set Variable [$Count; Value:ValueCount ( $Paths )]

Set Variable [$Index; Value:1]


Set Variable [$Path; Value:GetValue($Paths; $index)]

New Record/Request

Set Field [Images::Image; MBS("Container.ReadFile"; $path)]

Set Variable [$r; Value:MBS( "Files.Delete"; $Path )]

Commit Records/Requests [No dialog]

Set Variable [$Index; Value:$index + 1]

Exit Loop If [$index > $count]

End Loop

PS: For Xojo we have the classes already in our MBS Xojo Leopard Plugin.

A Programmer's Day Xojo Sale!

Monday 12 September 2016 at 08:44 am
Let's celebrate Programmer's Day with a 48-hour Xojo sale! Get any new Xojo license, upgrade or renewal for 20% off when you complete your order by 11:59PM on Tuesday, September 13th! Simply use discount code PROGDAY16 when you check out!

New Licenses

New Xojo licenses are available in the store for each platform you wish to target, and we offer Xojo Pro (best value), which is a single license for all platforms, plus many additional benefits.

Upgrade to Xojo Pro

Already have a Xojo license but need more functionality? Save 20% on an upgrade to Xojo Pro, check out your specialized Xojo Pro upgrade price here!


Keeping your license current ensures you will have the best Xojo has to offer! Renew for one or two years and save 20%!


The Xojo Developer Conference is just one month away and there is still time to register! Join us in Houston October 5-7th for the biggest Xojo event of the year, with 30+ sessions, 26 speakers, 2 great evening events and more! Learn more.

Programmer's Day offer valid through September 13th at 11:59PM CST. Offer only applies when you use the coupon code PROGDAY16 to checkout.

10 years since MBS FileMaker Plugin version 1.0

Friday 09 September 2016 at 3:54 pm
Today ten years ago we released the MBS FileMaker Plugin in Version 1.0.
Here the original announcement:

[ANN] MBS Plug-in For Filemaker

Make FileMaker Windows Semi Transparent!
Take Screenshots from FileMaker
Run an Applescript on field exit
and more...

Monkey Bread Software, maker of the popular MBS Plug-in for RealBasic and geist interactive have teamed up to bring the extensive MBS function library to FileMaker. The MBS RealBasic plug-in contains over 10000 functions, and this release represents the first step in a project to bring as many of those functions to FileMaker as make sense. Many many more features to com in the future.

The plug-in is available for FileMaker 8 and 8.5. It is available for Windows XP and as Universal Binary for Mac OS X There is a Developer Tool available to help you get started quickly with documentation and Calculation builder. Demos are available on the website

more info:

Read also: 4000 functions in 10 years

Thanks for the support over years. If you need a license: Try coupon code TenYears for orders via Share-It.

XDC in one month

Thursday 08 September 2016 at 4:33 pm
Just one month left for the 2016 Xojo Developer Conference. I hope you have signed up and got a hotel room before it's booked out.

So far a lot of Xojo developers registered and 50% of the attendees are international, with people coming all the way from the UK, Italy, Canada, Belgium, Germany, Japan, Austria, Sweden, New Zealand and Australia! Also they have a lot of first time attendees - we are really looking forward to meeting all of the new people!

Be sure to join dinner before/after conference with other attendees.

XDC will take place in Houston, TX October 5-7, 2016. It features sessions on best practices, special interests and other technical topics, with content for every level of Xojo developer. Educational sessions will cover topics like Xojo iOS, Raspberry Pi, database design, user interface design, debugging techniques, writing secure apps, and much more! Want to know what XDC is like? Watch our highlights video!

Register now!

XDC will take place at the lovely boutique Hotel Derek in the Galleria area of Houston. It's right in the middle of two airports, giving you plenty of options (and time) to find a great flight! We have negotiated a hotel room rate of $164 a night. Rooms can be reserved here.

If you have any questions about XDC, feel free to email Dana Brown.

MBS Xojo / Real Studio Plugins, version 16.4pr6

Wednesday 07 September 2016 at 4:45 pm
New in this prerelease of the 16.4 plugins:
  • Updated to DynaPDF
  • Added Has*Plugin constants to MBS module.
  • Changed NSProcessInfoMBS.NSActivityLatencyCritical to be a shared function to work around feedback case #31877.
  • Added Linux support for SystemInformationMBS.MACAddressMBS.
  • Fixed picture handling to accept HiDPI images for reading, so you can add a picture again to a page with DynaPDF directly.
  • Updated CanonEOSDigital plugin to load 3.x SDK and 2.x SDK. Please tell plugin if it's 2.x or 3.x as 3.x uses 64-bit integers.
  • Changed email functions to raise exception if you pass email address, subject or message ID including newline character.
  • Added more checks to methods in ServiceManagementModuleMBS module. To raise exceptions with wrong parameters.
  • Fixed a bug with StyledText.RTFDataMBS function handling font sizes.
  • Added Argon2MBS class.
  • Fixed crashes with CURLSEMailMBS when having low memory. Now raises OutOfMemoryException.
  • Improved LargeBinaryStreamMBS to better handle long paths on Windows.
Download: Or ask us to be added to our shared Dropbox folder.

MBS FileMaker Plugin, version 6.4pr6

Wednesday 07 September 2016 at 1:16 pm
New in this prerelease of the 6.4 plugins:
  • Updated to DynaPDF
  • Added Container.ReadFile and Container.WriteFile.
  • Changed email functions to return error if you pass email address, subject or message ID including newline character.
Download at or ask for being added to the dropbox shared folder.

Adding Has*Plugin constants

Tuesday 06 September 2016 at 3:34 pm
On the weekend I had an idea: Let's define in the plugin constants, so you can check with conditional compiling if a given plugin part is available. See this example where we can check if our linux plugin is available:

#if MBS.BuildNumber < 19123 then // older plugins MsgBox "Older Plugin. so status unknown." #elseif MBS.HasLinuxPlugin then // newer plugins and MBS Linux Plugin installed MsgBox "Linux Plugin is installed." #else // MBS Linux Plugin is not installed. MsgBox "Linux Plugin is not installed." #endif
The plugin on startup checks where it's on disk and what plugin files are in the same folder. Than the plugin provides the constants as part of our MBS module. If the plugin files are not found, we don't provide constants.

Of course this is just a solution for our plugins. It would eb nice if Xojo someday defines an #ifdef command or a defined() function. See feedback cases 986 and 9018.

Coming to Zurich, Switzerland

Friday 02 September 2016 at 1:57 pm
Once again I come to Switzerland in the Zurich area.

If you like, you can join me for a dinner with other developers. Please vote for a date here:

Xojo Developer Meeting  FileMaker Deverloper Meeting

I will be there and would appreciate some companion for the evening. Some shop talk about development, plugins, conferences and other cool topics.

Update: I will do both days and everyone is welcome. See you there!

xDev Magazine Issue 14.5 Issue

Friday 02 September 2016 at 12:13 am
The September/October 2016 (14.5) issue of xDev Magazine is now available. Here's a quick preview of what's inside:
  • Cooking with Xojo (Part 1) by Mark Strickland
    Wouldn't you love to type Xojo code to cook your steak? Well, Mark doesn't go that far, but he's planning a project to build his own Xojo-controlled cooker!
  • No Shortcuts for Shortcuts by Marc Zeedar
    Letting your users set their own keyboard shortcuts for your app is the ultimate power user feature. But how do you do it?
  • Making Better Examples 2 by Markus Winter
    Those who teach programming should always be working to be better—more clear, more helpful. Markus has more examples that could be improved.
  • Gestures and Tabs by Sam Rowlands
    Trackpad gestures on the Mac are powerful. Sam shows how you can use them in your own apps, and how to use MacOS Sierra's new Tabbed Windows.
  • Tracking Health Disorders, Part 3 by J.C. Cruz
    Jose continues his health tracking project, this time adding the complexity of tracking and recording a patient's vitals.
Plus: Hadoop, REST Classes, Xojo's latest iOS features, converting dictionaries to JSON, ReText, and much more.

FileMaker Developer Meeting in Dallas

Thursday 01 September 2016 at 08:20 am
There is an upcoming meeting of FileMaker developers in Dallas, Texas:

When: 4th October 2016.
Time: 11 am
Where: Egg and I restaurant, 15203 Knoll Trail Dr., Dallas, TX 75248

We meet, have lunch together and I can tell you all about my MBS Plugin for FileMaker.

If you like to meet the FMP User Group regularly, feel free to check the website and join the September meeting.

If you are interested in personal training, consulting or help with our plugin, feel free to contact me for additional meetings.


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