Tuesday 25 October 2016 at 3:28 pm
New in this prerelease of the 16.5 plugins:
- Fixed an issue with CURL wildcard mode not finding files sometimes.
- Fixed a problem in barcode creation.
- Fixed a possible crash in WindowsClipboardMBS.GetData.
- Added NSApplicationMBS.showHelp.
- Updated to DynaPDF 126.96.36.199
- Changed JavaVMMBS Constructor to use existing JavaVM if initialized before.
- Fixed bug with printing for DynaPDF. Please adapt newer example code.
Or ask us to be added to our shared Dropbox folder.
Tuesday 25 October 2016 at 2:08 pm
For years we use Xojo from time to time to write little apps to do video editing. Especially automated batch editing in order to avoid human error or repetitive tasks. Years ago we did that with QuickTime functions in Xojo and we still remember the nice EditableMovie class there. Today the world changed and we switched to use our AVFoundation
plugin instead. AVFoundation is Apple's latest framework for video editing and it provides similar functionality, but in a more modern fashion. The use of asynchronously processing on several CPUs is built in and you can easily benefit from those enhancements in Xojo.
The job description:
- Build a video from segments of videos recorded by an automated camera. We get a new file each 10 minutes and have to join them.
- Cut away some time on beginning of first and end of last file.
- Crop the video to a rectangle. This cuts away all the ceiling, floor and walls we don't need.
- Compress for AppleTV, so you can watch it anywhere.
The sample project will be included with next plugins, but here is the main work method:
Monday 24 October 2016 at 11:27 am
For our German speaking clients we have a workshop day:
In Zusammenarbeit mit der DenkForm GmbH bieten wir eine Schulung zum MBS Plugin an. Am 3. November 2016 (auch 2. März 2017 und 7. Dezember 2017) können Sie in Hofheim am Taunus an einer eintägigen Schulung teilnehmen. Lernen Sie die über 4100 Funktionen einmal näher kennen und wie Sie sie effektiv einsetzen. Sammeln Sie Ideen und verbessern Sie ihre FileMaker Lösungen durch den Einsatz unseres Plugins.
Das Monkeybread Software Plugin für FileMaker stellt eine vielseitige Erweiterung der eigenen Datenbank dar. Der Kurs bietet nicht nur einen tiefgreifenden Überblick in die Benutzung und Entwicklung, sondern bietet auch die Chance das Plugin günstiger zu erstehen.
- Einführung in das MBS Plugin
- Überblick über die Funktionsbereiche
- Neues im MBS Plugin dieses Jahr
- Rundgang durch ausgewählte Beispiele
- Gemeinsames Implementieren von Plugin Funktionen in eine Datenbank:
- Upload/Download mit CURL auf einen HTTP/FTP Server
- Ausfüllen eines Formulares auf einer Webseite
- Bilder bearbeiten
- PDF Verarbeitung
- Adressbuch und Kontakte abfragen bei Mac OS X.
- Fragen und Antworten
Die Teilnahme kostet 99 Euro inkl. MWSt. und Verpflegung.
Details und Anmeldung bei der Denkform
PS: Die Mindestteilnehmerzahl wurde erreicht und der Workshop findet am 3. November statt.
Saturday 22 October 2016 at 12:17 pm
For our MBS Xojo Conference in Europe
, 3rd to 6th May 2017 in Berlin, Germany, we are looking for speakers.
If you like to present an interesting topic around Xojo, please contact me soon.
We already have a few on the way and will add them to the schedule as soon as we received topic description and registration from speakers.
The final schedule will probably be released somewhere in December. Until that you can show your commitment to the conference and get the early early bird price for the ticket for 40% off the regular price.
Interest for our conference so far is much higher than the last years and registration is already at a record level over six months in advantage. Be sure to mark the date in the calendar and move your work to leave a week free to join us and enjoy a few extra days in Berlin!
Like to speak, sponsor or register already? Just email me. Register here
Wednesday 19 October 2016 at 8:55 pm
We are always happy to have guests from all over the world. If you come close to mid western area of Germany (near Koblenz), be sure to send us a message. Maybe we have time to meet for a drink and some shop talk. Once again today we met with a client in Koblenz for dinner. But also when I am traveling for conferences or to clients, I try to organize local meetings with other developers and get in touch. For me it is important to see what you guys are doing with Xojo and FileMaker, what issues you see and what things are missing. Later I can fill those with a plugin function or provide you tips for using existing plugin functions.
As you may know I also offer consulting, training and custom plugin development. While you can of course hire me to come to your office for a visit, it may be better for you to leave office. Take a day off and get something done with me. Come for a visit and we develop a solution together.
In the last years we had people come to get a personal MBS Plugin workshop, a training day to get an overview on our plugin features. Another client came to develop a web app in Xojo or implement the usage of a web service in a FileMaker solution. Getting started together, than continue alone in following days. You can also come with a list of issues we should work on in your projects. Most likely I can show you solutions using plugin functions as others had similar problems before. Often it is easier to pay for an hour instead of spending a day yourself looking for a solution!
If time permits we can always add some sight seeing to castles, monastery or mid-age buildings, do some hiking or checkout a brewery or winery. See you someday!
Tuesday 18 October 2016 at 3:00 pm
New in this prerelease of the 16.5 plugins:
- Fixed a regression on SQL prepared statement with error: "dictionary is nil".
- Optimized NSViewMBS/NSWindowMBS getters, so they return the same view/window object if possible.
- Added tabbing related functions/properties/constants to NSWindowMBS class.
- Rewrote StyledText.RTFDataMBS to read/write RTF.
- Updated SQLite to 3.15.0.
- Added ConvertStyledText, WriteStyledText and WriteStyledTextEx functions to DynaPDFMBS.
- Added drag & drop delegate methods to NSWindowDelegateMBS class.
- Fixed an issue with QuartzCode plugin part where NSException handling plugin part was not correctly referenced.
- Added MacFileOperationStatusMBS.Handle property.
- Improved DNSServiceAddrInfoMBS for IPv6.
Or ask us to be added to our shared Dropbox folder.
Sunday 16 October 2016 at 5:09 pm
After two weeks of conferences I am on my way back home.
This was an exhausting, but also entertaining and very interesting time. I met a lot of people, had shop talk all day and developed new stuff on the fly.
The Dallas FileMaker user group
moved their meeting date for me and over 20 users attended. Next in Houston I met about 100 Xojo developers at the yearly Xojo developer conference
including all the Xojo staff. This week in Salzburg at the FileMaker Conference
I met around 200 FileMaker developers from German speaking countries.
As usual I spend only a little time in sessions. More important for me is the time in the lobby where people show me their projects, explain what issues they have and what functions they'd like to have. I can show what features my plugins have, what may help the client and how we can proceed. Some people even have projects for me I could do and some are interested in personal consulting or training services.
As you may have noticed, I am coding in-between and writing blog articles. For Xojo I hoped for a 64-bit debugger sooner as I worked the last weeks on a CloudKit plugin. Still I hope to get it done and debugged in the next weeks, so you guys can try it.
For FileMaker we got a couple of news:
As usually if you see a feature in the other plugins and you like me to transfer it, please tell me. For a lot of features it makes sense to offer them for both. The styled text feature for DynaPDF is right away built for both tools. We had the Java classes in Xojo for ten years already and now added this functionality for FileMaker as well.
I am looking forward to meet you at the next conferences:
and some more where I don't yet know the dates. Keep me informed if you organize a conference or hear about one. See you there!
Sunday 16 October 2016 at 11:10 am
Another idea I got on the FileMaker Conference
here in Salzburg: Users may want to have a text field with styled text and transfer that text as good as possible into a PDF page via DynaPDF.
framework provides a StyledText
class where we can query text styles (italic, bold and underline), color, font and font size. Via the paragraph
class, we get alignment information, too.
plugin SDK offers functions to query styled text. But I have to query style for each character and detect the runs myself (see feature request
). It does provide some more styles, e.g. strikeout. But it does not provide alignment information (see feature request
The plugin can now convert styled text as good as we can to format commands in DynaPDF. WriteFText
functions can process various commands and we can easily support different fonts, alignment, color, styles and even more features.
the example looks like this:
As you see we have the input field on the top left, the translated commands for review on top right and the final PDF as preview below.
And in Xojo
I made a text editor with live preview:
For the Create PDF button to write a PDF you only need the DynaPDF Starter version. But for live preview with rendering a page, we need a Pro license. whenever you change something in the left text area, we update a few milliseconds later the preview on the right side. The page size is set to match the canvas size, so you get an unscaled high DPI preview.
As you see we have alignment only in Xojo, but strikeout only in FileMaker.
PS: Available soon in plugin version 6.5pr3 or by email now.
Saturday 15 October 2016 at 09:25 am
At the FileMaker Conference 2016 in Salzburg I received an award for the best development tool for FileMaker:
Thanks for recognizing my ten year commitment to FileMaker for writing the MBS Plugin.
And thanks to all my customers who supported me with ideas and by using the plugin.
A few of the new ideas from the conference will be in the next prerelease.
Monday 10 October 2016 at 10:24 pm
New in this prerelease of the 16.5 plugins:
- Fixed events for IKImageBrowserViewControlMBS class.
- Added CUPSMBS.PrintData function.
- Fixed a possible issue with CalendarItems being released while script runs.
- Added CustomNSViewMBS isFlipped event.
- Added MimeEmailMBS.DecodeInline function.
- Updated libXL library to version 3.7.0.
- Updated SQLAPI++ 4.1.10.
. Or ask us to be added to our shared Dropbox folder.
Friday 07 October 2016 at 3:47 pm
At the Xojo conference
here in Houston Xojo Inc. announced a couple of upcoming features for Xojo. You can read details on the Xojo blog
, Bob's blob
or soon in Xojo Developer Magazine
. One of the news in the creation of plugins in Xojo. Let's call those a library as you bundle Xojo code with resources into an archive. And as a few people asked me how that would affect me or whether I will support them, so here a few details:
First what is a Xojo Plugin currently?
Well, a xojo plugin currently is a zip archive with file extension .xojo_plugin. You can rename it to .zip and unpack it if you like to take a look inside youself. What you find are a couple of folders with various compiled libraries inside. Those libraries come per platform, so we have there DLLs for Windows, dylibs for Macs and shared objects for Linux. Current MBS Plugin have 8 different variants included.
To write such a plugin, you take a native compiler for your platform, write some C, C++, Objective-C or assembler code. You can include static libraries in your plugin and fully use all the features in the C compilers offer you. The libraries include the Xojo declarations and register them at runtime, so the IDE loads all plugins and queries them for the declarations.
What is a Xojo library?
Not sure how Xojo Inc. will call it exactly, but as far as I know it will be a new type of project. There you can include all stuff you currently have in projects like modules, classes and windows. Than you press build button and it will compile them all and write intermediate code into a new file. This should include resources like images and native libraries written in C/C++.
So you can add a library to a project and when compelling the Xojo IDE will include the library parts in the normal build process.
Depending on how library projects will be designed, it may be possible for me to write a converter for my plugins. An application which can read my plugin definitions and generate the wrapper classes. Each method there would have a declare line to call the underlaying C function. I am not sure how well this would work and whether the overhead is worth it. Could be that it is easier and more convenient to just keep the plugins as they are and just provide newer stuff in the new format.
Uses for Libraries
We all have common code which we currently include in all projects. This common code can be moved into a library project and be prebuilt. This way the build process of our normal apps should be faster. Although when debugging the project, the debugger may not be able to step into our own library!
Next you want to bundle some code and sell it. Plugin vendors like me may be able to finally deliver iOS compatible plugins this way. At least precompiled is better protected than encrypted classes which have been breached before. Selling libraries could increase the number of vendors and help to get more third party controls into the Xojo store.
There are a couple of problems coming which needs to be resolved:
- First what happens if you add a library with a window to a console project?
Probably this will cause errors and some libraries must have flags and #if set to work well.
- How can libraries be compatible to several Xojo versions?
The intermediate code from LLVM and the file format used by Xojo may not be forward or backwards compatible. Also calls to the framework may change, so newer library may miss a function in the Xojo runtime if used in an older version of the Xojo IDE.
- How do we handle conflicts within the libraries?
Class names may be declared in different ways. While I hope we can do libraries without putting them into namespaces, it would be nice if the library user could optionally add a namespace in order to resolve conflicts.
- Would libraries include function names, so we see that in stack traces?
- Can we debug into the library if we have the library source code?
Maybe we may need a library format including source code for debugging, at least for home made libraries.
So let's see what gets released later in 2017 and maybe refined in upcoming releases in 2018.
Wednesday 05 October 2016 at 02:22 am
New in this prerelease of the 16.5 plugins:
- Updated to DynaPDF 188.8.131.52
- Added JavaObjectMBS.ClassName property.
- When looking for Java installation on Windows, we now use unicode paths.
- Fixed a problem with QuickTime plugin not loading on macOS Sierra.
- Updated OpenSSL to 1.0.2j
. Or ask us to be added to our shared Dropbox folder.
Monday 03 October 2016 at 1:08 pm
The Xojo feedback system is a huge bug and feature wish tracker. It currently has over 45000 items inside. This is really a lot for a company of that size. Each day a dozen issues are reported and someone at Xojo Inc. has to review them. Initial review is often done by Robin, who will often ask for more information or directly assign your request to the engineer who may have interest in it. The bug report than has status Reviewed, often for years. What you don't see are the private entries for Xojo Inc. Engineers write ideas and discussions to the bug report. Is this issue related to others? How could it be done? How long would it take and how important is it?
Over the years I contributed 1117 cases there:
|1117 ||Status ||Percent|
|3||Completed & Fixed||0,3 %|
|5||Need Review||0,4 %|
|24||Closed (Duplicate)||2,1 %|
|28||Closed (Already Exists)||2,5 %|
|40||Closed (by Design)||3,6 %|
|56||Closed (Won’t Implement)||5,0 %|
|90||Closed (Misc)||8,1 %|
|108||Closed (Not Reproducible)||9,7 %|
|220||Fixed & Verified||19,7 %|
As you can see I have a lot of cases. Some even lost their status. This happens often if the type of the cases switched and the new status is not applicable for the new case type. Overall I have 268 (24%) of my cases being completed, fixed or resolved. I think this is an impressive rate, if you think that Xojo Inc. is a company with very limited resources.
So please participate. When Xojo Inc. looks for things to do for next release, they will look into the feedback app. What cases have a high voting? What cases are important to people or to engineers? What bugs are critical? There are thousands of cases with nice to have things and some get done, too. Other cases get a clearly no, which is often very difficult to decide. The 96 cases I have which got closed with "Won't implement" or "By Design" status, disappointed me of course. But other cases have been resolved or fixed the same day I reported them. My success rate of 24% makes me happy here and continues my hope that I can change Xojo to be more like I need it to be.
So please participate. Bugs can only be fixed if someone enters them in Feedback. Feature wishes will easier be seen if you assign your points to cases. And remember: Just because someone complains on the forum or mailing list about an issue will not change anything unless it is in feedback and everyone can check status there. So if you see a good feature request or a bug somewhere, please report it, so it's not lost.
PS: For my own plugins I do similar. We can discuss plugin wishes a lot. I usually will tell to send me an email to follow up. Because I often forget the wishes or bug reports soon. And if nobody sends me an email, it is probably not important.
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.
Thursday 29 September 2016 at 5:28 pm
I just packed a few hundred pens in my bags for the conferences in Houston
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.
Thursday 29 September 2016 at 11:37 am
Here are three examples from our own Xojo made applications on what you can do with the Listbox.CellTextPaint
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)
g.DrawString s, 2, g.textsize, g.Width-2
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.
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:
Wednesday 28 September 2016 at 11:18 am
Today 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)
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.
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
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
Finally we updated LCMS 2 to version 2.8, OpenSSL to 1.0.2i, SQLite to 3.14.2 and DynaPDF
to 184.108.40.206. 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.
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
// raise a dummy exception
dim r as new NilObjectException
catch x as NilObjectException
// get stack
dim stack() as string = x.Stack
// pick function name and return
dim name as string = stack(2)
The name is encoded name including parameter hints for the compiler.