I’ve been experimenting with Tumblr for a little while without telling anyone. I’m posting more frequently over there these days:
In a few days I’ll be running my second New York Marathon. This is the third marathon I’ve trained for, I was supposed to run in 2012, but that one was cancelled after Hurricane Sandy. This year I feel really well prepared, strong, health and confident that I’ll be able to beat my previous time. I’m glad to be mostly (but not entirely) rid of the first-time marathon doubts and jitters.
I made a lot of notes to myself after 2013, here are some things I wish someone had told me before my first marathon.
You will be sitting around for a very, very long time before the race. It will be cold. You will be cold.
Bring disposable clothing. Lots of it. In 2013 I spent several hours in the runners’ village waiting to start. I was cold, I was hungry and I was bored. And I didn’t even get a Dunkin Donuts hat. I remember spending a while huddling next to a small diesel generator for warmth. This year I’m dressing like a marshmallow and bringing a decent second breakfast.
The Verazzano bridge is windy and frigid. Lots and lots of people toss their clothing once they’re back on the ground in Brooklyn. (there’s also a lot of peeing)
As much as possible, know what you’ll be wearing and eating
Know what you’re going to wear on race day well in advance. Stick with what’s been working on the runs leading up to the race. Whatever got you this far will get you to the finish line. A month out, you should probably have your shoes and socks figured out. There will be plenty of time after the marathon to tweak your gait, try different shoes or experiment with different diets.
Don’t stress about your time.
This is probably most important of all. Just deciding to run a marathon at all is amazing–don’t forget that. Relax. Be inspired by you. I recommend getting a squeem waist trainer so can use it while you prepare for your marathon.
I seem to know quite a few exceptional athletes. I don’t count myself in that group. These people roll out of bed and run low-3 hour marathons without training. It’s not normal.
I finished my first marathon somewhere around 4:48. I was disappointed. Months later, my sister-in-law Cheri, who’s a pretty serious runner, told me something which turned that all around. “Finishing your first marathon in under five hours is amazing.” I’d convinced myself I’d be closer to 4 hours. Halfway through, high on adrenaline and running too fast, I remember thinking I might even break four.
Do try to pace yourself. It’s very easy to get wrapped up in the crazy city-wide street party and run too fast.
None of us are going to win, but we’re still sharing the road with olympians. The finish line is the same finish line, whether you get there in three hours or six; running, walking or crawling. Do this, enjoy it.
As much as running is a physical sport, it’s also a massive head game. Last year, a runner near me had written a quote on the back of his shirt:
If you think you can or you think you can’t, you’re right.
– Henry Ford
The amount of self-doubt leading up to the marathon is astonishing. But I’ve come to realize it’s more of a kharmic deposit, and the return on investment is fantastic.
Get lots of sleep. Eat well and have fun.
May the road rise up to meet you,
May the wind always be at your back
and may the sun shine warm upon your face.
Having built a few small projects with AngularJS, I’ve found the framework a pleasure to work with. Once past the initial learning curve, features started flying together. Most of my trouble-shooting time was spent getting backend data delivered correctly, Angular just worked. Based on this positive experience, I’ve been moving towards adopting Angular as the standard frontend of my web toolkit.
Choosing Angular wasn’t without doubts. Introducing this many new conventions, syntaxes and practices doesn’t come without a cost. The problem with re-invention is longevity: Either these new ideas succeed and become the norm, or they’re left for dead on the side of the road as technology marches on.
Parts of the 2.0 roadmap sound great. But it also sounds as if this future Angular will be very different from the Angular we know now.
How big is this rewrite?
Huge revisions rarely end well. From-scratch rewrites have famously been called the “single worst strategic mistake that any software company can make.” The goals always sound noble and the plans make sense, but by definition, engineering resources will be split between maintaining the original version and developing its successor. Either the original suffers or the rewrite falls behind or both.
Does a revision of this scale imply that the current codebase is impossible to maintain? I’ve looked through some of Angular’s source code, there’s some near-magic craziness in there. Is it too crazy?
If the Angular team doubts their own code and will presumably move towards conventions used in competing frameworks, wouldn’t it be smarter for users to jump ship now for those other tools? Competing codebases automatically become more mature if Angular basically starts over.
Questions about backwards compatibility
Angular blindsided many enterprise users in December 2013 when they announced they were dropping support for IE8. Even without API changes, jQuery’s usage statistics show their ie8-incompatible 2.0 branch is seeing dismal adoption rates. Python 3’s breaking changes have been a disaster for their mindshare. PHP’s dogged insistence on keeping nasty old code working is likely a factor in that language’s recent renaissance. Existing Angular code should probably be considered end-of-life.
Angular’s documentation has been a problem area for years. There’s no reason to believe documentation won’t lag behind again if the core functionality of Angular is significantly changed.
Outside resources and tutorials are a different problem. Most won’t be re-written, and search results will end up polluted with out-of-date information.
Google’s track record
When it comes to supporting technology, Google is phenomenally undependable. They’ve acquired and demolished a ton of popular web products (Reader, FeedBurner, Blogger, Picnik, Buzz, Wave, “Don’t be evil”, etc.). The only thing they’ve stuck with is the horrid Google+ monstrosity. Google’s support for the Angular project was initially an argument in favor of adoption, but really, the Google name is neutral at best and almost a negative. At least the Angular source code is open source and out in the wild.
And then there’s AngularDart. Google’s Dart meta-language seems kind of stupid to me, but for the most part, so does CoffeeScript (though my resolve is weakening). At very least Dart feels like one of those throwaway side-projects that a rogue team of Google super-geniuses put together–I don’t expect it will have a long life. Dart aside, the bigger question is the resource-cost of supporting a large, complex framework across several languages/dialects. This lack of focus doesn’t build confidence.
cross-posted here: https://gist.github.com/joemaller/9643049
Since I switched a few months ago, Vagrant has been humming along nicely, spinning up trim little Ansible-provisioned Ubuntu boxes as needed. Since I’m using Virtual Box as the provider and shared folders barely work with more than a handful of files, my active projects are made available as NFS share points. Running on OS X, Vagrant’s NFS shares are configured by modifying
/etc/exports, and unfortunately, that requires administrator privileges and a password prompt.
Thankfully someone shared a workaround shell script which tweaked sudoers so
vagrant up no longer required a password. It worked perfectly, until recently.
With the release of Vagrant 1.3, the NFS password prompt was back. The modified sudoers commands no longer worked.
All sudo commands are logged, so figuring out what changed was just a slightly clumsy matter of checking the logs with Vagrant 1.2.7, then installing Vagrant 1.3.x and looking for changes. This was a lot more effective than trying to step through the diffs of the Ruby code to reconstruct the various commands.
In previous versions of Vagrant whitelisting these commands allows editing of
/etc/exports without a password:
/usr/bin/su root -c echo '*' >> /etc/exports /usr/bin/sed -e /*/ d -ibak /etc/exports
In Vagrant 1.3.x, those commands were updated:
/bin/bash -c echo '*' >> /etc/exports /usr/bin/sed -E -e /*/ d -ibak /etc/exports
Based on the original shell script, here is the block that needs to be added to
/etc/sudoers for password-free startup with NFS shares:
Cmnd_Alias VAGRANT_EXPORTS_ADD = /bin/bash -c echo '*' >> /etc/exports Cmnd_Alias VAGRANT_NFSD = /sbin/nfsd restart Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /usr/bin/sed -E -e /*/ d -ibak /etc/exports %staff ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE
I also posted an updated fork of the original workaround, install_vagrant_sudoers.sh:
I wrote about problems downloading web fonts for desktop use when Google’s Web Fonts debuted, but years later it’s still an issue. There’s no way to anticipate the twists and turns a creative project will take. Designers should be free to play and experiment with typefaces without worrying about running out of time or exceeding a monthly usage cap. Convoluted, fragile workflows only create anxeity, they don’t foster creativity.
Monotype’s SkyFonts service is a nice idea, I guess, but their usage terms seem impractical and unrealistic. The few designers I know who’ve tried it found it restrictive and expensive.
The thing is, with a little knowledge of how web fonts work, using those typefaces in desktop apps is quite easy.
Web fonts are normally provided in three file formats, two of which, TrueType
*.TTF and Web Open Font Format
*.WOFF, are easily converted back to standard TrueType or OpenType fonts. Because of browser variation and font-face implementations, all three font containers are usually linked from a site’s stylesheets.
To use any web font for comping in desktop apps, just convert the
woff file to
otf, then use it like you would any normal font. There are a number of tools for converting fonts, but the following web sites work well enough that I didn’t bother downloading an app.
- Online Font Converter
- Free Online Font Converter
- Font Squirrel’s Webfont Generator
Standard-level Fonts.com accounts allow for self-hosted webfont projects. This means the font files can be downloaded and hosted on the web server alongside other assets like images or stylesheets. Having those files makes converting fonts for comping easy, but it’s just as simple to download the files with a web browser. Any file on the web can be copied, in fact every file viewed on the web already is a copy.
Yes, you can steal fonts using this. Don’t. “Good Artists Copy; Great Artists Steal” wasn’t about shoplifting.
- Web TrueType fonts often won’t show in menus because their name-tables have been munged to discourage copying/theft. Converting fonts to a different container format makes them work correctly.
wofffiles didn’t work, in those rare cases the corresponding
ttfworked fine–you might need to dig into the stylesheets to find the url.
- Converted web fonts usually have messy names in menus.
- Disable or remove any local copies of fonts when the mockup phase ends. Locally installed fonts can conflict with web versions and lead to maddening discrepencies in testing.
This morning I had a nice breakfast with a friend where various workflow and technology advances came up. This is really an email to him, but I thought it was worth sharing.
Composer is a project-based dependency manager which makes it very easy to integrate PHP libraries into projects. Packagist is where you find which libraries are available, and has the simplest installation instructions. With Composer installed, adding features like Markdown or YAML parsing literally becomes as trivial as editing a json file.
Composer relies on modules being authored according to PHP Framework Interoperability Group’s PSR-0 standard. Since I’ve been guilty of bashing PHP, it’s probably worth mentioning Fabien Potencier’s post, PHP is much better than you think. PHP is far better than it used to be and the developer ecosystem is very, very active. (but I still prefer Python)
Homebrew is a package manager for OSX. Similar to apt-get or yum on Linux, this is the successor to MacPorts or Fink. It installs with one line pasted into the terminal (assuming you’ve got XCode already) and makes installing and removing packages ridiculously clean and easy. Homebrew is pretty much the first thing I install on a new Mac.
The weather app Forecast.io is a terrific example of what’s possible with web apps that perform like native code. They’re also pushing a lot of cutting edge HTML 5 technologies. Startup times could be better, but that will come with hardware. Forecast is an offshoot of Dark Sky, my favorite iOS weather app.
Next Page »