Amber and I take a few photographs. Mostly of our kids. We post every photo (51,000+ so far) to Flickr and neurotically tag and describe each one. This helps us find them later when we need a photo of some one, some thing or some event. When you have so many photos you have to tag them or you’ll never find them. For every photo that is tagged with Wesley or Jillian we include, in the description, the child’s name and age in years, months and days. We started doing the calculations by hand, but it was tedious and error prone. So about a year ago I wrote a little Python program for Amber that does the math for her. Problem solved!
Shortly thereafter she shared it with our friends Jessica and Nick, who by that time had taken Amber’s lead and were also entering their kids’ ages in each photo. So I rewrote the program for them to include their kids. Problem solved! But then they went and had another kid so I added her, too. Problem solved. But then they wanted to add other peoples’ kids as well. To make it more usable I decided to rewrite the program so that the user can add or remove anyone they want. I’m releasing that application as PhotoAge v1.0.0. You can download it below as a compiled Windows executable or as a Python 2.6.x script. Problem solved!
Features:
- Calculates ages in years, months and ages for everyone in the database.
- Automatically fills in today’s date.
- Copy the text (Name: year, month, day) to the clipboard by double-clicking for easy pasting anywhere on your computer.
- You can add or remove as many people as you like using the Add or Remove People window.
- Automatically sort the people you add by Name or Age, ascending or descending.
- No install needed. Just run PhotoAge.exe (or if you have Python 2 installed, PhotoAge.py).
- Full HTML help file.
- Checks to make sure all dates entered are valid. It knows how many days in each month and understands leap years.
- Properly pluralizes labels. Eg, 0 months, 1 month, 2 months.
A few screenshots (it only has a few screens):
To use PhotoAge, just download the file below. Then unzip the folder and run PhotoAge.exe. You’ll need to add some people and birth dates to the database and then you are all set. For help on getting started, check out the web-based help from the Help menu.
PhotoAge is released under the GPL v3 license. You are free to edit, reuse or redistribute the code under the terms of the license. If you have questions, feature requests (we have a few things in mind for version 1.1 already) or anything else, just leave a comment on this post.
Download PhotoAge v1.0.0:
Windows Executable (just unzip and run): PhotoAge (560)
Python 2.6.x Source Code: PhotoAge - Source (546)
Tags: photography, software
- A decent bike makes a huge difference. This one is a huge, huge step up from what I had before. Lighter, more efficient tires. I still don’t like riding, but it is better on this than the last one.
- If your wife tells the friendly bike guy at REI your butt hurts when you ride he will explain to you in rather specific detail what a perineum is (I already know, thanks) and why it gets sore when you ride your bike. Not a conversation I thought I would ever have with anyone, anywhere, let alone in a retail store with a stranger.
- Drivers don’t understand hand signals. In fact when I signal right they seem to think I am waving at them.
- Lights don’t change for you even when you are in a bike lane. You have three choices:
- Run the light (just do it).
- Wait for cars to come (you may wait a very, very long time).
- Either get off or ride your bike to the curb (even if you are in the far left turn lane) and press the crosswalk button, then wait some more.
- Bike lanes are the trash cans of the roads. They are filled with pot holes, broken glass, loose gravel, pinecones, fast food containers and dearly departed pets.
- Biking is too efficient and doesn’t burn nearly enough calories. I only burn 44% of the calories I would burn from running the same distance.
- 30 plus mph is lots of fun and just the right amount of terrifying.
- I will never “break even” with the cost of a bus pass because the required accessories (fenders for rain, rack and panniers for stuff, pumps, replacement tubes, etc) cost a small fortune. You could get a decent bike for less than an expensive set of panniers.
- At a signal, when the light turns green I can beat most cars off the line and across the intersection. It is simple physics that I have a lot less mass and better gearing for that 2 seconds of the ride. There are a few exceptions. The following people will floor their car to beat me across the street:
- The person in the car next to me is a man of any age driving a sports car
- The person in the car next to me is a man of any age driving a really crappy car.
- The person in the car next to me is a man under 25 driving any car of any kind.
- People have three ways of passing:
- Never actually pass. Just ride right up next to me so that if I were to swerve a few inches I’d collide with your front bumper.
- Pass me in residential areas at about 60 miles an hour.
- Pass me at 60 miles per hour without moving over an inch even when there is no bike lane. This one is preferred by cab drivers.
- At the bottom of every hill in which you finally get up some momentum, there will be a stop sign forcing you to eat up all that lovely kinetic energy, grinding it up into worthless heat in your brakes. There will be no coasting for you!
- You aren’t supposed to use all of your gears. In fact some combinations of them will never, ever be used. You aren’t supposed to let the chain go diagonal. So in the first front gear you can use only 1-4 or so of the back set, the middle front gear can only use the middle few gears in back and the third gear in front can only use the hardest, upper gears in the back. I stole the picture below (highlighting in green which gears you can use on an 18-speed) from a very thorough page with lots more details. I’m not sure how I managed to ride a bike on and off for thirty-one years without knowing this. This is why the internet is now my official best friend.
Being the geek I am I have attached my running GPS to the bike and have been tracking the time it takes for me to ride to and from work. Plus I like to see how fast I can get down the one decent hill (record is 32 mph so far). You can see that I am trending a little faster as the days go, but I chalk that up to my increased willingness to run lights (safely), rather than some improvement in . Each light I run cuts a few minutes (10-15% of my total trip) off my time compared to waiting for it to go green again.
This last weekend we headed down to the Meadowdale Highschool track. Wesley, you see, has been wanting to try learning to ride his bike without his training wheels. Since I got a bike on Friday, he couldn’t wait any longer. The track is just a few blocks from our house and made for a nice, flat, car-less, rubbery place to learn. Following the advice in this video we took the pedals off of Wesley’s bike along with the the training wheels. The idea is that the kid can learn to balance without the threat of falling down and balance is the most important thing to learn about riding the bike.
Unfortunately Wesley’s bike is just a little too big and even with the seat all the way down he couldn’t get his feet flat on the ground. So he pushed himself around for a few minutes, but had trouble balancing because he had to lean side to side to reach the ground. We put the pedals back on and after just a few minutes he was riding around for short distances all by himself.
Here we are celebrating his first real ride on a two-wheeler:
And here we are shortly thereafter being attacked by crocodiles (They live in the rain gutter on the inner edge of the track. What, you didn’t know?):
After that Wesley rode all the way around the track:
He was really, really pleased with himself.
He still has a few kinks to work out. This crash gave him a nice mark on his armpit that you can still see. He isn’t perfectly stable, but he is well on his way to being training wheel free!
After riding we spent some time playing baseball, running around and of course, picking flowers.