Happy new Year 2010

We wish you a happy new year 2010!

For us, 2010 will be an exiting year as Monika is expecting our first child.
And of course we hope to meet all of you on the REAL events around the world.

Christian Schmitz


Over Christmas I wrote a simple set of functions I can use in my plugins to easily split work on several threads. So for example the Picture.ThreadedTransformMBS function takes a thread parameter. With value -1 no threads are using and the work runs on the main thread. But if you use the value 0, the plugin creates one thread for each CPU core. This way you can easily get a good number of threads. Also you can pass a positive number to get that number of threads.
The number of threads to use for a certain function can be difficult. Sometimes more threads than CPU cores makes the function run faster, because on all threads running on the system you get a higher split. Sometimes the overhead introduced with threads makes this inefficient to use a lot of threads.
The plugin functions for threads have another advantage: They yield on the REALbasic thread. So if you call the function Picture.ThreadedTransformMBS inside a REALbasic thread, it will yield time to the main REALbasic thread so you can update GUI:

If you need a plugin function to run faster using multithreading, send me an email.

Merry Christmas

Frohe Weihnachten und ein gutes neues Jahr!

Merry Christmas & Happy New Year

Joyeux Noël et Bonne Année

Buon Natale e Felice Anno Nuovo

Monika & Christian Schmitz

Plugin merge/split

One of the things I have to keep an eye on is the split of the plugins.
Making a plugin part has a certain overhead. We do have a minimum size for a plugin. On Windows 33 KB, on Mac OS X 12 KB per CPU architecture and 29 KB on Linux. But we also have common code which is used in several plugins.
So splitting a plugin part into two parts can reduce your application size if you only need one of the two parts. But if you use both, your size increases.

Today I change a few plugin parts inside the Cocoa plugin:

I merged NSGeometry, NSException, NSError and NSAutoreleasePool plugin parts into a NSBase plugin part. This are all basic Cocoa things so you properly have them anyway in your application if you use anything with Cocoa from my plugins. This plugin parts have 57 + 61 + 57 + 70 = 245 KB. But the combined part has only 86 KB, which saves 159 KB.

I also merged NSColorSpace and NSColor plugin parts. The NSColorMBS class has a Colorspace property and also the NSColorSpaceMBS class refers to the NSColorMBS class. So basicly once you use one of them in your app, you also have the other one. Here we have 147 + 74 combined to 164 KB which saves 57 KB.

Same for the NSView and NSWindow classes. Also NSResponder is the super class of NSView, so you have it always. Results in 123 KB saved for 225 + 127 + 168 adding to 397 KB.

All sizes are for universal plugins on Mac OS X (Intel+PPC code).

Fun with Tabpanels

Today I spend some time writing Cocoa plugin classes for the tabpanel. You can soon use this classes to control more of the properties the tabpanel controls in REALbasic. Be aware that this is Mac OS X only for the Cocoa target:

So you can have the tabs on all sides, have small or mini tabs, use transparency and even hide all tabs or use a simple line border.
For now you can't change the colors of the tabs except for gray as Apple uses images for this and not a color property.

CURL FTP Login takes forever?

Today I had a client using CURL for FTP uploads, but with a few servers the login takes forever.
The reason was that this FTP server is old and does not understand the EPSV command. So the CURL library waits for the timeout.
The solution is simply to disable that EPSV command and use the old PASV command. In CURL you simply set the OptionFTPUseEPSV to false for this server and login is again done in less than a second. :-)

MS SQL Server

If you like to use Microsoft SQL Server, you can use the MBS REALbasic SQL Plugin to connect to the database:

For a local secure connect, the connection string is "\@". For this example the name of the PC is WINDOWSXP, the instance name is SQLEXPRESS and the database name is master. And for the sample we installed MS SQL Express 2005. Make sure you switch on all the protocols and and it may help to allow remote connections.

Fun with ImageWell and NSImageViewMBS

For the Cocoa target in REALbasic we are working heavily to update the plug-ins. One thing I want to have is the cocoa classes for the controls ready. And this classes connected with extensions to the RB controls so you can easily access them.

You can soon use code like the following with MBS Plugins version 10.0 and RB 2010:

ImageWell1.NSImageViewMBS.alphaValue = 0.5
ImageWell1.NSImageViewMBS.imageFrameStyle = NSImageViewMBS.NSImageFramePhoto
ImageWell1.NSImageViewMBS.imageAlignment = NSImageViewMBS.NSImageAlignBottom

And if you use properties like this directly, you can have a lot of Cocoa specific tuning of the controls:

First row:
  1. current REALbasic ImageWell Look.
  2. imageFrameStyle = NSImageFramePhoto
  3. imageFrameStyle = NSImageFrameGrayBezel
  4. imageFrameStyle = NSImageFrameGroove
  5. imageFrameStyle = NSImageFrameButton

Second row:
  1. alphaValue = 0.5
  2. imageAlignment = NSImageAlignTopRight and imageFrameStyle = NSImageFramePhoto
  3. imageAlignment = NSImageAlignBottomLeft and imageFrameStyle = NSImageFramePhoto
  4. imageScaling = NSScaleToFit and imageFrameStyle = NSImageFramePhoto
  5. imageScaling = NSScaleProportionally and imageFrameStyle = NSImageFramePhoto

Special Plugins for you

If you need, you can order me to create you a plugin part with special features like Mac OS X 10.3.0 compatibility.
Or if you need for your application a smaller plugin size, I can compile a plugin with only the classes/methods you need.
Cost is by development time.

SQL Plugin and Textencoding

As you may know we have a SQL plugin for REALbasic. Whether you should use the database plugins coming with REALbasic or the MBS REALbasic SQL Plugin is a good question and it depends on what you need. Some prefer our plugin because of stability or for more features like bulk record reading or better blob handling.

For the text encoding, if you have trouble, you should check a few things:
  1. What native text encoding does the platform has the database server is running on?
  2. What text encoding is the database server using for storage?
  3. What text encoding does the database API use for clients over network?
  4. What text encoding do you use for query strings?
  5. What text encoding is set for the C library?

For 3 you should check the database manual. For example mysql can be configured to use ISO Latin 1 text encoding which will make trouble if you store Asian characters.
For 4 you may need to make sure that all text sent to the plugin has a known encoding. Internally the plugin converts text to UTF8 or Unicode and later into the encoding the database client needs.
For 5 you should look on a call like SQLGlobalsMBS.Setlocale(0,"UTF8") because that changes the text encoding conversion functions the plugin uses.

But once everything is setup correctly you can enjoy a nice and stable database access.

Version 10

After the release of the 9.8 plugins I had today to increase that version number for the next release. I don't expect I need a 9.9 release between christmas and new year to fix some urgent bugs like I had it some years ago.
So next release is very 10.0. Ten, wow!
A few months ago the chamber of commerce a letter whether I want to be in their monthly magazine listed on the list for companies celebrating 10 years. I was amazed reading this, but next year on April 1st my company will be 10 years old.
So be happy and let's continue for the next years.

New plugin releases

Today we released version 9.8 of the REALbasic plug-ins and version 1.8 of the Filemaker Plug-In.
Also we sent a few users an email asking for feedback. Please answer and tell us what we can improve.

About CURLSMBS plugin class

The lastest plugin beta version (9.8pr6) contains a new CURLSMBS class. This class is nearly identical to the older CURLMBS class, but it includes the CURL library with OpenSSL. So while the CURLMBS class relies on the CURL library available on the platform you are running on, the CURLSMBS class brings its own library and makes you more independent to the host system.

For Linux the CURLSMBS class links to the CURL library installed on the linux machine (exactly like the CURLMBS class).

REALbasic 2009r5 released

REALsoftware just released the latest REALbasic in version 2009r5.
People from the beta testing know that they make progress on Cocoa and also we add new functions for Cocoa every release.

If you plan to use this new REALbasic version, please make sure your plugins are at least version 9.5 (better 9.6) to avoid problems on Carbon and Cocoa targets.


Jul 2024
Jun 2024
May 2024
Apr 2024
Mar 2024
Feb 2024
Jan 2024
Dec 2023
Nov 2023
Oct 2023
Sep 2023
Aug 2023
Jul 2023
Jun 2023
May 2023
Apr 2023
Mar 2023
Feb 2023
Jan 2023
Dec 2022
Nov 2022
Oct 2022
Sep 2022
Aug 2022
Jul 2022
Jun 2022
May 2022
Apr 2022
Mar 2022
Feb 2022
Jan 2022
Dec 2021
Nov 2021
Oct 2021
Sep 2021
Aug 2021
Jul 2021
Jun 2021
May 2021
Apr 2021
Mar 2021
Feb 2021
Jan 2021
Dec 2020
Nov 2020
Oct 2020
Sep 2020
Aug 2020
Jul 2020
Jun 2020
May 2020
Apr 2020
Mar 2020
Feb 2020
Jan 2020
Dec 2019
Nov 2019
Oct 2019
Sep 2019
Aug 2019
Jul 2019
Jun 2019
May 2019
Apr 2019
Mar 2019
Feb 2019
Jan 2019
Dec 2018
Nov 2018
Oct 2018
Sep 2018
Aug 2018
Jul 2018
Jun 2018
May 2018
Apr 2018
Mar 2018
Feb 2018
Jan 2018
Dec 2017
Nov 2017
Oct 2017
Sep 2017
Aug 2017
Jul 2017
Jun 2017
May 2017
Apr 2017
Mar 2017
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