Friday, October 31, 2014

MakerSquare Day 47: Maybe locking myself in my room with the disease wasn't such a good idea after all (10/4)

I didn't get a lot of work done (or oxygen to my brain) today, which is a little disappointing. (Well, the oxygen thing is slightly more than disappointing.) But it does bring up something--in a round-about way--that I'm not sure I've talked about but which has been on my mind:

Why did I leave writing for code?

Well, I didn't really: I still enjoy writing fiction and plan to continue with it in the future. I just left behind the field of freelance non-fiction writing.

(Except for blogging, which you may notice I've kept to like a barnacle.)

As much as I enjoy writing, so much of it is solitary work. And, as I've been reminded by my unintentional quarantine, code can be solitary--but it can also be team-work. Even if you're not in an organized team, you'll find that an open-plan office leads to some interesting cross-pollination.

At the very least, when I'm at the MakerSquare office, when I hear someone talking about some interesting code--either an interesting solution or an interesting problem--it can sometimes get me thinking about something useful. Or when I run into a problem, there's usually someone around to talk it out, whether the other person provides a solution, a hint, or merely a willing listener while you solve your own problem.

In writing, that's not so much the case. Don't get me wrong: if you're working on something, you may have people you can turn to, whether it's your writing group or just a friend willing to read something. But there's not really that same sense of team-work and collaboration.

And that is one reason why I really don't like being stuck at home, sick, right now; and it's one reason why I decided to move into a coding career: I like teamwork.

Thursday, October 30, 2014

MakerSquare Day 46: Hackathon ::cough cough:: (10/3)

At MakerSquare, Wednesday and Thursday are given over to a hackathon--late nights, food provided, and lots of coding on the second final project.

Here at the DevHouse, my Wednesday and (probably) my Thursday are given over to a lot of cold medicine and vitamin C and tea. It's kind of a bummer in the way that minor illnesses during final project weeks are kind of a bummer. I'm supposed to be working my portfolio now, but instead most of my energy goes into getting tea. (Never again will I take my electric kettle--still at home in San Angelo--for granted.)

Ah well, I guess the only thing I can do now is get better soon.

That said, during my brief lucid moments--when the cold medicine kicked in--I did find an interesting tutorial on using Angular in a Chrome extension.

Wednesday, October 29, 2014

MakerSquare Day 45: Final project #2 -- but really home sick (10/2)

I went home early on Tuesday, since I've caught that cold that's going around. (Or at least, that my housemate has.) So this'll be a short post, with the sound of me sniffling and coughing in the background.

Luckily, Tuesday was the first day of our second final project, and I've chosen a manageable project right now / for once: a Chrome extension that will block spoilers on Twitter.

So I didn't get that much done on Tuesday since my primary goal for the day was to always have a hot tea with me at all times. But right now, here's the minimum viable product plan, some notes on my progress, and some current pain points, along with some extension ideas.

Minimum viable product:

  • The user can engage the extension and type in a word or phrase that'll trigger the blocker, e.g., "Game of Thrones."
  • All tweets with that word / phrase will be hidden (both words and pictures).
  • The user will be able to show any hidden tweet if they choose to by clicking on the hidden tweet.

Some notes:

  • At first I looked into grabbing all the children of the container object in the tweet stream:
    • $('ol.stream-items').children()
  • ... but then I realized I could just grab the individual tweets directly (and put them into a variable, which I then iterate over):
    • var tweets = $('li.js-stream-item')
    • for (tweet in tweets)
  • It's not terribly hard to hide the tweets and pictures (though I also thought about other ideas, including detaching the material with .detach() ):
    • $(tweet).find($('.tweet-text')).hide()
    • $(tweet).find($('.js-media-container')).hide()

Some pain points:

  • Right now, I'm having some trouble putting in a button that'll respond to a user's click to show the hidden tweet. When I put something in the tweet space, it acts like a normal tweet acts when clicked, i.e., it expands.
Some extension ideas:

  • It would be super-neat for this extension to block tweets that had the trigger words, but also to find some related tweets to block. So, e.g., if you put in "Game of Thrones," the extension might also block out certain related words like "Red Wedding."
  • It would be (slightly less super) neat for this extension to be platform agnostic, so you could block spoilers in, say, Facebook or elsewhere.

Tuesday, October 28, 2014

MakerSquare Day 44: A different type of hackathon (10/1)

Today we had a hackathon, but not the usual kind. Today was our--

Resume Hackathon!

I'm probably just using bold here to make it sound more exciting. To be clear: the idea of going out on the job market; of going to interviews; of getting my first job in web development--all of that is very exciting to me.

But writing and revising a resume isn't as exciting as embarking on a lifelong career in a field that I'm kinda crazy about.

(Have I ever told you guys about meta-programming in Ruby? It's when you write code that then goes and WRITES MORE CODE. As a long time fan of infinite loops, the idea of code writing code makes me very happy.)

Part of the general (I think) lack of excitement when writing resumes is that resume writing is a lot more cramped than writing code.

Or rather: if I give you a coding challenge, you could probably think of five ways to code out a solution; and if any way fails, you'll get an error message that tells you how to fix it.

Man, I love feedback.

Unfortunately, resumes don't offer the same level of detail in their feedback. You get less "undefined variable" or "stack level too deep" and more "no thanks" and ::crickets::.

For me, with my big change in career from ex-PhD candidate and education writer to programmer, it's interesting to see how much of my resume is no longer relevant. Although maybe I should leave some of that in. Wouldn't you like to work with a web developer who once taught a class on 19th-century science fiction?

::crickets::

(Actually, now that I think about it, I think my teaching experience really does help me with both public speaking and with translating certain concepts into more easily digested forms. So, it's going back in the resume, people! Along with my improv classes at the Second City.)

Saturday, October 25, 2014

MakerSquare Day 43: A very little view of a week's worth of work (9/5)

When we did our hackathon, I was in a team of four people; Kelsey and I had whiteboarded (with our TA Ben's help) the night before and focused on our minimum viable product, with a whole bunch of extension possibilities; and the four of us had pretty distinct responsibilities.

So when I look at my current project and compare it to my hackathon project, I don't feel terrible that this project is not as advanced. I mean, we had 4 * 2 programmer-days for that, while I've only had 5 * 1 so far for this.

That said, I'd like to take the focus off of me for a second--just a second, mind--and talk a little bit about the cool things I've seen my peers make. Now, not all of this is ready for prime-time, but I don't think anyone would mind me talking about, for instance--

A neat little web app for playing pong (all in JavaScript);
The neat front-end design of a recipe box (with some very nicely done CSS);
The figuring out of the interface with Yelp API or Twitter API;
A large content management system service;
A well-constructed financial modeling system;
A way to get info from Steam.com that pays attention to the performance issues;
A front-end only collection of math/science tools with a really nice panel system;
A neat list-sharing app with a great in-place editing system;
The updated and improved version of the hackathon flash card app and the ping pong tournament app.

Like I said, they're not all done. But when I look back at what my peers have done before and see what we're capable of doing now, I'm very proud.

Bonus: yesterday we had a meeting with some people from Ivity Labs, an offshoot of SpringBox, including a MakerSquare alum; and today we had a MakerSquare alum from Lou Malnati's in Chicago come by. All of which adds up to this:

When we started, we weren't that good; now, we're a whole lot better; and with just a little more experience, we have the capacity to be a whole heck of a lot better.

Friday, October 24, 2014

MakerSquare Day 42: Stone on stone--until ... (9/4)

I don't have anything to show you right now. I'm not entirely sure when I will. (There's a possibility that I don't have any website to show you to, but only some screenshots since we build most of our apps on our computers; porting these local "sites" to other sites can be done, but may not be worthwhile at this stage.)

But rest assured, when you spend several days moving stones, eventually you will have...

... something resembling a pile of stones.

That might not sound like much, but I'm actually very excited. Because--and watch this metaphor of stones get extended--sometimes it can feel like you're hitting your head on a stone wall and not accomplishing very much. But sometimes some stones get dislodged with enough hitting. And then you might notice that some stone that you're looking at is actually the perfect shape to rest on this other stone that you just happened to be looking at.

(I don't want to over-dramatize the importance of happenstance and luck; but if you've spent as much time in libraries as I have, you know sometimes the important book is right next to the book you went to find. Almost the same could be said for coding: you can go research AJAX calls and instead find a cool Ruby gem for editing in place.)

All you need is time, a head hard enough to survive repeated pummeling, and the will (and curiosity) to keep going on moving stone after stone.

(To be more--ahem--concrete, today we learned about Promises in JavaScript (which is a way to chain asynchronous calls); and I got my database tables all re-written to do what I know think they should do.)

Thursday, October 23, 2014

MakerSquare Day 41: Commas; or, Masonry, Part 2 (9/3)

Oh, I remembered the joke I was going to use yesterday--and it wasn't actually that good.
Oscar Wilde comes into the pub at lunch, looking exhausted.
"Hard morning of work?" asks the publican.
"Yes," says Oscar, "I spent all morning putting a comma in."
Oscar has lunch, leaves, and comes back for dinner, looking exhausted.
"Hard afternoon of work?" asks the publican.
"Yes," says Oscar, "I spent all morning taking that comma out."
There are (as I've said before) some big similarities between comma world and coding world; and, in fact, a lot of today has felt like some version of this Wilde joke. Like:
"Oh, I should add in a section on all pages that will be blank unless there's been an error and that section could report the error."
Then, later:
"Hey, I just implemented a section for good messages under my section for error messages. Why not just make a section for messages and pass in any messsage--good or bad?"
That's not the only example of an added comma/removed comma shuffle. And I won't lie, I understand why Wilde might be so exhausted after a morning and afternoon wrestling with a comma. He feels--and I feel--exhausted because it is exhausting.

So why keep doing it? Because Wilde and I are secretly masochists who like torturing ourselves? No. Well, maybe a bit of that. But mostly because this thing that we're so exhausted by--we're making it better by playing with it.

Alternate possibility: Maybe Wilde just didn't know how to use a comma correctly?