• Skip to primary navigation
  • Skip to main content

This is What You Get When You Mess With Us

  • Series
    • Cinema on Wednesday
    • Friday Fun Family Movie Night
    • Made a {} of It
    • Twisted Balloons
  • About
  • Contact Us

Made a Hash of It

This is Good Pi, Part 1

August 1, 2019 by Rob

Good Pie!

The Raspberry Pi 4 came to market just a few weeks ago. For $35 to $55, plus some peripherals, you can run a desktop computer nearly as powerful. If you’re in the market and have the opportunity, I recommend you pick up the Raspberry Pi 4. For this project I am going to use a Raspberry Pi 3 B+. It’s not hearty enough for serving up steady HD video, but it should be fine for some of the projects that I have been working on at Flatiron.

Raspberry Pi 3 B+

So, wait, what is a Raspberry Pi? If you’re not yet aware, the Pi is a palm-sized computer originally built for young student learners. It is low cost and low power. It comes with no software preinstalled. A flavor of the Debian Linux operating system, called Raspbian, can be installed on an inexpensive microSD card and plugged into the available slot on the Pi board. Some versions come with USB and HDMI ports. Recent Pi models (Including 3 B+, 4, and Zero) come equipped with Wireless and Bluetooth. It is built with the novice in mind. The full distro of Raspbian comes with packaged with the software you might want to have in order to use the Pi like any other home computer.

Raspberry Pi Zero W

What can you do with a Raspberry Pi? A lot. I’ve talked about using a Raspberry Pi to build (but not yet completely documented) my TNYGLXY project. A host for a TinyMux server. I hope to build a audio server and home automation interface, replacing commercial hardware by companies that don’t have a stellar relationship with privacy. And, of course, a development server for Rails and React applications.1

Let’s get going on our low-power server build.

Hardware

  • Raspberry Pi 3 B+
  • 5v Power Source with Micro USB connection
  • A case (optional, but recommended)
  • 16GB MicroSD card (at least)
  • MicroSD card reader (if not built into your computer
  • A Computer (Windows/Mac/Linux)
  • A Wired Network Connection

Software

  • Copy of a Raspbian Image (As of this writing, the Buster release; I’m using Buster Lite)
  • Some way to write the Raspbian Image File. I’m using balenaEtcher, which is available for all Operating Systems.
  • Some space on your local hard drive to keep the Raspbian Image
  • A zip utility
  • An SSH utility, like PuTTY

There is a version of Raspbian with a Window or Mac-like User Interface. For this project, by using the Lite image, I am omitting the UI and much of the standard packages (or software) that come with the larger installations. This gives me more control over what’s on my device, with the goal of navigating over potential conflicts. This system will also run ‘headless’ (that is, without a monitor, keyboard, or mouse). I can SSH directly into my Pi from any one of the computers that I keep around me at all times (including my phone).

Write the ISO to the SD Card

The first step is to get ISO written to the SD card. Place a formatted SD Card (FAT32 for cards smaller than 32GB; exFAT for anything larger, per the documentation. I’m using 16GB which is more than enough) in the card reader attached to your computer. When the drive is ready, you can start writing the ISO Image of Raspbian to the card.

balenaEtcher is dead simple to use. Simply click through the prompts until you get to the finished product. Follow along in the gallery below.

Select an Disk Image

Select an Disk Image
Image 1 of 8

Add SSH file to boot Partition

boot(H:) and USB Drive (I:) are two partitions on the SD Card. I: contains the Raspbian OS; boot is for configuration

Once balenaEtcher is done her magic, you will find that your SD card now has two partitions.

no extension on the ssh file

In the “boot” partition, add an empty file named ‘ssh’. This will let the Pi know to configure itself to accept an SSH connection from an external sources, ie: you.

Connect it Up

Carefully, remove the SD card from your computer, and insert it into the SD card slot on your Pi. Connect your network cable to the Ethernet port2 and then attach the power cable. Do this the other way around and you might not get assigned an IP address and nothing else will work.

There is a red LED on the front of the Pi. You can tell by the number and frequency of flashes how the boot is progressing. Once it’s solid red, you’re good to go. Any other pattern, there are problems. Consult the Raspberry Pi documentation as that’s not in scope for this tutorial.

Here is where things could get sticky. You need to find the IP Address for the Pi. The way that’s easiest for me in this headless scenario is to see what my Internet Router has assigned to the little computer.

Note the IP Address for your Pi

To do that, I logged in to my router and looked for connected devices. The one labelled “raspberrypi” is, obviously, the one I want.

If you don’t have access to your router (say, you were accessing your device on a public or work network), it would be best to connect a keyboard and monitor to the Pi and complete the steps *after* the bit with PuTTY.

Configure PuTTY

Putty Terminal. Create a “Stored Session” to login to the Pi in the future

PuTTY is an Terminal SSH/Telnet utility that I’ve used for years. I’m sure you have, too, if you’ve had to remove connect to a network, especially before things like VPN utilities became so widely used. This is less user friendly than those, but certainly more powerful.

When you open PuTTY (or any other SSH utility) you will need to create a session. Enter the IP address of your Pi in the Host Name field.3 Select a connection type of ‘SSH.’ The port should set to ’22.’ If it does not, you can fix it.

I like to save my session so I can quickly access the Pi later. Give it a name and click ‘Save.’

For now, you can leave all other settings as they are.

Login

In PuTTY, click the button ‘Open.’ The configuration screen will close and a terminal window will open.

Click ‘Yes’ to store the ssh key

First, you may have to confirm the ssh key fingerprint. Clicking ‘Yes’ will add the key to PuTTY’s cache and save it for future connections. Click ‘Yes.’

The login is ‘pi’ and the default password is ‘raspberry.’ You don’t have to but probably should change the password.

The default login for the Raspbian is ‘pi’ with a password of ‘raspberry.’ When you log in, you should be see the prompt:

pi@raspberrypi:~ $

At that prompt, type ‘passwd’ to change your, you know, password. You will have to confirm the existing password, choose a new one, and then confirm the new one.

Once that’s done and dusted, it’s time to update and upgrade your Pi.

Update and Upgrade

Why upgrade? When you downloaded your copy of the Raspbian Image, the date/time stamp on the release was likely in the past. Linux-based systems are updated constantly. So, between the time the release was published and now, there were likely updates made to packages by the great opensource community.

Type in the following:

sudo apt-get update

This will download to your Pi a catalogue of all packages with changes. This will help the next process we run determine what packages need updating.

Type:

sudo apt-get upgrade

This will likely take a while, so go get a Diet Mt. Dew.4. What this command does is go through that list of updates, pulls down, and upgrades the packages currently on your pie. When it’s done you can be sure you have the latest and greatest available to you.

To run these two commands on a regular basis is good practice. Unless you have very specific requirements for your machine that requires a targeted or customized updates, this is the way forward.

What’s Next

Now that the Raspberry Pi is powered up and running Raspbian, you can start to load up on the other pieces of software you may need for a purpose built staging server. For the stack I work with, in the next blog post, I will install the following, along with any dependencies:

  • Git
  • Ruby
  • Ruby on Rails
  • React.js
  • Bootstrap/React Bootstrap for UI

Until next time…

  1. Currently Raspberry Pi 3 B+ is $24 at your favorite computer super center, Microcenter. The Raspberry Pi Zero W is $5. Not as much power, and no wired Ethernet access, but a good place to start with a low barrier to entry. Amazon does *not* have the best prices. If you’re looking to buy in bulk, for whatever reason, try going right to the US Distributors. As for peripherals, including power and cases, bad is cheap; best is not that much more expensive. Better to buy the official branded or nearly anything they carry at Microcenter. Here, again, Amazon power supplies for the Pi have failed me. ↩
  2. New Raspberry Pis come with Wireless built in. Once your device is up and running you can turn on the wireless, if you choose. ↩
  3. In the future, you may want to point a domain name or subdomain at the dynamic IP address assigned by your service provider to your home internet connection, and then route that traffic to the local IP of your Pi. I will write a future blog on this topic. ↩
  4. Official Drink of Extreme Developers and Night Nurses. ↩

Filed Under: Made a Hash of It Tagged With: ethernet, guide, hardware, installation, pi, pi 3 b+, pi zero, rails, raspberry pi, react, ruby, w, wireless

Code is *NOT* Poetry

July 18, 2019 by Rob

Below is Walt Whitman’s When I Heard the Learn’d Astronomer 

When I heard the learn’d astronomer, 
When the proofs, the figures, were ranged in columns before me, 
When I was shown the charts and diagrams, to add, divide, and measure them, 
When I sitting heard the astronomer where he lectured with much applause in the lecture-room, 
How soon unaccountable I became tired and sick, 
Till rising and gliding out I wander’d off by myself, 
In the mystical moist night-air, and from time to time, 
Look’d up in perfect silence at the stars.

The same poem read by one of the humans on Librivox

Read by the Character Gale on Breaking Bad

Here is the same poem displayed using javascript, via codepen:

See the Pen JgjdjP by bluthgeld (@bluthgeld) on CodePen.

Can you see the differences among these items?

***

Earlier this week I shared a link to a Twitter thread that had been making it round my timeline:

This is insane…

Until I hard read this thread I had never clocked the concept of a “10X developer.”

On, you haven’t either? That’s probably best for the best; it’ll save you from the anxiety of believing that it’s something you should be.

A 10X engineer or developer is said to be a man – always a man – who can do 10 times the work of the average developer in the same number of hours. Whether this man/machine hybrid actually exists in the meatverse is subject to much debate in the darkest depths of Reddit and the Twitter Machine. Still, that controversy hasn’t stopped developers and coders from putting “10X” in their bios/linked in pages, and hiring managers and Vulture capitalists like the dude above from hunting that particular Unicorn.

I’ve worked with these guys before. Not just Developers/Engineers, but also sysadmin, guys who couldn’t be bothered to put on clean jorts or show up for a mid-day meeting. He’s got more important things to do, like manning the ramparts against midnight blackhats or playing WoW.

To a Carpenter, Every Problem is a Nail

Probably Your Dad…

They are insanely good at ticking off the bullet points on their job description, there is no doubt about that. However, they fail at the soft stuff: working with others, listening, considering thoughts/feelings/opinions of anyone “nontechnical.” A developer with the attributes listed in the Twitter thread may be able to make magic, but only the magic that they want to create. You won’t have a conversation with them over the watercooler. And they will not see any solution to a problem that goes beyond their own experience with the world. To a Carpenter, Every Problem is a Nail.

Like white, male developers building facial recognition technology that mistakes black women for men, narrow thinking, tunnel vision, and limited experience can bake limitations into our code.

And that would be fine if HR and hiring managers were just looking for these magical beings, these 10X Unicorns. But executives, looking to maximize their hiring dollars, absolutely look for these attributes in the Quarter Horses1 who do the actual work of making a company full of actual human beings produce software to be used by other human beings.

If you ask about work-life balance during an interview and the hiring manager gives an ironic smile, you can believe there is none. They want 10X in 100% of their people.

***

The value of a Liberal Arts education has taken a beating, since at least the first half of the Clinton administration. I have a fine arts degree. When I left high school and took the Amtrak up to Boston to learn how to tell stories, many of my peers went into engineering, hard sciences, medicine, computer science. A lot of people thought I was insane.

Here’s a typical dictum, from Sun Microsystems cofounder Vinod Khosla: “Little of the material taught in Liberal Arts programs today is relevant to the future.”

As said by someone who’s never read a book…

I can remember, distinctly, listening to Tom Friedman on some morning talk show, pontificating about how the world, as flat as it was, would need American’s to be the managers of the information society. An American (man), he implied, would be best served with a background in a very specific science or a very specific technical skill (like plumbing). Art, music, books, would still exist, of course, but for downtime, weekends, vacation. In the 90s, we were all headed for 4 day workweeks.

To the leaders of the free world, philosophy, history, art were hobbies to be pursued after we provided management to the workers of the world.

Still, it looks like the recognized value of a solid, well rounded liberal arts education is resurgent:

If we want to prepare students to solve large-scale human problems, Hartley argues, we must push them to widen, not narrow, their education and interests. He ticks off a long list of successful tech leaders who hold degrees in the humanities. To mention just a few CEOs: Stewart Butterfield, Slack, philosophy; Jack Ma, Alibaba, English; Susan Wojcicki, YouTube, history and literature; Brian Chesky, Airbnb, fine arts. Of course, we need technical experts, Hartley says, but we also need people who grasp the whys and hows of human behavior.

What matters now is not the skills you have but how you think. Can you ask the right questions? Do you know what problem you’re trying to solve in the first place? Hartley argues for a true “liberal arts” education—one that includes both hard sciences and “softer” subjects. A well-rounded learning experience, he says, opens people up to new opportunities and helps them develop products that respond to real human needs.

***

This blog is a self hosted WordPress blog. The WordPress motto is “Code is Poetry.” Until my time at Flatiron, I hadn’t thought someone would believe that.

Poetry, like a photograph or a painting or a novel, is an object crafted by a human being. Not unlike Ruby or Javascript. It is designed to transmit information. Not just the facts on the page, but an emotion or feeling from the writer to the reader. Yes, art does fail to achieve this more often than not, though even objectively “bad” poetry will mean something, to someone. Rearrange the words on the page, change the structure or the syntax of a sentence and even that can mean something. See the work of e.e. cummings.

Code, on the other hand, fails completely when syntax and structure is not met exactly. Remove this line from the codepen above and see what happens:

const main = document.querySelector('main')

Code is a set of specific instructions from a human to a compiler on a computer. It may be satisfying to write it well, to achieve the same programming objective with fewer lines than the time before. To be efficient. Code itself transmits no meaning or feeling to a reader; what it produces may, but the code itself does not.

Code is the book. Code is the paper, the letterpress, the type, the ink. Code is the glue and binding. Code is even the postage stamp and brown kraft padded envelope that brings a slim volume of poetry to my house.

But it’s not the poetry. Words infused with human feeling and human thoughts, absent precise grammar, syntax, or even punctuation can still bring joy to the reader, bridge understanding between two people. The same is not true with code. Broken code fails completely to impart meaning to neither a human nor a computer. Code, when successful, is meaningful for what it imparts, not what it is.

***

Anyone can write a poem. Anyone can write code.2 To believe that they are somehow equivalent constructions betrays a fundamental misunderstanding of art and communication between actual people. In much of my reading, some work experience, and the links above suggest that there are those in our field that make hiring and firing decisions based on the idea that the arts and soft sciences are not important. That a coder should have no interests other than code. That coding is *the* solution, not the mechanism for delivering a solution.

If we don’t know or care about how people will use our software, we will fail. Or worse, create problems that cannot be refactored out of our code. See Facebook and disinformation or Twitter and hate. Both of these entrenched problems stem from a fundamental lack of understanding by their creators, willful or otherwise, of how humans use their products or how people share ideas. Zuckerberg and Dorsey can not see solutions to the problems they have created for our society. Not because there aren’t solutions, but rather, their owners do not have the imagination (or access to people with that imagination) to identify or implement solutions.

  1. To stretch that metaphor to the breaking point ↩
  2. At least, that’s the promise of the Flatiron program. ↩

Filed Under: Made a Hash of It Tagged With: 10X, breaking bad, coding, dorsey, facebook, flatiron, not poetry, poetry, thomas friedman, twitter, walt whitman, zuckerberg

10 A.M… Time for a Regular Expression

June 13, 2019 by Rob

The conversation went something like this:

Instructor: “Here’s a hint for today’s group lab: use Regular Expessions.”

Me, external: “Got it!”

Me, internal: What the #^$(&#& is a ‘Regular Expression?’

So I head to the internet:

Regular expressions (regexps) are patterns which describe the contents of a string. They’re used for testing whether a string contains a given pattern, or extracting the portions that match. They are created with the /pat/ and%r{pat} literals or the Regexp.new constructor.

A regexp is usually delimited with forward slashes (/). 

I’ve long worked software developer-adjacent, and I’ve dabbled in the command line. While the regular English phrase “Regular Expression” was not immediately available in my memory banks, Regex is. Regex = Regular Expression. Always Be Learning.

The lab that day was called Piglatinizer. Idea was to take in a string, one word or many, and convert it to pig latin.1 . Pig latin constructed by splitting a word by the first vowel, appending the first part to then end of the second and applying “ay.” Words that start with a vowel simply have “way” (or other, regional variations) stuck to the end. So “snickers” becomes “ickerssnay” and “apple” becomes “appleway.”

SO MUCH FUN, RIGHT? 2

My partner and I started y breaking the string into an array using the method .split(“”) and then iterating over the array until we found the vowel. So we tried something like this:

arr = string.split("")
pig = []
latin =[]
arr.each do |a|
 while !a.match?(/[aeiou]/)
  pig << a
  arr.shift
 else
  latin << arr
 end
end

Which and of course that didn’t work at all. We tried until and while loops, but couldn’t get there. Eventually, the answer was shared and we all acknowledged our deficiencies and we left for the day to tackle more labs and learn about Ruby on Rails.

But I kept thinking about regex and what exactly /[aeiou]/ did when paired with the match method, and how it can help me with other methods. I know that regex is used to validate phone numbers, credit card numbers, and other values that follow a specific pattern, but there’s likely more.

Basic Syntax

Here are our vowels as a regular expression:

/aeiou/

In Ruby and in other programming languages, regular expressions are contained with in the forward slash (/). This is to not be confused with the back slash (\) which is used to escape non-word character such as $.&*#, etc.

/[aeiou]/

When an expression is placed within the [], this indicates the Character class. A match is made to any one value (a or e) rather than in the previous example (a and e together). In our code sample above, string.match?(/[aeiou]/), my code is (attempting to) match the first vowel in the string and return an object with that vowel. In the string “snickers,” the object returned would be “i”

Matching Operator

In much of the documentation I found on regex, examples and tests were shown with the matching operator:

=~ #matching operator

When the matching operator is used, the index number of the first match is returned by Ruby. If there are no matches, Nil is returned. This can be set to a variable.

"snickers" =~ /[aeiou]/
     => 2

I will also note that regular expressions are, by default, case sensitive. So:

"SNICKERS" =~ /[aeiou]/
     => nil

To correct for that, you can add an “i” after the regular expression.

"SNICKERS =~ /[aeiou]/i
     => 2

Methods

The matching operator is not the choice I am familiar with, however, in code I’ve written and I’ve seen. Again, in my code above and in other examples, I’ve used match, match?, or split and a regular expression (not clearly known at the time) to break up a string or consider a boolean for proceeding with in an action. There are many others.

.match returns an object, MatchData, that you can use for a number of things, including, as I will, parse a string at the first vowel

string = snickerdoodle
string.match([/aeiou/]) 
    => <MatchData "i">

.match? returns a value of either true, the string matches the regular expression, or false, it does not.

string = snickerdoodle
string.match?(/[aeiou]/)
     => true

.split breaks up the string at every character that matches the regex as part of an array.

string = snickerdoodle
string.split(/[aeiou]/)
     => ["sn", "ck", "rd", "", "dl"]

And if you pass a parameter, say index 0, you can return just the item in the array you want

string = snickerdoodle
string.split(/[aeiou]/)[0]
     => "sn"

Piglatinizer

Shamefully, it took me more than a few tries to get this the Piglatinizer to work. Although the lab called for a Rails UI, I built this here in the command line, via repl.it.

puts "          ********** Piglatinizer **********          "
puts ""

puts "Please enter the word or sentence that you would like to have converted to pig latin!"
puts ""

string = gets.chomp.downcase

puts ""



def piglatinizer(string)
  p = string.split(" ")
  pig_array = []
  p.each do |word|
    pig = piglatin(word)
    pig_array << pig
  end
  return pig_array.join(" ").capitalize
end


def piglatin(word)
 if word[0].match?(/[aeiou]/i)
  piglatin = word + "way"
 else
  i = word.index(/[aeiou]/i)
  l = word.length
  latin = word3
  pig = word[i..l]
  piglatin = pig + latin + "ay"
 end
 return piglatin
end

puts piglatinizer(string)

"***End of Line***"

Feel free to take a look at it and run it here.

Resources

Here are some of the resources that I hit while doing my research. I expect that I’ll turn back to them as I get neck deep in Ruby, Rails, and Javascript, and as I consider my final project.

I am also building out a one-page regex resource and will add to it as my experience grows. There are some in the below, usually buried within the page.

  • http://zetcode.com/lang/rubytutorial/regex/
  • http://rubylearning.com/satishtalim/ruby_regular_expressions.html
  • https://www.rexegg.com/regex-quickstart.html
  • https://ruby-doc.org/core-2.4.0/Regexp.html
  • https://regex101.com or https://rubular.com/
  • My repl https://repl.it/@bluthgeld/PigLatinizerTIWYGWYMWU
  1. A brief story: when I was in 4th grade we lived in Southern California. My friends and I had learned about pig latin and were trying it out on the playground. The recess monitor, a woman likely in her 70s, told us about a gibberish language she used in her childhood where she swapped out the middle of words and replaced them with “apple.” That old woman was Steve Jobs great-grandmother. Falsey story. ↩
  2. ↩
  3. .i – 1 ↩

Filed Under: Made a Hash of It

A Playlist to Code By

June 9, 2019 by Rob

This weekend, I’ve been working on, among other things, labs, understanding of regular expressions (more to follow), and my bi-weekly blog post on coding.

On a break, decided to sign up for Spotify, like the kids do these days, and quickly made a playlist.

NOTE: You will likely not enjoy this playlist.

Also: I’m not sure I like Spotify. I’m getting commercials for cancer treatment in Northern Virginia and I wonder what the hive mind knows that I don’t?

Filed Under: Made a Hash of It

I’ve Made a {} of It

May 29, 2019 by Rob

I’ve been riding my bike to the Metro to head into DC to attend the Flatiron School. I’m not particularly “strong” or “physically fit.” I’m not good at “balancing” or “riding in straight lines.” But parking is $5 a day and, you know, the environment. So I bike, which means I worry about getting rolled over by a middle aged dude in an SUV. The lane I ride down is pretty vacant first thing or last thing. So if I was run over, it would be a good long while before someone found my body.

I came across a Twitter bot, @HowsMyDrivingNY. Tweet a license plate at the bot, and she will respond with chapter and verse on speed and red-light camera violations in the 5 boroughs of New York. There is also a web-based front end.

New plate format that enables looking up multiple vehicles at the same time!

Tag me (@HowsMyDrivingNY) as usual and include vehicle information like this:

<state|province|territory>:<plate>, e.g. NY:abc1234

Thank you to @jehiah for the suggestion!: https://t.co/ErXBdDUiF2

— How's My Driving NY (@HowsMyDrivingNY) May 25, 2018

I wondered how it was done. I suspected that the city of New York publishes traffic and parking violations in an easy to parse format and I was right. The raw data can be downloaded in a number of format, as well as a JSON API. The data is not updated in real time.

Turns out that my county, Montgomery County, MD, publishes a similar data source, with a comparable JSON API, updated every day with data going back 5 years or so.

Putting the Twitter API to the side for the moment, would I have the knowledge to iterate over this data, take which information that I want, and present it in a useful way? Sure.

The JSON published is an array of hashes. 1.5 million records long (as of this publication) and it is updated every 24 hours but the county government as part of their open data initiative. This data set does not include Personally Identifiable Information (PII) as the NYC set does, which I consider to be good and right, but it gives us enough data to make some good decisions about the relatively safety of a particular intersection, a route, or even the make and model of an automobile

The County’s public data initiative is driven by a tool called Socrata, which makes public the parameters that can be passed to their API. For example, if you wanted to paginate your results.

Using something like the Ruby Class CSV I can write the elements from the parsed hash to a CSV file. I could then use that CSV file, including Date of Violation, Latitude, Longitude, Car Make and Model, to build a map of Traffic incidents in and around my route to the Metro.

Here is the method that I created (h/t to Nick and our Star Wars API lab) to parse the JSON, and put out the data I want into a CSV file:

def moco_details
  raw_data = RestClient.get('https://data.montgomerycountymd.gov/resource/4mse-ku6q.json?$limit=5&$offset=0')
  parsed_data = JSON.parse(raw_data)
  parsed_data.each do |event|
    arr = []
    arr << event["latitude"]
    arr << event["longitude"]
    arr << event["description"]
    arr << event["make"]
    arr << event["model"]
    arr << event["color"]
    CSV.open("traffic.csv","ab") do |csv|
      csv << arr
    end
  end
end

And here is the resulting CSV from the method above:

39.1187633333333,-77.182455,DRIVING VEH. W/O ADEQUATE REAR REG. PLATE ILLUMINATION,TOYOTA,CAMRY,RED
39.1187633333333,-77.182455,FAILURE TO DISPLAY REGISTRATION CARD UPON DEMAND BY POLICE OFFICER,TOYOTA,CAMRY,RED
39.1163733333333,-77.2057483333333,DRIVER FAILURE TO OBEY PROPERLY PLACED TRAFFIC CONTROL DEVICE INSTRUCTIONS,TOYOTA,CAMRY,GRAY
39.1187633333333,-77.182455,DRIVING VEHICLE ON HIGHWAY WITH SUSPENDED REGISTRATION,TOYOTA,CAMRY,RED
39.0298833333333,-77.1263516666667,DRIVER USING HANDS TO USE HANDHELD TELEPHONE WHILEMOTOR VEHICLE IS IN MOTION,MAZDA,GX5,GRAY

From here, I would post the CSV to a globally visible web site (such as this one) and take advantage of the Leafletjs – a javascript framework for the creation and management of web-based maps – and some an associated CSV plugin, to turn that file into a map with markers and descriptions. Visually, then, I would have a good idea of where there are traffic problems in my neighborhood.

This is surely not as interactive as the Twitter bot leveraging NYC data, privacy considered, but an interesting exercise in using public data to highlight safe areas and troubled areas. This exercise is kind of the long way around the Horn, however. The County data source does have an available GEOJSON API that is processed natively by LeafletJSavailable as well, this could be done much more simply. Surely more to come.

Filed Under: Made a Hash of It Tagged With: csv, hash, leafletjs, moco, parse, safety, speed, traffic, twitter

My Kung Fu

May 27, 2019 by Rob

One of the benefits of having a kid is the opportunity to read with them: brand new books; stories you have known all your life; stories you wished you had read. It’s a chance for you to grow and learn as a family.

Before reading it together, I had known the broad outlines of the Zen koan, Banzo’s Sword. It’s the story of a young man, desperate to impress his father, finds the sword master Banzo and insist Banzo train him. Banzo agrees. The young man asks how long it will take to become a master. Bazo tells him a lifetime. Too long, the young man says. He tries to bargain with Bazo, offers to be his servant, and with every offer the time to mastery grows. Eventually, the young man realizes that he can’t get to mastery without putting in the work and being patient. I recommend that you read Bazo’s tale here.

This is also the plot to Karate Kid.

***

I fell in love with the X-Files in it’s second or third season, in dark basement in Centreville, Virginia. A friend introduced me to Mulder and Scully and the Consipracy through her brother’s library of VHS recordings off the air. We went our separate ways – college in different states – but I kept up with the X-Files until the end and I have all seasons on DVD – except, strangely, Season 4.

Viewers may remember the The Lone Gunman. Byers, Frohike, and Langly were allies of Fox Mulder and Dana Scully, who ran The Lone Gunman, a publication that explored conspiracy theories (i.e., Lee Harvey Oswald was either a patsy or part of a larger conspiracy, the was filmed by Stanley Kubric on a soundstage in Hollywood, Extraterrestrials walked among us. ). They provided what could be charitably described as “operational support” for Mulder and Sculley, including legwork, photography, and hacking/phreaking, in service of the Agent’s search for the truth in the alien invasion conspiracy.

Sometimes they got up to their own shenanigans.

I do prefer the one-off X-File episodes over the Conspiracy, if only because the Conspiracy was bleak. Check out Jose Chung’s “From Outer Space” or Musings of a Cigarette Smoking Man.

It Sure Is.

Another, Unusual Suspects is the Mulder/Gunmen origin story. In a scene with a character, “Holly,” who is running from the Cigarette Smoking Man, when she asks him about his hacking skills, Frohike tells her that his “Kung Fu is the Best.” The phrase, a kung fu film trope and well-worn in-group code from the black-trench-coat-and-combat-boot nerds, struck in my brain. I liked it so much at the time that I added it as my signature on my home printed business cards.

I seriously I thought that was sufficient to will myself to success (whatever that means) without having to actually put in any work. I had no patience. Success as a writer would find me.

***

I’ve had a lot of jobs since college and no explicit plan other than to be a kick ass novelist: Sales Associate, early morning chyrons for major market TV, secretary, program coordinator, and secretary. I thought the novel would come by magic and my future set. Eventually I decided to turn the only skill that I spent any time actually working on and turn it into a corporate career. I took a certificate in Technical Writing and through the power of nepotism found a job doing that for a small software company.

And over the last 13 years the job grew far outside that specific title. The knowledge I built up writing about our software products made it natural that I should also do pre- and post- sales. And live trainings. Marketing material. Trade shows. We were part of a much smaller company then and everyone did what they needed to do to move things forward. Honestly, I really liked it. I like having a skill or knowledge people appreciate. Still, nearly everyone who’s ever known me longer than 5 minutes thinks it strange that I’m a damned good capitalist.

I had no explicit plan. I took opportunities as they came (opportunities that are only available to a select few, I remind myself; I’m a stupid lucky human being) and eventually found something I genuinely liked to do.

My kung fu is just okay.

***

That friend popped up on my radar a few years ago. I happened upon an article she wrote about her distrust of Gwyneth Paltrow’s Goop. We reconnected on Twitter. Soon, she found global internet fame from her piece on Brigid Hughes, the second editor of the Paris Review, and how she was erased from the history of that publication by that publication and, among others, the New York Times. She advocates for the remembrance and recognition of women in the arts, especially those who have been edited out. She started a quarterly journal and a bookstore, as a single mom, an American living in the UK.

And if you were not paying attention, while her success might seem as the work of magi, she has made a series of explicit choices large and small that move her to her goal. Choices invisible to all but those who care the most. But as she will tell you – and has told others who make the same assumption – she’s put in the hours building her knowledge, skills, and “brand.” She’s put in the work on her kung fu.

***

This is not the same scale. I’m not shining a light on long suppressed, yet fantastic, women authors. I want to build software that makes life just a little bit easier. I don’t want to disrupt life; I want to help smooth out the bumpy trail so we can all get to where we need to be.

I’ve put in 13 years. I’ve got some skills. My kung fu is not the best. Not yet.

I starting my third week of a 15 week Coding Boot Camp at Flatiron. With the support of my family and an okay from my supportive boss, I am taking Vacation/Leave to learn to code, to add that skill to my set of tools. When I finish, I will be armed with the skills to help me be closer to that kung fu mastery that I wanted to advertise on that cheap business card nearly a quarter century ago.

To some, this may seem like a giant, brave (or insane) leap into the unknown. To all those who love me the most, this is the next, small logical step in my pursuit of happiness and some kick-ass moves.

Filed Under: Made a Hash of It Tagged With: cigarette smoking man, coding, flatiron, kick-ass, kung fu, mulder, ruby, scully, x-files

Copyright © 2025 · Genesis Sample on Genesis Framework · WordPress · Log in