Exchanges rates change over time. And as we calculate our prices in Euro, we have to adjust our prices regularly. Of course you can always decide which currency you use for your payment. Often it is cheaper to order in Euro/USD as your credit card company may have the better exchange rate than the payment service you use.
Last year you paid $294 for a commercial Complete plugin license. Earlier this year we lowed it to $274, but today we recalculated and today you can buy the same license for $245. A saving of $49 US Dollars.
Last week I had the idea to try clustrmaps.com and make the visitors of the blog visible. After one week we have this result:
Please not that this does only count people browsing to the blog with a browser and not all the RSS readers or search machines.
English text below.
REAL Studio Training München
Nachdem im Jahr 2008 bereits eine Schulung in Frankfurt guten Anklang fand, organisierte Application Systems Heidelberg als deutscher REAL Studio Distributor zusammen mit Brainworks Training eine REAL Studio Schulung für den 28. und 29. Mai 2010 in München.
Einige Teilnehmer waren schon Donnerstags in München, so dass wir uns am Abend vorher zum Abendessen treffen konnten. Im Restaurant Löwenbräu, direkt neben Brainworks gelegen, genossen wir bayrische Spezialitäten und diskutierten über Wünsche für das Training und Erfahrungen mit REALbasic.
Am Freitag starte unsere Schulung in den brainworks Schulungsräumen. Beim ersten Mal weiß man nie, wie viele sich anmelden, aber mit 6 Teilnehmern waren wir gut besetzt, darunter sogar einige mit weiterer Anreise von der Nordseeküste. Nach einer kleinen Vorstellungsrunde hatte jeder Teilnehmer die Gelegenheit seine Themenwünsche zu äußern, die alle an den zwei Tagen berücksichtigt wurden. Mit einem kleinen Programm für eine Einkaufsliste stiegen wir in REAL Studio ein. Den ganzen Vormittag verbrachten wir mit diesem Beispiel, wobei wir viel über Steuerelemente, Dateien und Druckfunktionen lernten. Zur Mittagspause gingen wir gemeinsam zum Griechen in den Biergarten. Die gesamte Verpflegung bei der Schulung ist übrigens in der Kursgebühr enthalten. Nachmittags ging es weiter mit einer Bilderdatenbank, einigen Beispielen zur Container Klasse, dem Declare Befehl und RBScript. Am Abend waren wir dann noch zu viert beim Italiener Abendessen. Gelegenheit Fragen zu stellen, Themen für Samstag zu besprechen und sich auszutauschen.
Am Samstag standen Netzwerkfunktionen auf dem Plan. Zuerst einmal ein einfacher Dateidownload von einer Webseite, dann das Verschicken einer Email. Ein weiters Beispielprogramm lädt mit einem HTTPSocket den aktuellen Euro/USD Wechselkurs von einer Webseite. Danach beschäftigten wir uns mit einem Chat Programm. Zuerst mit UDP Sockets ganz ohne Verbindungen mit Broadcasts im lokalen Netzwerk. Danach mit TCP Sockets zwischen zwei Computern. Mit dem ServerSocket konnten im 3. Chat Projekt dann mehrere Chats gleichzeitig laufen. Und durch die AutoDiscovery Klasse fanden sich dann die Chatpartner direkt ohne die IPs eintippen zu müssen. Da jedes Programm Einstellungen speichern muss, haben wir ein Projekt mit einem Modul für Preferences geschrieben. Zum Mittagessen ging es Samstags zum Italiener mit großen 32cm Pizzen. Nach der Mittagspause schauten wir uns anhand von zwei Beispielen intensiv die Dictionary Klasse an. An einem weiteren Beispiel haben wir uns Threads angeschaut um Aufgaben im Hintergrund zu erledigen. Danach beschäftigten wir uns mit den PDF Funktionen des MBS REALbasic DynaPDF Plugins: Rechnungen bzw. Briefe als PDF schreiben mit einem vorhanden PDF Dokument als Briefpapier. Zurück zum Netzwerk kamen wir mit einem Projekt, welches ein Formular auf einer Webseite abschickt. Dazu programmierten wir ein kleines Projekt für Twitter. Gegen Ende kamen wir zu den XML Funktionen in REAL Studio mit Beispielen zum Schreiben und Lesen von XML Dateien. Zum Schluss schauten wir uns noch ein paar Beispiele mit Diagrammen des MBS REALbasic ChartDirector Plugins an. Erfreulich war noch, dass zwei Teilnehmer von der Schulung am Freitag so begeistert waren, dass Sie spontan für Samstag verlängerten.
Wir danken Herrn Josef Neumaier und seinen Mitarbeitern für die nette Betreuung. Alle Teilnehmer bekamen von Application Systems Heidelberg das Buch "REALbasic für Einsteiger und Umsteiger" und von Monkeybread Software einen Gutschein über ein 6 Monatsabo für das REALbasic Developer Magazin geschenkt. Natürlich konnten die Teilnehmer alle Beispielprojekte mit nach Hause nehmen und wir freuen uns sie auf einer weiteren Schulung wieder zu sehen.
Euer Trainer Christian
REAL Studio Training in Munich, Germany.
After the training in Frankfurt in the year 2008 received good feedback, Application Systems Heidelberg, the official REAL Studio Distributor in Germany, organized together with Brainworks a REAL Studio training in Munich on 28th and 29th May 2010.
A few participants arrived on thursday, so we met for dinner. In the restaurant Löwenbräu, located next to brainworks, they serve excellent bavarian specialties. We discussed about REALbasic and expectations on the training.
We started friday in one of the training rooms in the brainworks office. On the first time, you never know how many attendees register, but with six attendees we were well-staffed. Not to mention that a few people had a long trip to come to Munich from the North Sea coast. All participants introduced themselves and expressed their wishes and topics to cover, which have been borne in mind. We started with a little shopping list project. We spend the whole morning to learn about controls, saving and loading text files and printing our shopping list. For lunch we went to a Greece restaurant with a beautiful beer garden. By the way all lunches, drinks and snacks are included in the training fee. On the afternoon we developed a picture database project. Also we learnt about the Container control, the declare command and RBScript with a couple of projects. For the evening a few of us met for dinner in a nice italian restaurant. The opportunity to ask questions, discuss topics for saturday and exchange experiences.
On saturday we had networking on the agenda: First a little file download from a website, second sending an email. Another sample project queried a website with a HTTPSocket for the current Euro/USD exchange rate. Next we started with a series of chat applications. First one using UDP Sockets with broadcasts in our local area network. Next one with TCP sockets between two computers. The third version uses a ServerSocket to allow several connections. Finally we added the AutoDiscovery class to find chat partners automatically on the local network without entering IP addresses. As every application needs to store settings, we wrote a project with a module to handle preferences. For our saturday lunch, we went to an italian restaurant with excellent 12.5 inches big pizzas. After lunch, we checked all the features of the dictionary class in two sample projects. In another sample we used threads to do work in background. Next we checked the PDF functions in the MBS REALbasic DynaPDF Plugin: How to write invoices/letters as PDF files using an existing PDF file as stationery. Back to networking we write a project to send a webform to a server. Our example posted messages to Twitter. Towards the end of our training we wrote two projects to write and read XML files. Finally we checked the chart options in the MBS REALbasic ChartDirector Plugin. We were happy that two participants were so excited about our Friday training, so they extended to stay for our Saturday training.
Thank you to mister Josef Neumaier and his staff for the excellent support. For our participants Application Systems Heidelberg donated a REALbasic book and Monkeybread Software donated a six month subscription for REALbasic Developer Magazine. Of course all participants received all example projects and we hope to see them again on one of the next trainings.
Your trainer Christian
New in the 6th prerelease of the 10.3 plugins:
- QTMovieExporterMBS.SetupDialog functions can now be called with nil movie to show the generic dialog without a preview.
- Added NSUserDefaultsMBS class.
- Updated DynaPDF to version 2.5.0.523.
Download:
macsw.de/plugin/Prerelease/
Enjoy a nice weekend!
For us here in Germany the sunday and the monday are both holidays, so offices are closed. But we will certainly find time to check emails.
This picture is from the St. Peter's Basilica in Rome.
New in the 5th prerelease of the 10.3 plugins:
- Now more than 4000 inline example code pieces in the documentation.
- Fixed SignedInteger64MBS.UnsignedInteger64.
- Fixed UnsignedInteger64MBS.SignedInteger64.
- PictureMBS.CopyPixels now returns boolean value for success or failure.
- Added PictureMBS.Combine functions.
- Added PDFPageMBS.Render.
- Added constructors to NSBoxMBS and other Cocoa view classes.
- Updated DynaPDF to version 2.5.0.522.
Download:
macsw.de/plugin/Prerelease/
Only one week is left until we have our REAL Studio trainings with brainworks in Munich on 28th and 29th May 2010.
Who has a ticket? Who needs a ticket? There are still seats available.
Do you have wishes for topics on those trainings? Email me.
More information:
www.realsoftware.de/schulungen/
Es gibt eine neue Ausgabe vom Hakin9 Magazin:
Download:
download.hakin9.org/de/Hakin9_DE_04_2010_DE.pdf
Website:
hakin9.org/de/magazine/1066-download-mai-ausgabe-von-hakin9
English: There is a German magazine about IT security and you can download here the newest issue.
Over the last year I uploaded a lot of prerelease plugin versions, but the bigger the plugin collection gets, the more time it needs.
Typically the process of compiling all projects on Mac, Windows and Linux, packaging and uploading can take 3 hours. But often it starts with adding some documentation for the latest additions and in that case I often find a bug, so I need to recompile again some plugins. Often it takes half a day for me.
So for the future we will reduce the frequency and only upload new plugins once a week. And we will publish the changes on the mailinglist and this blog.
If you find a bug and you need an urgent fix, we can email you the plugin file which changed and avoid uploading everything.
In addition to my recent
blog post and the
FAQ Entry, we can add another situation where registration can fail:
If you use remote debugging, make sure you clear the tempory files there, too. Else you may have old DLLs on your hard disc which may disturb your application.
Seems like there is a sale going on some REALbasic related books:
At least I got an email with a coupon code so I can order them at discounted prices. But I have those books already so if you did not get this email, you can email me (or comment here) and I can forward you the email and you may use the coupon...
From time to time I'm asked to add a plugin function for an unique machine ID. With the 10.3pr4 plugins we got a function for this: SystemInformationMBS.MachineID. I think a few people will be happy, but I need to warn about it. This ID may not be unique. Virtual machines can have the same ID as well as cloned installations. Also the ID may change over time. Maybe some values used for the machine ID or even the algorithm to calculate it can change. So whenever the MachineID does not match a stored one, you know that something changed. Maybe a new computer, maybe the same. But that is the time to reask for license information like a license key.
Now the Machine ID in my plugins is based on the serial number of the first hard disc in the computer, the brand string of the main CPU, the serial number of a Mac or it's model name. Those 4 values typically only change if you replace the harddisc or get a new computer. All the functions we use are exposed in the SystemInformationMBS module, so check them. You can build your own ID yourself if you like.
We do not use the MAC Address for the ID as it changes if you switch between wireless network and wired network. Also not counted in is the physical memory size as people like to upgrade their memory and the ID should not break too often.
More information:
http://www.monkeybreadsoftware.net/pluginpart-systeminformation.shtml
New in the 4th prerelease of the 10.3 plugins:
- Improved NSViewMBS.RenderImage and added new parameter for subviews which makes it working better with WebViewMBS.
- Added to PictureMBS: FillRectRandom and CompareImages and added some speed improvements on FillRect and CopyPixels.
- Splitted PDFKit plugin part internally into two parts. One with views and one without. So you can get a little bit smaller applications if you don't use the views.
- Added PDFPageMBS.Render.
- Added CustomPDFViewMBS class.
- Added coordinate convert methods to NSViewMBS and PDFViewMBS.
- Fixed bug with CustomNSViewMBS mouse handling.
- Added new functions to SystemInformationMBS module: MachineID, HardDiscSerial and CPUBrandString.
- Splitted WIADeviceManagerMBS into WIADeviceManager1MBS and WIADeviceManager2MBS. On Windows Vista you will want to use WIADeviceManager1MBS for digital cameras and WIADeviceManager2MBS for scanners.
- Fixed WIAItemMBS.DeviceDialog
- Fixed WIADeviceManagerMBS.GetImageDialog
- Fixed a couple of WIA constants.
- Improved PictureMBS.CopyPixels. In special case for RGB/BGR data the copy is done much faster if the images are similar constructed. We could optimize for other image formats in the future.
- Updated DynaPDF to version 2.5.0.521.
- Added classes to use USB HID Devices on Linux: LinuxHIDInterfaceMBS, LinuxUSBBusMBS, LinuxUSBDeviceDescriptionMBS, LinuxUSBDeviceHandleMBS and LinuxUSBDeviceMBS.
- Added options to PNGReaderMBS class to support reading PNG pictures in iPhone format.
- Changed most CURL examples to use CURLSMBS instead of CURLMBS to make them working on Windows right away.
- Added QTGrabberMBS.DisableDecode property so you can reduce CPU time if you don't need frames currently.
- QTGrabberMBS now does creating RB picture of CurrentFrame on demand to reduce CPU usage.
- Added SummaryMBS class.
Download here:
www.macsw.de/plugin/Prerelease/
Just a little hint: If you sit in the USA and you want to order some plugins, the price can be lower if you order in Euro than in USD. So please compare.
We adjust our prices from time to time and it seems this week as if the rates change faster than we want to update our price lists.
One customer ordered HID classes for Linux, so they will come soon to our plugins.
The WIA classes should be finished now and work on Windows Vista for digital cameras now. So from Windows 2000 to Windows 7 you should be able to get your photos imported.
Last week I got a request to support reading PNG images in the iPhone format. I'm not sure, but when I have time I'll look into that.
And it looks like Mac OS X has a nice set of functions for making text summaries. Eventually we get a class for that, too.
So, look forward for 10.3pr4 next week.
As you may know we have REAL Studio trainings with brainworks in Munich on 28th and 29th May 2010.
Today I got a notice that we have enough people, so the training will take place. Still there are seats available and you can order your ticket.
In one of the announcement emails there was a note saying that registration would end today, but that is wrong. Registration is still open next week.
More information:
www.realsoftware.de/schulungen/
Every year someone asks for Runtime Revolution. Of course, if a company would call and say "We order the function x for Runtime Revolution", I would start and write them that function. But in general is there an interest into plugins for Runtime Revolution?
The plugin API for Runtime Revolution has this features. You can
- declare custom commands and functions
- send messages to current card
- evaluate expressions
- get and set global variables
- get and set local variables which includes access to key/value dictionary and arrays
- get and set fields by name, index or id.
- redraw images by name, index or id.
This means you can not:
- declare classes, modules or controls
- pass arrays or dictionaries as function parameters
- access image objects directly
This limits possible plugins to basicly have only global functions. Functions that take an array would take the name of the local array variable and lookup the array values using that name.
So is there someone who has interest? And especially companies who want to order custom plugins?
Today I modified the documentation utility here to add three new things:
If you have more ideas, please email us or post a comment.
Today we close the office and celebrate our first year being married.
(more)
Internal REAL Studio Plugin DLLs should have build number inside
feedback://showreport?report_id=12178
Our MBS Plugins have build numbers in the DLL so putting libs together from different plugin versions would never be a problem. But REAL Studio in different versions may have incompatible plugin dlls, so this could get you into trouble over the years. To avoid, we suggest to add build numbers.
Sometimes people email me. They have an application made with REAL Studio and it complains about unregistered plugins. In this case I can only suggest to the user to reinstall the application for the case it is broken and suggest he emails the developer.
For the developer I can point you to our
FAQ Entry.
Last week friday our podcast turned 2 years and I forgot to tell you.
Nevertheless you can go on
monkeybreadsoftware.de/realbasic/movies/ and enjoy our videos.
And you can subscribe to our podcast on iTunes:
iPhone/iPod or
High Resolution.
Do not hesitate to send us suggestions and wishes for new videos.
On our website you find a new version of our Filemaker plug-in.
- Improved WebView.GetFormSelectValue and WebView.SetFormSelectValue to work with multiple selections. Multiple values are comma separated.
- Fixed a bug in the JPEG functions so they work again.
- Fixed Container.GetTypes which was named Container.GetType in 2.0 release.
- Fixed a bug with callback from webviewer to Filemaker 11.
Download here:
monkeybreadsoftware.de/filemaker/files/
With REAL Studio REAL Software changed a few IDs like the bundle ID and the document type IDs. And that changes breaks Spotlight indexing.
To fix that you can do the following:
(more)
As you may know we have REAL Studio trainings with brainworks in Munich on 28th and 29th May 2010.
A few people have already ordered their tickets, so I'm very confident that we get a nice training.
And if you registered, you can email me so we can get in contact. Maybe going to dinner together?
More information:
www.realsoftware.de/schulungen/
A few pictures of our boat trip today along the Rhine with views to the city of Andernach:
(more)
I updated the QuickLook plugin:
MBSREALbasicQuickLookPlugin.dmg
Today I sent my email newsletter to my customers. I use a self written application for it which uses the EmailMessage class. Now there is a problem: If you use text from an editfield/textarea control and pass it to the EmailMessage as BodyPlainText, it will use on my Mac the Mac line endings. That is no problem if you use Apple Mail, but if you use Windows Outlook Express 6 or Windows Eudora Version 7 or something else, it can happen that you see the whole text without line endings. All the text in one big paragraph. The solution in REALbasic is easy: BodyPlainText = ReplaceLineEndings(BodyPlainText, EndOfLine.windows). Simply convert line endings to the Windows format and you are done.
If you got my newsletter and can't read it well for any reason, please email back and we send you a PDF file with the content.
Something I learned today: If you offer an service in your application and you announce it on the network using Bonjour, you can pass a port number. But you don't need to ask the user for a port number or hard code one. You can simply let the operation system pick a port for you:
ServerSocket1.Port = 0
ServerSocket1.Listen
MsgBox str(ServerSocket1.Port)
So you specified 0, you started the socket and now you can read what port you got. If you announce this port now on Bonjour using our
DNSServiceRegisterMBS class, your clients will easily find you.
A book from Dana Brown and still a good reading. Maybe you want to take a look?
avoideconomicruin.pdf
Same as InstrR, but returns the last position, not the first one:
Function InStrR(Target As String, Find as string) As integer
Dim LastP As integer = 0
Dim P As integer = InStr(Target, Find)
While P>0
LastP = P
P = InStr(LastP + 1, Target, Find)
wend
return LastP
End Function
We got a couple of new Macs, so a three older models have to go:
Mac Mini (1,5 GHz Core Solo, 2 GB RAM, 250 GB hard disc & WLAN)
Mac Pro (2,8 GHz 2x Quad Core XEON, 16 GB RAM, 3 hard discs & WLAN)
Macbook 13" in black (2,2 GHz Core 2 Duo, 4 GB RAM, 320 GB hard discs & WLAN)
If you like, make a bid and maybe you win. I could bundle it with a plugin license
You have several REAL Studio versions in use? Want to know in advance what version a project has?
Well, in that case, try our new plug-in for QuickLook:
MBSREALbasicQuickLookPlugin.dmg
Before you install it, your project icons look like this:
but after you installed our plug-in to /Library/QuickLook and you restarted the Finder or logged in the next time, your icons look like this:
Enjoy! This plug-in is freeware, so tell your friends.
Today someone asked why this code is very slow:
// Methods
Sub Slow()
// Takes over 15 minutes here
dim t as integer = ticks
dim mem as MemoryBlock = NewMemoryBlock(128*1024*1024)
dim n as integer
for n=0 to len(mem)
mem.Byte(n)=rnd*255
next n
t = ticks-t
MsgBox str(t/60)+" seconds"
End Sub>
now calling len(mem) here does the following:
- Create a copy of the memoryblock as a string.
- Lookup the length of this string.
- Destroy the string.
And this happens all 128 million times! This takes forever. The solution is easy: Use mem.size instead of len(mem) you can save a magnitude of time. Also you should keep the upper bound of the for loop in a local variable for even faster code:
Sub Better()
// Takes 27 seconds here
dim t as integer = ticks
dim mem as MemoryBlock = NewMemoryBlock(128*1024*1024)
dim n as integer
dim c as integer = mem.size-1
for n=0 to c
mem.Byte(n)=rnd*255
next n
t = ticks-t
MsgBox str(t/60)+" seconds"
End Sub
You can even optimize it more by using the Random class and requesting a random value in a given range. Integer math is faster here than double math:
Sub Best()
// Takes 21 seconds here
dim t as integer = ticks
dim mem as MemoryBlock = NewMemoryBlock(128*1024*1024)
dim n as integer
dim r as new Random
dim c as integer = mem.size-1
for n=0 to c
mem.Byte(n)=r.InRange(0,255)
next n
t = ticks-t
MsgBox str(t/60)+" seconds"
End Sub
PS: Code formatted with my format script:
monkeybreadsoftware.de/realbasic/format.shtml
Go and get your copy. And maybe you want to send me comments? I see there are two articles from me in that issue.
REAL Studio 2010r2 was release today.
This is a decent update to REAL Studio. I think everyone will find his favorite item in the release notes. And please do not whine about missing Cocoa target. They are working on it, they make progress, but it is not good enough to actually use it in a project. A few of the highlights from the release notes:
- They fixed several bugs/crashes around exception handling
- The Libs folder can now be renamed "Libs", so you can share DLLs between several REALbasic applications in the same folder on Windows.
- Printing a project can now include the pictures from the window editor.
- The reference will load from the wiki if you are connected to the internet.
- SSL Sockets now default to SSLv3, so check your code!
The release notes list 17 new things and 68 fixed things.
As far as I see it works well with my plug-ins. If you find an issue, please report as soon as possible.
Zwischen 2000 und 2002 erschienen in der
Macwelt zwei Serien zu REALbasic. Die alten Artikel habe ich damals geschrieben und durfte Sie auch auf meine Webseite setzen. Und hier sind sie nochmal zusammengefasst.
Ich denke als deutsches Tutorial sind sie immer noch gut geeignet und REALbasic Anfänger.
Download:
macwelt_realbasic_serien.pdf
siehe auch
monkeybreadsoftware.de/realbasic/macwelt.shtml
English: between 2000 and 2002 the Macwelt magazine published two series of REALbasic tutorial articles from me and I think every german speaking REALbasic user may want to take a look.
Next Monday (tomorrow), Marc Zeedar will publish a new issue of the REALbasic Developer Magazine.
From my view it is good to have a magazine in the REALbasic world and I like the magazine. It's much more up to date than any of the books. The magazine is currently distributed as PDF files, but you can order the yearly books or get the CD with search options.
I recommend you to buy the available books as well as a subscription to the magazine if you want to learn REALbasic. Also check the back issues.
And for my blog readers we have a little gift: 3 six months subscriptions for free.
If you want one, send us an email, a text message, post a comment or use the feedback form to inform us with your email address. We will select three people randomly on sunday night.
Update: Sunday ended and we got our winners. Thank you.