Newer Older

You know this guy?

grep needle haystack |grep special_needle

or his inverted cousin:

grep needle haystack |grep -v unspecial_needle

These are common staples of searching through text files.

You should stop using them. Now.

You can do much better by writing more consice regular expressions and using ack or one of its relatives (ack-grep, or rak).

The primary virtue of these commands is that they use the Perl regular expression engine. Most programmers with experience in any of the major scripting languages will find this more comfortable than grep’s use of the GNU regex syntax.

I recently encountered a need to search through many files based on a complex regular expression that required lookahead and lookbehind asserions. I have no idea how that would work in GNU regex land where, honestly, I still have a hard time getting simple capture and alternation. After learning look around syntax, I was glad to know that ack could directly implement it.

Given haystack, a text file:

tin needle
silver needle
lead needle
ocelot
monkey

Find the needles (this is where most grep users get to and never leave):

$ ack needle haystack
tin needle
silver needle
lead needle

Look at that one character shorter than grep and just as easy. Now if you want the silver needle, the unsophisticated, greppy way of doing this would be:

$ grep needle haystack|grep silver
silver needle

This sucks. Try:

$ ack '(?=silver).*needle' haystack
silver needle

Or, “all things in the haystack that are needles, but not the lead one”

$ ack '^(?!^lead).*needle.*$' haystack
tin needle
silver needle

I know there’s a lot more to the power of the lookaround assertion, but if I can re-train myself out of this habit I think it’ll be a big win. Granted, for smaller searches the “double-grep” method is probably fine, but any time you’re doing a recursive descent and are looking for true needles in the haystack, ack’s is the superior approach.

The case that I was working on was where I needed to search all my Rails models for all named scopes that did not use the lambda form and I wanted five lines of context around the matches so that I could be understand the behavior.

ack -C5 'scope(?!.*lambda)' app/models

That’s gold worth searching for.

There is one response to “Use ack instead of grep to parse text files”

Comment

  1. Andy Lester said »:

    Those are some great examples. I've created a section on http://betterthangrep.com/documentation/ for articles about ack, and this blog article is the inaugural entry.

    Thanks!

Leave a Reply

Newer Older

The Rasperry Pi

April 6th, 2012

I heard about this at Golden Gate Ruby Conf this past year from Ron Evans (@deadprogram). It’s a low-power, low cost computer that can be used for lightweight media centers or “learn to program” desktops.

I love the idea of these little machines lurking about hte house doing all sorts of automated stuff for us behind our back. While it’s clearly underpowered to do advanced photo editing, most of our requirements for household computing (yet) are fairly low power with frequent gap time.

There are no responses to “The Rasperry Pi”

Comment

Leave a Reply

Newer Older

Introduction

The Vim editor has a built-in function for preserving your editor state — which files you had open, which tabs they were in, etc. — called “Sessions.” In my experience, few Vim users, even experienced / advanced users, take advantage of this feature and that is a shame. Sessions allow you to get you back into the working context of a given problem immediately . If you’ve avoided a needed reboot for software update or wished you could save the context of your editing as related to a specific problem, you should take the time to learn a little bit about sessions.

Curating an Editor State

As developers, we generally start with a single file (“QA says there’s a bug in this view”) and then realize it has a relationship with another file (“Hm, but I need this as the data source / dependency / etc.”). Over time we come to recognize that there are several files whose relationship and interaction creates a “feature” we want to work on. I call this collection of files that represents the means to the solution the “curated list.” We groom our curated list into a user interface that helps us address the problem:

#

The curated list for this blog post

Finding yourself needing to reboot, where you would wipe away this solution context like some Tibetan sand mandala might put you into a panic routine:

“Which files do I have open? Which directories am I in, which server processes are running?”

The Oatmeal comic hits home:

#

To save your state all you need to do is run :mksession. By default this will create a file called Session.vim in your working directory. Its contents are a full list of Vimscript commands that will be issued when you launch Vim with a reference to that file with vim -S session_file_name at a later date. Reading this file is also a great way to learn some powerful Vimscript commands.

#

The commands it requires to re-build your Vim session as it is right now

Standard Vim file-write semantics still apply To overwrite the old session it’s :mksession! and :mksession session-from-after-lunch.vim It is this latter usage which allows you to create ‘topic based sessions.’

Topic-Based Vim Sessions

The average Vim session is very small (kilobytes) and they can be made cheaply (less than a second) therefore, as I work on problems I’ve taken to creating multiple Vim sessions so that I can address a feature and come back to it painlessly.

Presently I’m experimenting on creating sessions based on bug-tracker stories. The session files (ending in .vim) are included in my global .gitignore file. Given that a certain feature may be revisited at any point, it seems a good idea to keep each in its own session so that I can pick it back up again for subsequent bugs / improvements. AND should a refactor add a new file or drop one, all that’s required is a simple mkession! to write a new session.

Gotchas

By default mksession saves blank, buffers, curdir, folds, help, options, tabpages, winsize. Depending on how heavily customized your Vim configuration is, you may find these session commands clashing with your default options. For a heavily customized Vim installation (like Janus Vim) this can create some erratic results. To prevent any clashes, I have modified the default sessionoptions configuration in my .vimrc to be the following:

” Sessions in Janus are overwrought set sessionoptions=blank,buffers,curdir,folds,help,tabpages,winsize

Reference

As sessionoptions seems to suggest, there are a wide variety of things that can be preserved. :help sessionoptions and :help mksession in the on-line Vim help guide should help you tweak your configuration to perfection.

I can even seen an argument for adding a :mksession! as an autocommand, so that your session is written on every file-write or buffer-change event. I don’t (yet) see a need for that, but it’s great to know that Vim has that capability.

Conclusion

With OSX Lion now preserving open application state, browswers now allowing you to save tab state, and Vim now allowing you to preserve buffer state, you can live in less fear of a power outage, an accidental reboot, or a gray screen of death.

There are no responses to “Use Vim’s Sessions to Defray Context-Switching Costs”

Comment

Leave a Reply

Newer Older

Trip to Yosemite

March 24th, 2012

Last weeekend Lauren and a few other friends went up to Yosemite to do some late winter camping. In our three days there we saw rain, big fluffy snowflakes, and spent a bit of time hiding out in our tent-cabin. It was a great, albeit chilly and, at times, wet experience. But for vistas like this, it’s definitely worth going.

#

Full photo collection

Read the rest of this entry »

There is one response to “Trip to Yosemite”

Comment

  1. Ryan said »:

    One question after looking at the pictures: How were the Mines of Moria?

Leave a Reply

Newer Older

Thoughts about “Dune”

March 14th, 2012

Ryan wrote a thoughful post about catching a 35mm print of Lynch’s “Dune”) at the Alamo Drafthouse. He notes that despite arriving “DOA” in 1984, it was, today, “a bit of a cult movie.” I thought I would take a few moments to write down why I am a member of the “Dune” cult following. In short, the reason I love “Dune” is because it is an artistically rich disaster.

The Critical Response

For a standard opinion on the movie, I refer to Roger Ebert’s review of January 1, 1984:

This movie is a real mess, an incomprehensible, ugly, unstructured, pointless excursion into the murkier realms of one of the most confusing screenplays of all time. Even the color is no good; …David Lean solved that problem in LAWRENCE OF ARABIA, where he made the desert look beautiful and mysterious, not shabby and drab.

The Financial Response

“Dune” cost its production company, de Laurentiis Productions, approximately $40M to make. It grossed ~$30M. A $10M loss before DVD, resale, and licensing agreements was a staggering loss.

So I can make neither the argument that “Dune” was misunderstood by audiences: they voted no with their dollars. Nor can I say this was an artist’s movie, a beautiful avant garde that only the critics grasped. Yet nevertheless I admire and respect this movie. Why?

Why I love “Dune” anyway

Filming the Dune Universe is a Grand Dream

The Dune universe is so expansive and thoroughly-concieved that it is like the vast desert of Arrakis itself. When your imagination finally collapses, dehydrated, cooked and lost in the middle of a sand sea, you realize just how engulfing Frank Herbert’s vision was, and that you’re nowhere close to any respite from its expansivenes.

Read the rest of this entry »

There are no responses to “Thoughts about “Dune””

Comment

  1. Your comment is awaiting moderation Yarbrough said »:

    A huge reason why the theater version was confusing is because They took 3 1/2 of footage and edited it down to something like 144 minutes. An extended version is out on DVD I believe. I am a Dune cult fan also, what stays with me, as you have mentioned, the sets are beautiful and wild, the casting is excellent, the central actor Kyle is perfectly cast, cool and engaging, Frank Herbert's Universe, even though we see just a slice of it here, is rare and richly conceived, all these things make this a better movie than a bad one, even though people who haven't read the book are left largely adrift, if you look at it with an archeologist's eye, who digs up the odds and ends of pottery, spear heads and wheat seed, then tries to imagine the people's it came from, the film works very well.

Leave a Reply

Newer Older

As a person who took Trigonometry as an adult (at 29!), I was amazed by how much more fascinating the relationship between π and radii became. I even spent some time building squares of golden sections with a compass, just like the ancients used to. In this post below, Vi Hart makes a compelling argument that we should move on from π and move to τ. It’s a fascinating concept, but what I like most about it is that it still preserves some of the aesthetic mysteries that fundamental trigonometry provides.

There are no responses to “Fascinating: Why we should let go of π in favor of τ”

Comment

Leave a Reply

Newer Older

I love usig the mutt mail reader to turn through my mail. I recently set it up to make use of my MacVim installation by adding the following configuration to the .muttrc.

set editor="mvim --remote-tab-wait-silent "

This is pretty neat. When I go to reply or compose, I’m thrown into a new tab in MacVim and I can compose / reply there. After hitting ZZ or :wq!, mutt properly handled the signal, but didn’t change OSX’s focus back to the terminal window where Mutt was running. By changing the editor to the following configuration:

set editor="osascript $HOME/bin/mutt_edit.sh"

I was able to tell Mutt to send my temp file (for the edit) to osascript, a utility that runs Applscript. In mutt_edit.sh I provided a bit of a wrapper around the mvim command such that it told OSX to re-activate my terminal session after the editing activity finished. Here’s the code:

on run argv
  tell application "Finder"
    do shell script "mvim --remote-tab-wait-silent " & item 1 of argv
  end tell
  tell application "iTerm (1.0.0.20111020)"
    activate
  end tell
end run

And that’s all it took.

There are no responses to “Using mutt with MacVim as external editor”

Comment

Leave a Reply

Newer Older

One of the organizations that I’m most proud of helping out is Railsbridge. It aims to increase the diversity within open source software development, particularly women. Twice now I have worked with wonderful and amazing people in these sessions.

#
Typical scene of getting laptops set up (source)

In these activities I have encountered a powerful enemy to successful teaching that we, as organizers and teachers, should remain vigilant against: negative confirmation bias.

Negative confirmation bias is when a student walks into a situation expecting that s/he is not going to succeed and then proceeds to look for data to back up that negative view. Why students have this negative view is a subject for another post, but it is my belief that it is at the heart of why there is such poor diversity in high tech.* At development workshops / boot camps, students encounter a dangerous confirmant of their negative bias in one the earliest steps: “Bootstrap the setup using git.”

Facilitators must take an active role in reminding students that the installation / bootstrap step bears no inherent reflection upon their ability to enjoy, learn from, and perform well in the class.

Read the rest of this entry »

There are no responses to “Technical Outreach Workshops: Needlessly Frightening at the Beginning”

Comment

Leave a Reply

Newer Older

As I mentioned elsewhere, my friend Daniel Miessler said that he would be ready to give up Textmate for Vim but were it for the level of blogging support. I have, hopefully, made it easier to do so. In fact, I’m writing this blog post and using my fork of Vimblog to manage it.

Here’s how this post was made:

  1. :Blog np created a new post
  2. Moved down to the Categs line and then: :Blog cl
  3. /Techno to match the right line. Hit enter.
  4. Vimblog just copied the category name to the yank clipboard for me and then…
  5. p to paste it in
  6. G to the end of the file
  7. o to start typing
  8. Typed Daniel Miessler
  9. v2b\gifl did a Google I’m feeling Lucky to his site and wrapped it in a markdown link
  10. More editing
  11. :Blog draft (because it’s still alpha-grade code) so I could check it out in WordPress
  12. Took a screen-shot of vim to put in the post
  13. :Blog um ~/Desk/vimb
  14. Vimblog pasted the url link to the image that makes this work: Screenshot of vimblog
  15. Published this post with :Blog publish
  16. Damn it feels good to be a gangsta

There are no responses to “Blogging in Janus + MacVim + Vimblog”

Comment

Leave a Reply

Newer Older

Blogging with Vim

March 8th, 2012

I have been wanting to get the Vim Editor working as a tool for blogging. I’d discussed this a time or two with my friend Daniel Miessler, and he brought up a critical thing that was missing for him in migrating away from Textmate: the ability to do an “I’m feeling lucky” hotlink onto a word as one is composing.

I had to admit, this was a pretty compelling feature provided by Textmate’s “Hyperlink Helper” bundle. Its lack definitely hindered my drive to blog in vim.

To that end, I have created my first Vim plugin and port this sexy capability to Vim.

The port is called GIFL which is not some sort of obscure term for attractive septugenarians, but rather is Google I’m Feeling Lucky.

insanity wolf recommends vimscript

With this installed you can do things like:

Imagine you have the following text, with your cursor at ‘*’:

*lindsay lohan

Now enter:

\gifl2e

You now have:

[lindsay lohan](http://www.myspace.com/lindsaylohan*)

That is, the Markdown code for a URL. That’s pretty handy. This loads up in the global namespace, so you can use it anywhere and everywhere. I’ve found it suprpisingly handy in places other than a blogging context. It’s still very, very, very alpha, but it gets the job done.

ship-it squirrel

I must say that coding in vimscript is a bit of a challenge, but I have been greatly helped by Steve Losh’s Learn Vimscript the Hard Way.

By the way, thanks to Pedro MG’s vimblog project, I was able to write this post in Vim, with GIFL doing nearly all the linking.

I think that both GIFL and Vimblog need to be polished a bit before I can say that, together, they make it as easy as it was in Textmate to be a blogger, but it’s definitely closer. Thanks to Macvim + Janus as platform, this is close.

There are no responses to “Blogging with Vim”

Comment

Leave a Reply

Ruby

These days I do a lot of programming in Ruby. I have been fascinated by this language for a few years now. Here are posts relating to it. Here the most recent posts on this topic:

    Top ten posts shown. For more, visit the archives.

    Technology and Computers

    These are topics on technology in general.

      Top ten posts shown. For more, visit the archives.

      Latin

      Beginning in 2008, I decdided to learn Latin. It had always been an interest of mine. Perhaps the most interesting take on it as that I fused my previous knowledge of programming and tool building to assist in this endeavor. Read more for my unusual take on mater linguarum.

        Top ten posts shown. For more, visit the archives.

        Search for a Topic

        Archives by Month:

        Archives by Subject:

        Personal Statement

        I love learning and experimentation. I draw on a background that includes philosophy, business, classics, code, and eleven years of industry experience. I seek to apply this background in a startup environment where I can work with the newest technologies (Rails, NodeJS).

        Work Experience

        Carbon Five: Ruby on Rails / Javascript Developer
        2011-10-2012-02
        • Re-designed client's internal sales tool using Rails and Backbone.js
        • Launched a minimal viable product for an entrant into the medical information / consultation niche using Rails
        • Streamlined the interface for a report generation solution so that PDF output (using CSS3) matched a new screen-based look and feel
        • Provided upgrades to the user interface for the second iteration of a job search site
        Cisco Systems : Senior I.T. Engineer: Integrated Workforce Experience
        2009-07–2011-10
        • Created standard development kit for Java developers using a Java Container / JSR-168 / JSR-286 (Portlet) stack. Standardized deployment and installation of the stack to three OS platforms using Ant. Reduced developer time to first code contribution from 4–8 business days to 30 minutes thanks to automation, documentation, and video. Estimated cost savings was 250,000USD
        • Evangelized standardized SDK (see above) and have on-boarded over 100 developers to date. Provided estimated savings nearing 750,000USD
        • Ran bi-monthly technology session and moderated the developer peer support forum
        • Maintained CI environment (Hudson), artifact repository (Maven), and SCM branches (Subversion)
        • Was loaned to Cisco Quad product business unit to migrate builds from a single, monolithic, Ant-run build to Maven while having no impact on development timelines
        • Delivered the first release of the Cisco Quad-powered social collaboration solution (Integrated Workforce Experience) to 90,000+ person organization. This is the first and largest reference implementation of the Cisco Quad product as a platform. Wrote automation to permit operations track to deploy, rollback and re-install at scale (68 VMs). Wrote hot-fix tooling to allow for deployment of patches, updates, and configuration changes as part of a stability tiger team
        • Completed Scrum Master training and lead the largest scrum track within the program. Delivered two major releases of the Integrated Workforce Experience powered by Cisco Quad solution. Led team in delivery of 4 new applications, 2 major rewrites, 500+ feature requests, user stories, and bug fixes
        • Continued SDK standardization and tooling activities across multiple platforms with a focus on accelerating developer time to market. Further details under NDA
        Cisco Systems : Senior I.T. Engineer: Mail and Messaging Platform
        2005-04–2009-07
        • Authored 5–point, 2–year legacy systems migration strategy to move all backbone mail services to a standardized, turnkey environment. Implementation completed 2008
        • Led technical team responsible forum and blogging framework deployment
        • Created business requirements document and RESTful API specification for new generic list-abstraction repository and interface: allows disparate downstream systems (including mail) to access and utilize the same list structures for mail, calendar, voice mail, meeting invite, etc. Implemented 2009-05
        • Created standard specification for all applications environments with respect to standard, accepted mail routing behavior: policy document, Sendmail.mc for Solaris, Linux
        • Created registry process and web tool for application host systems that use e-mail as transport layer. This should help identify / remediate non-compliant systems that are using our data through unsupported interfaces so that we can help them come into compliance
        • Wrote script to deploy core mailing list host data repository, web interface, mail interface, and build scripts from M4 macro definitions + Bash + Perl. This allows an entire environment to be built and deployed into a segregated space by configuring a single macro specification file
        • Collaborated with University of Texas Information, Risk, and Operations Management Management Information Systems steering committee to specify next generation of skill-set foci
        • Through efforts in the previous 6 years, reduced head-count to 1 full time employee and a vendor team. Realized net savings in excess of 320,000USD
        Cisco Systems : Systems Administrator / I.T. Developer: I.T. Engineer
        2001-04–2005-04
        • Member of 5-person team changed with backbone mail systems upon which 1bn/month mail flow. Build anti-spam, anti-malware solution
        • Managed fleet of 10 HP servers, a dozen Mirapoint appliances
        • Designed Out of Office scanner / handler to prevent MS Exchange from feeding spam engines / spamming external mailing lists / causing infinite mail storm loops due to its “everyone gets a bounce” design
        • Established messaging team standard Perl module set / CVS repository / Subversion repository
        • Built common framework for Sendmail-based processing, filtration, and re-routing. Built 3 special-use appliances using single polymorphic code base (Google Code CMailguard Project)
        • Built software solutions for turnkey rebuild of core infrastructure components to increase resiliency in event of attrition or disaster. Build entire deploy suite in M4 which allowed customization to disaster environment by changing fewer than 10 values
        • Migrated primary web interface for list data repository from non–validating HTML 4 Frameset specification to XHTML–compliant, CSS–based, Template::Toolkit design. User interface performed six times faster
        Cisco Systems : I.T. Analyst: Engineering Support Analyst
        2000-06–2001-04
        • Tracked top 5 issues quarter to quarter. After 3 quarters of implementation, support calls dropped, on average, 100 cases per quarter
        • Moved client satisfaction rating from 74 to 95 percent, the highest seen to that date
        • Developed lead + application owner support relationship still in use today. After performing liaison role, messaging team requested my transition to their team
        • Designed web-based Web-vacation mail tool. Tool reduced support calls from 500 per quarter to 25. Net savings of 30,000 USD estimated savings per annum realized

        Code Samples

        For latest activity, consult: http://github.com/sgharms
        Halbert

        Category:Developer Utility / Productivity

        Homepage: https://github.com/sgharms/Halbert

        For students learning SASS / CoffeeScript / Javascript there is considerable frustration around the bootstrapping of a development environment. To allow developers to 'get-up-and-go', I have created Halbert. Simply git clone, run a rake task, and be productive.

        LatinVerb

        Category: Linguists, Classicists

        Homepage: https://github.com/sgharms/LatinVerb

        A library that fully conjugates Classical Latin verbs in each of their 133 forms × 5 standard paradigms.

        VerbaLatina

        Category: Linguistics Language: Ruby Audience: Linguists and Latin Students

        Homepage: https://github.com/sgharms/verbalatina/tree/master

        A Rails application that wraps a library set that programmatically conjugates regular Latin Verbs from 4 principal parts into all verbal parts, moods, persons, etc.

        Linguistics Package

        Category: Linguistics Language: Ruby Audience: Linguists and Latin Students

        Homepage: http://github.com/bruce/linguistics/tree/master

        Linguistics is a framework for building linguistic utilities for Ruby objects in any language. It includes a generic language-independent front end, a module for mapping language codes into language names, and a module which contains various English-language utilities.

        CMailguard

        Category: Sysadmin Language: Perl Audience: Mail systems administrators

        Homepage: http://code.google.com/p/cmailguard/

        For mail architectures that are highly distributed, consolidating mails and running eligibility-to-send to yertain addresses is difficult and problematic. Mailguard is designed such that addresses can be routed to a central server. Upon reaching the server, the data is sent via STDOUT into the mailguard application. The application then classifies the sender and based on configuration parameters decides whether the mail should be silently discarded, forwarded on, or put into a holding pen until the message can be validated by a moderator.

        M4Resume

        Category: Productivity Language: M4 Audience: Geeky job-seekers

        Homepage: https://github.com/sgharms/m4resume/tree

        Tool for writing résumés in M4, and then having it flexibly build them into a variety of formats: LATEX, XHTML, and XHTML+RDFa.

        latintools

        Category: Linguistics Language: Ruby Audience: Classicists

        Homepage: https://github.com/sgharms/latintools/tree/master

        Tools for entering LATEX; useful for Latin writing quickly through Textmate; also has code for converting LATEX-glyphs at CLI to HTML or UTF-8 codes.

        Education

        University of Texas at Austin : Management Information Systems
        1995-2000 Bachelor of Business Administration

        A multi-disciplinary approach that blends a base in business administration with a focus in building enterprise IT systems. Attention is paid to programming basics, project management, and consulting. The program culminates with a real-world project delivered to an Austin community organization.

        University of Texas at Austin : Philosophy
        1995-2000 Bachelor of Arts

        A classic liberal arts program in philosophy with focus on pre-Socratic Greek philosophy, German Idealism (Hegel), and Philosophy of science.

        Rijksuniversiteit te Leiden, Leiden, The Netherlands : Dutch
        1997-1998

        During a one-year study abroad term I studied advanced classes in Dutch speaking, writing, grammar, and composition. I also took 3 classes in the faculty of Philosophy: Rise of Scientific Europe, Seminar on Scientific Revolutions, and Rationality of Emotions.

        Courses

        Beginning Cocoa Bootcamp : 2005-02
        http://bignerdranch.com/classes/beginning_cocoa.shtml

        Intensive 5-day training course covering the basics of Cocoa / Objective-C programming on Mac OSX.

        Ruby on Rails Bootcamp : 2006-02
        http://bignerdranch.com/classes/beginning_ruby_on_rails.shtml

        Intensive 5-day training course covering the basics of Ruby on Rails development.

        Red Hat Certified Engineer Bootcamp : 2003-05
        http://bignerdranch.com/classes/beginning_ruby_on_rails.shtml

        Intensive 5-day training course covering Linux administration

        Speaking Engagements

        Lone Star Ruby Conf V:
        “Modeling Thought: Practical Metaprogramming” (August 12, 2011)

        From the Abstract: I have completed a second major release of a library that fully conjugates Classical Latin verbs in each of their 133 forms × 5 standard paradigms. Owing to the irregularity of human communication, modeling the provision of unambiguous answers (return values) to ambiguously asked things (flexible / incomplete method calls) might have required hundreds, if not thousands, of method definitions or static values entered in a database. But what if heuristics could be given to a Ruby class such that it “thought” as language learners are taught to think? What if it could be taught to be flexible in respecting the ambiguous calls given and to still give precise, correct answers back - as human language learners are capable of doing? By adopting this design paradigm, code could become leaner and more reflective of human cognitive process. Thankfully for Rubyists, this is not a dream, this is reality. Our programs can operate more intelligently, more heuristically, and more insightfully. We can save ourselves days of development time by integrating the next tier of metaprogramming patterns I seek to demonstrate. This is perhaps what makes Ruby so unique, so mysterious, so enticing and so special.

        RailsBridge: Rails Outreach for Women (September 10, 2011)
        Session: Ruby for Novices A session designed to increase the diversity of the Ruby community by

        introducing the Ruby community, Rails, and the ecosystem of supporting technologies (RVM, git, et al.) in a friendly, learning-oriented environment.

        Rubyconf XI: “Modeling Thought: Practical Metaprogramming” New Orleans
        (September 30, 2011)

        “Modeling Thought” as per above, delivered to international audience

        RailsBridge: Rails Outreach for Women (February 25, 2012)
        Session: CSS and Javascript Introduction

        Introducing the Ruby community, Rails, and the ecosystem of supporting technologies (RVM, git, et al.) in a friendly, learning-oriented environment.

        Skills

        I speak Dutch near-fluently, have a great grasp of classical Latin (I will recite the opening to the Æneid, in meter, if asked), and can get directions to the Metro in French.

        Technical Skills Statement

        I am extremely proficient with the current Ruby and Rails “ecosystem”: gem, bundler, Rails (3.0), Ruby, Ruby’s metaprogrammatic model, rvm, MiniTest, Test::Unit, and, to a lesser degree, RSpec and Cucumber. I have solid grounding in modern web front-end creation and have done an extensive study of semantic web technologies (RDF, RDFa) and am familiar with entwining (X)HTML + CSS + RDF. I have moderate familiarity with font-end Javascript.

        I have a background in systems administration (RHCE, Linux, Solaris). This work duty necessitated the mastery of Perl and high proficiency with bash scripting. Further, since my systems are mail systems I am yroficient in the M4 macro language and sendmail.cf manufacture. I have also done build engineering which permitted a cursory exploration of the Java stack and build tooling (maven, ant) in a J2EE container context (Tomcat).

        I am familiar with the git and svn SCM systems. I am a vim user, but also used emacs for a while and even wrote some eLisp functions. I have had light levels of exposure to MySQL, PHP, and Postgres. My next learning target is the Javascript renaissance: NodeJS, backbone.js, knockout.js and noSQL (MongoDB and Redis).