Local Politics: Iannarone and Raiford for Portland, OR Mayor 2020

And now for something completely different. I have gone “off topic” a few times before on the blog, but obviously it’s mostly technical in nature, around here. Today I’d like to talk about something incredibly important, the upcoming Portland Mayoral election, in a couple months here.

Vote for Sarah Iannarone. Not because I think she’s a better candidate than Teressa Raiford, but because she is on the ballot. Think of the voters we can pull off of Ted Wheeler – they will either vote for Iannarone or Raiford. There are no swing voters between Wheeler and Raiford, there are just Wheeler voters and Iannarone/Raiford voters. I believe in being able to vote your actual truth for people that represent you, and I also know that Wheeler has gotten far too many of my community maimed and killed, and he has GOT. TO. GO.

Raiford is amazing. She founded and runs Don’t Shoot PDX, which provides legal support for families affected by gun violence. Her entire pedigree is fantastic. I want to see Raiford in local politics for as long as she’ll have us.

However, the election needs to go to Iannarone. She has utterly endless DETAILED policy which Raiford’s handful of campaign sites lack. And in the generalities of Raiford’s sites, being an advocate for public education, transportation, transparency, labor rights, Iannarone has practically the same POV except a) she has details about every level of these policies and how to institute them, and b) she is on the ballot.

That’s really the critical piece here. Teressa is great! But Sarah is ALSO GREAT, and she is on the ballot. Sarah is on the ballot. Sarah has a genuine shot at being able to capitalize on how much a tremendous, continuous, and DELIBERATE failure Wheeler has been in his role as police commissioner and mayor.

The thing is, Sarah is on the ballot. She’s the one who can win. We must must MUST vote to change our voting structure to Ranked Choice voting rather than first-past-the-post. Until we do however, if it’s Wheeler vs Iannarone, then Sarah might get over 50%. She’s an outside candidate not entrenched in local government already & not incredibly, densely backed by enormously moneyed interests. If it’s Wheeler vs Iannarone vs Raiford, Wheeler will get the same number of votes, and Sarah and Teressa will be sharing the remaining pool of votes.

Here’s the very critical article: https://medium.com/@adie.bovee/an-open-letter-regarding-portlands-upcoming-mayoral-runoff-eb31e2624181 , posted about Iannarone’s involvement with Don’t Shoot PDX, which appears to be based on a now-deleted tweet of Sarah’s that questioned the wisdom of running a write-in campaign, saying that telling a black woman that running against her is a vote for Wheeler, is itself a silencing and racist action. I don’t think I agree that saying that a write-in campaign is less likely to win than someone on the ballot, is itself racist, but please, come to your own conclusions. The article also says “… it doesn’t take much digging at all to learn some critical history of Iannarone’s campaign’s relationship with Don’tShootPDX,” and hey, maybe it’s out there, but I couldn’t find anything in the first two page results of the term “iannarone “don’t shoot pdx””. What I found was coverage about mayoral debates which mentioned Iannarone, Raiford, and Don’t Shoot PDX.

Finally, please read what each candidate says, and decide for yourself. PLEASE read. I’ve provided handy links to ALL of the official campaign policy for either candidate. I’ve also got word counts because I find it pretty remarkable, the level of detail and difference.

Raiford’s platform is here, 2599 words: https://www.movingportlandforward.com/the-peoples-platform

Sarah’s platform on entirely reimagining public safety, 5933 words (be sure to click through all the “Show Full Policy” expansions): https://sarah2020.com/en/policies/rethinking-public-safety/

Sarah’s platform on transportation and the “green new deal”, 1215 words: https://sarah2020.com/en/policies/green-new-deal/

All of Sarah’s writings and platform proposals for Coronavirus response, 1726 words: https://sarah2020.com/en/policies/covid-19/

Sarah’s massive reformation ideas for monetary and economic support for marginalized and out of work members of our community, 7519 words (!!):

Sarah’s platform on Housing for All, 3644 words:

Sarah’s platform on vastly VASTLY transparented (not a word, but it’s fine) government, including municipal internet, FOIA request improvement, cracking open wide the voter rolls, and so so so much more, 3327 words:

I have looked and looked, and asked staunch advocates for Raiford, for similar policy plans from her, and I just haven’t been able to find them.

Thanks for reading.

An update on the De-Google

So a few months ago, I got a bug to get off Google, so I want to talk a little about how that’s gone! Lots of progress, not done yet.

Table of Contents:

First of all, the very positive. FastMail has been an absolute and complete delight. I was very skeptical that I would love an email client more than Gmail, because its search and its apps are great, and I’ve been using them since…. 2002 or 2003 or 2004? Since it was in beta, which was a long time and I don’t really care to log in to find out! THAT SAID. FastMail is great. It is absolutely instant in its snappiness and customizability, its support is fantastic, their docs are great, and the product is just a pleasure.

One of the most wonderful parts about it, aside from how gosh darn FAST it is, are the auto expire settings you can create for a folder. For example, and I know everybody has emails like these, I have a Twitch folder, into which all messages announcing that so-and-so has gone live on their channel, get filtered (better than on gmail but I can’t quite discern in what way, it may be my imagination), so I see them, and then I never look at them again. If I’m available, I’ll go check on the stream. But regardless, after I’ve seen practically even just the SUBJECT of the email, I never, ever need to look at this email again. So I’ve set a 30 day deletion rule on that folder! I have one for Twitch, one for Github emails, and I’m going to set one up for Meetup too. This basically means that the email that doesn’t get deleted is stuff I generally want to keep, and that the spammier (but still desired) stuff will never contribute demonstrably to the space I’m paying for.

The aliases are great. I know folks who have either never gone to google or run their own email is familiar with this, but aside from adding +whatever to the end of my regular email, I’d never gotten to experience this before, since I am using my actual domain to receive email through. So I have name@fastmail dot com, but I also have:
* “rachel@”, which I can put for personal things and give to people individually
* “subs@,” for comic subscriptions, newsletters, and other things that are not going to be personal to me,
* “business@”, replacing my former dedicated gmail address which was for all business things, amazon orders, transactional emails of all kinds, and finally
* “junk@”, for true junk mail. Hilton gets this, anyone that claims to HAVE TO have an email in order to proceed gets junk, etc.

What the aliases have meant, then, is that I don’t need to maintain multiple accounts. Things get filtered really beautifully and immediately. Everything I need is right there.

Which brings me to the next item. Calendar! FastMail also has a calendar included, because I think Outlook and Google have made it so that just has to be standard in an email offering. The calendar.. is fine. It is just ok. It, like.. mostly integrates with Google Calendar. I think it resends a given invite to everybody if you add anyone to the list. Its defaults seem weird, sometimes it’s 12am and sometimes it’s the time you click on. However, it is usable and a perfectly fine replacement for Google Calendar, so it’s enough and I have moved completely off of GCal. However, GCal is just so… invested-in, and it shows, and I miss its UI.

And so is Google Maps. I have tried to switch over to OSMAnd, a mobile app based on Open Street Maps, which, let’s be very honest about how hard these problems are, does an admirable job. But GMaps is also incredibly heavily invested-in, and this is one where I really do feel like it is not quite usable enough for me. This is fine around town, I do know where I’m going and am happy to find info in other ways, but if I need complete directions, I still pull out Google Maps, because it’s incredibly reliable. I know this is an important one to stop using, too, so if anyone has any tips on other open street map apps I could use, even happy to pay for things, please hmu in the comments.

Ah, and Google Drive. It’s funny, I never even felt terribly reliant on GDrive, and yet it is the one thing I’ve almost entirely put off doing. It’s just going to be such a slog, to pull it all down and set up all the Stuff to put it all elsewhere. But I need to do this, so I’m literally going to set a reminder right now to take the following steps:
* Set my Linux machine up on a job to pull it all down. I imagine this will be a zip file, god help me if I have to do it one by one. (if this is the case I will look for a third party tool)
* ADDITIONALLY get all my wedding photos onto… oh shoot. My Windows desktop. Ah well, this will be a good opportunity to interact with the AWS CLI from Powershell, something it would be great to get to know a bit better (for fun).
* Create an S3 bucket on my Amazon account, and then probably just make a job to push it all up and lock it tf down.
I can see all of this becoming an Automation Project, which sounds fun but which also makes me nervous, because there’s nothing that makes me put a project off like “gotta do it the RIGHT way,” so I’ll probably just roll through the gui and, other than creating the for loop to upload all the stuff, it will all be pretty manual and nonrepeatable. I think that’s, basically fine.

Google Photos is GREAT. GRRRRREEAT. I really wish it weren’t quite so good. Here’s a note to go check out auto sync to Flickr, as I’ve been pretty pleased with their open source support and ethic, these last few years, and it just seems high quality and workable. I think transferring those photos over will be a challenge, and not one I’m super likely to prioritize at the moment. But if you’ve done this specifically, please let me know how that has gone!

Now we get to the truly difficult stuff. I’m probably never getting off Android, and I rely too much on so many apps (read: the google play store) that are unlikely to ever be supported in smaller open source mobile OSs. Ultimately I don’t want to be an iconoclast in this stuff! I’m willing to make many changes, but just kissing goodbye to everything I know in my phone… is just going to be too far, for me. I spend all day in Twitter, my email, some games, Authy, and Podcast Addict (a fabulous podcast app maintained by ONE PERSON who takes bug reports and has a Patreon which is highly deserving of your bucks, if you like to listen to podcasts on Android!

This is getting rather long, but I think that’s more or less what I wanted to say! Just like last time I’d love to hear from you if you’ve done this too. Cheers!

The De-Google

Hi folks, so, it has been a bit, but I’ve changed my personal email setup and this would be a good place to talk about why, and how I’m doing so.

First, I’ve got a new email, through FastMail. I’ve set up my DNS through them and through WordPress.com for FastMail to accept and send email on my behalf. Paying $5/mo, you’ve got access to as many aliases as you could want, so I have a few of them going to my email, all included.

So I figure step one is move all my business/subscription emails over to the respective aliases to my email I set. Well, step 1 (step 0?) was actually setting up the DNS, but I’m not going to go into that because it was all extremely discoverable to be able to access mail from my domain to Fastmail. But if we’re calling step 1 post-setup the first step, then I’ve started in on moving all my emails to the new addresses. Amazon, Steam, Kickstarter, and myriad others are now all pointing to the new spot.

Next will be actually following their migration guide. This will involve pulling all my contacts and calendar items over to Fastmail. I’ll also need to figure out how I want to handle my storage in Google Drive, which I think is going to be Amazon S3 – I’m not wild about Bezos but I’m most familiar (slash, sorry all, totally in love) with AWS of all the cloud providers, and Gb/mo are extremely cheap on S3.

I’m doing this because I think it’s important to pay for the technology that is meaningful and useful to you, if you can, and the consequences of not doing so mean that Google/Facebook/Amazon(I know) have yet another lump of data to sell to someone, about you and people like you. I want to opt out, and I’m technically savvy enough to do so*. I just think it’s, like, beyond ironic to take “don’t be evil” out of the organizational credo. Project Dragonfly and D&I lipservice and condoned internal sexual assault… I just don’t need to be in their web any longer.

What’s going to be hard, though, are many things.
One, I’ll be paying $5/mo for.. ever. Unless I start hosting my own. Which I will never do. It feels like a second marriage, signing up to HAVE TO pay this, forever. I KNOW it is worth it. and five bucks a month is NOT going to make a dent in my spending. But it’s a long-term commitment, and it’s wild to me, for some reason.
Two, turning off location for gmaps and not using Maps at all is.. probably going to take me some time. They’ve poured a lot of money into making it a beautiful, usable map interface. It’s so good. Gah. I’m pre-missing it.
Three, actually getting all the right stuff to go to my new email (and aliases) is really going to be a thing. I will be tidying up pieces of this for a year, I estimate.
Fourth and finally, convincing all the individual humans I know to email me at the new email is going to be an absolutely serious pain. I changed my email about eight years ago when my original gmail account, rachelkelly@gmail.com, just got so overflowed with other Rachel Kellys’ valid emails, that I set a permanent “vacation responder” on anything that comes in saying “you should try to contact me in other ways,” which applies to people who know me, AND to people who know the other Rachel Kellys. Then, I created a personal email, and a business(/junk) email, both in Google space. This separation has worked well. But I recall family giving me grief for changing my email and not Getting it entirely for some time – this shouldn’t be so hard on others, but a) companies like Google absolutely have a vested interest in it being so, and b) email is an old protocol, yo, and the evolutions that have happened with email are absolutely the result of an actual crapload of work and enhancement over existing supercomplexity.

So, I’m starting out. I want to get off Google’s grid, in so much as I can. I’ll let you know how it’s gone in a bit.

  • you shouldn’t need a ton of technical savvy to de-google, there are guides, but it probably doesn’t hurt


I am looking for work! If you’ve been browsing my blog long, or not, you’ll know that I’m primarily a backend-focused Python developer with config management, virtualization, and documentarian bents. My peopling & coworking is LEGIT and I love mentorship and thinking about information transmission. I’m also interested in tech writing, if it’s for something good and chewy that I personally want to see more documentation on (read: everything complicated), and I’d consider a dip into devops/SRE too.

Some of my musts include the following:

  • An established team of at least several years. It seems like between 5-10 years is a very good sweet spot for the kind of growth I’m looking for.
  • You use the Agile development strategy, or something similarly modern. Sprints, clear work assignment and tracking, post-mortems.
  • You use safe, modern Git practices.
  • You have other women in the company.
  • You have onboarded people before.
  • You, as an organization, have made an attempt at writing internal documentation.
  • I am happy to work remotely, but I do not want to be your only remote worker.
  • I am happiER to work in Portland, and require the flexibility to work from home a few times per month, once onboarded.
  • A semi-dedicated resource of whom I can ask friendly questions for the first several months.

Some of my wants:

  • To not be the first woman engineer you hire. This has been very difficult to find.
  • To primarily use Python, with the flexibility to learn new languages.
  • To have the time granted to write great documentation along with the features and fixes I write for you.
  • To be part of a rich code-reviewing team, where everyone’s commits are reviewed, even architects’.

Leave a comment or email me at rkellyalso aat gmail and I’ll shoot you my resume. Let’s doo thiiis.

Setting up my Fedora workstation

Please note that this post contains content not suitable for those who give no craps about the way a Linux box can be set up for an end-user. I do not blame you, those who give no craps.

So leaving Puppet after 18mo (on great terms! hi friends!) I find myself in need of my own real development machine. I begrudgingly find myself admiring macs after all, but after two minutes of looking at craigslist and finding $700 MBPs from five years ago, concluded that that Just Isn’t Going To Happen, much as I love iTerm2. I’ll buy myself a new computer soon but in the mean time a friend of mine had an Ubuntu 12.04 ThinkPad X220 she said I could borrow for a bit, and oh my god, I am in LOVE. This machine is great and zippy and POWERFUL. I might.. I might just buy a clone when I’ve got the bucks, even though you can pretty much only get them used at this point.

Rather than jump back into Ubuntu which is pretty familiar ground, I wanted something slightly different and my friend Amy has been extolling Fedora’s virtues for years. Further, at Puppet, we virtualized nearly all our testbeds in CentOS using the amazing, moooostly internal (but totally available!) Puppet Debug Kit created & maintained by my brilliant former coworker who is still doing phenomenal work over there. Ok, so I will definitely miss my buds there!

So because I spent about half my time on the job in CentOS & Fedora is the closest end-user version of that with a UI (sorry I’m not hardcore enough to only run a server for my dev box haha!), I grabbed the instructions & made a Fedora-specific bootable usb drive with their (prev linked) docs. After formatting the drive, writing the .iso to it, and plugging it in, I had to fiddle with the BIOS, which on the x220 was incredibly easy – first, on bootup it tells you EXACTLY how to get into BIOS, and it gives you the option to do a one-time boot via USB, rather than having to muck around with boot order! Fabulous!! Then with a bit of wiggling (had to get into a babby command line rq to tell it to choose the Linux0 option which kicked off the install, please, friends, do not ask me why) the installation went off without a hitch, with LITERALLY NONE HITCHES.

It was after rebooting that I started to learn how powerful this little machine really is. It’s fast, despite having 1/4 the memory of my old work MBP (though I really don’t know how that scales), and the trackpad uses all the gestures I’m used to from working on macs.

Then I set up my prompt, and without wanting to get toooo too deep into the oogly bits of bash formatting, I had to try and test and try and test and finally settled from:

export PS1='\[\e[0;36m\]rk\[\e[m\] \[\e[1;37m\@ \w \[\e[m\] \n $ '

which threw a non-ASCII character, and when I fiddled, lost the ability to shut off the bold white text, haha, to:

export PS1='\[\e[0;36m\]rk\[\e[m\] \[\e[1;37m\@ \w \e[m\] \n $ '

Huh. That’s only one [ different. Just bless ya, monospace blog draft.

Anyway, then I got ambitious. I wanted to see if I could run Spotify outside a webapp, because that makes it IMMEDIATELY less likely to be used and I rely pretty heavily on it, during and outside the workday. Using these set of instructions which state a requirement of RPM Fusion as installable here, I got going. These are for Fedora 20 & I’m on 23, but I knew I could get it going. I was so excited for this, I LOVE a new Linux system’s first sudo yum(or whatever) update, so I ran that & a few minutes later tried to get RPM Fusion itself installed with the following command:

su -c ‘yum localinstall –nogpgcheck http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm’

But it griped at me about there being no localinstall user – it was griping because we’d told it to perform a command with a specified user with the su command, but it had received no user. Usually this should result in its just using root, so it’s close to the same as just using sudo in front of important things you run in the terminal, but my bash version 4.3.42 was having none of it. So I peeled out the su -c (the -c just means you’re passing it a command to execute immediately, then return to the normal user after execution, rather than switching wholly into the specified user). The issue I ran into thereafter was still localinstall, which my machine still couldn’t find. I made a few attempts at installing localinstall (so meta) but it escaped me. I found this Stack Overflow-ish post asking about basically the same difficulty I was having, and more or less someone says that yum install and yum localinstall accomplish the same thing and the only reason the other still exists is for backwards compatibility. So I changed localinstall to install, removed the su -c ' ', added a sudo since the yum install would want it, and BAM, RPM Fusion on Fedora 23!

sudo yum install http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

Then, all there was to do was run the lil commands to actually get Spotify since RPM Fusion’s installed! The “dnf” of the Fedora package manager command cracks me up – sounds a lot like “do not f****ng” before “install blahblahpackage”, and I refuse to look up what it means because I laugh every time.

dnf config-manager --add-repo=http://negativo17.org/repos/fedora-spotify.repo
dnf install spotify-client

And that’s all it actually took, which, haha, looking back at what I’ve written, I guess is slightly more complicated than “that’s all it took” might warrant.

Next I need to find a terminal I’m happier with! I seriously miss iTerm2 so if you have any Fedora-flavored terminal loves let me know in the comments. I need tabs, man. I need ’em.

Employment and Education

Hello friends! TIME HAS PASSED. But here you are again! This day finds me employed, after a long struggle. Really, I’ve been job-seeking since January, though well in advance of when I needed to, as my graduation date was March of this year. Believe me, I am still fuzzily post-graduation, extremely happy to have no far less homework than while earning my degree (en français, bien sûr !).

Understanding that confirmation bias makes fools of us all, about two months ago I changed my resume (do I write résumé? seems soooo new yorker snobbish, though it is correct) in what may have been a crucial way. My tech recruiter friend gave me some terrific and honest (read: intense) feedback on my R/CL and told me to cut out the “References available upon request” line, because duh, everybody knows that and it just takes up space. For a few weeks, I had it removed entirely. Then, I did something rather bold, and added the following snake-oil-style pitch toward the bottom of my cover letter:

“But don’t take my word for it! Just ask person_1, the leader of the free world, or person_2, the founder of Mars, or even person_3, the inventor of Post-Its! Every one of these folks is happy to -brag about- be a reference for me, so please, contact them!”

And I got a call, from an awesome company that I have always been too afraid of applying to, thinking that the folks that work there are a special kind of brilliant & that I wouldn’t have a chance in hell at actually working there. One of the reasons, other than my qualifications, that they said they called, was because of one of those people who I’d listed in that section.

Typically, references are a very late game process in the hiring world. Why bother calling references, a time-consuming and very personal (and personalizing!) process, if your candidate hasn’t even made it through a phone screen and an interview or two? In other words – why call references unless everybody is serious? But the fact that I put a few folks on there who wanted to vouch for me made a huge difference. And Portland is really so small and the scene is so focused that the names are fairly well-known. That wasn’t an accident, but I met these great people naturally, by getting out, participating quite heavily (and earnestly!) in PyLadies, and making friends with the people around me.

After two phone interviews, a task, an all-day interview, and a few (totally transparent!) hiccups, I was offered the job at Puppet Labs as a support engineer, and I feel so lucky, I have to keep from gushing about it. I left my stable, lifer career nearly four years ago to do ambiguously Better, and yes, Virginia, this is Better.

SO! Now I am LEARNING, learning learning learning! I’m still having a hard time reading the tickets that come in, but what I am able to do is parse Puppet code, and explain what it is and does, and how it’s an enormous, Neil Armstrong-style leap over previous (and still very widely used!) server management technologies. I’m pretty sure I’m in the right industry, guys, as this is really cool to me. Puppet is a company I am extremely excited to work for, for many reasons, not the least of which is getting to know the complex, technical, and awesome product. I keep a notebook on what I’m learning, and I fill several pages a day. Future blog posts will probably just focus on Puppet stuff, unless I get a chance to work on some recreational stuff. Woo-hoo!

And one last thing: if you know me, you know my absolute most highly recommended piece of advice to those looking for jobs: start a blog. Start a blog, start a blog, start a blog. Don’t wait til you code every bit by hand, don’t wait til everything is Perfect, just go to wordpress or blogspot or whatever, and start a blog. Nearly everyone I’ve interviewed with has mentioned it. Fear not about seeming stupid, because you’re brilliant.

Ok – going to cut this off before I get weepy/proselytizey/we-are-the-world-y. GOOD THING.

Meal Planning

Ok, while deciding what recipes I would shop for now that I’m unemployed (because obviously when you’re unemployed it is time to COOK ALL THE TIME), I decided to make a lil Python program that will let me enter recipes, and at a point in the future, probably after I learn regex, make it fully searchable. I’m already separating things out for ease of searching – like lists both with and without quantity indications.

Problems I’ve solved: a) making a new file name out of whatever the user enters, and b) setting a var for the long combination of dir, name & .txt that I’ll use in a few different places throughout the program

global new_filename
new_filename = "recipes/" + new_recipe + ".txt"
open(new_filename, 'a') # 'a' for append

Iterating through a list which adds to another list with some clever while looping

def ingredient_input():
    ingredient = 0  # is it ok to set this var to a dummy value?  it gets redefined with each loop.
    while ingredient != 'DONE':
        print "what is the ingredient?  no measurements yet, please.  type DONE"
        print "in all-caps if no more."
        ingredient = raw_input("> ")
        if ingredient == 'DONE':

And there are plenty of problems I haven’t solved yet. Will write more soon! Unemployed coding is fun, ha ha! “Hmm, let me chew on this juuuust a bit more… oh my god how did 3pm get here” etc etc : )

Bananalogies in Javascryptography

Have you all read Douglas Hofstadter’s beautiful Gödel, Escher, Bach: An Eternal Golden Braid? You should go get your copy. If you don’t have one yet, you can take one home for your very self here. I’ll wait. The internet always waits.

Ok! Remember the terrific inter-chapter dialogues between the Tortoise and Achilles? Remember the one about pushing and popping, meta-Genies, and the Majotaur, “Little Harmonic Labyrinth”? Page 103 in the 20th Anniversary edition. Hofstadter was something of a computer scientist (while being rather disinterested in programming itself), so it’s no surprise that the mathematics of this dialogue (and indeed of the entirety of the delightfully dense GEB) read like a computational theory problem wrapped up in a Lewis Carroll witticism (whom Hofstadter adores and references frequently in the book).

I’m getting lost in the book, as I so often do : ) but my point here, other than urging you to GO! GO! READ THIS BOOK! IT’S HARD AND THAT’S OK! is that javascript’s class inheritance reminds me just a bit of this airy idea of pushing and popping from world to world. Each class is its own world, and pushing from that class is another class that can only come from the initial one.

function Feline = (name, type) {
    this.name = name;
    this.type = type;

Now let’s add a method to this class:

Feline.prototype.infoPrint = function() {
    for (var i in Feline) {

And now, let’s make a new thing altogether. Notice the third attribute:

function DSH = (name, type) {
    this.name = name;
    this.type = type;
    this.color = color;

And now! Since we know that Domestic Short Haired cats are a kind of Feline, let’s make it so officially, and actually CREATE an animal out of this!!

DSH.prototype = new Feline();

var morris = new DSH("Morris", "ornery", "buff and white");

Also notice that only objects created from constructor DSH will have the attribute color, but the regular Feline class will not. DSH is a push down from Feline, and divining objects from the constructor DSH will only give us specific DSHs, which have all the characteristics of Feline as well (though I believe those are specially mutable even after you’ve defined them, but more on that later, when I understand better too [which I am pretty sure can be strung into the metaphor of popping, perhaps?!] : ))!

So, go ye, and read of Gödel, Escher, Bach: An Eternal Golden Braid and tell me what beautiful mathematic or programmatic relation he makes you think of, and, likely, consider in a whole new way!

Last thing: once, on the train (a multi-day, cross-country trip), I had that book in my hand, waiting to get a morning coffee so I could sit and read it (I’ve still only read up to page ~130), and a gal came up to me and said “I read that book thirty years ago, and I’ve been reading it ever since.” Still the finest commendation for a book that I’ve ever heard.

Rabbit object constructor with nested function

EDIT: no longer private, because the notes are good and I thought back to them this morning, so, good enough for me! This is from Codecademy Introduction to Objects 1 25/33.
Private because a) it’s not my code and b) there’s no commentary but it’s important enough to log

function Rabbit(adjective) {
    this.adjective = adjective;
    this.describeMyself = function() {
        console.log("I am a " + this.adjective + " rabbit!");

// now we can easily make all of our rabbits

var rabbit1 = new Rabbit("fluffy");
var rabbit2 = new Rabbit("happy");
var rabbit3 = new Rabbit("sleepy");

rabbit1.describeMyself(); // called with constructed object, NOT constructor name.
rabbit2.describeMyself(); // constructedObject.internalMethod
rabbit3.describeMyself(); // output: "I am a sleepy rabbit!"