- Carbonated Beverages in Single Use Bottles (at the urging of Wee Bairn)
- Also, Twitter.
I’m beyond saturated to the gills with prestige TV and films – Game of Throne, the Marvel Cinematic Universe, Star Wars – and the unending torrent of commentary, second thoughts, supposed conspiracies, plot theories and reconstructions and so-called “Easter Eggs.”1 Already drowning, streaming networks bowl me over with bingeable shows… only when do I think I’ve seen the last minute of them, I’m sucked out to sea again… a Tsunami of Hot Takes.2
The solution is boat that can sail straight and true and an EMP.
Do you remember when a fella could dip his toe in and out of a show, with no concern for “canon.” When a young man could come home, pick any channel on basic cable and watch a thoughtless, ultimately unsatisfying, but completely ephemeral 50 minutes of network television and not have to worry about what people were going to say about it on Twitter?
During my (First? Last?) visit home from college, I plonked deep down into my parent’s ridiculous leather sofa, it’s hide scared by their Yorkie’s razor claws, and put on the television. They saw me, together, and commented how much that scene – me, staring open mouthed, at an episode of Law and Order – reminded them of me at 16 or 14 or 12 or 8. I think about that every time I sit in my own overstuffed couch. Fight it, I may, but I’ll be stuck on a couch the day I die, remote control under my tongue like a binky, watching that same damn episode.
Prestige TV is certainly a reaction to that dominant format, the one that I grew up with. The writers/producers/directors are of my marketing cohort.3We were born in the same soup.
What damage has this television has done to me, absorbed in chunks over decades with no critical thought or analysis applied? Magnum, P.I., Knight Rider, A-Team, CHIPs, Dukes of Hazzard… these were some of my favorite shows. They don’t What do they have in common? Right off the bat, there are no woman characters of any depth or longevity. They’re full of violence and the belief that Reagan-style capitalism was the way, and that the police, the military, and Christianity were absolute, unequivocal goods4. Little to no gray in character development. 98% of the actors are white and only about 2 of the stars with regularly recurring. One show proudly presents a symbol of oppression and hostility to basic humanity as a point of cultural pride. I would not make a minutes time for any show like these today, but they occupied a surprising amount of my headspace for a good part of my life.
- The use of the phrase “Easter Eggs” in media commentary comes from Video Games. An “Easter Egg,” in that context, is an object in a game, that when opened, reveals a surprise, like a special power or a hidden level. When discussing TV/Film, however, online reviewers use this phrase differently, and I believe incorrectly. What they call “Easter Eggs” are allusions to other art or media. I know language changes but in this context, the metaphor “Easter Egg” fails. ↩
- My Hot Take: the end of Game of Thrones was excellent and that Daenerys’ fascism and bloodlust at the end WAS NOT out of character. It was always there and only held back by Jora and Missandei. When they were gone, she no longer had better angels to guide her in being a good leader. Her first instincts were *always* to burn her enemies to the ground and they convinced her build everyone up.
But you wanted Danaerys to burn the King’s Landing, and her citizens, to the ground because you hated Cersei. She killed Missandre and gambled the Walkers would rid her of Danaerys and the North first. Cersei and the people of King’s Landing needed to be purified by fire.
The business of slightly improving people’s lives, especially after catastrophe, is boring. Getting sewage to the sea is how the world functions, but it’s not hot cousins fucking. It’s what needs doing once megalomaniacs have stopped killing innocents to secure their place in glory. Warlords eliminate, they don’t manage. And that’s what Daenerys was. She was a fascist and she was your hero. That’s why you hated the ending: you rooted for the baddie. ↩
- GenX, if you really give a shit; truth be told I don’t ↩
- Or, a list of things that I’ve never believed ↩
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.
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.
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.
- 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
- 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.
Add SSH file to boot Partition
Once balenaEtcher is done her magic, you will find that your SD card now has two partitions.
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.
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.
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.
In PuTTY, click the button ‘Open.’ The configuration screen will close and a terminal window will open.
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 default login for the Raspbian is ‘pi’ with a password of ‘raspberry.’ When you log in, you should be see the prompt:
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.
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.
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:
- Ruby on Rails
- Bootstrap/React Bootstrap for UI
Until next time…
- 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. ↩
- New Raspberry Pis come with Wireless built in. Once your device is up and running you can turn on the wireless, if you choose. ↩
- 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. ↩
- Official Drink of Extreme Developers and Night Nurses. ↩
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
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:
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 NailProbably 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.
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.
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.
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
}literals or the
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.
Here are our vowels as a regular expression:
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.
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”
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
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]/) => "sn"
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.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.
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.
- https://regex101.com or https://rubular.com/
- My repl https://repl.it/@bluthgeld/PigLatinizerTIWYGWYMWU
- 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. ↩
- .i – 1 ↩
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?