Archive | Technology RSS feed for this section

Color fading with CSS3

12 Sep

I’m using an anchor tag as a button in one of my apps when, on mouseover, the color changes. This change is rather abrupt, but by simply adding a transition CSS tag, it becomes much smoother. Here’s a demo:

http://jsfiddle.net/fg9TL/

Corporate Social Networking

9 Jun

I just realized what I’m doing at work: I’m hacking together a wiki! MediaWiki would be perfect for this. Guess I’ll keep dreaming.

I had a moment of clarity and realized what I was doing at work this week. Of course I immediately I tweeted it out to my followers. Jim Cahill, an Emerson blogger who started following me after I checked in to my building on Foursquare (I assume I popped up on a keyword search), sent me a DM suggesting I check out Yammer and see if other Emerson teams were using wikis.

Yammer is basically Facebook for corporations. You sign on with your work e-mail address and it automatically places you in a social network exclusive to your company (in my case: @Emerson.com). There were a few groups, I assume created by the Emerson employees. I joined the group for my section of the company (Emerson Process Management) and posted a question, asking for information about how people in Emerson were using wikis.

I got two replies, both with information about how wikis were being used. In addition, both replies mentioned other people: one referred me to someone who was using wikis in the Northeast, the other pointed me to a head web person at Emerson (who works in my building, I just haven’t met him yet). To try to learn some more, I e-mailed the person in the Northeast, asking for more info about his deployment.

This morning, we chatted for 20 minutes about their deployment of DokuWiki and he shared some of his thoughts about wiki usage in business. As we talked, he e-mailed me four presentations that his team had put together as they were evaluating their options.

All told, I walked away with a better understanding of how wikis could potentially help, or hurt, the project I’m working on. The craziest part: all that insight came from people in my company whom I’ll probably never meet — I don’t think any of them even work in my state.

Corporate social networking… I’m a believer!

The Power of Documentation

5 Apr

Never underestimate the power of documentation.

I just spent five hours troubleshooting some tests for my CS417 testing project. We’re testing a 6 year old poker game that was probably developed as a senior design project. The documentation on their project is incomplete on many areas. Since I couldn’t find a place where they said how cards or stored or coded and I couldn’t easily see how they were assigning values, I guessed. My assumption was that when storing cards as integers, you would sort the cards by suit. The first 13 elements would be one suit, the next another.

Long story short, I was wrong. Their method was to sort by value: the first 4 elements were the 2’s, the next four were the 3’s, etc. And an entire day later, I now have a ton of hand generators that are outputting arrays of integers that didn’t match up with what their code expects.

For the sake of the sanity of all those who come after you, please document your projects thoroughly.

Internship Search Update

22 Feb

Update: I accepted a Web Applications Engineering co-op with Fisher Controls in Marshalltown from May through December.

The career fair was two weeks ago and I’m still waiting to find out where I’ll be this summer. This post outlines my approach to my search and how stuff went.

Here’s the resume I took to the career fair: Adam Reineke’s Spring 2011 resume [PDF]. I tried to create a hybrid resume that contained elements of a traditional resume enhanced with a writing style that would be more commonly found in a cover letter. My goal was to take the three areas that recruiter are most concerned with — education, experience, and extra-curricular involvement — and highlight those. I’ve heard these three described as a three-legged stool. You need all three, and if one is lacking, it can hurt your opportunities.

My cumulative GPA is 2.58, which is low enough that it blocks me from getting pre-selected for most interviews and even keeps some companies from taking my resume (namely a large medical company). The magic GPA number is 3.0. Below that, you struggle. Above that, you’re fairly set. The career fair offers a great opportunity to talk to recruiters who have to talk to you before throwing you out. I took advantage of this by highlighting my core GPA, a 3.18, which shows that I am competent in my focus area. Some companies, especially those with hard cutoffs, are familiar with this tactic and ask for the cumulative instantly, ending the conversation quite quickly. Other companies didn’t even ask.

So how’d it go?

Before the career fair, I applied for four interviews and was approved for two. I had also posted my resume on Twitter and landed an interview from that. At the career fair, I talked to around fifteen companies. (I had printed 30 resumes and I currently have 11 left after giving some out at interviews and giving one or two to friends). One scheduled an interview right on the spot, everyone else got back to me later. Over the next week, updates started coming in. I interviewed with, in alphabetical order:

  • AEGON (in person)
  • Blue Compass (on-site)
  • Emerson/Fisher (in person, phone)
  • Garmin (phone)
  • Microsoft (in person)
  • Pearson (in person)
  • Rockwell Collins (in person)
  • Thinix (in person, phone)

Responses, in no particular order (but not alphabetical):

  • No, you’re overqualified and would be bored, but when you graduate, please apply for a full-time position.
  • No, my GPA is too low, but I’m a strong candidate and was told to stay in touch with the recruiter so when my GPA improves I can schedule an interview.
  • Currently scheduling an on-site interview.
  • Waiting to hear back.
  • Waiting to hear back.
  • Waiting to hear back.
  • Waiting to hear back.
  • Waiting to schedule.

Of all those interviews, I only had two that asked any technical questions. One asked if I used tables or CSS to lay out web pages, so I pulled up some pages I had worked on and showed off my code. I think that stopped them from asking more questions. The other asked the process I would go through to develop a website, mostly discussing the gathering requirements and design phase. All the other interviews were behavioral questions and questions about work I had done previously.

I’ll think on the behavioral questions I was asked and let you know some of those in a future post. One of them was really tough. I gave a joke answer for another and made one my interviewers laugh pretty hard. Check back soon!

Misused Hashtags: My Biggest Twitter Pet Peeve

22 Dec

Hashtags, when used properly, help Twitter users track discussions related to a certain topic. This is especially useful when the content of the tweets are not enough to identify the topic. When misused, tweets can be hard to read and super annoying.

General Guidelines

  • Use a phrase or acronym that uniquely identifies the topic being discussed. Hashtags that are one English word or name are usually too general to be effective tags.
  • Limit your hashtags to the most relevant topic(s).
  • Don’t add hashtags to get attention from people who track them. It’s a quick way to get blocked by the people you’re trying to reach.

Good Examples:

  • Where are we meeting today? #dmtweetup
  • Is there a #dmtweetup this week?
    • Great usage. People who would know are likely tracking that hashtag.
  • Accident on highway 30 by Duff Ave has eastbound traffic at a standstill. #amestraffic
    • Good tag, because the tweet isn’t easily tracked based on just the roads mentioned and word “traffic”.
  • It’s snowing! #amesweather
    • Proper usage, but are you sure you want to tweet about something this mundane?

Bad Examples:

  • 2 #Chicago #firefighters now reported dead in building collapse. http://on.cnn.com/hMGbSp
    • Bad, because both #Chicago and #firefighters are too broad of a topic. I would suggest using #ChicagoFirefighters instead. Although long, it is unique to
  • Culver to leave #Iowa w/surplus of $950M http://tinyurl.com/2f9wtb5 Branstad left similar surplus at height of 90s boom
    • Iowa is way too broad. Are we really discussing all of Iowa? This probably doesn’t need a hasthtag, but maybe #IowaSurplus would be a decent one if there was lots of discussion on this topic.
  • Three reasons the U.S. economy is ready to roll http://bit.ly/hY5hKy #money #savings #wages #unemployment #business #economy #tcot #p2
    • I don’t know where to start on this one. All those hashtags are super broad, except for maybe #tcot or #p2, but I don’t know what they stand for. Plus, just because you have room for eight hashtags doesn’t mean your tweet needs eight hashtags.

Thanks for tweeting responsibly!

Automatically identify and name social circles?

13 Dec

It seems that automatically identifying social circles based on friend connections is trivial. So once you have these circles, here’s my question:

Based on the Facebook pages that members of each circle like and the events that members have attended, can you automatically discover what these social groups are built around, e.g. ad-hoc friendship versus friendship incubated by Organization X?

Using Facebook with Code Igniter

2 Dec

A website I was working on needed to integrate with Facebook. Sadly, Code Igniter doesn’t have anything prebuilt to do this and despite my Google searches and an evening of frustrated copy/pasting, I couldn’t find a solution that worked for me. When you can’t find a wheel that rolls, reinvent it. Hm, that sounds like something someone famous would say, I think.

Here’s the overview of what I came up with.

  • Created a config file to set my Facebook App ID and Secret Key.
  • Created a Facebook library that would decode the Facebook cookie (so we can get their access token and user ID).
  • Created a user model that:
    • Fetches the user’s data in a JSON file via the Facebook Graph API given an access token.
    • Saves the JSON to the database (updates if it exists already).
    • Gets the stored JSON file from the database and decodes it.
  • Created a helper that would get the user ID from the cookie.
    • If the user ID wasn’t in the database, the access token is taken from the cookie and passed to the user model to fetch and save the JSON.
    • If the user is in the database, we load the JSON (via the user model) from the database and decode it so we can use it.
  • The page displays the username if the user ID is set, or the Facebook login button if the user ID isn’t.

And that’s all there was to it. Here is all the code I used. (I think that’s everything I changed. If I missed something, let me know.)

The next step would be using the users access token to pull additional data via the Facebook Graph API, but I haven’t gotten that far yet.

Hope that helps somebody!

Digital Books Empower

2 Dec

I don’t read the Iowa State Daily very often anymore. When I lived on campus, grabbing the Daily was part of my routine: I left Friley, walked to the UDCC, and grabbed the paper on my way to breakfast. Today, I glanced over somebody’s shoulder and saw an article in the opinion section by Michael Belding titled “Digital books take away human connection” (although the online version has a different title). The title grabbed me, so I grabbed a paper.

I have a third generation Kindle. It’s in my backpack every day as I go to school, and most nights it winds up on my desk next to my bed as I fall asleep. I’ve had my Kindle for about a month, and I definitely read more now that I used to. The article bothered me because I don’t think it was fair to digital books.

In the 3rd paragraph, Belding argues that books, given as gifts with personalized notes and thoughts, connect you to people and because the Kindle (and other readers) can’t offer this, they are inferior to physical books. I disagree with that sentiment. To be fair, I’ve never received (or given) a personalized book as a gift. If I knew someone who preferred digital books and I wanted to give them a book that I enjoyed, I would give them an Amazon gift card and a note about why I liked the book and why I thought they would enjoy it. If I wanted to really personalize it, I’d get a physical gift card and write a note by hand. I don’t think the lack of my highlights or scribbles in the margins would change their experience with the book. Besides, after they read the book, if we wanted to discuss our thoughts, we could easily sit down over coffee and do that.

My second frustration starts with the first sentence of paragraph 5, where Belding says that “the ease with which e-books can be acquired is disturbing.” I think the word here should be amazing. One night, I was getting ready for bed and thought to myself: “I haven’t read Ender’s Game in years. I really want to read that right now.” I don’t own the book and, at 11pm at night, if I had decided to get dressed and head out looking for it, not many bookstores would have been open. Within sixty seconds (no exaggeration), I was reading the first “page” of the digital copy of Ender’s Game. This isn’t disturbing.

Finding books is simple. I can search the e-book store for titles, authors, or keywords. I can browse the top selling books in any number of categories. When I spot a book that looks interesting, I can read a summary or quickly check reviews to make sure that this book is actually worth reading. With many books, I can even read the first chapter or check the table of contents, exactly like you would do in a physical store. And I can do all this without leaving my recliner. Belding makes a point about jotting down the titles of books he spotted. With Amazon, you can do that adding the title to your wishlist (which you can share with people a few weeks before your birthday or Christmas).

Belding wrote: “A large part of the reason for doing anything is the challenge associated with it. A life without challenges is an empty, cheap one. Before the advent of the e-reader, finding something to read was much more of a challenge. Acquiring it was another.” Sure, overcoming challenge makes for an exciting life. How many books have we read where the protagonist overcomes some challenge that defines his life? But if anyone writes a biography about me and says, “After much toil and searching, Adam finally obtained the seventh Harry Potter book and lived happily ever after”, I didn’t live much of a life. Finding books should be as simple. That’s why we have librarians and card catalogs and, now, advanced search algorithms that take me to the book I want in a second. The effortlessness of finding the book does not “cheapen the experience of the activity”.

Digital books offer so many benefits that Belding overlooked.

One of my favorite features in my Kindle is the text-to-speech feature. I downloaded one of my dry philosophy textbooks to my Kindle and with the press of a few buttons, my Kindle starts reading it to me. I was having a ton of trouble staying focused enough to make it through more than a few pages, but when the book was read quickly to me and I was following along, I could make it through an entire chapter without any problems. I can’t read in vehicles without getting carsick, so this feature will come in handy the next time I head out on roadtrip.

Having books as a stream of bits has some great benefits too. Ever remembered a word or two from a passage but couldn’t remember quite where in the book you read it? With e-books, you can search their entire contents in seconds, quickly finding the spot you were thinking of. No need to bother with an incomplete index when you can search the whole book. Highlights are improved too. Instead of flipping through pages trying to find all the pages you highlighted, you can click a few buttons and bring up a list of all the highlights you made, making it easy to go back and see what you thought was important.

One last feature worth mentioning is how easy Kindle makes reading other stuff. I’m currently halfway through a 900 page book of fan fiction that I found online in PDF format (Kindle supports MOBI, TXT, and PDF formats, among others). I literally downloaded the book, opened up a new e-mail and put in my Kindle’s unique e-mail address, and clicked send. I’ve done that with everything from books to short articles to classroom lab manuals. I never even had to hook the Kindle up to my computer.

Digital books are the next evolution of the printing press that allows the world’s library to be always at my fingertips. And that isn’t dehumanizing or disturbing… that’s empowering.

XAMPP and Tomcat – 503 UnsupportedClassVersionError

1 Dec

When working with Tomcat and XAMPP, I had a problem where I was getting a 503 error when I tried to load a page that came from a .war originally. I looked in the logs (C:\xampp\tomcat\logs\catalina.2010-12-01.log) to see what the error was.

Dec 1, 2010 10:25:28 PM org.apache.catalina.startup.HostConfig deployWAR
SEVERE: Error deploying web application archive statcalculator.war
java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class statcalc.StatCalculatorServlet)
 at org.apache.catalin..... [blah, blah, stacktrace, blah blah blah]

I searched the web a bit and found a post that said you could solve this by replacing the JRE that Tomcat is trying to use. If you’ve installed XAMPP to C:\xampp, the Tomcat JRE is located at C:\xampp\tomcat\jre. I renamed this folder jre-old, just in case, and created an empty jre folder. I then found the JRE I had installed (C:\Program Files (x86)\Java\jre6) and copied the bin and lib folders to my new empty jre folder. I started the server again… and hooray, it worked!

Hope this helps somebody! Leave a comment if it does. :-)

Interacting With the Web: Like, Save, or Share?

21 Nov

As you surf the web, you often just close your browser and move on to the next page. But if you enjoyed the content, you probably want to extend your interaction with that page. I think you have three options: you can like the content, save it, or share it. Or maybe all three. I believe each of these actions serves a unique purpose and sites should allow users to take these actions easily.

Like says: “I appreciated this content.”

This post made me smile, that video made me laugh, your comment raises a valuable point. Facebook has this on posts and photos and has extended it to company pages. On social sharing sites like Reddit or Digg, you vote on content you like (with rules that vary for disliking content). There is a big player on the web that doesn’t allow this interaction: Twitter. You could argue that just following someone implies liking something on Twitter. Result: by expressing your like for content on the web, you encourage the content creator to keep producing.

Sharing says: “I believe this content will be valuable to others.”

I share stuff that I find interesting, informative, funny, relevant, or when I agree with something that is posted and want to pass it along to others. Usually, you have an idea of who would want to see this content. Via e-mail, you might forward it a few friends. On sites like Reddit or Digg, you submit content to specific communities. Twitter implements this idea through the retweet feature, but it has a weakness: you target all your followers, not a specific community. Tip: the less targeted the sharing is, the less effective it becomes. Spam people with content that isn’t relevant to them and they’ll stop paying attention to you.

Saving says: “I plan to revisit this content.”

Saving content on the web often takes the form of adding a site to your browser bookmarks. Some sites and browsers augment this by making your bookmarks accessible from anywhere. Other sites, like Reddit or Twitter, let you save your favorite posts for later viewing. Google lets you mark search results with a star if you found it valuable. Result: The most valuable content will be easy for you to reference. By the way, here’s a start-up opportunity: If you can index the content people save across the sites they use, you’d have a collection of the best content on the web.

There are some other interactions that I didn’t list here. Commenting is a way for users to add their voice to content. Disliking gives users the ability to disapprove of content. Liking content can be expressed as a rating or have a description attached (like Slashdot).

Question: Did I miss listing any interactions? Which interaction is the most valuable for users? Creators?