The Imperfect Craft | Bitsplitting.org: “I’ve seen what happens to people who cling to outdated standards of craftsmanship: they become self-righteous, bitter, and delusional. Guided only by the hallowed rules of yesteryear’s geniuses, they and their work become marginalized. Without a foothold in the modern technological context, programmers who should be great are rendered effectively incapable of developing their craft.”
One of the things I love about software development is that it always presents mountains to learn. I don’t understand developers who aren’t constantly learning, trying new things out, and experimenting. This article really struck a chord with me. I love this quote as well:
As a modern software developer, I derive as much joy from remaining relevant as I do from the thrill of identifying and solving the particular problems in my work.
Cartoons owned Saturday mornings, back when I was young enough to care. The commercials that wedged their way in and between The RoadRunner and The Justice League seemed to hawk either toys or breakfast cereal, all of which I longed for. My mother decried “sugar cereal” and preached the virtues of rolled oats.
One particular cereal commercial that lingers in my dwindling memory showed various calamities creeping up on the blissful muncher. Each time, at the precise moment preceding attack and doom, the happy eater would show his or her spoon spelling out the calamities’ titles in Alpha-Bits (“MONSTER”, “TORNADO”, “BOA CONSTRICTOR”), declare, “I ate ‘em!”, and shovel the coveted sweet crunchiness down the hatch. The monster/villain/brute would promptly disappear. It was magical.
Today, I was working with a web project in Eclipse that had various dependencies and Gradle builds and GlassFish deployments and an Error in the Problem view had me at an impasse. It was some nonsense about a Validation error, with key pieces of data (like an explanation of what failed to validate glaringly missing). I tried turning off validators, but that hung Eclipse. I tried restarting Eclipse. I tried refreshing the project. I tried rebooting my Mac. No dice. Finally, I right-clicked the validation error int he Problem view to see if it would offer a menu.
One of the options was “Delete.”
I tried it.
I ate ‘em!
Of course, Stack Overflow already knew that. It always knows.
I was filling my gas tank the other day and saw this sign on the pump:
Apparently, it’s easier and cheaper to slap a sign on a pump than to fix the software.
I puzzled over this bug a bit; why would a gas pump refer to high-ankled footwear or English trunks? Then I realized it probably refers to “Insert Boot Disk”–I guess there’s some corruption when accessing the string table, perhaps, and sometimes the pump displays the wrong string when prompting for a ZIP code.
“Enter Data,” though, sounds like pure laziness.
Last Friday, the operations and infrastructure folks where I work were swinging the non-production environments to a new datacenter. The development managers decided to use this opportunity to challenge the developers to a “codefest”–a 1-day programming challenge. The rules boiled down to:
- You must come up with your idea beforehand and submit for approval
- Teams could be 2-5 people
- You cannot write ANY code beforehand, but could set up your environment, install libraries, etc.
- Coding starts promptly at 8:00 AM and ends precisely at 4:00 PM
- Scoring criteria:
- Completeness: 33%
- Code Quality: 33%
- Cool Factor: 34%
- Bonus: Usefulness to the company: 1-5%
- Cash prizes awarded to the top three projects.
What a great idea! I was amazed to see what sorts of projects people came up with, and to see the execution of a finished app in 8 hours. Here are some of the apps produced:
- Use Benford’s Law to detect fraudulent medical claims
- Use Google’s Prediction API to analyze and score customer feedback
- Create both a REST service and a web front end for searching ICD-10 codes
- Text a physician with some notification, differentiating between Protected Health Information (PHI) and non-PHI notifications, and sending a secure link only for PHI notifications
- Using a microcontroller, bluetooth board, create a light display showcasing our company’s new logo, and create an Android app to control the light show through various light patterns
- Create an iPhone app that uses the characteristics of a two-dimensional skeleton and learning algorithms to teach a figure how to walk.
I worked on the last item with Michael Privat. The plan was that I would write the piece to take a picture of someone (against a solid background), remove the background, and walk them through identifying the rectangles containing their various body parts. Those images would then be used in the character that learns how to walk. Michael would write the cool, hard stuff: to make the character learn how to walk. We would be meeting in the middle.
I didn’t quite meet him, though. I finished the front end to take or select a picture, store it in Core Data, display a grid of pictures in a UICollectionView, and remove the background from a given picture. I was just starting the UI for selecting body parts when we realized it was 3:30, and there was no way I was going to finish. Luckily, Michael had banged out the algorithm for the learning, walking figure, so we grabbed an image from the Web, cut it up, and used those images. My poor code got the boot.
How’d we do? We took second, losing only to the flashing lights. The panel of judges consisted of several folks from Senior Management (CEO, CTO, CFO, HR VP), Directors, and Managers. Nobody showed code, so the “Code Quality” criterion didn’t have an impact.
Lessons learned? I should have fudged a little and learned how to remove the background from an image beforehand. I found some posts on Stack Overflow, but felt determined to understand them before blindly using them, so I lost some time there. I also had never used the UICollectionView; it wasn’t difficult at all to use, but I still had to learn which delegate methods to override and I could have saved some time if I’d just used a UITableView. Finally, making the users define and rotate rectangles to select body parts was too ambitious, given the time constraints. I should have superimposed a silhouette on the camera and cut the picture at predetermined points. I had a lot of fun, though, and added a few more tools to my belt.
If I were entirely honorable, I would give Michael my half of the $750 second place prize. I’d already told him that I’d be using any winnings to take my team to lunch, though, so I’m making him cough it up.
Kudos to management for this activity–I can’t wait for the next one!
Why your password can’t have symbols—or be longer than 16 characters | Ars Technica: “The password creation process on different websites can be a bit like visiting foreign countries with unfamiliar social customs.”
(Via. @lars on App.net)
When I was young, I remembered everything. Now I am old, and I remember nothing. And I’ve surrendered to password madness. I’ve stored all my passwords in safe since 2007, with my encrypted data file in Dropbox, so I can access it from any machine that runs Ruby. This way, I have to remember only one password, which is long and complex and just onerous enough to type that I feel safe without feeling overburdened.
Unfortunately, neither my iPhone nor my iPad can run safe, so I bought 1Password and supplement my safe usage with that. I even use the same onerous password for 1Password that I use for safe, but for some inexplicable reason I used a different password on my iPhone that I no longer remember, so it’s useless to me. I should delete everything and reload, but I’m ashamed to admit I did that once before.
For the website I work on for my employment, we have several different environments with different user IDs and passwords that expire more rapidly than I can type, so I just reset them everytime I log in and mash the keyboard like a Whack-A-Mole for my new passwords that I’ll never remember.
Our new lunchroom food system got smart, though–the automated checkout system eschews passwords for thumb scans. No passwords stand between me and Coke Zero!
More on “Where next for Grails”? • GRAILS.IO: “Grails 3.0 will be a reinvention of the framework that you love, and we will be making some hard decisions about what we support in terms of backwards compatibility. With Grails 3.0 we plan to allow the creation of applications in different architectural styles. Servlet API applications will always be supported, but we plan to make ‘create-app’ extensible, so that Grails can be used to create a range of types of applications (Batch, NIO, Netty, ‘static void main’ etc.).”
I did some Grails work a few years ago, and really liked it. Reading this post made me realize I miss doing Grails and Groovy–I’ll have to find an excuse to get back to them!
BTW, however much this domain’s name seems to derive from Grails, I’d never heard of Grails when I registered grailbox.com in August of 2006. Some web poking reveals that work on Grails got underway in 2005, but I didn’t hear about it until much later. My vision for grailbox focused on office productivity tools: (holy) grail + mailbox. I guess I haven’t done much on that front, though!
A $5 app isn’t expensive: Customers need to help fix the App Store economy | Macworld: “You don’t buy a Kindle just to enjoy the dictionary and manual that come pre-installed on the device. You shouldn’t buy an iPhone to enjoy only free apps, either. You’re cheating yourself, all because we’ve become conditioned to feeling that $5 is a lot to spend on an app. It’s okay to pay for good products.”
That’s the best line in a great article.
I’m astonished at how little people value software these days. “Didn’t have feature X! Complete waste of a dollar!” Yet they waste dollars willy-nilly by leaving lights on when they walk out of rooms. Great software can only be produced by great skill and great effort. Use great software, pay for it, and you’ll be happier.
I’ve released a command-line App.net client for Mac OS X: Wry. Its home page is http://grailbox.com/wry. It’s released under the MIT License, and is hosted on github at https://github.com/hoop33/wry. Check it out, and let me know what you think!
I have a Dropbox Pro account with 107.5GB of storage, an iCloud account with 15GB of storage, and free accounts with Box (50GB), SpiderOak (2GB), GDrive (5GB), SkyDrive (7GB), ASUS WebStorage (8.5GB), Cubby (5GB), and UbuntuOne (5GB). I have plenty of cloud storage space. What I don’t have is a good way to manage that space.
Each of those cloud storage options operates as an island. Most create a directory in my home folder that its daemon syncs to the cloud. I can set preferences on my various devices for what gets synced inside that folder, but that folder is its own beast. If I want to save something to the cloud, I have to decide which cloud service to sync to and either save to that directory or otherwise upload to that service.
I got to thinking: what about an app that virtualized all that storage into a single virtual drive? This app would take care of managing which service to save files to, depending on file sizes and free space, and could even replicate files across services for my peace of mind. Sounds fun to build and definitely useful.
As I thought about it, though, I realized this app would have two issues:
- It doesn’t seem very sporting. These cloud services need paid customers to stay afloat. My proposed app could entice people to never pay for any cloud services, mooch the free services, and let the app take care of never running out of space.
- The primary target audience would be the people mentioned in objection #1, and they’re cheapskates. Not only wouldn’t they pay for cloud storage, they also wouldn’t pay me for the app, either.
TL;DR — Turn off Path Finder desktop to use GeekTool.
I’ve been meaning to install GeekTool on my new Mac that I bought, um, over two years ago. Time flies. Anyway, I installed it from the App Store, ran it, and tried to drag an icon to my desktop as the instructions say. I kept experiencing these symptoms:
When opening GeekTool, I am welcomed to a blank Properties box with just “Geeklet Settings”. Many tutorials have told me to drag either “file” “Images or “Shel” onto the desktop. I do this and nothing happens. The little black box that appears when you click and drag bounces back up to the GeekTool 3 preference box.
The remedy most often listed was to uninstall and reinstall, but before I did that, I realized: I wasn’t actually dropping the icon on my desktop. I was dropping it on my Path Finder desktop, which I enable in Path Finder’s settings (Features > Show Path Finder desktop). That makes a difference! I turned off the Path Finder desktop (admittedly, I don’t know what it offers, so I don’t know what I’ve lost), and BOOYAH! Dropping GeekTool icons now works.
- The RSS feed for this twitter account is not loadable for the moment.
Follow @hoop33 on twitter.
What I’m Writing
- August 2013 (2)
- July 2013 (2)
- May 2013 (3)
- April 2013 (6)
- February 2013 (1)
- January 2013 (1)
- November 2012 (6)
- September 2012 (1)
- August 2012 (6)
- July 2012 (10)
- June 2012 (4)
- May 2012 (7)
- April 2012 (4)
- March 2012 (8)
- February 2012 (7)
- January 2012 (7)
- December 2011 (1)
- November 2011 (1)
- September 2011 (4)
- August 2011 (2)
- July 2011 (2)
- June 2011 (2)
- May 2011 (4)
- April 2011 (2)
- February 2011 (1)
- January 2011 (1)
- December 2010 (3)
- November 2010 (3)
- October 2010 (4)
- September 2010 (6)
- August 2010 (96)