Day 31 – Photo Study

I am studying up on my digital photography skills. Now that we have a good, new, expensive camera, I need to make sure the shots I take are worthy of it. I’m reading “The Digital Photography Book” by Scott Kelby first.

It seems the first part of a continuously growing series of books. What appeals is the very to-the-point advice, although I find the over-wrought attempt at humour early in the book a little distracting. Most of the chapters focus on one type of photography, or one specific skill: 1 – taking sharp pictures, 2 – photographing flowers, 3 – wedding photography, etc.

This seemed somewhat narrow at first, but a lot of the tips carry over well outside the designated topic. For example, “wedding photography” has a lot of good tips for photographing people in general in a variety of out-and-about settings. Perhaps Scott chose the specific topic because of the high stress levels and “must-get-it-right-ness” of the situation.

Deep into the Material
Deep into the Material

Some of the content can seem a little dogmatic; taking all pictures with a tripod can seem like over-kill (and he does temper it with tips for when there is no other choice than to forego the tripod), but the fact remains that whenever it is possible to use a tripod you get better results because it leaves more room to dial the ISO back down and reduce the amount of noise you might get.

On the other hand, some of the recommendations seem quite unconventional to me as well… flowers look better after the rain. So, when you want to take pictures of flowers bring a spray bottle along so you can make your own rain.

Okay… sure…

And others quick-shot tips clearly come from professional experience, but merely sound odd. Taking outside pictures of people, you can get better results with an indirect flash because it eliminates harsh daylight shadows on the faces. I would never have considered flash something you’d use when there is already plenty of light out.

Next Page...
Next Page…

There are another 6-7 chapters to go, but I think I like the style of the writing, even when it is perhaps a little more verbose than necessary. The author seems to have felt like a book has to have a narrative throughout. I think this book would have been just as strong, if not stronger, if the narrative was left to the opening of each chapter followed by just a series of well-labelled quick-fire tips.

Having said that…

I will be reading the rest of the book. I will be practicing the tips in each chapter. I will try to blog my successes and failures with these tips as I go along.

And… I think I’ll probably end up buying the remaining (currently) 3 further volumes in the series for whatever nuggets they may contain as well.

For Evil? For Awesome?

I just read Kathy Sierra’s post on Cognitive Processing and Willpower: Your App Makes me Fat. And now I feel stuck between guilt and satisfaction over my other post today: Day 14 – Blatant Bribery.

Am I exploiting the depleting effects of the cognitive processing inherent in IT work to seduce co-workers into eating unwanted chocolates and chips?

Or am I just short-circuiting the need for willpower by seducing them with chocolates and chips thereby paving a clear path towards productivity?

Is this good?

Is this evil?

I just don’t know… (go read her article though, the first half is very interesting food for thought)

Day 6 – Floating

I find technical topics relaxing, and it’s been too long since I have looked into the gaping maw of a handful of venomous formulas. Add to that the fact that this is a topic that I’ve been thinking about turning into a “one page cheat sheet”* with the most important facts summarised, and tonight I tackle…

IEEE 754

Or as their parents call them when they are at home: floating point numbers.

Both the best and the worst thing ever invented to deal with fractional numbers in computing. Providers of so much convenience. Providers of so many lost hairs.

I haven’t done enough research yet to write my one-pager*, but this will be the most interesting part of my day today.

The results of my research can be found at: Floating Point One-Pager (2013-07-28).


Footnotes

* I am availing myself of the web definition of “one page”, meaning that it could literally be any length by the time I am done.

References

Links to some pages I’m reading through to get some perspective on the subject:

  • http://en.wikipedia.org/wiki/Floating_point
  • http://en.wikipedia.org/wiki/Double-precision_floating-point_format
  • http://floating-point-gui.de/errors/rounding/
  • http://www.cs.berkeley.edu/~demmel/cs267/lecture21/lecture21.html
  • http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

Checklist for Today

  1. Shower
  2. Quick groceries run
  3. Get a coffee
  4. Put on load of laundry
  5. Listen to Nerdist while vacuuming the house
  6. Clean the litter tray
  7. Mop the floors
  8. Hang out laundry
  9. Put on another load of laundry
  10. Trim hedges
  11. Have another shower
  12. Hang out laundry
  13. Maybe walk to get another coffee
  14. Do some work and email comments as promised
  15. Play some Binding of Isaac (addicted!)
  16. Iron shirts while watching an episode of Poirot
  17. Panic about writing about something interesting for day 5

Private Data and the Cloud

Keeping all my stuff in the interwebz never felt entirely comfortable to me, but after a recent crash that took my personal mail install with it I had an epiphany.

I have GMail. I have Steam. I have a NAS for backups. Why am I keeping so much critical data on a single machine that may very well crash (as it did)?

Some of the changes are no-brainers in my opinion. I don’t mind trusting Google with my email; they have been doing this long enough, and most of my mail was already flowing through my GMail account anyway. Adding the POP3 pickup from my personal account was a small formality, and now I can use the powerful search features across all my emails.

There are however other sorts of data that I’m having more trouble figuring out.

I like the idea of access to data everywhere. I’d love to have a single to-do list that I can access from any machine in the world. But there are also going to be to-do items I genuinely do not want to make publicly available. Even more so, there are probably items I would rather not even give to a cloud-based provider in the first place.

And that’s where it gets tricky. I don’t think there are any applications out there at this point that have a model that scales across the full gamut of privacy boundaries.

I’d like applications that can store data publicly in the cloud, privately in the cloud and privately on my own personal devices, synchronised only through my own personal network at home. But I do not think any application with that ability exists.

For a while I was thinking that DropBox may be a part of the solution, but their recent security breach and admission that they have full access to data stored in a DropBox, when previously they were claiming nobody but the user can decrypt the data, is less than comforting.

Now, one possible solution is to store data into an encrypted volume into a DropBox, but now I am wondering if even that is enough. Storing private data in an encrypted volume on a public share is still less secure than not letting it leave my own network in the first place.

I think there is room in the marketplace for someone to develop infrastructure usable by apps in the cloud that can deal with the full range of these security domains in a seamless fashion. Something that’ll work across my Linux-NAS, my Windows PCs and my Android phone. Oh, and an associated dev model that can allow web-apps to run in some limited fashion on my Windows PC and Android phone to deal with the private-only data without ever touching the web.

Is that really too much to ask for? *sigh*

Back to Basics

For a while now I have been postponing writing a post about my progress regarding exceptions in software. I have informally formed an outline of an opinion, but I have been looking for a way to build a stronger foundation than “because I think that’s the right way to do it”.

Then, as I started straying further afield with my mind wandering over multi-threaded code, dependency injection, unit testing and mocking as well (and some others that I know I have forgotten), it occurred to me that I really should go back to basics with all this…

  • The most fundamental tool to reason about software correctness is still to think in terms of invariants over state-space and pre-conditions/post-conditions to method invocations.
  • Guides on “good coding practices” abound, but there are certain fundamental truths in most of them that are universal enough to almost be as good as “formal methods” to reason about “good code” beyond merely “correct code”.
  • Both the DRY principle (“don’t repeat yourself”) and a desire to produce self-documenting code further suggest that keeping as many perspectives on a single piece of code as close together as possible is the best way forward. The new .NET 4 Code Contracts already provide some unification between code, documentation and testing, but I think there is more possible that has not been exploited yet in this arena. Some tricks may be needed to keep aspects such as tests and documentation together with the code without overly burdening the generated assemblies with dead weight that does not participate in the execution of the code itself.

I strongly believe that C# as a language leaves us with too much flexibility in the general case. Every iteration of the language adds more interacting features, and opens up many useful possibilities as well as some that are dangerous or perhaps even plain wrong.

Some code patterns, although allowed by the compiler, just do not make any sense. There are usage patterns of exceptions that *will* compile, but really should be considered an error.

Tools like FxCop try to plug some of those holes by checking for such errors after-the-fact. Unfortunately, custom error conditions are not as easy to express in FxCop as I think they ought to be. But in principle this is definitely a path worth exploring to eliminate options that might be best avoided.

I think the rather nebulous state of this post reflects the fact that my mind hasn’t completely crystalised into a single vision of what combination of tools and paradigms I need to get to more ideal development practices. But I think I am starting to make some progress.