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.
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.
Today 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.
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 188.8.131.52 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.
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.
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.
While working on ChartDirector 6 Plugin, we got this sample code for you:
// The data for the bar chartdim data(-1) asdouble = array(85.0, 156, 179.5, 211, 123)
// The labels for the bar chartdim labels(-1) asstring = array("Mon", "Tue", "Wed", "Thu", "Fri")
// Create a XYChart object of size 250 x 250 pixelsdim c asnew CDXYChartMBS(250, 250)
// Set the plotarea at (30, 20) and of size 200 x 200 pixelscall c.setPlotArea(30, 20, 200, 200)
// Add a bar chart layer using the given datacall c.addBarLayer(data)
// Set the labels on the x axis.call c.xAxis.setLabels labels
Backdrop = c.makeChartPicture
// Create PDF and write to diskdim PDFData asstring = c.makeChart(c.kPDF)
if PDFData.lenb > 0thendim PDFFile as FolderItem = SpecialFolder.Desktop.Child("simplebarwithpdf.pdf")
dim PDFStream as BinaryStream = BinaryStream.Create(PDFFile, true)
if PDFStream <> nilthen
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)
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 = nilthen//createifmissing
IPTC = new Dictionary
ImageProperties.Value(CGImageSourceMBS.kCGImagePropertyIPTCDictionary) = IPTC
IPTC.Value(CGImageSourceMBS.kCGImagePropertyIPTCCredit) = "CreditTest"
IPTC.Value(CGImageSourceMBS.kCGImagePropertyIPTCCopyrightNotice) = "CopyrightTest"
IPTC.Value(CGImageSourceMBS.kCGImagePropertyIPTCContact) = "ContactTest"
outputDest.AddImageFromSource(inputSource, 0, ImageProperties)
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.
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 asDouble)
#if TargetMacOS then#if RBVersion >= 2014.0then//newerAVFoundationdim p as AVPlayerMBS = m.AVPlayerMBS
p.rate = r
m.Rate = r
#endif#elseif TargetWin32 then#if RBVersion < 2014.0then//older
m.Rate = r
Return#endif//WindowsMediaPlayerdim o as OLEObject = m.MovieController
o.Player.settings.rate = r
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:
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.
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.
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.