Playing with Quartz Compositions in REALbasic

Today I added a QCViewMBS class to my plugin collection which allows you to play Quartz Compositions in a REALbasic window on Mac OS X 10.4 and newer:

If you run "locate .qtz" in the terminal, you'll see hundreds of Quartz Compositions. Apple is using them a lot in iChat, iMovie, Photo Booth, iDVD and screen savers. So take a look in this folders on your hard disc:

/Developer/Library/Quartz Composer/Examples

And don't forget to install Developer Tools to get the Quartz Composer application.

iPad Developer available

On the Appstore you find already two applications I made as contract work: MacTipps and Zucker.
As I got the new Xcode version running, I'm available for contract work. Whatever you need: Mac, iPhone, Windows, Linux or now iPad. I can help you creating good software for all kinds of needs. Send me an email if you have a project.

Our PDFLib 8 REALbasic Plugin

Since December PDFlib 8 is available and today I finished our REALbasic for PDFLib. So in 10.1pr5 and newer you'll find a PDFLib8MBS class.

PDFlib 8 supports various PDF features according to Acrobat 9, such as Reference XObjects, layer variants, PDF Portfolios, georeferenced PDF, AES-256 encryption, and Unicode passwords.
New typographical features include complex script shaping and bidirectional formatting, fallback fonts, OpenType layout features, wrap text around paths, and text on a path.

More about PDFLib 8

MBS REALbasic plug-ins version 10.0

Today we release our plugins for REALbasic in version 10.0. Take some time and check the new functions. The WindowsScriptMBS class which allows you to run Windows Scripts in VBScript or JavaScript. Also the JSONMBS class which is useful if you nee to handle Javascript Object Notation strings. Third the UniversalCharacterDetectionMBS class may be useful to detect text encodings of unknown data. On Mac OS X the NSTimerMBS class can give you a more precise timer than the built in timers. And it fires while the user is clicking which the RB timer does not.

Also useful may be the other additions which we can't really list here. The SpotLightTextContentMBS function gives you the text content of a file using the Spotlight importers. And MacGlobalIdleTimeMBS gives you the global idle time which the screen savers use to get started.

Enjoy the new version: Download Release notes


I was asked why the plugin has no sort class? Well, the answer is simply: Once you have the data somewhere in an array, in a listbox or a database, you have built in sort functions. And once I tried to write a plugin class for sorting, I got two issues: Well first if you split the sort code between plugin and the events you'd need to fill like compare and swap, the sort code in the plugin is basicly empty. And as the plugin needs to call to RB code for this events, we have a little performance problem. It is much faster to do it directly in REALbasic.
So basicly the solution is: If you need code, take the following code and adjust it to your datatype: (more)

Got a new book: Ramblings on REALbasic

Thanks to friend in the US, I got a copy of Aaron Ballman's book "Ramblings on REALbasic". This is a very good book with over 500 pages. Actually it is a collection of articles from his blog, but although I read the blog for years, I did find a lot of interesting articles, I did not know about before. So it has a good value.
Things you learn there is how REALbasic works behind the scenes. How the compiler handles your code and why things are like they are. Of course not everything is up to date as Aaron talks in a few articles about things fixed long ago, but as a REALbasic user for more than 10 years who knows a few of the bugs he mentions, it is very interesting to read why this bug existed and how it was fixed.
Another good story in the book you should read is how Aaron came to REALsoftware.
On the end I can say that I read this book this weekend and it was a pleasure. I think every serious REALbasic developer should simply read it to learn a few facts and to remember later where to lookup some things. I personally learned a few new things about the plugin writing :-)

REAL Server Plugin 0.3

On you can find version 0.3 of my REAL Server Plugin.
There are 3 new functions: VersionMBS, EncodeHexMBS and DecodeHexMBS.
But the biggest news is: You can use this plugin in your application with REALSQLDatabase. An example is included.

Notes on REAL Server

What do you do if you need to restart REALserver a thousand times a day?
Run it directly from the terminal with "sudo /usr/local/bin/realserver". To quit, simple press Control-C. To restart, cursor up and return

And if you see this error message: "SQL logic error or missing database."
you may have a little bit in calling your SQL function. E.g. the function returns an error to the sql interpreter.


Last year I developed a quick and dirty Tool to create REALbasic code for a WSDL for a customer. Later I got another customer with SOAP needs, so the tool was rewritten and handled the WSDL files from both customers. Recently another customer needed a solution for SOAP, so I decided to polish it even more and make a product from it. So now we have a SOAP Kit in stock.
Basicly you can do webservices from REALbasic with the built in SOAP classes. But they are limited and I decided not to use them. So I got my own tool which not just enables SOAP in a REALbasic application, but also provides methods and classes so you can use the webservice as if you had it running as part of your application.
You can call the webservice methods. In the background our code creates XML code from your function call, sends that code to the server, receives an answer, parses the answer and returns the result to you. All transparently and you can see this source code and modify it if you like.
And if the WSDL changes, you just rerun our tool to get new code which you can add to your project.

Textpreview for any file using Spotlight

The plugins 10.0pr9 have a new function built in: folderitem.SpotLightTextContentMBS as string. If you call this function, you basicly run the metadata importer for the given file type and get the text content result. On the first call it builts an internal list of the importers and the document types based on the importes in /Library/Spotlight, /System/Library/Spotlight and ~/Library/Spotlight.
This way you can get a text preview from all kinds of file types: (more)

REAL Server Plugin 0.2

Today I added CRC32MBS and MD5MBS functions so you can get the checksum of a blob on your server. Also the REALbasic plugins get a new MD5StringMBS function, so you can calculate files MD5 locally and on the server if you need to compare files without copying them to the other side:

CRC32MBS(data as blob) as integer
Returns CRC of data in the blob. The return value is a 32 bit unsigned integer which is stored in a 64 bit integer.

MD5MBS(data as blob) as string
Returns MD5 checksum of data in the blob. The return string is a 32 character long hex string.

Download here:

Winter in Germany

Before Christmas we had a few days with snow, Christmas was green like the years before, but now in mid January we have snow again.
Looks like Monika won't use her car for the next week:

The castle of Andernach where a log of kids go sledding nearby:

And the castle of Neuwied:

[ANN] MonkeyBread Software starts plug-in development for REAL Server

NICKENICH, Germany (January 7th, 2010) -- Monkeybread Software starts plug-in development for REAL Server, the SQL database sever from REALsoftware. In this very first version of our plugin, we have 5 functions which may be very helpful for you:

* SoundExMBS(text as string) as string
Returns soundex string for the given text.

* RemoveAccentsMBS(text as string) as string
Returns text without accents. for example é to e

* RemoveAccentsCaseInsensitiveMBS(text as string) as string
Returns text without accents. for example é to E and Ä to A

* ReadBlobMBS(data as blob, path as string) as blob
Returns the blob if it is not null.
Or reads the file from the given path and returns the content as blob.
Path must be native path and should only contain ASCII characters.

* WriteBlobMBS(data as blob, path as string) as string
Writes the blob to the given file path. On success returns the path. On failure returns error.
Path must be native path and should only contain ASCII characters.

This plug-in is still in development and can be used for free until 31st March 2010. If you like to test it, please send us an email.
Out plug-in is tested with REALserver 2009 and works on Mac OS X, Windows and Linux.

If you have questions or new ideas for plug-in functions, please email us. Also we are available for contract plug-in development.

JSON - JavaScript Object Notation

Today I wrote a JSON class for REALbasic. So in case you want to use the JavaScript Object Notation in REALbasic, you can now use our plugin to do this (10.0pr8 or newer). You may also want to write a few lines of code to convert a JSON tree to and from dictionaries in REALbasic if you need that.

Else it may be useful for web applications and for passing data from and to the htmlviewer javascript methods. For example to pass an object tree to a htmlviewer on Mac, you would call EvaluateJavaScriptMBS with some commands like "myvariable = eval("+json+")". So the json string in REALbasic is the object tree returned by the toString function of the JSONMBS class and eval in javscript will parse that and give you the object in Javascript. Pretty cool, I think.

See JSON on Wikipedia

Windows Scripts in REALbasic

For years we have a class to run AppleScripts in REALbasic. Now we also have a class to run Windows Scripts:

dim w as new WindowsScriptMBS

// First try VBScript
w.Language = "VBScript"

dim lines(-1) as string

lines.append "Function Test(a,b)"
lines.append "Test = a+b"
lines.append "End Function"

w.AddCode Join(lines, EndOfLine.Windows)

dim p(-1) as string = array("Hello ", "World from VBScript")
dim x as string = w.Run("Test", p)

MsgBox x

// Second try JScript
w.Language = "JScript"

redim lines(-1)
lines.append "function Test(a,b)"
lines.Append "{"
lines.append "return a+b;"
lines.append "}"

w.AddCode Join(lines, EndOfLine.Windows)

p = array("Hello ", "World from JavaScript")
x = w.Run("Test", p)

MsgBox x

Exception e as WindowsScriptErrorExceptionMBS
MsgBox "Exception: "+e.message

So you can run them with JScript (JavaScript) or VBScript (Visual Basic Script).

MacTipps iPhone application

There is a German application on the iTunes store with over 750 tipps around Mac. Take a look and enjoy it. We worked on it for over a year, got lots of feedback from beta testers, several design changes and a total rewrite in the middle, but now it is a perfect little tool to lookup for help if your Mac is in trouble.

Why I show this application here? Well, because I am the developer who created this application for the Macwelt team.
PS: And over time they will add more tips. Every time you press the load button (the round arrow), the server is asked for new tips.

REAL server Plugins

You may have seen that REALsoftware offers a database server. And last year they added a plug-in SDK for this server.
Today I toke a deep look on the SDK and I can say you it looks promising. As it is a very young SDK, you won't find anything about it on the internet and there is nearly nothing included on documentation. But you can help yourself with SQLite documentation as a lot of things are equal for running sqlite locally or using REAL server.

If you have ideas what a REAL server Plugin I could write, please email me. But be aware that you can't use GUI functions in the plugin.


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