Executing linux shared libraries

Saturday 30 May 2015 at 08:36 am
The linux shared library system allows a shared library to have an entry point for running as normal application. We can use that to print version information on the terminal if you run our plugin shared libraries on Linux:

cs@ubuntu10-32:~/Desktop/MeinProgramm Libs$ ./MBS_SQL_Plugin_18645.so
MBS Plugin, version 15.1, built May 30 2015

So if you execute the .so library files in future, they should tell you the version number.

PS: For Mac and Windows you see details in Info dialog already.

Check your email sending code

Friday 29 May 2015 at 10:33 pm
In the hotel the last days I used one of my business apps to send emails to clients. Now it happened that some emails didn't come through and later I got emails telling me I sent too much (transfer limit). But those emails didn't came from my hoster where I have also my mail server. It was the mail server from the hotel network provider! Now what was going on there and how did they get my mail?

So I checked my configuration there. I was using SMTPSecureSocket, with Secure = true, a port for SSL, the SSL smtp server. I also set connection type to TLS 1.2 and a certificate to use. The idea is of course that all data is encrypted and server certificate is verified against the local one to only trust this one. Trusting either any certificate will not help as anyone could fake it. Also trusting any certificate based on a common root certificate doesn't help much. We all carry root certificates on our computers from various governments and military organizations. So trusting them doesn't help me, as I don't want to trust a certificate they generate. So I really want to either login and send email over my provider or I want an error before the credentials are sent.

In my recent testing the SMTPSecureSocket doesn't do it. Even with the settings asking for secure connection and TLS 1.2, I can see my email data in plain text if I watch network traffic using tcpdump utility in terminal. But I can get it to work by using my MBS CURL Plugin. When the connection is properly encrypted, the hotel network does not route it through their smtp proxy which counts mail and checks them for spam.

For the next days I have something to do:
  • replace all uses of SMTPSecureSocket with my CURL Plugin
  • change all email account passwords to long random text strings.
  • use different accounts for sending/receiving, so if smtp is compromised, a hacker doesn't see incoming mail.
  • check with tcpdump and CURL log messages that data is encrypted.
I'm disappointed that the SMTPSecureSocket class does not encrypt my data. Also I'm disappointed and ashamed by myself as I trusted it and didn't check the traffic. There is still the possibility that it was working in older version of the IDE or I miss a little property setting.

What do you do for sending emails secure in your applications?

See also forum thread on this topic and the Feedback case 39516.

Xojo Developer meetings in Montreal (Canada) and Berlin (Germany)

Wednesday 27 May 2015 at 10:49 pm
We scheduled two more Xojo developer meetings for this and next week:

28th May 2015, 6:30pm at The Keg, 25 rue St-Paul est in Montreal.

4th June 2015, 7pm at Café Intimes (Boxhagener Str. 107, Berlin).

If you like to come, I appreciate if you email me, so I know how many seats we need. Especially if you like to learn what Xojo is and how you can use it. Learn from what others do with it.

Dock Meter Example

Tuesday 26 May 2015 at 03:18 am
dockToday we learnt in a forum post on the Xojo forum that Sascha Schneppmueller uses our ChartDirector plugin for a CPU meter in the dock.

We knew our plugin can provide CPU statistics to get the CPU usage and ChartDirector can show with charts, meters and gauges all the data, but this is first time someone combines that. And all with a background picture in the chart for the round bevel.

The example will be included for everyone with next plugin prerelease. You can find the CDAngularMeterMBS class in the documentation. It provides the round meter. With setMeter you define how big the meter will be. The setScale method defines the scale of data, in our case from 0 to 100 with steps of 10. The line width is set to 3 for the major ticks and zero for minor and axis. Next a wall paper is added with the size of the chart, so it does not repeat. Finally the pointer is added with the current value and two colors to draw it. Before displaying the image, a mask is added to hide the outer parts of the image.

PS: Did you try ChartDirector 6 with PDF output?

Local Xojo Meetings in the next months

Wednesday 20 May 2015 at 10:46 am
As you may know I travel a lot this year and so we got a couple of upcoming Xojo developer meetings:
Ottawa Canada 21st May
Montreal Canada 28th May
Berlin Germany 4th June
Newcastle upon Tyne United Kingdom 16th June
Kiel Germany survey
Reykjavik Island survey
Las Vegas USA survey

If you want to join, please contact me, so I can put you on the list. Suggestions for meeting places or restaurants are welcome.

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

Tuesday 19 May 2015 at 11:58 am
NICKENICH, Germany (May 19th, 2015) -- Monkeybread Software releases version 15.1 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,100 classes featuring over 55,000 documented functions. Our plugins support all three platforms Mac OS X, Windows and Linux with all project types desktop, web and console.

Some of the highlights on the 15.1 update:

We added a new plugin for markdown processing. Markdown is a markup language with plain text formatting syntax designed to be converted to HTML. Using our plugin you can process markdown text and create HTML on the fly.

For this release we updated ChartDirector to current version 6. Beside some useful tweaks for various charts like glares, round edges and extra colors, this new release adds PDF output. You can now render a chart as a PDF file with vector graphics. For some complex charts we can fall back to a picture embedded in a PDF file.

For the Map, HashMap and Set classes in our plugin, you can now switch between case sensitive and case insensitive string comparison. Those specialized classes act like a dictionary, but can provide better performance by avoiding variants.

Our plugins include various classes for CoreGraphics, the graphics framework on OS X. Improvements have been made to CGPathMBS class with a new helper class CGPathElementMBS so you can inspect a path content. The CoreGraphics display class got a new property to check the refresh rate of the screen.

For Windows graphics, we got additional methods in the WindowsBitmapMBS module. Here you can find functions to convert between HBITMAP and HDIB as well as Xojo pictures. Related to this are new methods on our GraphicsMagick and ImageMagick image classes to get a HBITMAP. This is useful for declares to Windows APIs and passing images.

The HTMLViewer in Xojo can have various platform specific backends. For the Mac part, we added support to WebUIDelegateMBS for multiple selection in file open dialogs. For Internet Explorer on Windows, we added a new way to load HTML from memory and a function to check the reference count. When using Chromium instead we can also check reference count and adjust.

For OS X we improved our QCView classes and added a full functional control for showing Quartz Compositions. The repository class helps you locate compositions.

Our SQL Plugin got new functions to receive notifications for postgre SQL databases. We also got a Trace event for our SQLDatabaseMBS class to better log what is happening. For MySQL we can now repeat requests in case of a dead lock.

In this release we updated ChartDirector to version 6.0, DynaPDF to and LCMS to 2.7. While Xojo Inc. announced 64-bit support for upcoming Xojo versions, this plugin version does not yet support 64-bit targets.

See release notes for a complete list of changes.

Dash help archives updated

Tuesday 19 May 2015 at 11:04 am
Just updated the archives for the Dash application. Does the auto update work for you?

So here you can click to launch Dash and install our plugin help:
MBS Xojo Plugin and MBS FileMaker Plugin

You can download the archives manually on our website: FileMaker and Xojo (Real Studio).
Feedback is welcome.

xDev Magazine Issue 13.3

Monday 18 May 2015 at 11:22 pm
The May/June 2015 (13.3) issue of xDev Magazine is now available. Here's a quick preview of what's inside:
  • The Xojo Future * by Marc Zeedar
    Geoff Perlman's keynote address at XDC is like the Xojo State of the Union -- it sets the tone for the year and gives us a vision of the future. While we all want our new features now, the reality is that things take time. Here's what's coming and what you need to know to prepare yourself.
  • Too Much Fun! * by Marc Zeedar
    XDC isn't just endless tech lectures and hotel food -- it's adventure and experiences in a new city, connecting with internet colleagues, and fervent debates about our favorite development tool. This year was particularly enjoyable (there was even a murder during dinner), so Marc's included lots of pictures for those who couldn't be there.
  • Metrics for Personal Health * by JC Cruz
    As part of his ongoing personal health journal project, JC Cruz explains how to collect and analyze raw data into health metrics that actually make sense to the user.
Plus: custom operators, enterprise data modeling tools, Xojo 2015r2, Xojo games, tips, and much more.

MBS Xojo / Real Studio Plugins, version 15.1pr9

Saturday 16 May 2015 at 8:15 pm
New in this prerelease of the 15.1 plugins:
  • ChartDirector 6 now registers if you have a current license key.
  • Fixed SetBoolCapability, SetUInt16Capability, SetInt32Capability and SetFloatCapability in TwainMBS class to actually pass right parameter.
Download: macsw.de/plugin. Or ask us to be added to our shared Dropbox folder.

Xojo Developer Meeting in Berlin Germany

Saturday 16 May 2015 at 12:37 pm
As I come to Berlin in early June, I'd like to organize a Xojo developer meeting there.

There is a lot to tell about the recent XDC conference, upcoming 64-bit support and future Xojo releases. To learn if there is interest and what could be the best dates, I started a few surveys:

Survey Xojo Meeting in Berlin

Once we see interest for dates, we can schedule them and look for a location. If you have a recommendation for a restaurant or you can provide a meeting room, please contact me. Also if you are not a MBS customer, please email us, so we can contact you with details.

MBS Xojo / Real Studio Plugins, version 15.1pr8

Wednesday 13 May 2015 at 6:10 pm
New in this prerelease of the 15.1 plugins:
  • Added XLBookMBS.Load2 functions to detect format and load file.
  • Fixed problem with MDItemMBS constructor.
  • Updated ChartDirector to 6.0 release candidate (registration not yet possible).
  • Fixed CTParagraphStyle.FirstLineHeadIndent property.
Download: macsw.de/plugin. Or ask us to be added to our shared Dropbox folder.

ChartDirector 6 PDF example

Wednesday 13 May 2015 at 1:50 pm
While working on ChartDirector 6 Plugin, we got this sample code for you:
// The data for the bar chart dim data(-1) as double = array(85.0, 156, 179.5, 211, 123) // The labels for the bar chart dim labels(-1) as string = array("Mon", "Tue", "Wed", "Thu", "Fri") // Create a XYChart object of size 250 x 250 pixels dim c as new CDXYChartMBS(250, 250) // Set the plotarea at (30, 20) and of size 200 x 200 pixels call c.setPlotArea(30, 20, 200, 200) // Add a bar chart layer using the given data call c.addBarLayer(data) // Set the labels on the x axis. call c.xAxis.setLabels labels Backdrop = c.makeChartPicture // Create PDF and write to disk dim PDFData as string = c.makeChart(c.kPDF) if PDFData.lenb > 0 then dim PDFFile as FolderItem = SpecialFolder.Desktop.Child("simplebar with pdf.pdf") dim PDFStream as BinaryStream = BinaryStream.Create(PDFFile, true) if PDFStream <> nil then PDFStream.Write PDFData PDFStream.Close pdffile.Launch(true) end if end if
As you see the only change you may need in your application is to request the chart as PDF. The MakeChart function takes a new constant kPDF for the new output type PDF.
You can download and check the PDF here: simplebarwithpdf.pdf
(this PDF was generated on Mac with 64-bit Xojo alpha and ChartDirector 6 final candidate)

Tip of the day: Edit IPTC data in JPEG file with CGImageSource/CGImageDestination

Monday 11 May 2015 at 2:10 pm

A client asked for editing IPTC entries in an image and add copyright notice. The CoreGraphics Image Source/Destination classes allow to read/write EXIF, IPTC, GPS, PNG, TIFF, PNG and JFIF properties. We use it here to load the image, add entries for IPTC with keys credit, copyright notice and contact and write the file to disk:

dim InputFile as FolderItem = SpecialFolder.Desktop.Child("test.jpg") dim OutputFile as FolderItem = SpecialFolder.Desktop.Child("output.jpg") dim inputSource as CGImageSourceMBS = CGImageSourceMBS.CreateWithFile(InputFile) dim outputDest as CGImageDestinationMBS = CGImageDestinationMBS.CreateWithFile(OutputFile, "public.jpeg") dim ImageProperties as Dictionary = inputSource.PropertiesAtIndex(0) dim GlobalProperties as Dictionary = inputSource.Properties dim IPTC as Dictionary = ImageProperties.Lookup(CGImageSourceMBS.kCGImagePropertyIPTCDictionary, nil) if IPTC = nil then // create if missing IPTC = new Dictionary ImageProperties.Value(CGImageSourceMBS.kCGImagePropertyIPTCDictionary) = IPTC end if IPTC.Value(CGImageSourceMBS.kCGImagePropertyIPTCCredit) = "Credit Test" IPTC.Value(CGImageSourceMBS.kCGImagePropertyIPTCCopyrightNotice) = "Copyright Test" IPTC.Value(CGImageSourceMBS.kCGImagePropertyIPTCContact) = "Contact Test" outputDest.SetProperties(GlobalProperties) outputDest.AddImageFromSource(inputSource, 0, ImageProperties) call outputDest.Finalize
For cross platform EXIF/IPTC/XMP changes, you can in general try our XMP plugin.
Please note that in CGImageDestination/Source and XMP Plugin most keys are mapped. So setting Credit in IPTC, also sets the corresponding field in XMP.

Tip of the day: MoviePlayer.rate

Saturday 09 May 2015 at 1:08 pm
Today a client asked how to set MoviePlayer's rate. This property was there years ago in Real Studio, but is missing in current Xojo version. The following code in a module extends MoviePlayer class with a new rate property. We even included some switches for older Real Studio versions, so you can use similar code for older and newer IDE versions:

Sub RateMBS(extends m as MoviePlayer, assigns r as Double) #if TargetMacOS then #if RBVersion >= 2014.0 then // newer AVFoundation dim p as AVPlayerMBS = m.AVPlayerMBS p.rate = r #else // old QuickTime m.Rate = r #endif #elseif TargetWin32 then #if RBVersion < 2014.0 then // older m.Rate = r Return #endif // Windows Media Player dim o as OLEObject = m.MovieController MsgBox o.TypeName o.Player.settings.rate = r #endif End Sub

Full Time Xojo Developer Position in Canada

Friday 08 May 2015 at 1:29 pm
Paul Levine from Rage Software is looking for a developer to join his company:

We are looking for a full time Xojo developer to join our team. We develop a drag and drop, WYSIWYG web site builder with Xojo.

We would prefer a developer located in Canada but will consider all applicants.

Applicants should have the following skills;

  • 2+ years experience developing with Xojo or similar language
  • Experience developing for OS X and Windows
  • Experience working in teams
  • Experience with HTML/CSS and Javascript would be a huge plus
Applicants would work remotely.

Please message me here if you are interested and I can provide more details.

See forum posting and company website.

MBS Xojo / Real Studio Plugins, version 15.1pr7

Thursday 07 May 2015 at 08:32 am
New in this prerelease of the 15.1 plugins:
  • Fixed bug in CTTextTabMBS.Create.
  • Fixed crash with calling NSAppearanceMBS.setCurrentAppearance.
  • Changed Cocoa plugins for 32-bit to once again build for 10.6 and newer (instead of 10.7).
  • Added ReferenceCount, Release and Retain to ChromiumBrowserMBS class.
  • Added IEReferenceCount function for HTMLViewer to check for leaks.
  • Added CGPathElementMBS class and CGPathMBS.Elements function.
  • Added PassSignerMBS module to sign passes for iOS from a Xojo made Mac app.
  • Added string related functions to NSCharacterSetMBS class.
  • Fixed bugs in CTRunMBS array functions.
  • Added OpenSSLMBS.PKCS7Sign function.
  • Added GetFiles and SetFiles to WindowsClipboardMBS class.
  • Added PackbitsMBS module.
  • Added OpenSSLExceptionMBS class.
  • For ChartDirector 6 we will have no PPC support.
  • For ChartDirector most axis getters are now properties and cache the object.
  • Added IORegistryMBS.PerformanceStatistics function.
  • Fixed a bug with Twain plugin which froze for a client.
Download: macsw.de/plugin. Or ask us to be added to our shared Dropbox folder.

Xojo Meetings in Canada

Wednesday 06 May 2015 at 6:55 pm
As you may know I'm coming to Canada later this month for the FileMaker Conference in Montreal.
How about some Xojo meetings?
There is a lot to tell about the recent XDC conference, upcoming 64-bit support and future Xojo releases.
To learn if there is interest and what could be the best dates, I started a few surveys:

Xojo Developer Meeting in Montreal
Xojo Developer Meeting in Ottawa
Xojo Developer Meeting in Toronto

If you could make it to several places, please sign for all. I may not be able to do all, but would be happy to meet a few developers. Recently at the XDC conference I met some people from Toronto and I consider to drive there.
Once we see interest for dates, we can schedule them and look for a location. If you have a recommendation for a restaurant or you can provide a meeting room, please contact me.

Raspberry Pi support in Xojo

Saturday 02 May 2015 at 6:09 pm
In the keynote Xojo Inc. announced upcoming support for Raspberry Pi support. That's great to hear and seems like a good idea after they got LLVM to build for ARM CPUs for iOS support and already have a Linux target. They have of course to rebuild their framework code targeting ARM Linux and add to the IDE functions to have a new checkbox for Linux on ARM. The framework itself should be an easy recompile.

On the plugins side, I really hope they just allow us to build plugins using the existing Plugin SDK for Linux. The source code is there for Linux on x86, so I'd assume same code in the framework would work on ARM. This way I could install a Linux copy here with cross compiler to ARM and rebuild all my plugins for it.

So once Linux ARM target is available and Xojo Inc. allows us to use an updated plugin SDK with a linux ARM cross compiler, I could let the computer spend a couple of hours to rebuild all my MBS Plugin classes for that.

We could use Rasppery Pis with Xojo to host our web apps or run console apps to do things in background. They could use MBS Plugins for charts, utilities, PDF handling, SQL connectivity, Picture effects and I/O, encryption and much more.

Xojo 64-bit notes

Friday 01 May 2015 at 05:38 am
First my plugins will increase in size a lot. About double the size due to new code for Mac Desktop, Mac Console, Windows and Linux plugin parts for 64-bit.

I did build everything as 64-bit within the last 24 hours. A few things had to be fixed so it compiles, but mostly I prepared this for the last two years. The IDE in version 2015r3a1 loads all my plugins and builds using them. It takes long if you have all the plugins installed, so I recommend to use only the once you need. Some things work:
  • MBSVersionString function reports plugin version.
  • LogoMBS returns our logo picture, so picture creation seems to work fine.
  • DynaPDF Plugin creates PDF already
  • SQL Plugin can connect to SQLite and do things.
So far it seems like an easy transition. Waiting for a supported 64-bit SDK, than recompiling everything and you guys can try it.

PS: I consider even with 64-bit to let the plugin not create strings over 2 GB. Not sure if Xojo will allow it, but it may not make much sense.


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