Skip to main content

The D40 : Summary

The D40 is a great camera. It has spot metering, exposure lock and focus lock. These are important things for me because I like to play with pictures taken against light, which are challenging even for film. It's evaluative metering is superb, which is for everything else. I have no problems with the controls, though some people say they are cumbersome. At most, you have to hold down a modifier button while spinning the thumb wheel. The exposure lock button is the only inconvenient thing - you have to jam your thumb next to your eye as you look through the viewfinder. I haven't made prints yet. Theoretically 6 MP will yield 10"x 6.6" prints at 300dpi and 20"x 13" at 150dpi. We'll see how that turns out. The D40 is as light as my film F65 and lighter than the fancier older film Nikons. It feels solid in the hand, more solid than the F65. The kit lens (18-55 Nikkor G) is great, its quiet and has great depth of field. Be aware that you need to stop down quite a bit (f9, f11) if you want to keep a bunch of things in focus.

My Settings
  1. Setup->File No. Sequence->ON (other wise you will reset image numbering to zero each time you erase pictures from your card)
  2. Setup->Auto Image Rotation->ON
  3. Setup->USB->PTP (For Mac, to use image capture)
  4. Shooting->Optimize Image->VI (Vivid)
  5. Shooting->Image Quality->Fine jpeg
  6. Shooting->Image Size->L
Preferred shooting mode
When I have time to compose (e.g. a few seconds) I put it on spot metering, aperture priority and then play with aperture for depth of field, and spot meter at different image locations, lock exposure and recompose to get different exposure effects. I set focusing to single area (Custom Setting->AF-area mode->Single area) and enable focus lock (Nikon's famous half shutter press - Custom Setting-> Focus mode->AF-S Single-servo AF)
When I have to be quick, I put metering on evaluative, and focus on closest subject.

Specific Bravos
  1. Auto mode with no flash. The camera adjusts shutter speed to be handheld safe, opens up the aperture and then boosts the ISO as necessary to take the shot. Beautiful for cases when you don't want flash and are too lazy/have no time to adjust everything for a handheld shot.
  2. Low (and I mean LOW) sensor noise up to 1600ISO
  3. On camera image enhancement can be custom tweaked
  4. Spot metering
  5. Matrix metering is great (just like for the film Nikon)

Specific Annoyances

  1. Exposure mode needs to be changed through the menu
  2. Exposure mode not indicated in the heads up display

What I would have liked
  1. Exposure bracketing
  2. Time lapse timer
  3. Grid lines on viewfinder
  4. Mirror lockup
  5. Exposure lock button somewhere else
  6. An analog focusing meter OR a split prism focusing screen
  7. A million dollars
Did I mention, the D40 is great. I'm sure you can get cameras with the above 3 features and more. For a lot more money. I'm not a professional, the challenge of leveling the horizon, the challenge of playing with exposure, the challenge of playing with depth of field IS the fun, and the D40 is all I need.

Links

Comments

Popular posts from this blog

A note on Python's __exit__() and errors

Python's context managers are a very neat way of handling code that needs a teardown once you are done. Python objects have do have a destructor method ( __del__ ) called right before the last instance of the object is about to be destroyed. You can do a teardown there. However there is a lot of fine print to the __del__ method. A cleaner way of doing tear-downs is through Python's context manager , manifested as the with keyword. class CrushMe: def __init__(self): self.f = open('test.txt', 'w') def foo(self, a, b): self.f.write(str(a - b)) def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.f.close() return True with CrushMe() as c: c.foo(2, 3) One thing that is important, and that got me just now, is error handling. I made the mistake of ignoring all those 'junk' arguments ( exc_type, exc_val, exc_tb ). I just skimmed the docs and what popped out is that you need to return True or...

Store numpy arrays in sqlite

Use numpy.getbuffer (or sqlite3.Binary ) in combination with numpy.frombuffer to lug numpy data in and out of the sqlite3 database: import sqlite3, numpy r1d = numpy.random.randn(10) con = sqlite3.connect(':memory:') con.execute("CREATE TABLE eye(id INTEGER PRIMARY KEY, desc TEXT, data BLOB)") con.execute("INSERT INTO eye(desc,data) VALUES(?,?)", ("1d", sqlite3.Binary(r1d))) con.execute("INSERT INTO eye(desc,data) VALUES(?,?)", ("1d", numpy.getbuffer(r1d))) res = con.execute("SELECT * FROM eye").fetchall() con.close() #res -> #[(1, u'1d', <read-write buffer ptr 0x10371b220, size 80 at 0x10371b1e0>), # (2, u'1d', <read-write buffer ptr 0x10371b190, size 80 at 0x10371b150>)] print r1d - numpy.frombuffer(res[0][2]) #->[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] print r1d - numpy.frombuffer(res[1][2]) #->[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] Note that for work where data ty...