Josh Hoggan from Koingo Software, Inc. just released CrossToolbarKSW, a cool toolbar class where I helped him over the last months with a few issues. Certainly worth taking a look:
If you're waiting for Real Studio to get Cocoa toolbar customization, you may be waiting a while! We've been using this internal solution for a while to manage our toolbars. It is a wrapper class for toolbars in Real Studio that makes use of the MonkeyBread Software plugin set. It focuses on bringing a basic toolbar to Windows, but giving a fully fleshed out toolbar for Mac OS X including customization! Don't be stuck creating two sets of code for a toolbar for each platform any longer. There are a couple features here which don't work (ie. setting the pushed state of a toggle button to False instead of True manually), but they're easily added. Completely open-source and free to use and distribute without restriction.
Grab it here: crosstoolbarksw.zip
Here are a few basic things you should know and use in your code like the instances, fonts, error event, the color management and character maps.
Instances
Initializing a DynaPDFMBS object is time consuming as some initialization code needs to run like finding the fonts on the system. As initialization is costly, you should reuse the object. You call CreateNewPDF again to start a new PDF on the same instance. Of course you should call CloseFile and FreePDF before to cleanup.
Fonts
On Mac OS X and Windows we automatically load fonts from system font folder. But for other font folders or on Linux, you need to call AddFontSearchPath yourself to scan a folder for font files. That is important to know for people using web apps. Because we have users from time to time which have a web app working well on Mac or Windows, but they see no fonts on Linux.
This standard fonts are always available: Courier, Helvetica, Times, Symbol and ZapfDingbats.
Error Event
You should use the error event. This is an event where you are informed about all errors. While most functions return false or an error code in case of an error, the event gives you a way to decide if you want to ignore an error or handle it. Like when you set a font and the font can't be used. In that case you get error type being kE_WARNING and ErrorCode being 16. In that case you could simply ignore the error and call SetFont again with a different font name. So in error event depending on the error type (kE_FATAL_ERROR, kE_FILE_ERROR, kE_FONT_ERROR, kE_SYNTAX_ERROR, kE_VALUE_ERROR or kE_WARNING), you can decide if you want to display error to user or not.
Color Matching
Please take some time to learn the basics about color matching. If you want DynaPDF to correctly raster PDFs, you need to make sure color matching is initialized properly and used correctly. For that you call InitColorManagement method and pass some profiles. Create a new DynaPDFColorProfilesMBS object and set its properties. You can define a screen profile, a soft proof profile and default profiles for CMYK, RGB and grayscale colors. While RGB and gray profiles are really optional, you should always provide a screen profile for the target color space. If you render an image, this should be a the output color space for that image. If you render for displaying on screen, you should use the profile of your display. Also it is important to provide a default CMYK profile. As separation colors are normally defined with an alternative color in another color space (usually CMYK), this default CMYK profile is important to render them correctly to RGB.
Character Maps
You need to use SetCMapDir. Included with DynaPDF Examples you get a folder called CMAP with character mapping files. Those files are needed for mapping asian character correctly. So if you want to extract text correctly from any PDF, please use SetCMapDir to inform DynaPDF where to find the CMap files. They are needed to map back glyph IDs to actual unicode characters which is required for extracting, deleting or replacing them.
The next meeting of the Paris Real Studio developer group will take place Friday, January 18th, 2013 from 8h30 to 17h in Paris.
Save the date and join this meeting. The location has been announced: Espaces reunion, 43 rue de Dunkerque, 75010 Paris.
There will be presentations by Stéphane Thiroux, Stéphane Pinel (RealSoftware), Jeremiah Leroy, Valdemar de Sousa and Christian Schmitz (MBS).
Attendance at this meeting is free (but if you want to donate to the organization, you're welcome). WIFI is available on site.
For more details, please visit:
realstudio-fr.com/prochaine-reunion-du-groupe-pur-paris-utilisateur-realstudio/
PS: I booked my trip today, so I'll be there.
For our SQL plugin, we have an existing function
CloneRecordSetMBS to clone a recordset. Now we also add a function
BuildRecordSetMBS to create a RecordSet from scratch with an array of field names and an array of values. Currently string only, but I think this is enough to fill the Report functions in Real Studio on the fly with data.
Also to make use of our SQL plugin easier, we add a
SQLCommandMBS.AsRecordSet function to get a RecordSet for an existing
SQLCommandMBS. So you can do your query with our command object, set all flags and later get a RecordSet to run your normal code. So you can pass the RecordSet to the report functions, too.
This will be included in the next prerelease of 13.0 plugins.
- Added support of xlsm files
- Added UTF-8 support (mode is activated with book.setLocale("UTF-8"))
- Fixed bugs with loading some xls and xlsx files
- Fixed compatibility issues with Numbers for Mac
- Added support of empty cells in Sheet.cellFormat()
- changed format picture property from "Move but don't size with cells" to "Move and size with cells"
- Fixed Sheet.setNamedRange(), Sheet.setPrintArea() and Sheet.setName() methods for sheet's names with spaces (xlsx)
- Fixed bugs with some formula expressions with IF and AND functions (xls)
- Fixed bug with saving multi formatted cells in xlsx files
- Fixed bug in Book.delSheet() for xlsx files
- Fixed bug with reading some kind of error values
- Fixed issues with adding pictures into preloaded workbooks with pictures (xls)
- Fixed bug in Book.saveRaw() method (xls)
- Fixed possible memory leaks due to mismatched malloc/free functions (xlsx)
- Fixed bug in Sheet.cellFormat()
- Fixed bug with format/font inheritance for xlsx files
- Fixed Sheet.setPrintRepeatCols() method for xlsx files
This will be included in next plugin prerelease.
Frohe Weihnachten und ein gutes neues Jahr!
Dieses Jahr hat Michael fleißig mitgeholfen beim Backen
Merry Christmas & Happy New Year
This year Michael helped a lot with backing cookies.
Joyeux Noël et Bonne Année
Buon Natale e Felice Anno Nuovo
Sebastian, Michael, Monika & Christian Schmitz
New in this prerelease of the 13.0 plugins:
- Added NSAppleScriptMBS Constructor taking array of source code lines.
- Improved NetworkIntefaceMBS class to show more details.
- Added UUIDMBS.randomUUID, UUIDMBS.UUID and UUIDMBS.Validate.
- Added parameter to ValidateUUIDMBS for checking GUID version and new mode to fix formatting.
- Added RectControl.InvalidateThreadSafeMBS and RectControl.RefreshThreadSafeMBS.
- Changed win plugin to have more parts initialize completely only if not loaded in the IDE.
Download:
macsw.de/plugin/Prerelease. Or ask us to be added to our shared Dropbox folder.
For just $40 you can get a new license from Real Software today. Due to time zone differences, I think full 22 hours are left.
go here:
tinyurl.com/realstudiosale
Just to inform you. The filemaker meeting moves to 15th January and so I can't go to both Real Studio and Filemaker meeting in one run. For that reason, I will probably not drive to Hamburg that week.
PS: Of course if a client asks for a meeting in Hamburg for that time, I would be present. So if someone needs a session with me for training or development together for Filemaker or Real Studio, you can contact me.
Don't worry. Just a problem with a software update.
In general if they are offline with website and you need something, you can email support (custserv@realsoftware.com) directly, check the
blog or read the mailing lists.
Update: It's back online.
- Today, 17th December in Atlanta (USA). 6pm to 9pm in Aldo's Italian Restaurant. See website.
- Tomorrow, 18th December in Zurich (Swiss). 7pm in Positano restaurant.
- 9th January in Hamburg (Germany). 18:30 in Block House Wandsbeck. See our website.
- 18th January in Paris (France). Full day event. See website for details.
You can meet me in Zurich, Hamburg and Paris and ask your Real Studio questions
New in this prerelease of the 13.0 plugins:
- Added Label.SetTextThreadSafeMBS, Progressbar.SetMaximumThreadSafeMBS, Progressbar.SetMinimumThreadSafeMBS, Progressbar.SetValueThreadSafeMBS, RectControl.SetEnabledThreadSafeMBS and RectControl.SetVisibleThreadSafeMBS.
- Added AudioPlayThruMBS.Volume and CAPlayThroughMBS.Volume properties.
- Added Mode parameter to SystemInformationMBS.ProcessorCount to query either logical or physical cores.
- Added RecursionLimit and RecursionMaxLevel for DirectorySizeMBS class.
- Updated curl to version 7.28.1 on Mac OS X and Windows.
Download:
macsw.de/plugin/Prerelease. Or ask us to be added to our shared Dropbox folder.
You may have read that accessing GUI elements in a thread is a bad idea. In the Real Software blog have been articles like
Doing Progress Right and
Detecting UI Access from Threads.
But well I don't like this thing with running a timer to update GUI. I want to update the GUI from the thread. There even was somewhere a feature request to make some methods like progressbar.value working well on a thread.
As this is still missing and setting progressbar.value on a thread still makes trouble, I added a few utility methods to our plugins:
- Label.SetTextThreadSafeMBS
- Progressbar.SetMaximumThreadSafeMBS
- Progressbar.SetMinimumThreadSafeMBS
- Progressbar.SetValueThreadSafeMBS
- RectControl.SetEnabledThreadSafeMBS
- RectControl.SetVisibleThreadSafeMBS
I hope those help people to move their code more easier to Cocoa, make it work right and thread safe.
New in this prerelease of the 13.0 plugins:
- Fixed rare crash in internal text functions where an empty string converted to UTF32 would cause a crash in internal text class destructor.
- Fixed PDFDocumentMBS attributes so you can now assign empty string to clear them.
- Added FormatMBS function.
- Added LocaleMBS class.
- Added NetworkInterfaceMBS class.
- Updated SQLAPI++ 4.0.3b1. This includes new informix unicode support.
Download:
macsw.de/plugin/Prerelease. Or ask us to be added to our shared Dropbox folder.
The next meeting of the Paris Real Studio developer group will take place Friday, January 18th, 2013 from 8h30 to 17h in Paris.
Save the date and join this meeting. The location will be announced in the next days, but will be close to Gare du Nord in Paris.
There will be presentations by Stéphane Thiroux, Stéphane Pinel (RealSoftware), Jeremiah Leroy, Valdemar de Sousa and Christian Schmitz (MBS).
Attendance at this meeting is free (but if you want to donate to the organization, you're welcome). WIFI is available on site.
For more details, please visit:
realstudio-fr.com/prochaine-reunion-du-groupe-pur-paris-utilisateur-realstudio/
If you see this message:
You can either remove the Mac plugin part or update plugins to newer version. This error is due the missing resourcefork class in Real Studio 2012r2 in Cocoa targets.
Update: Resourcefork is also not available in Cocoa and gives an error when you use it.
As Real Studio 2012r2 removes the ResourceFork class for Cocoa target (strange idea, isn't it?), we decided to create our own resourcefork class for our plugins. It will be available with next prerelease.
And while we spend time on this, we can add a few additional goodies. if you have ideas or wishes, please do not hesitate to contact us.
Real Studio 2012 Release 2 is now available! With more than 100 improvements and 7 new features, this release includes:
- 30+ OS X Cocoa updates
- 20+ Web updates
- 10+ Windows updates
- 10+ Linux updates
- A new Web Control SDK that allows you to create web controls for use in Real Studio web applications using HTML/CSS/JavaScript. This makes it possible to use JQuery and other web frameworks in Real Studio web apps.
- Faster remote debugging for improved cross-platform support
- A WebCanvas for easily creating graphical, interactive custom controls
- Crypto module (Hashing) with support for MD5, SHA1, SHA256, SHA512, HMAC and PBKDF2 for 1-way encryption.
- Web applications can now easily be localized to support multiple languages in exactly the same way you localize desktop applications.
- PostgreSQL SSL support for improved security
To download 2012 Release 2, visit
realsoftware.com/download.
New in this prerelease of the 13.0 plugins:
- Added CoreFoundation support for Windows using QuickTime 7: CFArrayMBS, CFBinaryDataMBS, CFBooleanMBS, CFCharacterSetMBS, CFDictionaryMBS, CFMutableArrayMBS, CFMutableBinaryDataMBS, CFMutableCharacterSetMBS, CFMutableDictionaryMBS, CFMutableStringMBS, CFStringMBS and CFURLMBS work now on Windows if QuickTime 7 is installed.
- Added GTKWindowMBS class.
- Added MouseWheel, MouseExit or MouseEnter event to OverlayMBS class.
- Fixed OutOfBoundsException from Plugin on Windows to also show informative message.
- Fixed crash with DarwinRUsageMBS.IntegralMaxResidentSetSize property.
- Added picture parameter to ThreadedTransformMBS and TransformColorsMBS for better performance.
- Added CGDisplayMBS.SetRotation.
- Added folderitem.VolumeUUIDMBS.
- Fixed overflow bug in PictureConvolutionMBS class (dark pixels in white areas) and edge case (black pixels on left and right side)
- Fixed resize bug with lock properties on CocoaControlMBS on Cocoa targets.
- Fixed possible crash in MacUSBMBS.Connect.
- Fixed crash in GZipFileMBS.CloseForString on Linux.
- Fixed CocoaControlMBS function.
- Added BacktraceMBS function.
- Fixed some constants on NSWindowMBS like NSWindowDidEnterFullScreenNotification.
Download:
macsw.de/plugin/Prerelease. Or ask us to be added to our shared Dropbox folder.
CoreFoundation is one of the Apple frameworks included with MacOSX. But it is also included with QuickTime 7 on Windows. So with next plugins theplugin parts
CF,
CFURL,
CFCharacterSet and
CFDictionaryArray are updated, so they work on Windows, too.
If no QuickTime is installed, we raise an exception on most functions.
You can try it soon in 13.0pr1 and if you have need for more CF classes on Windows, please contact us.
We can offer two Real Studio meetings:
18th December 2012 in Zurich
19th December 2012 in Bern
Both around 7pm to 10pm in a restaurant near the main station.
If you are interested, please email me so I can keep you informed about the exact time and location.
See also the
Swiss User Group.
Do you see picture on the side?
This is a cinema display rotated to 90° with the content. One of the fun things you can do nowadays with modern Macs.
With next plugins we'll have a SetRotation method on the CGDisplayMBS class to do this.
Code looks like this in our example project:
dim d as CGDisplayMBS = CGDisplayMBS.MainDisplay
dim e as integer = d.SetRotation(90)
if e<>0 then
MsgBox "Error: "+str(e)
end if
We just got a nice compliment from a customer. They started with Real Studio and did some testings with connecting to Microsoft SQL Databases. In their tests the plugin from Real Software to connect to MSSQL was much too slow. It app was frozen with processing a 100 records. They even considered dropping Real Studio, but luckily they discovered our
SQL plugin.
A speed comparison with same database and same hardware with MSSQL 2008 for processing 32,000 records shows this results:
Real Studio MSSQL Plugin: 2.5 hours if it does not crash!
MBS Real Studio SQL Plugin: 14 minutes
So this client is happy and enjoys our plugin and continues with Real Studio.
Your milage may vary as those benchmarks depend on a lot of parameters. But at least you should keep your database code able to switch so you can compare between various plugins.
PS: With MBS Real Studio SQL Plugin we also connect to Mircosoft SQL Server from Mac and Linux using freetds library which is not supported by Real Software's plugin.
Real World 2013 is less than five months away and Real Software announced today the session list:
- Advanced Object Oriented Design in Real Studio, Seth Verrinder
- Advanced Topics in Web Apps, Greg O'Lone
- Basics of Object Oriented Design in Real Studio, Seth Verrinder
- Cloud Sync Without iCloud, Stephen Dodd
- Creating Smart Apps Using Real Studio, Trisha Duke
- Database Code Hoarders: Buried Alive, Jared Zelek
- Database Design 101, Norman Palardy
- Design Patterns, Jared Zelek
- Designing Cross-Platform Apps, Paul Lefebvre
- Developing Linux Apps, William Yu
- Developing Windows Apps, William Yu
- How to Succeed in Business Using Real Studio, Richard Duke
- Intermediate Database Coding Techniques, Bob Keeney
- Introduction to the Web Control SDK, Greg O'Lone
- Introduction to Web Applications, Greg O'Lone
- iOS Basic, Joe Strout
- iOS Advanced, Joe Strout
- MonkeyBread Software Plugins Overview, Christian Schmitz
- New Framework: What, When and Why, Joe Strout
- New IDE Tips and Tricks, Thom McGrath
- Optimizing Code, Kem Tekinay
- Reporting Tools, Bob Keeney
- Scaling Web Apps, Travis Hill
- SQL 101, Norman Palardy
- Unit Testing: What and Why, Scott Boss
- Using 3rd Party Web Services, Paul Lefebvre
- Using Source Control, Paul Lefebvre
- Wifi Sync, Stephen Dodd
Also available is a
Pre-Conference Training Day from BKeeney Software. So see you on the conference and maybe I even come to the training to say Hello and answer some questions.
We got this press release today:
Arbed is a tool to perform advanced editing operations with Real Studio
projects, such as:
- Comparing two projects, seeing and merging them in a structured manner
much better than what an be achieved using plain text files (such as xml and
rbvcp).
- Greatly assist in preparing an existing app for localization by turning
strings in your code into dynamic ones, all in one go.
- Advanced search & replace functions, even scriptable.
Version 1.6 adds the following features:
- Reads and writes VCP (.rbvcp) projects, too
- String Obfuscation lets you conveniently hide your texts (e.g. SQL statements) from hackers.
For more information see tempel.org/Arbed
We use it a lot here at Monkeybread Software, so we can recommend it to everyone for special tasks which the Real Studio IDE can't do. For example we use it to produce the HTML versions of the example projects which we include in our documentation.
NICKENICH, Germany (December 4th, 2012) -- Monkeybread Software releases version 12.5 of the MBS plug-in for Real Studio.
The MBS plug-in comprises a collection of several plug-in parts which extend the Real Studio development environment with 1,700 classes featuring over 44,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 12.5 update:
For our ChartDirector plugin we updated the ChartDirector library to version 5.1.1 and added a couple of new functions related to tracking cursors. Please try the new amazing examples for tracking cursors in various charts.
We updated DynaPDF to version 3.0.21.55 and added a few new classes like
DynaPDFEditTextMBS for editing page text. The new function ExtractPageText helps you to query the text of a page easily. And with the
DynaPDFPageStatisticMBS you can quickly check if a page has images or vector graphics.
The new
Mac USB class can connect to an USB device on a Mac. For Windows we have the
WinUSBMBS class. This way you can read and write data to USB devices cross platform and integrate various devices from your clients.
For our SQL plugin we have several new features. First you can connect now to SQL Anywhere Servers in version 10, 11 and 12 from Sybase. For our regular
SQLDatabaseMBS class we added SQLExecuteMT and SQLSelectMT methods for threaded queries in background. We also got an utility function CloneMBS to create a copy of a RecordSet and a few more utility functions like the new functions in our
MySQLMBS class.
With the new
ExtendedAttributesMBS module you can read and write extended attributes on Mac OS X like Finder comments and add your own metadata to each file.
Finally we have more additions like new picture functions, improvements to our Cocoa classes, improvements to PDFKit classes and the Twain plugin.
See
release notes for a complete list of changes. If you have questions, please don't hesitate to contact us. Also you can ask questions at Real World in Orlando next year.
Fixed 1600 examples for our Real Studio plugins and checked most of the 160 databases coming with the FIlemaker plugin.
Even a half automated process takes endless hours, but it is done now!
New in this prerelease of the 12.5 plugins:
- Added RecordSet.CloneMBS method and CloneRecordSetMBS function.
- Added SQLExecuteMT and SQLSelectMT to SQLDatabaseMBS for threaded queries.
- Added DynaPDFMBS.PageStatistic.
- Added DynaPDFPageStatisticMBS class.
- Added mode 10 for CombineMBS function.
- Added support to BMPStringtoPictureMBS for BMP files with BI_FIELDS compression.
- Fixed bug in GMGraphicsMBS.Ellipse.
Download:
macsw.de/plugin/Prerelease. Or ask us to be added to our shared Dropbox folder.
We all use a lot of databases, I presume?
Well, from time to time I had the idea that it would be useful to clone a recordset. And with the new plugin function
CloneMBS on the RecordSet class, this is indeed possible. The plugin makes an in memory copy of all records with all the values, so you can throw away the original RecordSet and even close the database connection.
This can be useful for various debugging things and I even considered some more functions, but I'm not sure how useful they'd be. Like creating a recordset on the fly in RB code providing an array of column names and and an array of values. Could you use such a dynamic created recordset?
Maybe something for
Studio Stable Database in order to use it with normal RecordSet? This way we could send a record set from SSD to report functions.
Well, if you have an idea, don't hesitate to contact us.
Five years ago we started created tutorial videos and today our
video page has birthday. Enjoy a video and learn about our plugins.
Over the years we collected more than 60 videos. We hope you enjoy them!
We know we could make more videos. So what wishes do you have?
Please email us or post a comment here.