Software (English Text)
More Comments on iOS 4 Multitasking
10. 07 10 - 01:12 -
Some More Comments on iOS 4 Multitasking.
Expiration Handlers
If a process is running in background, having issued UIApplication's beginBackgroundTask before, then the process expiration handler's code following the (last) issuing of endBackgroundTask is not executed. In other words: iOS 4 does not wait until your expiration handler block finishes. It waits for the last endBackgroundTask and terminates (kills) the app (quite ungracefully).View Controllers
If your app enters background the active view controller does not receive a viewWillDisappear. Neither will it receive a viewWillAppear if the app enters foreground.Application Lifecycle
On iOS 4.0 the message applicationWillTerminate is rarely send. I made some tests and found the following:- An app will not receive applicationWillTerminate if it is in background and user selects force quit (pressing the minus sign in the list of recent apps).
- An app will not receive applicationWillTerminate if it is in background and the user selects to shut down the device while your app is running.
- An app will not receive applicationWillTerminate if it is in background and system shuts down due to low battery.
- An app will receive applicationWillTerminate if it is in foreground and system shuts down due to low battery.
- An app will receive applicationWillTerminate if it is in foreground and the user selects to shut down the device while your app is running.
A Short Note on iOS 4 (iPhone OS) Multitasking
28. 06 10 - 01:01 -
Last weekend I checked out iOS 4, in particular its
multitasking. From articles on the web I got the
impression that iOS 4 multitasking isn't a real
multitasking, rather a fast app switching (see, e.g.,
the article by Matt Neuburg as
cited on daring fireball).
But: iOS 4 apps are fully multitasking with just two exceptions:
Apart from these restrictions you can run code in background. You can run your own run loop in background and register timers (events) with that run loop.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Create and register your timers
// ...
// Create/get a run loop an run it
// Note: will return after the last timer's delegate has completed its job
[[NSRunLoop currentRunLoop] run];
});
In the upcoming release of Serial Mail (Version 4.1) I have implemented a background task which sends mail via an SMTP server in background. This background task uses timers to check the response of the SMTP server an hence it is requiring a run loop. I was able to do network connections in background. Apple says that you should prepare that network connections may fail when the app is running in background (however an app needs to check for failing connections anyway).
There is one strange thing about iOS 4: When the user terminates the app manually (by deleting it from the list of recently used apps) then iOS does not call your app delegates applicationWillTerminate method. I have used applicationWillTerminate to save the application's state upon termination and now that code had to move to applicationWillResignActive.
But: iOS 4 apps are fully multitasking with just two exceptions:
- The iOS 4 UI event loop is single tasked, i.e. only the front app is running on the UI event loop. If app code is designed to be running on the UI event loop thread, then it is not executing if it enters background. However, this is not a big restriction. An app will not receive any UI events when running in background anyway (even on Mac OS X). If you design your iOS 4 app to be detached from the UI event loop it continues to run when put to background.
- The OS may terminate your app when resources like memory are running low or "execution time" is used up. This is also not a big restriction. For example, on OS X if memory is running low the user is prompted to terminate an app. Also, on OS X I would terminate an app if it runs crazy and takes up all CPU time. So actually I believe it is an improvement to start thinking about rules when apps are terminated by the OS. (Note: For iOS 4 the rule which terminates an app is a bit too simple, as I will explain soon).
Apart from these restrictions you can run code in background. You can run your own run loop in background and register timers (events) with that run loop.
Background Run Loop
This is done with the following code:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Create and register your timers
// ...
// Create/get a run loop an run it
// Note: will return after the last timer's delegate has completed its job
[[NSRunLoop currentRunLoop] run];
});
In the upcoming release of Serial Mail (Version 4.1) I have implemented a background task which sends mail via an SMTP server in background. This background task uses timers to check the response of the SMTP server an hence it is requiring a run loop. I was able to do network connections in background. Apple says that you should prepare that network connections may fail when the app is running in background (however an app needs to check for failing connections anyway).
App Termination
So this solves the first problem, that the UI thread is single threaded. What about iOS terminating your app when it runs in background: To prevent that the OS terminates the app we should tell it that we have a long running background task. Apple suggest that you mark each background tasks by calls to UIApplication's beginBackgroundTask and endBackgroundTask see the developer documentation's sample code. I haven't seen a definition of "long running", but it appears as if the app is terminated if a background task runs 10 minutes after the app has been suspended (it does not help to launch a new background task / thread from another one).Improving the App Termination Criteria
For my app 10 minutes background task time are sufficient. There are application where you require a truly long running background process checking stuff at certain intervals, etc. However, it is clear that the multitasking introduced in IOS 4 just needs a minor tweak: it requires more sophisticated rules for terminating apps. For apps with background task a much better rule would be to consider cpu time that real time. This would for example allow apps like instapaper to check and download files in background on a regular basis (say, once a day) if that task consumes only a small amount of cpu time. The author of instapaper discussed a different solution in his blog, however I hope for a simpler one: better, transparent criteria for termination of a background apps.Scheduled Relaunch
Another improvement of the current multitasking APIs, which is more in line with the solution in the instapaper blog, would be to include a user configurable service for scheduled relaunch of an app into background. The service should be configurable on an per app basis. Apps registering with it should bring up a dialog requesting for permission (like location service does). The service should then call a method like applicationDidLaunchToBackground. I would prefer such a solution over a myriad of specialized background services. Instead the relaunch service could take options like "relaunch when network available".There is one strange thing about iOS 4: When the user terminates the app manually (by deleting it from the list of recently used apps) then iOS does not call your app delegates applicationWillTerminate method. I have used applicationWillTerminate to save the application's state upon termination and now that code had to move to applicationWillResignActive.
Obba: Handling Java Objects in Excel, OpenOffice and NeoOffice
14. 02 10 - 22:11 -
A new version of Obba has been released: Obba
Version 1.9.34.
Obba provides a bridge from spreadsheets (Excel or OpenOffice) to Java classes via worksheet functions (UDFs), without the need to write a single line of code. With Obba, you can easily build spreadsheet GUIs to Java classes. Obba is available for Excel and OpenOffice and Obba sheets may be migrated from Excel to OpenOffice or vice versa.
For more information see Obba's homepage.
Release Notes
Version 1.9.34 of Obba brings the following changes:
Obba provides a bridge from spreadsheets (Excel or OpenOffice) to Java classes via worksheet functions (UDFs), without the need to write a single line of code. With Obba, you can easily build spreadsheet GUIs to Java classes. Obba is available for Excel and OpenOffice and Obba sheets may be migrated from Excel to OpenOffice or vice versa.
For more information see Obba's homepage.
Release Notes
Version 1.9.34 of Obba brings the following changes:
- Fixed a problem which prevented loading of some classes. The current thread's context class loader was null. This appears to be a problem with the Java plugin. A workaround was created. Note: This problem resulted in the XMLDecoder not working.
- Fixed a problem which prevented installation of Obba for OpenOffice.
- More improvements for OpenOffice
- Arrays of objects can be created using obMake with a class name of ClassName[] where ClassName is the component type (see documentation for an example).
- Added a demo sheet showing how to access data from finance.yahoo.com. Include the Java source code for the class handling the web access.
Snow Leopard 64 Bit Kernel - Switching between Apps
14. 02 10 - 21:22 -
Snow Leopard felt slow on my MacBook Pro (5,5).
Switching between apps felt sluggish. I usually run
Safari, Eclipse an VMWare at the same time and often
switch between these.
The MBP booted with 32 bit version of the OS X 10.6 Kernel (this is the default) - thx O.S. for the hint. To my surprise, switching to the 64 bit kernel made a big difference. Switching between apps is much (!) snappier. (I did not see any perfomance test discussing app switching!)
PS: You can boot into the 64 bit kernel by changing the file
to include the following Kernel Flags
The MBP booted with 32 bit version of the OS X 10.6 Kernel (this is the default) - thx O.S. for the hint. To my surprise, switching to the 64 bit kernel made a big difference. Switching between apps is much (!) snappier. (I did not see any perfomance test discussing app switching!)
PS: You can boot into the 64 bit kernel by changing the file
/Library/Preferences/SystemConfiguration/com.apple.Boot.plist
to include the following Kernel Flags
<key>Kernel</key>
<string>mach_kernel</string>
<key>Kernel Flags</key>
<string>arch=x86_64</string>
How to Fetch Stock Quotes from Yahoo into Excel/OpenOffice using Java
20. 12 09 - 17:38 -
I wrote a small tutorial on how to use Obba
and a small Java class to load Yahoo stock
quotes into Excel / OpenOffice. It is just
an example and could easily extended to other
data / web sites.
Java code and spreadsheets are included.
Java code and spreadsheets are included.
Obba: Handling Java Objects in Excel and OpenOffice
06. 12 09 - 21:04 -
A new version of Obba has been released: Obba
Version 1.9.13.
Obba provides a bridge from spreadsheets (Excel or OpenOffice) to Java classes via worksheet functions (UDFs), without the need to write a single line of code. With Obba, you can easily build spreadsheet GUIs to Java classes. Obba is available for Excel and OpenOffice and Obba sheets may be migrated from Excel to OpenOffice or vice versa.
For more information see Obba's homepage.
Release Notes
Version 1.9.13 of Obba brings the following changes:
Obba provides a bridge from spreadsheets (Excel or OpenOffice) to Java classes via worksheet functions (UDFs), without the need to write a single line of code. With Obba, you can easily build spreadsheet GUIs to Java classes. Obba is available for Excel and OpenOffice and Obba sheets may be migrated from Excel to OpenOffice or vice versa.
For more information see Obba's homepage.
Release Notes
Version 1.9.13 of Obba brings the following changes:
- Added a window to the Obba Control Panel which visualizes the objects and their dependencies in a graph. The dependencies are determined by the objects used during construction an object.
- Improved the handling of transient object handles.
iPhone OS App: Serial Mail
26. 07 09 - 01:37 -
I have ported my OS X Application "Serial Mail"
to the iPhone OS. Since the iPhone OS APIs are much
cleaner than the AppleScript support of OS X Mail,
Serial Mail for iPhone is to some extend faster and
better than its OS X counterpart. For details see the
Serial Mail home page or check
out Serial Mail in the iPhone App
Store.
Serial Mail 4.6 released
26. 07 09 - 01:28 -
I have release an
update to Serial Mail. With Serial Mail 4.6 you can
add attachments to each generated messages
where the attachment is specific for the
recipient. In the tag the file name may contain
one or two placeholders '%@' where the first
placeholder is replaced by the first name and the
second placeholder is replaced by the last name of
the recipient.
Obba: Handling Java Objects in Excel and OpenOffice
19. 07 09 - 23:38 -
A new version of Obba has been released: Obba
Version 1.8.21.
Obba provides a bridge from spreadsheets (Excel or OpenOffice) to Java classes via worksheet functions (UDFs), without the need to write a single line of code. With Obba, you can easily build spreadsheet GUIs to Java classes. Obba is available for Excel and OpenOffice and Obba sheets may be migrated from Excel to OpenOffice or vice versa.
For more information see Obba's homepage.
Release Notes
Version 1.8.21 of Obba brings the following changes:
Obba provides a bridge from spreadsheets (Excel or OpenOffice) to Java classes via worksheet functions (UDFs), without the need to write a single line of code. With Obba, you can easily build spreadsheet GUIs to Java classes. Obba is available for Excel and OpenOffice and Obba sheets may be migrated from Excel to OpenOffice or vice versa.
For more information see Obba's homepage.
Release Notes
Version 1.8.21 of Obba brings the following changes:
- Access fields of an object directly through a spreadsheet function call using 'obCall'. In this case the method name has to be dot + fieldname (e.g '.myMember').
- Access elements of an array through a spreadsheet function call using 'obCall'. In this case the method name has to be '[]' and the argument of the call is integer specifying the index. Element of multi-dimensional arrays can be accessed likewise.
- Vector arguments can be passed as arbitrary ranges (columns, rows or two dimensional ranges which are then flattened using row major).
iPhone OS App: Presentation Assistant
21. 05 09 - 14:26 -
After playing around with the iPhone SDK for a while I wrote an application which supports me during a presentation with intuitively visualized timing information. For details see the Presentation Assistant home page.
Tip: uid 501 does not exist in the passwd file!
19. 05 09 - 23:17 -
I had some trouble doing sudo on a remote (OS X 10.5)
machine, logged in via ssh. It turned out that if I
do
then I cannot do sudo on that machine (getting the error "uid 501 does not exist in the passwd file!"). Also I can no do su (getting the error "su: who are you?"). However, if I log in using
everything works fine. Just in case you stumble across this problem...
ssh username@machinename.local
then I cannot do sudo on that machine (getting the error "uid 501 does not exist in the passwd file!"). Also I can no do su (getting the error "su: who are you?"). However, if I log in using
ssh -l username machinename.local
everything works fine. Just in case you stumble across this problem...
Obba: Handling Java Objects in Excel and OpenOffice
02. 01 09 - 23:49 -
A new version of Obba has been released: Obba
Version 1.7.29.
Obba provides a bridge from spreadsheets (Excel or OpenOffice) to Java classes via worksheet functions (UDFs), without the need to write a single line of code. With Obba, you can easily build spreadsheet GUIs to Java classes. Obba is available for Excel and OpenOffice and Obba sheets may be migrated from Excel to OpenOffice or vice versa.
For more information see Obba's homepage.
Release Notes
This release fixes two small bugs in connection with the software registration: For OpenOffice the location where the registration is stored changed (you have to reenter registration data).
Obba provides a bridge from spreadsheets (Excel or OpenOffice) to Java classes via worksheet functions (UDFs), without the need to write a single line of code. With Obba, you can easily build spreadsheet GUIs to Java classes. Obba is available for Excel and OpenOffice and Obba sheets may be migrated from Excel to OpenOffice or vice versa.
For more information see Obba's homepage.
Release Notes
This release fixes two small bugs in connection with the software registration: For OpenOffice the location where the registration is stored changed (you have to reenter registration data).
Serial Mail 4.3 released
31. 08 08 - 22:25 -
I have release
another update to Serial Mail. With Serial Mail 4.3
generated messages are send from the account set
up in the template message (before, it was the
default account).
Serial Mail 4.2 released
18. 07 08 - 23:13 -
I have release an
update to Serial Mail. Starting with version 4.2 I
reactivated the support for formatted text, images
and attachments in the template. Still, due to the
sloppy implementation of Apple Mail's AppleScript
support, formatted templates are processed very
slowly and in some cases formatting may be lost
(e.g. tables).
Serial Mail 3.10 released
16. 12 06 - 00:50 -
I have release an
update to Serial Mail. This is just a minor update,
fixing a bug that prevented the default
attribute to work on
<ab:custom/> fields. In addition there were
some updates to the documentation.
Serial Mail: Bug in OS X may trash your Address Book database
04. 12 06 - 22:56 -
During the last half year I had three reports
of users completely losing the contents of their
Address Book while working with Serial Mail. The
problem is not related to Serial Mail, it is due to a
bug in Mac OS X, presumably the SyncService. There
are many reports of this problem in the Apple
discussion group. From these reports it
appears that the problem comes form a sync (like
iSync) conflicting with another application
trying to access the Address Book.
As a precaution when using Serial Mail, please backup your Address Book database. It is just one click to the File menu of the Address Book application.
As a precaution when using Serial Mail, please backup your Address Book database. It is just one click to the File menu of the Address Book application.
Function Pointers and Delegates in C++
23. 02 06 - 23:52 -
Don Clugston has a nice article on Member Function Pointers and C++
Delegates.
How to use other Microtek Scanners with ScanMaker 7 Pro
13. 02 06 - 22:09 -

But the software works with other scanners (at least with my Microtek ScanMaker 3800). If you have a working installation of ScanWizard 5 V7 (I used version 7.21) then you may try to copy the driver from
/Library/Application Support/Scan Wizard 5
V7/Scanner_Drivers to
/Library/Application Support/Scan Wizard Pro
7/Scanner_Drivers.
Serial Mail Version 3.9 is Universal Binary
14. 01 06 - 22:21 -










