Entries RSS Comments RSS

So I Heard You’re Writing an App for Bed Bugs… Or are you?

August 3rd, 2011

Confession: I stopped blogging and started working (and fighting. see http://stopforgetting.tumblr.com) But I’m back for a minute. :)

For the past 6 months, I’ve been working at a small but steady email marketing SaaS provider in Durham, NC. I’ve been doing tech support, account management, and QA. I’d like to focus on QA and have more time available to write unit tests and play in codeland, but as I said, I work at a small company. :) I have been programming in my spare time, though — a mix of PHP and Ruby.

Cool news: I have finally broken down the barrier of “I need someone to help me write the app I’ve been wanting to write for 3 years because I don’t feel confident that I can do something this awesome on my own.” Here’s the major bullet points of what I’ve learned and the route I’m taking:

  • Writer’s block is silly. I sat down a few weeks ago and opened and closed an html tag and said, for all it’s worth, this is my app, and at least I’ve started it.
  • Bare minimum functionality is my immediate focus. I’ll separate core functionality from ‘features’ and get this sucker working before making it pretty, even if it pains me.
  • I’ll spec out the UI using the data I have on the existing idea. (I essentially have a “Smoke Test”/Vapor of what I want to build.) Focus on high traffic areas and features for those areas first.
  • I’ll write it from scratch. If I can’t decide on a framework (and I tried), just do it from scratch. Why not? It’s liberating to know what every file and directory in your app is from the getgo, and I’m not scared. :)
  • Use the resources available. Writing an app from scratch has advantages in that you don’t need framework specific examples for the tools you’re using. For instance, Googlemaps (I’m using their API) has wonderful examples for PHP and jQuery. Perfect. (not that I couldn’t use those examples for good if I was using a framework, but I’d have the extra thought-step of wondering ‘where does this fit in to my framework?’)

Edit: I’ve spec’ed this app out pretty thoroughly but then came to a bump in the road. I think Rails might actually be the best solution for this. After going to Ruby Hoedown this year, I got re-amped on Ruby and Rails… and I started digging in much deeper than I ever have before, into the nitty gritty of Rails 3, the intricacies of Active Record, and appreciating all the serious awesome that is done for me, rather than having to write 482 lines of PHP code for it.

So, I’m pausing on this. And I’m building out a Rails app to take the place of this blog as well as ashumz.com. Or at least moving forward with a blog/portfolio style site layout to get hands on experience. I think that project makes the most sense for now, and I still have my radar on this project for the future. Yes, this means I’m putting it off yet again, but I’m more serious this time. I figure, in the long run, it’s going to save me a lot of time and headache.

I know my thought process here couldn’t be more recursive– but that only means I’m still thinking, right?

PHP Fog & Stuff

January 23rd, 2011

I recently got a beta invite from PHP Fog. They’re a platform-as-a-service cloud hosting solution that is allegedly as simple as Heroku (yay!) for Ruby. I’ve been playing with PHP more lately since my new job uses PHP as their language of choice, and I figured it’d be nice to have a stronger background in that area. I started off messing around with CakePHP, which is basically a Rails clone written in PHP, but not as pretty or simple or mature (or awesome.) But it’s not bad. I didn’t get very far with it (finished the basic blog tutorial) before I decided I wanted to play a little more with just PHP and MySQL, seperate from the MVC paradigms and the Cake framework, and more zoned in on (native) language features and how they work. I’m having fun with it! PHP Fog integrates with git, and I’m looking forward to playing with it more so I can write a real review of my experience. Just thought I’d throw out a quick update for now on what I’m up to on the tech side of things…. :)

On another equally geeky note, the hackerspace is going great in Durham. A local UNC student filmed a short video about our space. You can view it here: http://j.mp/edsJEW Oh, and another hackerspace just started up in Charlotte last month. Check them out here -> http://www.hackerspacecharlotte.org/. Anddddd… MakerFaire NC is scheduled for June 18th in Raleigh. Check out that info here -> http://makerfairenc.com/. We’ll definitely have a hackerspace presence representing the awesome NC (and Richmond, VA) spaces. Yay hackerspaces. :)

I Love Cake

November 18th, 2010

I love cake. I love red velvet cake more. I love red velvet cake in the shape of a robot the most.

R2D2 Cake at blog.craftzine.com

Ruby Hoedown & A Quick Note on nm-applet

September 8th, 2010

I went to my first Ruby conference — Ruby Hoedown in Nashville, TN. I loved it and very much appreciated the “Nuby Hoedown” on Thursday. I couldn’t have learned more from Scott Chacon’s talk about github. We had a great time afterwards at an impromptu github drinkup, too! At the conference, I got a lot of code written, (played a lot of Ruby Warrior), and learned some new (to me) awesome features of Ruby.

I also finished Chris Pines’s book, Learn to Program, on the drive out to Nashville. It made me wish I had read that book first, before Peter Cooper’s book, Beginning Ruby. Despite reading the two books in the wrong order, I still got a lot out of both.

The real thing that prompted me to write this blog post was a recent issue with nm-applet. This is solely for my own sanity in case I experience another nm-applet fail on Ubuntu:

1. Kill nm-applet. Don’t do anything fancy. Kill ALL instances of nm-applet.
2. Open the command line and type “nm-applet” — AND JUST THAT. Again, nothing fancy.
3. Make sure you’ve only got one instance of the process running.

I know it sounds simple, but the Ubuntu forums screwed me over on this simple problem. I was trying some fancy command like “–disable ahisixhxisoi293″ and it didn’t help.

NOTE: man page for nm-applet not an option on this one… no help there!

Celebrate why day!

August 19th, 2010

Thankfully, this morning I was reminded by tweets that today is why day! One year ago today, unfortunately, why the lucky stiff left the Ruby community (and took his projects with him.) Thanks to his fellow rubyists, many of his projects survive and are still being hacked on and improved.

Why really helped change the way I approached learning to program. I probably would have never developed an interest in programming if it hadn’t been for shifting the way I think about writing code and creating applications … creatively. :) Why’s Guide influenced and changed the way a lot of people think about approaching new programming concepts for new programmers as well. If you haven’t read Why’s Poignant Guide to Ruby, now would be a good time:
Read it here

I also really love why’s work focused around teaching programming to kids. Hackety Hack and Shoes are examples of this. I need to leave for work in about an hour, but I plan on coming home tonight and hacking on a Shoes project for the evening. I’ll write another post in the future about the easiest way for beginners to get started with these tools (it can be less than straight forward.) Here’s the links for those of you interested in Shoes & Hackety Hack:

http://hacketyhack.heroku.com – “Hackety Hack is the coder’s starter kit. Programming should be fun, and easy! Hackety Hack provides an easy and fun way to create things with your computer.”
http://shoes.heroku.com – Shoes is a cross-platform toolkit for writing graphical apps easily and artfully using Ruby.


Scratch Rules

May 14th, 2010

Scratch is an awesome visual programming environment written in Squeak Smalltalk. It was designed by the lifelong kindergarten branch of the MIT media lab for the purpose of inspiring kids of all ages. Absent of the barrier of syntax, you can create fun animations and games by dragging and dropping ‘code blocks’ to form ’scripts.’ Scratch supports serious programming concepts: you can learn about operators, control statements, events, threads… all within the context of a cute and easy to use environment.

One of the best features of Scratch is its introduction to social coding and its amazing social networking twist: go home Facebook. You can easily share your projects online at the Scratch website. Sharing your projects allows others to ‘like’, ‘comment’, ‘download’, and even ‘remix’ your application (social coding ftw!). Best of all, if someone wants to check out your project and he or she don’t have Scratch installed, the project will run on the Scratch website in a java applet without the need to download anything! Yeah, that’s right. I made a snowman math fact game for practicing addition facts, and my not-super-computer-savvy-but-has-java-installed mom played it! :) Gotta love it.

This is an awesome video of Harvard professor David Malan teaching CS50 with Scratch as an initial introduction to key programming concepts: loops, iterators, booleans, events, and threads. I’m excited to go through the whole course, but particularly loved the first two class sessions using Scratch!


I’m doing a lightning talk tonight on Scratch. I have basically taken a hiatus from “real programming” and am just hacking on baby games. You should try it. :)

update: http://www.ustream.tv/recorded/6923784 <- my lightning talk on Scratch. I gave this talk at an event I helped plan and organize at Coworking Rochester -- cosponsored by Coworking Rochester and Interlock Rochester.

One year ago today – Learning to Embrace the Tech Community

April 4th, 2010

This post is inspired by Sarah Allen’s blog post: “one year of sf ruby”

One year ago today, I also had a very pivotal experience. I attended my first technical conference– an unconference, a barcamp — at the Rochester Institute of Technology. (http://barcamproc.org) I had just moved to Rochester, NY from San Diego, CA with my husband, Alan. Up until that point, I had only ever seen HTML and CSS (sparingly.) I was familiar with HTML and in-line styles. And I knew how to use things like myspace and facebook. My background was exclusively education and English (literature and writing.) I was interested in programming, but I felt a severe barrier to entry: I thought it was too technical for me.

At my first barcamp, also my first technical conference/unconference experience ever, I was intimidated. My heart raced when I had to introduce myself. I claimed I was going to help Alan do a talk on his server-side Javascript framework that I had no clue about, but I really did nothing. I didn’t give a talk. I felt guilty, given the nature of a barcamp and the expectation that all attendees speak on something, but I also felt I had nothing to contribute.

That day, despite my intimidation, I was inspired by the things I saw. I attended an excellent talk on Haskell during which the presenter admitted he had very little experience with the language. Still, I was intrigued by the syntax and grammar, and I felt an inclination towards programming that I had never felt. I love natural language, grammars, and syntax in general. I have always been fascinated by English and the field of linguistics. I was no less fascinated by Haskell than I am with Basque (an incredibly interesting language isolate.) I saw another talk on the OLPC/XO by an awesome woman, Karlie Robinson, who detailed the effort and reached out to the tech community to engage their skills towards a cause for education. I could relate. I even brought myself to go up to her after the talk and give her my e-mail address, given my experience in education, thinking maybe I could help. For the first time, I thought, maybe there is something worthwhile that I can contribute to the tech community.

I started programming one year ago today, because I was inspired by the technical talks I saw that day, and because I realized I am not any different than any other extraordinary geek.

About six months ago today, I got involved in a movement in Rochester to form a hackerspace. Within three months, we had a space and a place to call our own. I have learned about basic circuitry, soldering, programming, and even some basic networking concepts thanks to Interlock, Rochester’s first hackerspace. I love Interlock, and I can barely imagine my life without a hackerspace anymore. Exchanging ideas, learning new concepts, and thinking beyond my normal realm of every day thought has made me a stronger person. I was not born to be a hacker, a coder, an electrical engineer: but I know I CAN be one. Nothing is stopping me from learning new things. The only barriers we have are the ones we create for ourselves.

I have never been to school for anything technical. I am pretty sure I never will. I will continue attending technical conferences, participating in hackerspace activities, and searching each day for new or refactored technology that makes me think outside of my normal train of thought. I feel challenged, excited, and motivated by learning new things, as most people do (whether they realize it or not.) I embrace this challenge as a way to grow as a person, a developer, and a great mind. I am happy to say my mind is no longer limited by the barriers I perceived one year ago today.

I gave a talk on learning programming today at BarcampRoc 2010. I had a very small audience, but I enjoyed discussing Ruby and entry level programming with them. I am passionate about the best way to teach programming as an art rather than simply a tool. I have learned so much in the past year, and I am only limited by my own interests. I no longer feel limited by what I don’t know. Because I know I can learn. I didn’t know this small, and seemingly obvious bit of knowledge, one year ago today.

Today, I know.

Ruby, Javascript, and HTML/CSS (and Sinatra)

March 24th, 2010

I’ve mentioned before that I’m a bit of a Sinatra (http://sinatrarb.com) fan. Recently, at the Interlock hackerspace, I’ve been learning javascript from a friend/mentor. We’ve talked about the best ways to teach programming, and decided a fun way to start would be with javascript games. I really enjoy javascript so far. We started off using a text editor (gedit) and browser (firefox) to develop a simple tic tac toe game. This was a good way to start. As soon as I went home for the night, I (switched to vim, initialized a git repo), moved the app over to Sinatra, and deployed with Heroku. My restructuring took about 5 minutes, deployment took 5 seconds. Here is what I did.

Restructuring the Application

Initially, I had a directory which included a .js, .html, and .css file. To restructure my app for Sinatra, I changed my ~/projects/tictactoe directory to look like this:

|– config.ru
|– public
| |– css
| | `– style.css
| `– js
| |– tictactoe.js
|– tictactoe.rb
`– views
`– layout.erb

Breaking down Sinatra

config.ru – I mentioned earlier that I deployed with Heroku (more on that in another post, but basically Heroku is a very simple, git-driven way to deploy rack applications– and you can use it for free). The config.ru file tells Heroku that this is a rack application. The contents of the file? Simple. “Sinatra::Application” That’s all I need.
public – Your javascript and your CSS live here. Have as many as you want, and you simply link to your javascript and your css is your .erb files in your views directory, just as you would in the index.html of a site. Nothing fancy there.
views – choose the templating language of your choice, and use it here. I use erb because I’m most familiar with it, but haml is exceedingly popular as well. Anything in layout.erb will show up on *every* page. Since my tic-tac-toe application is only one page, I only need one layout. I’ll talk about what happens if you have more pages in the next section.**
tictactoe.rb – this is where the magic happens. Right now, this is all this file contains:

require 'rubygems'
require 'sinatra'

get '/' do
erb :layout

require tells my app the dependencies it needs and loads them for me. get ‘/tiktaktoh’ gets that route for me. do initiates the block that I’m about to pass which contains erb :layout, meaning my layout.erb file will be my ‘view’ for this route. And, end closes my block. I have routed my application to the index page of my url. Check it.

Why the heck did I do *THAT*?

First, I can easily expand this. I can make jsgames.heroku.com and have ‘/tiktaktoh’ route to my tiktaktoh layout, which would reference my stylesheet and my javascript for tiktaktoh. I can also make ‘/bingo’ do the same thing. I can easily create a separate bingo.js and bingo.erb file to create that project completely separate. This is perfect for learning and keeping my code organized. All of this is easily handled through Sinatra’s routing capabilities in one easy file — maybe I’d call it games.rb instead of tiktaktoh.rb, and it might look like this:

require 'rubygems'
require 'sinatra'

get '/tiktaktoh' do
erb :tiktaktoh

get '/bingo' do
erb :bingo

jsgames.heroku.com/tiktaktoh would go to my tic-tac-toe app, and so on.

**I mentioned earlier that I will still have a layout.erb that will be my default layout, but I will only keep things I want on *all pages* there (like header tags) and then I will insert the ruby (erb) code <%=yield%> in layout.erb wherever I want the layout specific to each game to show up (bingo.erb or tiktaktoh.erb). If my bingo.erb and tiktaktoh.erb layouts are drastically different, I might limit my layout.erb file to header tags. Then, I would simply insert <%=yield%> between my opening and closing html tags. My bingo.erb and tiktaktoh.erb would then include all of the formatting necessary to make my games look pretty.

And second, after I set this up, I deployed with heroku in a quick and easy step, but that’s for another blog post.


I now have a well-organized, expandable, git-supervised and deployable project directory. And although it might seem like overkill for starters, I love how easy it is to develop locally and then deploy with a single command for free, and we can start with ajax requests whenever we want, when we get there. :)

You can follow my slow and steady progress at http://github.com/ashumz/tiktaktoh My thoughts are to turn this experience into a nice tutorial on beginning javascript for (new) rubyists.

Currently Computing:
Me: HELLO AWESOME! What’s your name?
Awesome: Bowline, a ruby/js GUI framework

Finding Ada – on Hacker News

March 24th, 2010

If there is one thing I have learned from my short time poking my head in at science and technology, it’s that women are everywhere doing awesome things– we just don’t always hear about them unless we listen. For that reason, I believe more women should make their voices heard. That being said, it’s really awesome when women are noticed without having to yell, and when they get the same media coverage afforded to males in the field about equally awesome projects they are doing. I found out about a really neat project by Chloe Fan through Hacker News.

Chloe says, ” I created a simple version of Super Mario Bros using an 8×8 LED matrix (one color), an Arduino Nano, two buttons for the input (forward and jump), and a piezo sensor hooked to a separate Arduino for the theme song.” After researching more about Chloe Fan, she seems to be a very passionate woman in tech. She says on her website, “I am primarily interested in how engagement with technology in public spaces can increase environmental and behavior awareness, and encourage positive behavior changes. I am also interested in emotional and social interfaces, and assistive social robots.” I can barely attempt to paraphrase that, so I figured a direct quote would be best. But Chloe: Hack on! You’re doing something right.

(Note: I’m subsequently inspired by the possibilities of my Arduino nano that I just received in the mail today. How appropriate!)

SaaS Fail: Profit over Value

February 8th, 2010

One of my jobs involves inputting attendance records and notes for students who participate in Supplemental Education Services in a large California school district. The service the district has employed to handle all of the pertinent student data completely sucks. Don’t believe me? Go to http://www.cayen.net/index.asp. Immediately you might notice that their outgoing links just point back to their own website. Oh, but their website is *receiving a makeover.” See http://www.cayen.net for an equally laughable experience.

Are they serious?! “The leading provider in program management software for SES and after-school programs…” *Cries*

The silly “program management software” they’ve thrown together to manage all sensitive student data, student testing, attendance, etc, is just so incredibly difficult to use. I am mostly only able to use the site appropriately when I use IE 8. Even then, some input features on the site only work with Firefox. It’s incredibly annoying and unbelievably buggy. And, they charge SES providers money to use support hours. They get away with this by offering a “free training” session in the summer. Then, you’re expected to know exactly how the system works. I have absolutely no problem navigating the system, but I have many support *issues* — such as: this critical piece of data will not save unless I re-open another window and double click and cross my fingers.

My main question here is how people get away with pulling the wool over an entire school district’s eyes? There is a serious problem with the ability to sell software as a service to customers who just don’t understand the value of good software. Knowing how the site *should* work, I have an endless number of complaints. However, if I just thought the error was my own fault, I might actually be stupid enough to pay for support hours, or even hate on my own skills/user inability. I think it’s a shame that anyone can get away with making users feel like it’s their own inexperience with a piece of software that is causing them problems. And then to make money off it when it’s the software’s fault, unbeknownst to the user… that’s just criminal.

Right now, this entire system is down because the database server appears to have crashed or is improperly configured. Whatever. The system has been down for the last three hours. I’m not even sure who to contact because their contact info is unavailable. My contacts at the district continually let me know that everything I need to know about how to use the website is ON THE WEBSITE in the *HELP* section. (They have no idea what’s going on themselves.) Conveniently, the help section can’t be accessed when the site keeps spitting out “Microsoft OLE DB” errors.

Just because you are paying for a piece of software doesn’t mean it’s worth anything.

I am annoyed. End rant.