Wednesday, March 31, 2004
So it seems like maybe the answer to some of my prayers (or at least the white balance issues I'm having on the D70) may be to use a "custom curve".
Basically if you are using Nikon Capture (an additional $99 piece of software ... thanks Nikon
) you can download a custom curve to the camera. If you are familiar with the "Curves" feature in Photoshop you'll have some idea what this is doing... It basically controls how the camera processes color, and allows you to compensate for underexposure directly from the inside the camera (i.e. less work in Photoshop after the fact)
Anyway, there's a really neat site on custom curves called Fotogenetic (they also have an excellent article on the need for custom curves on the D70).
Fotogenetic also have two curves available for free download called "White wedding" and "Provia". From what I've read, Provia more fits with what I plan to use my D70 for (taking photos outside - mostly kids and landscapes)
I'll let you know how I get on.
Basically if you are using Nikon Capture (an additional $99 piece of software ... thanks Nikon
) you can download a custom curve to the camera. If you are familiar with the "Curves" feature in Photoshop you'll have some idea what this is doing... It basically controls how the camera processes color, and allows you to compensate for underexposure directly from the inside the camera (i.e. less work in Photoshop after the fact)Anyway, there's a really neat site on custom curves called Fotogenetic (they also have an excellent article on the need for custom curves on the D70).
Fotogenetic also have two curves available for free download called "White wedding" and "Provia". From what I've read, Provia more fits with what I plan to use my D70 for (taking photos outside - mostly kids and landscapes)
I'll let you know how I get on.
# posted 3/31/2004 05:28:10 AM |
Saturday, March 27, 2004
After a few days messing with the settings and the like I think I'm finally getting the hang of my new Nikon D70...
The bluebonnets are flowering in Texas this time of year and its kind of a tradition to take a picture of your kids (at least the little'uns), so here's my contribution.
I didn't have the white balance set right. I'm trying to avoid using "Auto" white balance because of the green cast problem (which annoyingly only happens intermittently), but then I have to remember to set the WB according to the conditions. Still, it came out pretty close to true.

The bluebonnets are flowering in Texas this time of year and its kind of a tradition to take a picture of your kids (at least the little'uns), so here's my contribution.
I didn't have the white balance set right. I'm trying to avoid using "Auto" white balance because of the green cast problem (which annoyingly only happens intermittently), but then I have to remember to set the WB according to the conditions. Still, it came out pretty close to true.

# posted 3/27/2004 08:37:53 PM |
Friday, March 26, 2004
| OK, the word is out ... If you're interested in taking over the development of iComic, let me know... There is a thread open on the iComic forum for developers to come to the table and no where I don't doubt a few product ideas will surface too. http://www.webcomicforums.com/phorum/showthread.php?t=1057 |
# posted 3/26/2004 08:13:45 PM |
Wednesday, March 24, 2004
AppleLegal rates iComic 4.5 out of 5
AppleLegal just posted a glowing review of iComic.
As the reviewer points out, I don't have much free time so iComic hasn't changed much in the past year, except for the Panther fix in the fall ... Perhaps I need to look into Open Sourcing it again.
If anyone has any suggestions on best ways to do that, just hit the Comments below ...
As the reviewer points out, I don't have much free time so iComic hasn't changed much in the past year, except for the Panther fix in the fall ... Perhaps I need to look into Open Sourcing it again.
If anyone has any suggestions on best ways to do that, just hit the Comments below ...
# posted 3/24/2004 06:14:23 AM |
Tuesday, March 23, 2004
Picked up the Nikon D70 today.
Its really nice - has a nice heft without being too heavy like some of the pro SLRs.
First impressions of the picture quality are certainly mixed, though the light wasn't too good today. The first pictures all came out a little soft looking. I'd started with the 24-120 VR lens as that was what I planned to use as my staple lens, but I'd read of the softness problem.
I've tried a couple of shots with the kit lens too (18-70mm) and they seem soft to me too, but it may be the bad light. Or perhaps the camera had been hyped to the point where I was expecting it to retain full detail down to the pixel, kind of like that photo gadget in Blade Runner. Fractal compression anyone?
The other problem I'd read about with the D70 was that of pictures having a green cast, and I certainly saw that on a couple of the shots.
Now I just have to remember all that I once knew about SLR photography. My first real camera was a Pentax (a P30 if I recall...) but that was 15 years ago. Still, it was going through some of my old photos a few weeks ago and realizing at one point I was able to take "photos", not just "snaps".
Its really nice - has a nice heft without being too heavy like some of the pro SLRs.
First impressions of the picture quality are certainly mixed, though the light wasn't too good today. The first pictures all came out a little soft looking. I'd started with the 24-120 VR lens as that was what I planned to use as my staple lens, but I'd read of the softness problem.
I've tried a couple of shots with the kit lens too (18-70mm) and they seem soft to me too, but it may be the bad light. Or perhaps the camera had been hyped to the point where I was expecting it to retain full detail down to the pixel, kind of like that photo gadget in Blade Runner. Fractal compression anyone?
The other problem I'd read about with the D70 was that of pictures having a green cast, and I certainly saw that on a couple of the shots.
Now I just have to remember all that I once knew about SLR photography. My first real camera was a Pentax (a P30 if I recall...) but that was 15 years ago. Still, it was going through some of my old photos a few weeks ago and realizing at one point I was able to take "photos", not just "snaps".
# posted 3/23/2004 06:26:16 PM |
Friday, March 19, 2004
The Netdisk kernel-paniced my Mac again this morning ... It seems to have problems when the Mac comes back from sleep, like the Finder tries to connect to the drive before the Netdisk kernel driver has reconnected it, so you get a message like "This disk is damaged - do you want to initialize it?".
For now I've disabled the drive through the NDAdmin tool they supplied with it. I can always re-enable it if I need to access it. Hopefully "disabling" it will switch off the kernel driver and the panics will stop.
In case you're lucky enough to have never seen a kernel panic message, this is what it looks like when your Mac flips you the bird...

For now I've disabled the drive through the NDAdmin tool they supplied with it. I can always re-enable it if I need to access it. Hopefully "disabling" it will switch off the kernel driver and the panics will stop.
In case you're lucky enough to have never seen a kernel panic message, this is what it looks like when your Mac flips you the bird...

# posted 3/19/2004 09:31:07 AM |
Thursday, March 18, 2004
This is a funny time of year in Austin... Its the time of year when 20,000+ folks in Austin (1 in 25-ish of the population) gets their bonus checks. Suddenly folks have new cars ... or in my case, new toys!
The Nikon D70 should arrive in town next week, or early the following week. I can't wait... So much so in fact that I already bought a second lens (to go with the 18-70mm kit lens, which is supposedly excellent). The lens I got is the Nikon 24-120 VR lens pictured below. VR stands for "Vibration Reduction"... basically the lens contains an image stabilizer much like you see in camcorders.
The other toys I have yet to get are some bits for the Japan trip such as a bag and a tripod (with adjustable ball head)... these are the contenders...
The Crumpler 15 Love is particular cool... Not only does it not look like a camera bag, but it also has partitions to stop the camera from smacking into the lenses and stuff. While I'll only have the one extra lens, it will make a nice warm nest for my iPod!
I also orderd a 15" Apple PowerBook for the Mrs which should get here next week... She's keen to learn Adobe Illustrator, and her sister is a big Mac fan. Seemed to make sense to get her a Mac so her sister can get her up to speed while she's staying there in the summer. If all this seems a little extravagent, let me just say in my defense, I had a one-time hardware discount from Apple because I was at the Apple WWDC (Worldwide Developers Conference) last year and as a result I saved $500 off of the PowerBook. And it would have expired on April 1st. No really!
With any luck, my saving of $500 will put me in good stead with the Mrs, and she'll let me use it too
Just don't tell her it still set me back $2500 by the time I'd stuck 1GB of RAM in there and got the 5400RPM hard disk
The last of this month's impulse buys was a Ximeta Netdisk. It is basically a 160GB Maxtor hard disk with an Ethernet port (in addition to the ubiquitous USB 2.0) on it so I can access it from anywhere on the home network. I don't know... it seems to work OK, but I've already had one "kernel panic" (the Mac equivalent of the Blue Screen of Death), and it seems like only one computer can write to it at a time (though others can see it read-only, so its still ok for sharing MP3s, photo backups and the like). The crappy thing about it is that it never seems to go to sleep — it is spinning constantly and the aluminum case gets pretty darn warm. I'm sure the getting warm is because it is designed to dissipate heat away from the drive, but I don't expect a very long life from it unless Ximeta releases a firmware upgrade to fix the issue.
Might be one to wait and see on. I'll certainly post if anything happens to it...
The Nikon D70 should arrive in town next week, or early the following week. I can't wait... So much so in fact that I already bought a second lens (to go with the 18-70mm kit lens, which is supposedly excellent). The lens I got is the Nikon 24-120 VR lens pictured below. VR stands for "Vibration Reduction"... basically the lens contains an image stabilizer much like you see in camcorders.
![]() |
| Nikon 24-120mm f/3.5-5.6G ED-IF AF-S VR (Vibration Reduction) lens |
The other toys I have yet to get are some bits for the Japan trip such as a bag and a tripod (with adjustable ball head)... these are the contenders...
![]() | ![]() | ![]() |
| Crumpler "15 Love" camera bag | Gitzo G1027 tripod Carbon fiber! 1.6lbs! | Gitzo G1077M Magnesium vertical ball head |
The Crumpler 15 Love is particular cool... Not only does it not look like a camera bag, but it also has partitions to stop the camera from smacking into the lenses and stuff. While I'll only have the one extra lens, it will make a nice warm nest for my iPod!
I also orderd a 15" Apple PowerBook for the Mrs which should get here next week... She's keen to learn Adobe Illustrator, and her sister is a big Mac fan. Seemed to make sense to get her a Mac so her sister can get her up to speed while she's staying there in the summer. If all this seems a little extravagent, let me just say in my defense, I had a one-time hardware discount from Apple because I was at the Apple WWDC (Worldwide Developers Conference) last year and as a result I saved $500 off of the PowerBook. And it would have expired on April 1st. No really!
With any luck, my saving of $500 will put me in good stead with the Mrs, and she'll let me use it too

Just don't tell her it still set me back $2500 by the time I'd stuck 1GB of RAM in there and got the 5400RPM hard disk

The last of this month's impulse buys was a Ximeta Netdisk. It is basically a 160GB Maxtor hard disk with an Ethernet port (in addition to the ubiquitous USB 2.0) on it so I can access it from anywhere on the home network. I don't know... it seems to work OK, but I've already had one "kernel panic" (the Mac equivalent of the Blue Screen of Death), and it seems like only one computer can write to it at a time (though others can see it read-only, so its still ok for sharing MP3s, photo backups and the like). The crappy thing about it is that it never seems to go to sleep — it is spinning constantly and the aluminum case gets pretty darn warm. I'm sure the getting warm is because it is designed to dissipate heat away from the drive, but I don't expect a very long life from it unless Ximeta releases a firmware upgrade to fix the issue.
Might be one to wait and see on. I'll certainly post if anything happens to it...
# posted 3/18/2004 08:26:16 PM |
Tuesday, March 09, 2004
XSD to C# ... sizzling away on the back burner
I've not said much on the XSD to C# code generator. Thats not to say I've stopped working on it. Its actually one piece of a larger puzzle. One where I needed to prove to myself it was even possible to do, before I moved on to flesh out the other pieces.
Conclusions so far: I'd say its definitely possible to turn XSD into C#. There are some obstacles, and many limitations on the kinds of things you can map, but the basics of "choice", "sequence", and features such as facets (validation constructs) and minOccurs/maxOccurs (array-like constructs) can all be mapped with varying degrees of transparency.
Right now I've moved on to looking at declarative workflow - using CodeDOM to generate code from an XML based workflow definition that contains branching conditions based on your business objects. CodeDOM is neat in this kind of application, as it allows you to generate code that talks to your business objects in the first person, without having to fall back to third-person techniques such as Reflection.
You can see at that point how once you have your workflow, you could be using XSD to generate the business objects themselves. That in turns opens up the possiblity of putting business object design into the hands of business or data analysts (using XSD-based tools), and having the development team focus on building libraries of business rules that operate over them.
Its probably all been done before - but it keeps me out of trouble.
I'll probably be getting back to the XSD idea in a few weeks once some of the other bits have taken shape and I've got a better handle on how this highly decoupled world ought to work. Better to have had a chance to stand back and look at the problem with a broad perspective than to just leap in. CodeDOM is too fiddly to want to write and rewrite multiple times over.
Conclusions so far: I'd say its definitely possible to turn XSD into C#. There are some obstacles, and many limitations on the kinds of things you can map, but the basics of "choice", "sequence", and features such as facets (validation constructs) and minOccurs/maxOccurs (array-like constructs) can all be mapped with varying degrees of transparency.
Right now I've moved on to looking at declarative workflow - using CodeDOM to generate code from an XML based workflow definition that contains branching conditions based on your business objects. CodeDOM is neat in this kind of application, as it allows you to generate code that talks to your business objects in the first person, without having to fall back to third-person techniques such as Reflection.
You can see at that point how once you have your workflow, you could be using XSD to generate the business objects themselves. That in turns opens up the possiblity of putting business object design into the hands of business or data analysts (using XSD-based tools), and having the development team focus on building libraries of business rules that operate over them.
Its probably all been done before - but it keeps me out of trouble.
I'll probably be getting back to the XSD idea in a few weeks once some of the other bits have taken shape and I've got a better handle on how this highly decoupled world ought to work. Better to have had a chance to stand back and look at the problem with a broad perspective than to just leap in. CodeDOM is too fiddly to want to write and rewrite multiple times over.
# posted 3/09/2004 08:20:45 PM |
Had a bit of a scare this morning. I'd gotten a Vaja case for my Palm Tungsten T3. Very nice cases, but they make it hard to plug the hotsync cable in. Plus the thing tends to stay clipped to my belt, not sat in the cradle like it used so.
For those of you not familiar with Vaja cases, this is what I'm talking about (mine is this color too!)

Anyway, I guess I left it too long to put juice in the Palm... so it totally died. Not just the main battery, but the backup battery too. And with that went all the stuff I had stored on it. Nice.
Thankfully the boffins at Palm made it so that if they found the device to be totally empty (as mine now was), the first Hotsync would restore everything off of your PC. What a life saver. Ten heart-stopping minutes later and I was back in business.
Now I need to dig around and see if there is a low battery sound I can switch on. Cell phones have done that for years, so it seems feasible.
Ah well - no harm, no foul.
For those of you not familiar with Vaja cases, this is what I'm talking about (mine is this color too!)

Anyway, I guess I left it too long to put juice in the Palm... so it totally died. Not just the main battery, but the backup battery too. And with that went all the stuff I had stored on it. Nice.
Thankfully the boffins at Palm made it so that if they found the device to be totally empty (as mine now was), the first Hotsync would restore everything off of your PC. What a life saver. Ten heart-stopping minutes later and I was back in business.
Now I need to dig around and see if there is a low battery sound I can switch on. Cell phones have done that for years, so it seems feasible.
Ah well - no harm, no foul.
# posted 3/09/2004 12:20:40 PM |
Wednesday, March 03, 2004
Looks like folks are starting to get their Nikon D70s. I need to call the store here in Austin to see if they have word on mine...
Of course, once I know its coming, I still need a CompactFlash card, as it doesn't come with one
... a Sandisk Ultra II 1GB should do it...
... plus I'll need a 28-200mm zoom lens
... and a camera bag
... and the time to figure out how to get the most out of it
... and my refund from the IRS
Of course, once I know its coming, I still need a CompactFlash card, as it doesn't come with one
... a Sandisk Ultra II 1GB should do it...
... plus I'll need a 28-200mm zoom lens
... and a camera bag
... and the time to figure out how to get the most out of it
... and my refund from the IRS

# posted 3/03/2004 08:01:28 AM |
Monday, March 01, 2004
minOccurs/maxOccurs implementation
What a total pain...
So, here's where I'm at. I'm starting to look at minOccurs/maxOccurs... Current thinking goes something like this:
Consider the way xsd:choice is handled in my code generator today — you generate an enum, and hold onto instances of all of the possible choice types. By generating a type to wrap this, you break the xsd:choice ugliness into a separate class, keeping the containing class much cleaner. The only problem is that you then force the xsd:choice to be given an id= attribute so that the name of the choice property can be specified in the containing class.
Dimitri Glazkov suggested using interfaces to allow the choices to share some common base. The problem here is you end up generating a type for each choice item... You could have a type that mixed the integer with System.Int32 and so on. And you're then left casting to Int32 to be able to get at the value. Plus it means the integer will be boxed which isn't great either. Finally, the SOAP serializer doesn't like interfaces much. While not great, I still think the enum approach is the least worst way to handle xsd:choice.
So, here's where I'm at. I'm starting to look at minOccurs/maxOccurs... Current thinking goes something like this:
- Break out a class that represents the thing that you are going to have multiple of.
- If it is a basic simpleType or complexType you just use the type you have
- Create a typesafe dynamic array as ItemnameCollection, and initialize it passing the minOccurs/maxOccurs values. For example a minOccurs/maxOccurs on an element of type SizeType would result in a new typesafe dynamic array class being created called SizeTypeCollection, with methods like Add(SizeType) and a operator[] that returned SizeType.
- Facet validation moves into the array's Add method.
- You still need a Validate() method to validate all the constraints across the whole object, which would call the Validate() method on the array(s), which would in turn check the size constraints.
- For a simpleType or complexType you can make the array typesafe. Life is good
- For an xsd:choice you would be stuck basing the the collection on System.Object casting... or making all the choice elements share some base class (or interface), or... you could break the xsd:choice out into a new subtype.
Consider the way xsd:choice is handled in my code generator today — you generate an enum, and hold onto instances of all of the possible choice types. By generating a type to wrap this, you break the xsd:choice ugliness into a separate class, keeping the containing class much cleaner. The only problem is that you then force the xsd:choice to be given an id= attribute so that the name of the choice property can be specified in the containing class.
Dimitri Glazkov suggested using interfaces to allow the choices to share some common base. The problem here is you end up generating a type for each choice item... You could have a type that mixed the integer with System.Int32 and so on. And you're then left casting to Int32 to be able to get at the value. Plus it means the integer will be boxed which isn't great either. Finally, the SOAP serializer doesn't like interfaces much. While not great, I still think the enum approach is the least worst way to handle xsd:choice.
# posted 3/01/2004 02:42:21 PM |







