port install curl curl-ca-bundle
ln -s /opt/local/share/curl/curl-ca-bundle.crt /opt/local/etc/openssl/cert.pem
(using sudo as needed)
There is loads and loads of advice to fix the message, which also tends to revolve around finding/installing the correct base certificates. However, part of the problem is that Ruby’s Net module’s default certificate bundle can only be overridden if you’re creating the Net object yourself, which leaves most external libraries out.
The ultimate solution is that whichever OpenSSL you’re using needs to have a PEM file of an appropriate set of root certificates in its base configuration directory. Neither MacPorts nor Apple ships a standalone PEM file: Apple has them inside the Keychain in OSX 10.5+ , while MacPorts doesn’t include them with their OpenSSL port (to be fair, they have a pretty good reason )
( What’s the difference between CRT, DER, and PEM you ask? Here’s a good explanation )
Fortunately, the Curl project separated out its certificates awhile ago, and MacPorts ships them as the “curl-ca-bundle” port (“port install curl curl-ca-bundle” if you don’t already have them).
Since we’d rather let the curl-ca-bundle maintainers keep the bundle up to date, we’ll make a symbolic link instead of copying the file:
ln -s /opt/local/share/curl/curl-ca-bundle.crt /opt/local/etc/openssl/cert.pem
(again, using sudo as needed)
Note that this is a separate problem from having general OpenSSL support in Ruby—if you can “require ‘openssl’” successfully or see a top-level ‘OpenSSL’ object in irb, your Ruby is already set and you don’t need to worry about any RUBYOPT tricks.]]>
Now that we have both RVM and Bundler, you’re following the advice in this article and keeping all your gems in source control, right?
No? Why not? “I have a custom fork that I don’t want to put on a public server”? Pfshaw!
1. Put a ‘:git’ option in your Gemfile pointing to your local repo:
gem ‘my_custom_gem’, ’1.0.0′, :git=>’file://path/to/your/repo’
2. Follow the steps in the article:
bundle install –path vendor’
Make sure the gem file for your custom gem is in vendor/cache.
3. Remove the :git flag in your Gemfile
gem ‘my_custom_gem’, ’1.0.0′
bundle install –path vendor
again to remove the git references from Gemfile.lock.
5. Check in vendor/cache/*, Gemfile, Gemfile.lock, and .bundle/config to source control.
There now, that wasn’t so hard. And now you don’t have to worry about losing the original git repo, or reinstalling the custom gem on every deploy.]]>
Tom was a friend gained through repeated attendance of the Auburn Virtual-On Crew during its heyday in the early 2000’s. A dynamite Raiden player and expert with prediction lasers, he was usually at least a yomi layer above you. He had the knack of predicting where a situation was likely to be going, and making sure all available witticisms were extracted. And no matter the situation, it would be made witty: his archived personal blog is shades of exploration alternated with childlike fascination, backed by humor drier than Winston Churchill’s martinis.
That sense of humor and love of a good situation dovetailed into one of his websites, Obey the Decider . Tom was busy describing it at the last Auburn Virtual-On Crew tourney in 2009, as he had just come off of Seattle Startup Weekend 2, where he’d pitched the idea. While he was waiting for his turn to demolish us with Screw Lasers, he noted that the hidden goal was to ‘randomly’ suggest the same place to groups of users based on time, to get people together in a fun location with a common talking point. That was pure Tom—he was always having a great time and wanted to make sure other people were having just as much fun.
That tourney however, was the last time I physically saw him. His lymphoma was diagnosed three months later. However, he kept everyone up to date using social media and his dedicated health blog Lymphomartini. After getting a smartphone, I followed his Twitter stream during his cut-short trip to England, and his speedy recovery back home.
During his early remission in 2009, he managed to get to a public gaming center with the just-released XBLA version of VOOT. He had to use a generic gamertag with no microphone, but we knew who each of us were. I hope that I gave him at least a few good matches like in the old days.
All of these experiences culminated in Tom’s legendary Ignite Seattle talk , using his rich voice and copious sense of humor to make light of his experiences.
Less than a year after that talk, he isn’t with us anymore. But he never stopped fighting, never stopped encouraging others, and never lost his sense of humor.
As good friends of mine have said: I want to be Tom Music when I grow up.]]>
Five weeks ago, I watched Space Shuttle Discovery’s final launch with a group of dear friends.
And one month ago, Discovery made its final touchdown at Kennedy Space Center.
Discovery is the first of the Shuttles to be completely retired. Even though it took awhile to get off the ground this time, it gave a magnificent performance for its swan song.
Like the Concorde, and the family’s 1978 Nova, it’s painful to see the Shuttles retired when they’ve got a spark or two left. But on the other hand, I know that there’s not much more that can be done with them. The shuttles are high-maintenance machines spawned both from the Apollo era, and a host of requirements that vanished in the time it took to build them.
However, Phil Plait already covered that ground much better than I could hope to. And the Kennedy Space Center Staff did their own send-off . That’s not what this post ended up being about.
I can’t recall a time in my life without the shuttle program. I had a Skylab pop-up book, which I’m pretty sure ended with “one day, our future spaceplanes will visit this station”. (Whoops)
For kindergarten, my mom sewed me a naptime pillow. On one side were the usual SF rocketships. But the other side was an iron-on transfer of Columbia’s first landing in 1981, with the legend ‘First Spaceship Lands on Earth’.
My class was too young to be watching Challenger’s last launch directly, but I remember the teacher tearfully showing us newspaper articles on the accident. I was playing on the carpet in front of the TV when Dan Rather started mentioning ‘O-rings’. Odyssey Magazine dedicated an issue to explaining the findings of the Rogers Commission, which I re-read for a month.
The Pacific Science Center was a staple of Saturday afternoons and childhood memories alike.  Their IMAX theatre ran Hail Columbia nonstop until The Dream is Alive came out. Dad took us to both, but all I remember was being scared to death of the SRB ignition in full IMAX® audio. For most films in the years afterwards, I had my hands over my ears until I was sure no rockets were about to take off. 
On every visit to the Science Center though, my brother and I would always insist on one thing: to sit in the center’s Gemini capsule mockup. We’d sit in both seats, pretend to be flying in space, and madly flip switches until other impatient kids kicked us out. And the mockup wasn’t a kitbash of old car parts : looking into actual Gemini capsules at Kennedy, only the presence of a flight stick stopped the spooky sense that’d I’d flipped those same switches before.
Today, NASA announced the final retirement destinations of all four remaining orbiters. None are going to the Seattle Museum of Flight.
But one of Johnson Space Center’s simulators is.
Even with the thorough scrubbing and decontamination, the odds are good that most museums aren’t ever going let visitors inside a real Shuttle. I’m not aware of any actual used space hardware that the public can really touch—always out of reach, behind a velvet rope.
Tactile science was a big, big part of my growing up, even if parts of it left me in tears. There’s still very little that’s completely hands-off at PSC, and the Museum of Flight has plenty of kid-friendly exhibits. Plus, y’know, sitting in cockpits.
With a full-size Shuttle simulator, the sky’s the (ahem) limit for the Museum. Maybe they’ll open it up to walkthroughs, like their ISS module mockup. Or maybe they’ll run actual sim missions in it for visitor groups. Whichever they choose, it means that more people can actually feel what it’d be like, just a little bit. And that little bit, coupled with an active imagination, can take you very far indeed.
The Gemini flights were finished decades before I was even born. But that didn’t stop me, my brother, and untold others from sitting in those hard metal chairs and dreaming.
The Gemini mockup is still at Pacific Science Center. And now, the Museum of Flight will have its own piece of tactile space history.
I’m looking forwards towards seeing the next generation get inspired.
1. : Unfortunately, Feynman’s contributions were minimized in the original report, so it wasn’t until college that I learned of his icewater hijinks.↑
2. Since they never really cleaned their reflective pools, I liked to pretend that the water was sixty feet deep, and Tranzor Z would be launching any minute.↑
3. PSC never failed to alternately fascinate and terrify me. Their Mt. St. Helens exhibit gave me nightmares for half a decade.↑
I still haven’t gotten around to working through SICP, but I’ve wanted to hear Guy Steele talk ever since reading “Growing a Language”. The sheer amount and variety of the other speakers and subjects gave me pause–most software conferences that I knew of were either heavily buzzword-based(JavaOne), expensive(RailsConf), or both(again, JavaOne). Hitting up my boss for support was comically easy after showing him the registration fee and location.
Work covered the flight and registration fee, but it was up to me for
everything else. I ended up staying in the Parkway, two light-rail stops after the Delmar Loop.
This snarled a few after-conference plans, and next time I’d plan to stay directly at the Moonrise.
Right out of the airport, I started running into fellow attendees: I struck up
a conversation with someone on the light-rail, just from seeing him browsing Hacker News on his phone.
Along those lines, the pre-conference mixer party was a wonderful idea. Most of the people I ran into during the next few days were met here. It didn’t hurt that there was plentiful beer to boot.
Among other people at the party, I also ended up running into Django devs from LJWorld. Contrary to popular opinion, there were no knife-fights, and the conversation was mostly about online publishing. It was pleasantly shocking to learn that they were running into the same design issues I’ve had, all relating to page-layout and organization.
Since my employer partially funded the trip, I had to attend some of the panels
relating to their interests. This mostly consisted of the HTML5, Semantic Web, and
jQuery talks. Getting up to speed on all three was actually quite fun, and
I came away with some more project inspiration.
Someone noted that Scott Davis has a promising future in sermonizing if he leaves coding. Even though his talks didn’t cover much new ground for me, he brings a great amount of energy and joy to the table. I could listen to him just covering the K&R spec all day.
There was time for “hey, that sounds cool” talks as well: Elenor McHugh’s GoLightly panel was my personal favorite of the conference. She filled the talk with a nonstop stream of discussion about quirks in Google Go, hardware design, email wars with Rob Pike, and plugging her favorite computer literature. Unfortunately, her slides lose a bit without the presentation to back it up, and I don’t believe this talk was recorded. Still, watching her step through a software CPU design with raw performance metrics took me right back to an infamous CS101 college lecturer.
Talks I missed, and regretted later included Android Squared, Complexity
Theory(later tweets trickling out described it as ‘awesome’), and Automate or Die (sorry cashion!)
The main keynotes for me were of course Guy Steele’s “How to think about Parallel Programming” and Douglas Crockford’s “Heresy and Heretical Open Source”. Prior to these, there were also a few round-table talks that included them.
All of the language panelists were asked for a recommendation. Guy’s was ‘learn three languages: the thought process will do more for you than any single one’. However, he was pressed to give more of a soundbite answer and settled on Clojure, which violently murdered all other trending Twitter topics for the next hour.
During his keynote, Guy spent 20 minutes reverse-engineering an old formatting program from punchcard, stepping through memory tricks and IBM 1130 lore, before demonstrating algebraic operators in his Fortress research language. There’s been a lot of talk on what he said and did not say at his talk, but the core point seems to have shone through: don’t let the workarounds of the past drive the design of the future.
Douglas Crockford’s talk swerved madly between analyzing Google’s “don’t be evil” statement to the history of HTML syntax(stopping briefly at his Tilton macro processor. Of course, he got the most cheers from his “IE Must Die” slides.
Honestly, the most unexpected and wonderful thing was the general atmosphere of the conference. The Moonlight/Pageant/RAC trio is an excellent venue, and both the venue and on the allowed a lot of hallway discussion. The staff further encouraged this with lightning talks at an official party but it almost wasn’t necessary.
I ended up spending almost every night out drinking and conversing with many amazing people on almost every nerd topic under the sun. Even after the conference, I was able to find a lot of conversation as well.
Talking with another attendee who’d been to several other “grassroot conferences” suggested that most other conferences don’t have nearly the sheer amount of energy and passion that Strange Loop does. As their page states, “Innovation happens in the magical nexus “between” established areas”. They simply bring a crowd of talented people together and let them go full-steam-ahead.
And as a tech-business owner noted the first evening, Strange Loop would be cheap at twice the price. Being in a central location of the US and attracting such big-name talent merely sweetened the pot.
I know that I already can’t wait until next year. If I only could attend one conference per year(and who am I kidding, this is the only conference I’ve attended in the past 7 years), Strange Loop would be it.]]>
Treetop is a Ruby library for writing Parsing expression grammars. PEGs are another way of constructing grammars and could be thought of as super-regexes: they don’t allow left-lookup or ambiguity in the parse tree, making them not so useful for natural language but killer for computer languages. Around 40 lines of code and 7 rules took the place of what the original author devoted dedicated tempfiles and regex arrow code to.
That being said, PEGs are conceptually harder to get grips on, and Treetop’s documentation is not entirely clear on some hangups you might find. Most of which you can solve using the excellent mailing list, but I know I wished during the past few days that I could get it summed up for me.
Since code speaks louder than words:
I’m still planning on adapting my Saturn sticks, as an opportunity to improve my hardware-hacking skills by building a Universal PCB adapter. Progress and pics on this to follow as things are developed.
As can be seen in the sidebar, I’ve acquired both an Xbox 360 and a Live account, and have been well pleased by the VO:OT 5.66 port. While using the 360 pad has crippled my quick-step reflexes(for now), it’s forced me to use more long-range characters that I haven’t made a habit of playing. This in turn has exposed some longstanding bad habits in my play style: repeated side-to-forward Watari dashing and constant rushdown attempts. It helps that there’s a lot of good Japanese players hanging around, and willing to school you without trash-talking or ragequitting.
So in spite of my noting of VOOT’s design dependency on sticks, don’t let that stop you from joining in! If you’ve ever played any Virtual On game and come away pleased, or if you’re looking for a grueling-yet-rewarding learning curve, this is an excellent time to start. The VO community is breathing again and it’s always a good day to SELECT YOUR VIRTUAROID and GET READY.]]>
Adding to the problem is most Westerners' cultural identification of the twin-stick control system. Almost every gamer has unconscious memories of Battlezone or Tank. Both of these games used a pair of stick controls, and were extremely limited in their movement options: rotate left or right, move forwards, and move back. Most players logically assume that Virtual On is just as limited, and chalk it up as a mech-game with a novelty tank-layout control system. And this frequently leaves them minus a credit after the AI opponent has done some simple dashes and wiped the floor with them.
The Virtual On series are not really 3D combat games. They are effectively a 3D fighting game based around fixed-length vectors. Trying to play it like a typical FPS will only cause confusion and defeat. Insert Credit's PN.03 review identified a similar theme: your motions are arbitrarily constrained to give purpose to the game. If you could run willy-nilly throughout the level and shoot at your opponent, you've just re-invented Quake(or Shogo, I suppose). Both PN.03 and Virtual On are defined by their control limitations as much as they are restricted by them. And thus trying to remap the underlying control input will not result in happy players.
To see what makes VO so different, let's start at the basic manuevers, and work our way to the top.]]>
There are two camps over this currently: the Rails side(“Whoo! Chocolate in my peanut-butter! Less magic and plugins that don’t explode randomly between versions!”), and the Merb side(“DHH is going to defenestrate us all! They won’t taste great! These books from the tech section are out-of-date six months earlier than usual!”
I’m mostly in the Rails camp(due to work), with a little of the Merb camp. It would be nice to keep them existing as separate frameworks, if only because of the other elephant in the room: the Rails-branding(read: money) and need to provide splashdown points for decamping Java webapp programmers. However, the Merb team seems to think this won’t be an issue, so I’ll reserve judgment for when the behemoth finally appears.
In any case, the fact that DHH and the Rails team are willing to adopt formal APIs, clearly define module boundaries, and leave monkey-patching behind is a welcome sign.]]>
It’s so painful that most people would re-implement it, rather than fall victim to its NoMethodError wails. But that’s not the path for us. When you’re using something like Base Without Table to clean up your email contact forms, you don’t have time to mess around with o_g_f_c_f_s’ hunger for has_many. That’s when you pull out OpenStruct, and cleave the beast in twain.
Standard disclaimers apply. Enterprising developers can probably spot the limitation, although it’s probably not hard to pave over it if you need to.]]>