Test Driven Development 101
I’m back after a long hiatus, and I’m probably talking to the air right now, but that’s OK. For the two or three of you actually listening to me, listen on. We have a number of projects of different sorts at the company I work for, and you’d be surprised at how few do test driven development—and how few even write unit tests. In this day and age, not writing tests that can be automated at all is inexcusable. At the very least, the tricky stuff should be thoroughly tested. This article is for anyone who is either skeptical about or interested in Test Driven Development. That includes managers as well as developers.
What’s the Problem, Man?
We all ( at least should ) want to write quality software, and we will take this as the “given” in geometry. Since we want to write quality software, how do we do it? In the early cowboy days of software engineering, it was painful to write code. First you did all your planning, wrote what you hoped would work, printed the stacks of punch cards, and then loaded it on the main frame. Which explains all the texts on the huge design up front methodology. However, that was before my time. When I first started, we wrote a little, ran the software, and debugged. Which explains why debuggers were so important at that time. However, times have changed. We now have a plethora of unit testing frameworks and maintainable build scripts to incorporate the tests into the build process.
As soon as we ran into some hard problems that really couldn’t be completely designed up front (like TCP/IP stacks), we developers had to figure out a way to make sure things worked properly. I mean, the spec is pretty complete, but there are a lot of details and practical limitations imposed by hardware that you won’t find in the spec. If you attempted to alter the spec to include all these corner cases, you would also lose any way of understanding how it is supposed to work. This is how the automated unit test was born. All these corner cases had to be accounted for so that future changes to the code won’t break the existing functionality. I think everyone recognizes the importance of testing. It’s just how, when, and where testing happens that people disagree on.
Another problem that is often brushed under the table is code slipping in that doesn’t need to be there. How often have you tracked down a problem only to discover code that was never supposed to exist be the culprit. You remove the offending code, and violá it works! The code could have been there from old legacy requirements that no longer apply, or it could be a developer without experience over thinking a problem. Nevertheless the code is there and it is causing problems.
If you adopt a clean as you go philosophy to developing software, you had better make sure you don’t accidentally breaking anything as you refactor your code. Even with “safe” refactoring, there is an inherent risk that you can inadvertently break something you didn’t think you would. If only there was a way to make sure all the important functionality keeps working…. Oh yeah, you do have a full test suite don’t you? Oh, it didn’t get written because you were under the gun and you were on a roll? Too bad.
Test Driven Development (TDD) was designed to not only address these issues, but to instill a discipline so that your unit tests would get written. Let’s face it, all people are lazy. It’s in our nature to not do anything we think is a waste of time. Sure we’ll do a little work now to avoid a bunch of work later, but we need to know it really is going to avoid a bunch of work later. What some people fail to realize about TDD is that the time will be spent somewhere. Either you write your tests up front or you spend time in a debugger later. Either you prove that your approach will work now, or you do it later. Either you break up your work into testable chunks now, or you attempt to do it later and fail at it.
OK, So How Does It Work?
At its heart, TDD is pretty simple—you simply perform a prove, fix, prove cycle. First you prove it doesn’t work . Then you fix the problem. Finally, you prove your fix worked . If you are lucky, your first “prove” step will prove the code already handles what you were thinking about. Write the test anyway, because you need to make sure that any changes will still support that test case. It’s fairly easy to see how to perform the mechanics of TDD, but less about it’s design implications without a little more explanation.
One of the side-effects of writing your tests before you write code is that it makes your code easier to test. Remember, people are lazy? Since a proper unit test sets up the environment and checks the effect of the call after, we make it easy to set up the environment. In fact, the less we rely on network connectivity or environment variables, the better. If a bit of code can be tested just by passing objects into it and examining the return value, then you aren’t going to be overly clever in your implementation. Easily testable code, also happens to be more modular. If you can pass in a mock object for something that would normally talk to the network so that you can have the mock imitate the situations you would encounter there, you can more easily test just the small unit you are working on.
Unit Tests vs. Integration Tests
In the best of all worlds, a project would have both. Unit tests make sure that the smallest unit (such as a method on a class) is doing what we expect it to do. A proper unit test also tests only one aspect of that method. It’s not uncommon to have several tests for the same method to make sure that all the corner cases are taken care of. Integration tests make sure all the different units work together like we thought they would. A unit test uses mock objects to isolate the thing we are testing from everything else. An integration test sets up the complete environment and runs the test against that environment. They are different tools for different problems. To do TDD, unit tests are required, but additional testing is a plus.
More often than not, code that is properly unit tested will work just fine. However, there are some issues that only crop up when the whole system is put together. Perhaps there is some race condition, or some complicated event loop that only appears in certain conditions. Once you track down the cause of the problem, you can write a unit test to reproduce the condition that caused the mess in the first place. With the new unit test, you fix the code, and everything should work in integration again.
Many times, the integration tests are all done manually. The challenge is that it is hard to set up a complete environment, test the user interface or system messaging, and evaluate the results automatically. The problem is that over time the number of tests that people have to do for a release becomes daunting. People are less picky than machines. If there is a tool to support integration testing like Selenium or some other testing framework, use it to at least catch regression issues. You know those issues where you accidentally break something that used to work when you add a new feature? Anything that was working and gets broken needs to be tested every time. Machines are good at doing rote repetition like that.
Battle Rhythm
When you sit down and start doing TDD, you’ll develop a battle rhythm. Most IDEs these days have support for running your unit tests without going through the whole build process. It’s pretty convenient, and it makes TDD a lot easier to do. So, you’ve got a new requirement and you need to get it working. It’s good to have a general idea of where you want to go, or how it is supposed to work, but don’t be a slave to that idea. We start writing the unit test at the easiest place it is to begin—whatever that may be. I personally find it is best to start with the happy path (the path where everything works as expected). For example, look at the pseudo code below:
Test String is a URL -------------------- 1. Use the string "http://bloritsch.d-haven.net" 2. Pass the string to the String Utility "isURL" method 3. Assert the response is "true"
Of course, it’s pretty easy to make this one test pass. All we have to do is write the StringUtility.isURL() method to simply return true. No evaluation or anything. When we run the test, we prove that solution is good enough for now. So we need to start thinking about the next test. What if the string is not a URL? So we add the next test:
Test String is NOT a URL ------------------------ 1. Use the string "I'm not a URL, ignoramus!" 2. Pass the string to the String Utility "isURL" method 3. Assert the response is "false"
Now we’ve proven we have some work to do. So we change StringUtility to return true if the string starts with “http:”. It’s the simplest thing, right? But what if we want to include SSL encrypted URLs, or mailto URLs? So you add tests for them, and make them pass—without breaking the other tests you’ve written. All these tests are cumulative, so while they may have been extra work at the beginning, they can save your bacon later. Don’t forget about those corner cases, what if the string is null ? Etc.
By the time you are done with this method, you’ll have done the following things without even realizing it:
- Documented what you consider a URL and what is not a URL (design documentation side-effect)
- Proven the design works (design proof side-effect)
- Tested the implementation (implementation proof)
- Provided a safety net to do refactoring (supporting implementation malleability)
Sure the method is just a part of the overall design, but you’ve thought about and decided how the method is going to be used from the perspective of someone using the method. It’s a shift in thinking from being the “implementer” of the method, which usually results in code that is easier to use elsewhere. You’ve also introduced a level of trust in this method that you wouldn’t have if you just reached for that regular expression you found on the net to determine if something is a URL or not. You’ve also introduced a boundary where the implementation can be as simple or complex as you want—but code that uses the method won’t care about those details.
The battle rhythm of proving, fixing, and proving actually improves your development speed. It may not seem like it at first, but by testing all along the way we’ve minimized the time we will have to spend in a debugger. The ramp up time is a little slower, but as you get your battle rhythm going, you stay at a constant pace. Without TDD, I find myself working with bursts of productivity interrupted by long periods of finding out exactly where I went wrong in a debugger. With TDD, I find myself working at a steady pace, and those occasions where I missed something I spend much less time in the debugger. Once I’ve discovered the culprit, I add the test case that reproduces the error condition and then make it work. Now, when I refactor code I can make sure I don’t reintroduce the problem accidentally.
Silver Bullet?
There is no silver bullet, and no golden hammer that will make things work perfectly the first time. There are only tools that help you get closer to the ideal. TDD is a tool that helps improve quality from the start. Most detractors of TDD look at the claims of documenting your design as being false—or at least unreadable to normal people. I may give them that argument, but TDD isn’t about documenting design, it’s about building a better quality product with the minimal amount of investment. It’s about improving your productivity over the course of a software project. It’s about reducing the number of “doh!” bugs to virtually none saving your brain cells for the more complex problems. Finally, it’s about minimizing the risk involved in refactoring or even rewriting your software.
All of these benefits are things that the text books say are a good thing. It’s also done in a way that is less painful to developers. Writing documentation is a pain in the butt, however, writing test cases is something that directly benefits the developer. It benefits the project over it’s period of performance. Bottom line? More bang for the buck.
No Fear
How often do you see something cool, and take a picture of it? How often does it resurface 60 years later? Yep, this picture is another from the set of pictures my grandparents took around 1949. I think it is quite telling how no one thought it strange to take a camera to a pool back in the day, but now it’s an international crime.
No doubt this gentleman was showing off for the ladies. No matter how strong you are, you can only hold a pose like that for so long. Without all the modern gadgetry of today, my grandma was able to take this picture quickly enough. When photographing people you do have to be ready. The camera was loaded, and probably set for a reasonable exposure given the time of day. All that was needed was to cock the shutter (if it wasn’t a press type shutter that was self cocking) and release it. Advance the film and be ready for the next one.
Is there anything that could have done better? Absolutely, but what’s done is done. I think in this instant age where everything is done for you, the effort to retry is so little that people tend not to be as critical as they should be before pulling the trigger. The really good picture is lost in a sea of mediocre pictures, and will likely never see the light of paper.
Quite frankly, quantity is the enemy of excellence. I’ve taken literally thousands of pictures, and more than half of them are really good—some excellent. However, the pain of going through them all will likely cause them to never really get any special treatment. Wall space is more precious than album space, which is in turn more precious than hard drive space or negative storage space. While I publish far fewer pictures and take far fewer pictures now, the ones I do take are on average better than when I took several at a time. This fact doesn’t change whether I shoot digital or film.
Don’t be afraid not to take a picture if you can’t make it special. Have you ever taken a picture of something you thought was amazing, but after you took the picture it looked so-so? I know I have. Have you ever taken a step to either side or gotten lower or higher to reveal on film (or digital frame) what you were experiencing? Do your walkabout quickly to get in position if you can. A mediocre picture of a spectacular event is is more frustrating to me than not having the right picture of the event. I’ve not taken pictures because the moment passed before I found the right position—but I’ve also learned from that experience. I can better anticipate the right perspective now.
Don’t be afraid to make your own decisions about what you like and don’t like. There’s lots of opinions and guidelines about what makes a good picture. However, if you don’t like a picture that follows the rules then you don’t like it. Break the rules and make something you do like. That’s when you develop your own style.
Don’t be afraid to try something different. Whether it’s going old school or new school, you can only grow by incorporating new tools or processes. Just make sure you don’t try too much too quickly. Introduce yourself one bit at a time to the new stuff. Build on what you’ve learned so far and go a step further. Don’t spend thousands of dollars on equipment you’ll never get around to using. As you add to your equipment, learn to use the new stuff properly before you get the next thing.
Lastly, don’t be afraid to enjoy what you do. If all you are doing is worrying about how to make your equipment pay for itself with jobs then it’s only a matter of time before you get burned out. Find something that you enjoy, that relaxes you, and don’t worry about trying to make it pay for itself. Just have fun.
Printing Family History
I got it stuck in my head that I would print all the negatives that I inherited from my grandparents. These are a treasure trove of years gone by that capture a world we have forgotten about. Along with these negatives comes some inherent problems. The negatives are pretty near 60 years old already, and were made before the film base was standardized on something that doesn’t deteriorate so quickly. The film is either Kodak Plus-X or Kodak Tri-X (they had several rolls of each). None of it is safety-film which means it isn’t. The film format is 127 film. That means it is not quite as big as modern day medium format or as small as 35mm film. The negatives are about 4cm wide with some frames 6cm, some 4cm, and some 3cm. I can’t find proper sleeves, and the film has a nasty curl due to being stored rolled up in a plastic baggy.
Archivists will tell you to make sure you store the film in archivally safe sleeves that are acid-free, buffered, lignin-free, etc. Lignin is found in paper, cardboard, etc. Rubber-bands deteriorate and the byproducts also help break down the negatives. These negatives were stored in a plastic baggy with the original cardboard boxes when available (which is where I got the dates from), or wrapped with rubber bands that were disintegrating. I can’t say it’s archivally safe, but there is no more cardboard or rubber bands anymore. Due to the storage conditions, some of the negatives are damaged, but most are OK for now. I really need to find out how to copy the negatives on to standard film. I’d rather step up a size rather than down, because I don’t want to lose any more information than I have to.
All that said, several of the negatives are in good shape and almost all are printable. The picture at the top of this article is one of those pictures. As you might expect when the person taking the picture (my grandma) is not a professional photographer, many of the negatives present significant challenges. This negative is losing contrast to the shadow detail, so I have to bump it up on the paper. This picture requires a #4 contrast filter to bring out any definition. I may have to go up even more than that, but I think I’ll live with this. The quality going to limit how much I can enlarge the picture. The picture would have been even more striking if grandma thought to reflect a little light up underneath this gentleman. A large sheet of white paper would do the trick nicely. Based on the angle of the highlights and the shadow under this guy, it was probably taken around noon.
In my insanity to grow my darkroom skills, I decided to use fiber based (FB) papers. They are similar to resin coated (RC) paper in the sense that it is paper, and it uses a gelatin based emulsion. Other than that they are completely different. When RC paper gets wet, it doesn’t feel any different. The chemicals only penetrate the emulsion, and thanks to the resin or plastic coating on the paper it does not penetrate the paper. RC papers are therefore much more convenient in that the process is a whole lot quicker. FB papers feel different once they are in the solutions. The paper actually gets wet, and you can feel the fiber of the paper much better. Glossy also looks different. The gloss on a FB print is virtually unnoticeable until the print dries, where on RC paper it is ever before you. It seems that FB paper is more susceptible to dry-down effects. However, FB paper does take toning better than the RC paper cousins.
Bottom line, this will be a good learning process and I will be able to pass on my personal family history to another generation. Part of the process will be making digital copies as well as copies of the negatives.
Presque Isle Lighthouse
This particular subject was a bit challenging. If I went to the beach my view was obstructed by dense dead trees. However, here I had the sun coming through gray clouds, almost backlighting my subject. The bright spot in the upper right corner is where the sunlight was coming from. My Rodenstock 26cm super-aplanat lens was made in 1935, so it doesn’t have all the improvements in lens manufacturing made since then. It still resolves an incredible amount of detail.
This particular picture is not a scan of a print, but of the negative. In order to overcome some of the problem areas of the picture I had to do some digital dodging and burning. I have to say that I don’t enjoy doing these things digitally because I think in terms of stops, not percentages. Nevertheless the light refractions in the lens obscured the top of the lighthouse so I had to do something. I dodged it about 30% which was enough to make it more substantial without making it look fake. I dodged the edges of the picture slightly differently for each edge due to the way the tones lay. The right side with the tree didn’t need as much burning as the left side. Additionally the sky required more dodging than the ground. Lastly, the sky where the sun was peaking through required some more control so I burned that top corner in an additional 40%. The tree in the middle had a bit too much weight, so I had to dodge it. Unfortunately, the scan didn’t have any more detail to give me. An optical print will help me out there.
I played around with different toning options and I found that selenium just didn’t suit it very well. I wanted a cooler look to it, so I went for a simulated gold tone. I did try a sepia tone as an alternative, and I was pleasantly surprised at how nice that would look—but went with a straight gold tone.
Sometimes playing with a scan of a negative digitally will help with visualizing what you can do with the optical print. Looking at this picture, I can see how I should have changed my angle a little bit. I wanted the large tree on the right to help frame the picture, but the tree in front of the light house is not at a good angle. I probably should have set up in the brush on the right side of the large tree. Sometimes you have to choose between personal safety and the perfect shot. Traversing snow and ice while carrying several pounds of equipment isn’t the best idea.
When I print this optically, I will definitely have to put it on 11×14 or larger paper. It needs the breathing room of the larger area so you can get up close and see the detail. The 11×14 also might cut off the little bit of the sign on the right.
How much does it really cost to do film?
I’m not going to argue about quality, process, etc. It’s just a pure look at the cost of film vs. the cost of digital. Let’s be honest, there are some real gear junkies out there so we aren’t going to talk about the people who change their camera every week for half of a megapixel more resolution. We’re going to talk about real people and real situations. So first off there are certain costs that are the same. Your lenses and your flash units are not likely to be any different with film vs. digital at any format size. Medium and large format cameras where the shutter is in the lens use a standard cable release for remote operation. Small format cameras like to get you to spend more money for the same thing so a remote for your film camera may not work for your digital camera. What’s worse is that a remote for one model of a company’s camera won’t necessarily work with a different model of the same company’s camera. It’s still a constant expense, so go figure.
OK, so now that we got that out of the way, what’s different about digital vs. film (other than the fact that one is digital and the other is film)? First off, the cost of the sensor for a digital camera is very high in comparison to the “sensor” for a film camera. One is several hundred (or thousand depending on format) dollars, and the other is less than $10. That’s right, film is a light sensitive material, hens it is a film camera’s sensor. The big difference of course, is that you can only use film once and you can use a digital sensor several times. That’s the rub. Your up front costs are going to be higher with digital, but over a given time your consumable costs will overtake that initial investment. That’s a fact no matter how you slice it. Digital also has consumables in the form of compact flash cards and hard drives. They are convenient in that they can store large amounts of photos, but dangerous because if the device fails you lose everything. That’s why you need more than one, and to back them up on other drives. With film, the negative is your storage device and it requires physical damage to lose pictures.
Small format cameras are a little worse than medium and large format cameras in the sense that you have to replace the entire camera when you upgrade. Medium and large format cameras have changeable backs where you can use the same camera for both film and digital, depending on the client and your budget. By the way, a digital back for a medium format camera is several thousand dollars. You can purchase several small format digital SLR cameras for the same price. For the sake of argument, let’s keep things in the realm of the small format SLR cameras.
A used small format film camera can be had for $25-$400 depending on the model you buy (consumer/pro, age, etc.). You can buy a small format digital camera for about $500-$900 depending on the model you buy. Add to that a compact flash card for $20-$50 depending on the size and speed you buy. So just how many rolls of film will it take to overtake the initial plunge? Again, it depends on what kind of film you use. Slide film is near $10 a roll, but if you do black and white film is around $3 a roll. The price of lab development also varies based on the lab and the type of film. Slide film can cost near $10 a roll to develop at a pro shop, regular color film can cost about $4 a roll at a pro shop or $1.50 a roll at Target. If you develop black and white film yourself it will cost you pennies a roll—definitely worth it. So you can see that the answer depends on a lot of different things.
Let’s say you are the extravagant type and you shoot Fuji Astia 100. It costs $5 a roll, but to get it developed unmounted it costs $6 a roll (mounted is $10). That’s $11 a roll. Now, let’s say you also you skimped on the body knowing you were going to upgrade to digital later. So that’s $25 for a cheap used camera. Slide film is typically very low grain and very rich colors. To produce equivalent pictures you’ll need a nice digital. Let’s go for the $900 model (roughly what I paid for my used Canon 30D). The difference between the $925 (camera and compact flash card) digital and the $25 film camera is $900, so it would take roughly 82 rolls (just under 3000 pictures) to hit the break even point where the up front cost of digital equals the same cost in film.
Now, let’s say you are shooting sporting events and you need to take several pictures in a row quickly. You’ll need a better film body so your up front cost is something like $400 for a used top of the line model (roughly what I paid for my used Canon 1N). You’ll also need high ISO film if you are shooting indoors, which means you are working with normal color negative film. You have a choice between Fuji Press 800 for $3.50 a roll or Fuji Pro-Z 800 for $5.50 a roll. Developing costs for a pro shop is about $4 without prints. Let’s call it an even $8 for simple math. Using the same digital camera from the last example, your difference is only $525. You can shoot 65 rolls (2300 pictures) before you hit the break even point. In sports photography that number comes up really quick. Digital is a clear winner here.
For the aspiring fine art photographer, black and white is king. You’ll want the nicest camera you can afford because you want to enjoy the process, but you are now shooting black and white film and developing it yourself. Fomapan 100 (a very nice film) is about $3 a roll, and to develop it yourself costs about $0.50 or cheaper a roll depending on the chemicals you use. That’s $3.50 total per roll, and for the sake of argument we will compare the same two cameras in our last example. You will have to shoot 150 rolls of film (5400 pictures) before you break even. Since this style of photography is slower paced, your digital gear might need an upgrade before you reach that mark. The film gear will be just fine for years to come. My personal belief is that film renders a better black and white image than you can get from digital. That’s my opinion, and you can take it for what it’s worth. If we took the cheapy film camera and the expensive digital camera the difference is even more drastic at 257 rolls (9252 pictures).
For the casual shooter, film provides a great starting point as you get your equipment together. For the more prolific types of photography such as sports and event photography, digital is a clear winner. It will pay for itself rather quickly. For the fine art photographer, you can’t go wrong with film. There is no real demand on quantity of pictures, and the archival quality of film has been proven based on history rather than simulated projections. There are plenty of other reasons to choose film, but those are all personal choices. The truth is that digital cameras (not the cheap point and shoot variety) cost a lot more in the initial investment, and film has a continual cost you need to incur as you take pictures. Eventually, digital will become cheaper as long as you don’t keep upgrading your body. I use both, personally.
Pyro Based Film Processing
One of my favorite combos is Efke 25 and WD2D+, a pyrogallol based developer. Pyro (what we darkroom nuts call pyrogallol) based developers stain the film, and the staining action increases with the density of the silver. What this means in layman’s terms is that you get nice, clean sharp edges and your open spaces are smoothed out. You’ll notice that there is almost no grain.
Let me give a little more technical information before I dive into the fun stuff. Efke is a traditional emulsion film that has orthochromatic characteristics, although I’m not sure if it is classified as an ortho film. Basically, it’s not that sensitive to red light. At ISO 25, you may think it’s pretty slow but my 4×5 Calumet has to be mounted on a tripod anyway. You’d be surprised how easy it is to find a good exposure setting even when the ISO is so slow. Wimberly’s Developer #2, Version D+ (WD2D+) is a staining developer with a hardener built in. Unlike other pyro based developers, WD2D+ provides an orange stain. All pyro developers are more toxic than regular developers, but if you take reasonable care you’ll be fine. If you have good darkroom habits you’ll be just fine.
Not every scene lends itself to pyro, and sometimes you actually want more of that good, honest grit. Typically, I reach for the pyro when I want delicate highlights and clean edges. I commonly use it for snow scenes, or if I have smooth curves like silk sheets or something of that nature. I find that a negative can have a tremendous amount of detail that the enlarger picks up but your eyes don’t. Again, it’s not a magic bullet. After using it yourself, you’ll get a better feel for how it develops your pictures. WD2D+ tends to make things “cleaner”, and perhaps a little more sterile—but not in a bad way. Contrast this with Rodinal which also has great acutance (sharpness) but gives a grittier, more honest feel.
This particular scene, Ice Dunes , was shot at Presque Isle in Erie, Pennsylvania. I took meter readings on the darkest spot and the brightest spots and found that there really wasn’t a whole lot of contrast. I placed the shadow reading on Zone III and the highlights fell on Zone VII. Yes, I use the zone system—but I’ve tailored it to the way I think. It’s a tool to help get what you visualize to reality. I could have done N+2 development, but pyro really isn’t made for pushing film. I figured that there might be some detail that would have more shadow and more highlight than my meter would pick up.
The picture was scanned in using my Microtek i800 flatbed scanner, scanned at 16 bits. Once I got in the computer I played with it in the Gimp giving it some levels adjustments, burning the sky a lot, and the ledge a little bit. I dodged the open area in ice to make things stand out a bit. Finally, I gave it some digital toning of my own. I consider this a practice round for the darkroom which I have yet to use in a long time.
Safari and Firefox 3, What do they have in common?
In a couple words? Advanced color management. What does this have to say for the way the web has evolved? It’s something we all knew inately, something so simple yet so profound. Looks are important. Magazines, catalogs, and product placement people have spent thousands on making sure their pictures are beautiful and accurately show the product they are selling. Then along came the web. Sure it’s convenient, but this picture they spent thousands on getting just right for press now suddenly looks dull and lifeless on the web. It sure makes advertising less slick, and it presents harsh realities for web designers. Have you ever designed a graphic to blend in with a color only to have the browser change it on you? You can tell the difference between the graphic and the web elements pretty easily.
It only goes to show how powerful the pull is for visually appealing graphics. I haven’t spent a whole lot of time with the new Safari, so I don’t know if it addressed any of my gripes. As a photographer, I am quite happy with this turn of events. Black and white is not always just black and white. There are toners out there to provide some color and make the picture even more interesting. These subtle changes are lost without good color management.
It’s not surprising that something like this would come from Apple. Apple has always catered to the creative professional. It’s the one market that has supported them through the years. However, it is somewhat surprising coming from Firefox. What would geeks have to know about color management and what it can do for you? I’m sure it has to with the fact that they are supporting several different platforms and the web pages look different on each one. It’s not just the default gamma level (for Macs it is 1.8 and for PCs it is 2.2, and Linux depends). It’s the whole color management thing.
Assuming IE 8 follows suit (it’ll be IE 9 if it isn’t 8), this will help make the web a more appreciated place. It’s easier to look professional when you can expect a standard way of showing off your work to everyone around the globe. The web isn’t just about text. It’s also about looking good.
Wabi Sabi vs. Zen Structure
Wabi Sabi is a style that reflects impermanence and naturalness. It’s the natural beauty that simply is . It is found, not created. It is the aesthetic in decay that is attractive to us. It’s one of the reasons that ruins are so attractive. The concept is hard to put into practical words, and I probably don’t even have a good grip on it myself. It’s an aesthetic concept that Japanese potters have used to let the natural patterns of the earthenware simply emerge. Even when the pot has aged and broken, they are still beautiful in their own rights.
Zen art is very different in the sense that there is a definite order that is imposed. Concepts of naturalness are desired, but it is not necessarily prominent. For example, a Zen garden provides a definite place for all the plants and sculptures used. You can have a place setting work with the Zen concepts and you’ll have something with definite order. Order can mean straight lines, or it can have a more organic feel in the complex art. The overarching principle is simplicity. Nothing more than is needed.
The two pictures I included in today’s article represent the two concepts in different ways. I found the stones scattered naturally on the icy beach, and took their picture. I got in as closely as I could to remove other distracting elements. In the second picture, I gathered the stones and created a sense of order and simplicity by stacking them in a tower. The tower is almost clichĂ©, but I wanted to do it myself. I could have also rearranged the stones on the ground.
Both approaches have their own beauty, but very different feels. Both have their fans. I personally like the look and feel of impermanence. I like natural beauty that emerges rather than being engineered. However, I can’t deny the calming feel of the Zen order.
Low Key Portraiture
The portrait above exhibits some nice elements using light and shadow to make the picture more interesting. The first element is the fact that the lighting is soft. I had enough exposure to have even more detail in the background if I chose, but really what you see is the hint of a face. The shadow isn’t so dark that the head completely blends in with the background, but you have a portion in the top right that defines the boundaries so that she doesn’t look odd.
The biggest thing with low-key lighting is to provide enough light to define the picture and provide enough highlight detail to keep the viewer’s interest. Harder edge lights like incandescent lamps can provide a unique look for outlines and such. Softer edge lights provide a more even lighting. You may need to play a bit more with placement, but you don’t have to deal with hot spots that make the picture harder to print.
The only lighting is a floor lamp off to the left. I shot the picture with my Calumet Classic and Rhodenstock 26cm lens. This lens is really made for portraits. It is sharp, but at the same time not too sharp. It was made in 1935, so it has a certain look that you can’t get with either soft focus lenses or the super-sharp cost-a-million-bucks lenses of nowadays. The film is 4×5 Fomapan 200 and developed in Rodinal. The actual exposure was a little low, and the development time was a little on the long side, but it all worked out. I put the focus on the eyes without worrying too much on the plane of the face. The challenge with live models is that they move, and with portraits the only true focal point is going to be the eyes. My exposure was about 4 seconds—timed in my head so not all that accurate.
It turns out that all I had to do was make a straight print. I really didn’t need to dodge or burn. Being young, my model’s expression and skin is perfect for her. She was in the process of doing a silly, over-affected pose, but without the context of the rest of her body it doesn’t come across that way. This print was made with Oriental VC|RC II glossy paper, developed in Kodak Dektol. I use a factorial development of 5x the time of the first appearance. I exposed the print for 2 seconds with #00 contrast and 4 seconds at #5 contrast at f/11 with my Rhodenstock 150mm enlarging lens.
Advantage of Optical Prints
First, I attempted to get a print with all the delicate tones and smooth the image out a bit. The scan has some blown highlights where there is still detail in the negative, so I wanted to make that work a bit better. You’ll find that the print is very similar to the negative, except with a little less contrast overall. It’s a straight print, with no dodging and burning.
One of the cool things about working with variable contrast paper is that you can burn and dodge at different contrasts. This picture needs better tones, otherwise it is just too stark. I chose to do all the burning using a #00 filter (lowest contrast and smoothest tones). The print is primarily exposed for the plow, with the adjustments made to the rest of the image. As you can see by the straight print I made, the bush in the top left kind of dominates the picture, which is not what I want. I chose to dodge it a full stop, so it isn’t as heavy and doesn’t draw the eye away from the plow. The edges needed attention, and there was a whole area that was lacking detail that needed it. The two sides and the bottom I burned in for 1/3 stop. The top area where the grass was, I burned in for a full stop. It’s now that you can appreciate the detail still in the negative that the scanner just couldn’t handle.
This particular print I did change the base exposure for the print unwittingly, so the plow is darker than I like. However, that is easily corrected. When I get a new print of this, I’ll fix that problem.










