Header text

EssayTagger is a web-based tool to help teachers grade essays faster.
But it is not an auto-grader.

This blog will cover EssayTagger's latest feature updates as well as musings on
education, policy, innovation, and preserving teachers' sanity.

Friday, December 23, 2011

Latest Update: Rubric drill-down analytics

This is one of the features I was most excited about when I first conceived of EssayTagger!

Read on or watch the tutorial video!

When you grade your essays in our system you're tagging and evaluating the students' text and storing it all in our database. That means that we can then retrieve all that information in powerful ways that aren't possible with traditional grading methods.

Grade a class set of papers and then go to the assignment's rubric performance analysis screen.
"analytics" tab > view aggregate rubric results

From here you can now drill down into each individual rubric core element. We're going to jump into the "Topic sentence" core element:

Click any of the "show text excerpts" checkboxes and the site will hit the database and retrieve your data:

The bold text is the feedback comment you selected for the student and the quoted text is the corresponding excerpt from each student's essay! The list is filtered to display, in this case, only the excerpts that were evaluated as being of "Level 4" quality. You can display the associated text excerpts for each quality level.

To make all of this more concrete, let's take a look back at the grading app:

Notice the highlighted essay text just above the comment selection box: "Students spend most of their days outside of home." Since that's a bad topic sentence, I'm going to select a Level 4 feedback comment. I chose the "This is a trivial fact" comment (of course you can always add a new comment if the existing ones aren't sufficient).

And if you look back at the drill-down analytics, you'll see that tagged text excerpt near the bottom of the list:

You can also select the "show students" checkbox to retrieve the name of the student who wrote each excerpt in the list:

Thank you to my friends who allowed me to use their names as sample students!

You can also uncheck "show text excerpts" and just display the student names:

This is a very simple--but very powerful--example of what EssayTagger.com can do now that all of your essay evaluations are in our database. Super-cool stuff!

Next I'll give you some ideas for how to use this data in your classroom.

Thursday, December 15, 2011

Latest Update: Class rosters!

Major new update: we now fully support class rosters in the system!

I've designed it to be as little work as possible for teachers to build and manage their class rosters. Under the ideal scenario (outlined below), you can let the students build the rosters for you automatically when they upload their first assignment.

Here's the tutorial video for creating and managing your class rosters in EssayTagger.com:

The student upload process has also been slightly altered to accomodate the changes. Here's the new version of the tutorial for student uploads:

And you can still upload essays yourself. It isn't ideal, but we know that not everyone is ready to have the students do the uploading. The biggest downside of uploading essays yourself is that it takes a bit more work to then associate each essay with a student. Here's the instructor upload tutorial:

Monday, November 28, 2011

Latest update: Rubric quality level direction

This was another feature that was requested at NCTE.

You can now specify if your rubric quality levels progress from best-to-worst or from worst-to-best. You'll find the setting on the Create Rubric screen under the first quality level input field

When you click on it you'll see the two simple options:

The direction determines which end of the rubric gets tagged with green (best) markers or red (worst) markers in the grading app and in the aggregate results grid.

The worst-to-best direction opens up the possibility of using massive year-long rubrics that have way more than five quality columns. We spoke to one publisher at NCTE whose system uses 14 quality levels. Sounds intense, but each individual assignment only targeted a sub-range within those 14 levels. An early assignment's rubric might only go from level 1 to 5 whereas an end-of-year assignment's rubric might range from columns 10 through 14.

Friday, November 25, 2011

Latest update: Student uploads!

Update 12/16/2011: This process has changed slightly and a new video has been recorded to cover the latest version of the student upload process.

At NCTE a lot of teachers asked us if we could have students upload their own essays. At the time - last weekend - the only option was to have teachers collect and upload the documents themselves. Not ideal.

I began telling people that my goal was to support student uploads by this Friday (today!). I said it to enough people that I realized it was now a promise!

So I made good on that promise.

In the Detailed Assignment View you'll now see a student upload URL:
The upload URL contains a five-character code that is unique for each assignment. Simply provide this link to your students and they'll be able to hand in their assignments online themselves. You can also still upload documents for the assignment yourself.

Here's what they'll see:
No student login is required; the link goes straight to the upload page.

We ask for their first and last name so that you can identify whose work belongs to whom once it's uploaded. They also must specify the class section they belong to so you don't have to sort through them later.

I also added a checkbox that basically says "I swear this is my work." It won't stop plagiarists, but it's one more piece of leverage you'll have over them.

All fields are required and they cannot submit until they have been completed.

I also built in a lot of safeguards against bad document files and incorrect file formats. I had a lot of problems with this on moodle when I'd go to open a kid's document and it was all garbled or in a format I couldn't open (e.g. ".pages"). I didn't want to relive that here.

For starters the "select document" button will only allow students to select a DOCX, DOC, RTF, or TXT file. These are the only formats we are currently able to support.

When they hit "Submit" their document is uploaded and they are forwarded to a status page:

Once the processing is complete they'll see their document embedded in a confirmation page:

At this point they can see their document and confirm that there weren't any errors along the way. Each essay is also timestamped with a submission date/time so you can see who was on time (due dates are configured in the Assignment setup). Submit time is set by our server - not the student's computer - to guarantee consistency and integrity.

Students can upload their document multiple times if they have revisions - you'll just see multiple copies listed under their name with different submit times.

I recommend that you try out the process yourself and demo it for your students in class. You can easily delete the test documents you upload.

As with everything on the site, I tried to make this as foolproof as possible - which is an added challenge when you're talking about asking students to follow instructions!

**Note: We attach the students' first and last names to the document filename but we don't yet support full student integration into the site. That'll take a bit more work but is a high priority on my to-do list.

Key takeaways:
  • Each assignment has a different, unique upload link.
  • Tell your students to wait for the confirmation screen.
  • You can still upload documents yourself if you need to.
  • The site supports DOCX, DOC, RTF, and TXT files.

Tuesday, November 22, 2011

Latest Update: Rubric aggregate performance data!

I've been promising this one from the start!

You can now see how your class as a whole performed on a particular assignment!

Each grid position tells you the incidence rates of each rubric element over the possible quality levels. The tiny number in the bottom right is the actual number of comments that counted towards the total from that grid position.

the full report
It's such a simple calculation for the database to do that I was able to write it in one straightforward request. This is the power of databases!! Yay!!

I've also experimented with adding some color coding. In the version that's now on the website (but not pictured here) the grid cell with the highest percentage is outlined in its quality level's associated color  - green for best, red for worst, yellow for in-between. We'll see if folks find the color border useful or not.

And this is just the beginning. We can pull so much more out of the database! Just tell me what you want to see!

Friday, November 18, 2011

Hello NCTE 2011!!

As evidenced by the many blog posts here that I don't understand, Keith has been coding like a madman since we started this thing in June. But it's now time for our public unveiling at NCTE 2011 in Chicago!

For those of you who don't know, NCTE is the National Council of Teachers of English and their annual conference just happens to be in Chicago this year and timed perfectly for our launch. So we knew we couldn't miss it, as it represents the single greatest gathering of the target audience for EssayTagger - and it's right in our home town!

Things are just getting started here, but armed with a couple of banners, laptops, and an awesome gift basket giveaway (more on that later), we're ready to show off our hard work to English teachers!

Friday, November 4, 2011

Avoiding Session conflicts on save() due to Hibernate lazy loading

With Java Reflection we can force Hibernate to instantiate lazily-loaded (aka proxy) member objects before we attempt to save the containing entity.

Yesterday I posted my Spring + Hibernate + Cloud SQL sample project code to help other developers get up and running with Hibernate and App Engine.

Today I had to make some DB changes and slightly rearchitected my code. That uncovered a problem. I'm using Spring's OpenSessionInViewFilter to support lazy loading in the view layer. It's dang convenient. And it's currently configured for singleSession=false. That means that it'll use a read-only Session for gets but a separate save/update Session for writes.

Calling getHibernateTemplate().save() had been working fine until my code reshuffling exposed a problem. If an entity has any member objects that have not yet been initialized (due to lazy loading), the save() call will throw a session conflict exception. Specifically:
org.springframework.orm.hibernate3.HibernateSystemException: illegally attempted to associate a proxy with two open Sessions

Here's a simple example:

The problem is that the read-only Session created the lazy-loading proxy Owner within oldCat but hasn't been asked to initialize the proxy yet. Then the save/update Session gets the newCat and tries to access its Owner and now both Sessions are trying to handle the non-initialized proxy, thus the "two open Sessions" complaint.

So folks will generally do something lame like this to get around it:

I'm not judging. I've done it in the past too. But it's clearly a crappy solution. If that chunk of code doesn't need to access any fields in Owner, it shouldn't have to just to make the DAO/ORM layers happy.

So here's my new solution: programmatically search for non-initialized proxies and call getHibernateTemplate().initialize() on them before we try to save.

This requires Reflection to inspect the Cat and look for fields that might need initialization.

Unfortunately my DAO doesn't have permission to access Cat's private member variables. So instead we scan for the public getters and look at their return types. If the return type is a domain object that is mapped by Hibernate, then we "get" it and initialize as needed.

How do we know it's mapped by Hibernate? I'm just filtering on the return type's package name; I only care about DTOs from com.essaytagger.model. The proxies that need initialization are easy to spot--they return true to (obj instanceof HibernateProxy) tests.

Here's the new version of my _GenericDaoHibernateImpl's save() method (my GenericDAO approach is kind of complicated. Track back through the Spring+Hibernate+CloudSQL post first and then see the more in-depth discussion of the original Objectify-based version that was adapted from David Chandler):

This GenericDAO work is getting me more and more into Java Reflection. It's pretty dang cool! But I'm not completely confident in this approach just yet. We'll see if any other odd use cases popup before we call this a win.

What do you think? See any problems down the road?

Wednesday, November 2, 2011

Spring + Hibernate on Google App Engine's new Cloud SQL!

Full project code for a Spring + Hibernate version of Google's "guestbook" sample webapp that accesses Cloud SQL!

Download the project code!

UPDATE: See the new version of my GenericDAO's save() method to avoid Session conflicts due to lazily-loaded member objects.

I was super-thrilled that Google approved my application to be part of the Cloud SQL limited preview. In gratitude I wanted to share the sample code that I used to do my proof-of-concept tests for accessing a SQL DB in App Engine.

I'm accustomed to using Hibernate with annotations for my ORM layer and was excited to be able to go back to that world in App Engine. But annotations won't work with App Engine as long as they limit the JPA spec to v1.x (I tried and failed to get around the limitation). So that means we're back to using Hibernate Tools and reveng.xml to generate the Hibernate *.hbm.xml mapping files. It's a pain and it feels like it's 2003 again, but whatever. Once you dust off that part of your memory it's not so bad.

Thursday, October 20, 2011

Demo now available!

I haven't had much time time to post here because we're hitting crunch time as we get close to our launch date. But we do have a big announcement: You can now try out our innovative essay grading tool for yourself!

The demo is available from our homepage at:


The demo is fully-functioning. The only limitation is that it is preloaded with two fake assignments (normally you would customize the assignments and rubrics yourself).

The demo loads with a basic five-paragraph essay rubric. It's not the most exciting thing ever, but it uses the language that teachers and writing instructors are most used to seeing.

What's more exciting is that the demo also has the option to load our "They Say / I Say" rubric. I've been working with Gerald Graff on the early stages of this rubric that is a companion to the blockbuster composition book by Graff and his wife, Cathy Birkenstein. We're really excited about continuing the work on the "They Say / I Say" rubric and sharing it with the book's huge following.

The site will launch with a small library of rubrics, including the "They Say / I Say" rubric, that you can take and customize however you like. I'm working with other teachers to develop rubrics for AP English Language, AP Literature, and others. You'll always be able to create your own rubrics from scratch if you prefer; these pre-made rubrics are just to give you a head-start if you want it!

Check out the demo and let me know what you think!

Thursday, September 29, 2011

Betting on the future, pt 1: Career guidance is more valuable than Huck Finn

In this two-part post I'll argue for why it isn't sufficient to just prepare kids for college. We also must guide them toward careers that have some hope of surviving and thriving in the 21st-century.

When my seniors wrapped up their college application essays I figured it would be a good time to talk to them about the realities of 21st-century careers. Which careers will survive? Which will die out in the next 10-15 years? Not the typical lesson plan for an English teacher, but most English teachers don't have nine years of experience in high-tech startups.

To get their thought processes started I argued that pharmacists won't survive. Awkwardly, a number of my students were planning on pursuing pharmacy in college. They were not pleased.

Betting on the future, pt2: Why pharmacists are doomed

In part 2 we explore why pharmacists are doomed in the 21st-century and in doing so get some clues for how to predict if a career is likely to survive the coming decades.

Previous: Part 1: Career guidance is more valuable than Huck Finn

Pharmacists are doomed. Well, at least in the United States. Rather than take my word for it, take a look at an article that was just published by Slate's primary technology writer, Farhad Manjoo: "Will robots steal your job?"

In it Manjoo argues that "Pharmacists will be some of the first highly skilled professionals who'll lose their jobs to machines." What I thought would be 5-10 years down the line already seems to be here; the pharmacists that he interviewed said "that the computers keep getting better, and that today's best robotic pharmacists are faster and less prone to error than the best human pharmacists." Whatever technology hurdles there are--hardware pill picking robots; reliable, exhaustive drug interaction databases--seem to have already been solved.

What is it about pharmacy or any other profession that makes it vulnerable? Manjoo articulates the factors quite well:

Saturday, September 24, 2011

Musings on Education: Technology vs Innovation

Educators are struggling to integrate technology into their classrooms, but we're losing sight of something much more important: Innovation.

The words "Technology" and "Innovation" are inextricably interrelated to the point where people tend to think of the two as being synonymous. I know I do. I mean if someone really asked us to articulate the difference between the two, we could come up with something reasonable. But, whatever--it's just a matter of semantics, right? Or so I thought.

I've just realized--and I mean "just" as in ten minutes ago--that if you really take the time to think about "Technology" vs "Innovation", there are huge, fundamental differences between the two terms. Fine, but why should you care? Here's my modest claim:

Understanding the difference between "Technology" and "Innovation" is what will save America.

Intrigued now?

Saturday, September 10, 2011

BitmapButton: A custom-skinnable ActionScript button

Source code for a simple, skinnable ActionScript button class that includes a really handy arbitrary data field.

Now that I'm a whole 20 days into learning how to code in Flash's ActionScript language, I'm getting pretty dang good.

Yesterday I needed to create a button for the Flash grading app, but I didn't want to use the default fl.controls.Button class that resembles standard HTML form buttons.

I wanted to be able to skin the button with my own Bitmaps that I would generate in Flash. I figured that the easiest way to do this would be to build my own custom button class. So I did:

Musings on Education: Last year's seniors begin college!

It's odd to refer to my seniors as being from "last year," considering that it was only three months ago! But most of them are now in their first couple of weeks of college and a number of them have been kind enough to tell me how my class helped them get ready--which was my #1 goal for their Senior English experience.

This is me beaming with pride--in myself as a teacher, but really for my students. As I told them in the last week of class, their lives, their successes, are my legacy. Whatever small role I played in leading them toward success is my contribution to this planet, what makes my life and my time here worthwhile.
"omg so i'm apologizing right now because i always complained when we had to do all that stuff with creating a thesis but today it actually paid off in my com class! my professor was so impressed with my example thesis! haha so i take back all those dirty looks!"
-Brianna W.
And, by the way, Brianna was the student who would tweet about how boring (or occasionally interesting?! Maybe?) my classes were!

Monday, August 29, 2011

Musings on Education: A different response to Brill's article on education reform

In my previous post I introduced Steven Brill's article about education reform and pointed out a minor flaw in Brill's argument. That post served as the jumping-off point for a great discussion in the post's comments. I feel like Jack and I made more progress in that discussion than I've heard in the education reform debate in the last five years! Check it out!

Here in part two we turn to an excellent piece by Shantanu Sinha, the President and COO of the amazing Khan Academy. I'm proud to say that Shantanu also happens to be a friend and a former roommate of mine!

Shantanu's response:

The first thing that jumped out at me from Shantanu's article was:
"I think the entire conversation has been hi-jacked by issues surrounding the adults and little has been done to address the needs of students.  If we spent more time thinking about what the students are actually experiencing, we would realize that we designed a very impersonal system that horribly misses their individual needs."
I think every teacher feels this tension. This lack of individualization is most obvious and apparent in the math and sciences, which is the area that Khan Academy is focusing on improving. And it isn't that teachers don't care enough to provide the individual-focused attention that's required, it's that it simply isn't possible given the complexity of the skills involved and the practical realities of the time and energy such organization and remediation would require.

Helping solve part of this problem is a big part of my motivation for creating EssayTagger.com.

Friday, August 26, 2011

Musings on Education: Nit-picking Steven Brill's article on education reform

Here's an interesting exchange that I just caught wind of off of my Twitter feed:

First there's Steven Brill's article, "The School Reform Deniers". In it he argues that the problems with America's public education system are "un-debatable" based on the facts that he has uncovered. His main criticism is with teachers' unions and he claims that they are, primarily, self-serving entities that are disingenuous about improving education. Read the article for yourself and decide the merits of his argument; I'll remain silent on that one.

But as an English teacher, I do have to point out one flaw in his argument. He states, as an example of the "un-debatable" power of fact:
I have now worked my way through a fog of claims that give new meaning to the notion that if you repeat something that is plainly untrue enough times it starts to seem true, or at least becomes part of the debate. For example, there’s the refrain from the deniers, including [Diane] Ravitch, that charter schools skim only the best students in a community. Some may, but not the best ones like those in the KIPP or Success Academies networks, where students are admitted by lottery and which teach the same ratio of learning disabled students as the traditional public schools. Those are facts.
Indeed, this is a fact that I completely accept. But there's a key phrase in his statement that he does not examine closely enough: "students are admitted by lottery." This is a fact. He's doing a good job stating it clearly. But what does that mean, to be admitted by lottery? Well, for starters, it means that the family had to apply for this education lottery. That is obvious. That is a fact.

But here's where a bit of subtlety and insight comes in: do all families in the neighborhood apply for this lottery? Doubtful. I'd be shocked if even half the families applied. Application to the lottery is a self-selecting filter. The significance of this cannot be underestimated.

Wednesday, August 24, 2011

Teacher Tech Tip: A legit use for a class Twitter feed

Twitter can actually be a useful class tool, albeit with some privacy considerations.

I really can't stand how the press jump all over any story where a teacher is using new technology--even if the teacher really isn't doing anything all that innovative or new. And jumping into a hyped-up technology ("I must get into Web 2.0!") just for the sake of being hip and trendy with the kids will be a waste of time.

Well Facebook and Twitter are about as overhyped as you can get. I see the value of Facebook. I'm on Facebook. I like it.

But Twitter? 140-character updates on my every waking moment? Not so much. And Twitter in the classroom? Shyeah, right.

That is, until I saw this:

(skip the intro text, scroll down to the slide viewer box)

I think there is educational value here. Twitter can be a useful means of communication to help students outside of the classroom. Email, discussion boards, and class wikis have their purposes too (many of which slightly overlap here) but Twitter offers the combination of:
  • Speed - instantaneous reach to your students. Just as fast as email.
  • Brevity - good for sending out quick reminders, daily summaries, short answers.
  • Broad reach - all followers (students) can see your updates and clarifications. 
  • Public 1-on-1 - if one student has a question, odds are that others have the same question. Answer it once and let everyone else see the response.

Sunday, July 31, 2011

Progress update: 3,605 lines of code so far

Lines of code don't really tell you much of anything; it's all about quality over quantity and good programmers tend to code more concisely and efficiently than novice coders. But it is fun to check the numbers from time to time. Here's where I'm at thus far:

3,605 lines of actual code. That's pretty solid, especially considering that I've put a lot in place to avoid repetitive "boilerplate" code. Each Java file averages only about 50 lines of code; that's pretty light and efficient--the way I like it!

Code "comment" lines are super-important; that's where the developer explains to other developers (or him/herself) what the code is doing. Comments should count toward the total.

And even "blank" lines are important, otherwise all of your code is jammed together and is a lot less readable. I program like I write essays--with distinct paragraphs where each paragraph contains its own complete thought. Whitespace matters.

So if we add back in the comments and the blank lines, we get 5,630 lines!

Whew! Toldya I was busy!

Thursday, July 28, 2011

Time-out for: Mosquitos... and the death of the English language

Oh, the pain.

I'm suffering from two mosquito bites that are out of reach of my normal method for alleviating the itch: scalding them with hot water. I claim that there are vaguely scientific reasons for why the scalding hot water does actually work (I'll get to those at the end).

But I figured it couldn't hurt to google--yet again--to see if there was another remedy to try. I came across a particular Yahoo article that was vaguely interesting. The reader comments had a lot of home remedies to offer as well.

Now let me warn you. Plenty of readers had mistakenly used the possessive S "mosquito's" when they meant the plural S "mosquitos." That happens all the time. Everywhere. Sorry, English teachers; this might be a battle we cannot win.

But nothing could have prepared me for the grammatical terror of this comment:
Click to view full-size, if you dare

Friday, July 22, 2011

How to programatically upload a file to Google Docs when you can't create a java.io.File in App Engine

Google's Data API (gdata) makes accessing their suite of tools and sites a lot easier than making direct HTTP calls to the Web-based service interfaces. But there don't seem to be too many code snippets out there--or at least not enough that do what I want to do.

I have a document that was uploaded through a Servlet and is now sitting in a byte[] array. Now I want to upload that file to my app's Google Docs account. Here's what Google's documentation offers:

Fairly straightforward, but there's one catch: The setFile() method is expecting a java.io.File. Normally that isn't a problem, but if you're developing in Google App Engine (GAE), then you know that you can't create filesystem files.

Digging through the DocumentListEntry code (thank you, Google, for making gdata open source!!) I was able to figure out how to avoid this File creation entirely:

Wednesday, July 20, 2011

Elegant coding with Objectify, Java generics, and interfaces

David Chandler posted code for an ObjectifyGenericDao on his blog. It takes care of all of the typical Objectify datastore operations you might need to perform on any kind of entity type.

It works great as-is. Here's a code snippet of the generic DAO in action:

Pretty simple. You define the generic type as you directly instantiate the DAO and you get instant access to ObjectifyGenericDao's suite of basic datastore operations.

But directly instantiating any service layer should set off an alarm in your head: "Wait! I'm supposed to code to interfaces!"

Tuesday, July 19, 2011

Google App Engine update: OAuth2 access into Google Storage!

This isn't the biggest accomplishment ever, but it is a necessary step for what we want to do.

I still don't like that I have to use three-legged OAuth2 authentication from my company's Google App Engine site into my company's Google Storage cloud storage account. I should be able to trivially directly connect them (tighter Google Storage integration is high on the GAE team's to-do list).

But instead I'm forced to use three-legged authentication which, by design, protects my Google Storage username and password from my GAE app. Call me crazy, but I'd much rather just store my Google Storage account info in a protected properties file and let my GAE app log in directly. I don't need the level of indirection/protection that three-legged authentication provides.

In fact, it makes me worry more. Instead of a permanent link between my app and my cloud storage, I have a refresh token that I use to ask Google Storage for permission to do anything. If anything goes awry with that refresh token, my app can no longer access its own cloud storage provider. That's a problem. And resetting that connection requires manual intervention on my part--I have to re-initiate the authorization process by hand and approve the connection, then feed the resulting access code to my GAE app so it can then get a new refresh token from Google Storage.

Sound complicated? It is. And for direct internal access, it's way too cumbersome. I'm going to have to build an interface to streamline the process of re-authorizing my site with my storage just in case something goes wrong with the current refresh token.

But the good news is that the code is working and I'm able to make authorized requests into Google Storage.

Up next: Upload a file from a Web browser and push it into the cloud.

After lunch. Maybe.

Friday, July 15, 2011

Time-out for: Kind words from my students

I love that I had all seniors the last two years. It makes it easier to leave my position at the school knowing that we're all moving off toward our own new adventures.

The kids were a little shocked to hear that I resigned but they've been super-sweet and supportive.

I wanted to collect some of the things they had to say in one place and I figured I may as well share it with y'all too.

"I'm just sad my sister won't be able to have you. You were one of my favorite teachers and I hope that even out of the classroom you can put your talent to good use and influence kids in alternative ways. Thank you for being awesome. Good luck wherever your life takes you now."
--Colleen R.

Tuesday, July 12, 2011

Diving into Google App Engine!

As discussed in a previous post, it's become obvious to me that Google App Engine (GAE) is really the only viable choice, given how I feel about server uptime, config, backups, disaster recovery, etc.

GAE's cutesy logo
So this is Day One of figuring out this weird, sheltered, somewhat limited environment that is GAE. I won't be posting daily updates, but I will post major progress points. This blog is as much a public information portal as it is a diary for me to remember how this company got itself off the ground (well, let's hope it does!).

And this will definitely prove to be a major piece of the puzzle; the odds of this company's success ride squarely on my ability to hitch ourselves to that silver and blue engine.

Here we go!

Source code control on the cheap: Assembla

A solitary developer at a tiny startup can use Drobox as a poor man's source code control system. In fact, that's what I started with to use as a just-in-case code backup. It's also super-convenient for syncing work between multiple computers (see my extended post on Dropbox). Not so great for team-based coding though.

Pretty soon though you'll want to incorporate a real source code control system--CVS, SVN, take your pick.

Latest addition to the team: Mike, Visual Designer

I've tapped Mike, a former co-worker, to be our visual designer for the interactive Flash portions, the Website look-and-feel, and the EssayTagger logo!

Here are a few samples of his work:

Print work for Sony

I almost worked for these guys (or their parent company) in Austin, TX!

Mailer for the company where I met Mike: AlphaDetail, Inc.

Check out the rest of Mike's online portfolio here: mikegracedesign.com

I have reasonable aesthetic sensibilities (I am, after all, a photographer), but I really don't have the chops to be a full-blown visual designer. Having a professional visual designer of Mike's caliber working for us is a huge win; we'll look much more established and impressive than we would if it was just me hacking elements together in my spare time.

That being said, we're still a tiny organization. I'm the only full-time employee. Mike has a full-time day job and is contributing what he can in his free time. Since Mike is a friend of mine and a believer in the project, we've been able to work out an arrangement where his compensation will come in the future. This preserves our tiny cash reserves while giving Mike incentive to see us be successful; he'll profit as we profit.

I'll see if I can get Mike to occasionally post here as he develops and refines the visual design for EssayTagger.com!

Teacher Tech Tip: Cloud storage via Dropbox.com, pt3

Cloud storage via Dropbox.com, pt1
Cloud storage via Dropbox.com, pt2

Part 3: How I set it up

Creating an account at dropbox.com is trivial. You can figure that out yourself. Then I had to have our tech folks install the Dropbox application on my school laptop for me (we're not given the adequate permissions to install software ourselves). They said that they could not "officially" support Dropbox--meaning that if anything went wrong, I was on my own. They also knew that I was uber-tech-savvy so they trusted me to not make a total mess of things. The point is: it may take some convincing, but Dropbox is super-simple; you're really not taking on a huge risk here.

Installing the Dropbox app creates a Dropbox directory on your computer.

Dropbox integrated into the MacOS Finder

Then I organized ALL of my school files under the "Dropbox >> Public" directory. I did this because I knew I'd want certain files to be public--like my assignment writeups--so for simplicity I kept everything under that directory (reminder: despite the name "Public", the files I chose not to share were still perfectly safe and protected).

All of my directories that lived under the Public folder

I created a directory for each prep and then organized all of my files inside that directory. Here's a look inside my Senior English directory structure (notice the breadcrumbing links that show each level of the directory hierarchy: Dropbox >> Public >> Senior English >> Q2 >> Sir Gawain):

Note: These screenshots are of Dropbox's Web interface. But the easiest way to organize all of this by just creating folders and moving files around on your actual computer, under the Dropbox directory. The only reason I used the Web interface screenshots is because I already wiped my school laptop so that I could return it to them.

Then just make sure that every file you create for your class goes in the appropriate place under the Dropbox folder. And, voila, you have instant cloud-based backup working on your school computer!

So let's put it to the test. Want to see what I make the kids do in those Sir Gawain Reading Questions assignments? Here's the public link to the Reading Questions for stanzas 1-33. Enjoy!

Then, if you'd like to sync your files at home: install the Dropbox application on your home computer, link it to your Dropbox account, and it will immediately begin syncing your files between work, home, and the cloud.

Pretty damn cool stuff, eh? Toldya.

Update: They have larger referral bonuses for accounts from a .edu domain! You and your referee get bonus free storage space. This double-incentive referral system is actually a big part of their massive, sudden popularity.

Teacher Tech Tip: Cloud storage via Dropbox.com, pt2

Cloud storage via Dropbox.com, pt1  

Part 2: What are the cool things you can do with it?

Sync to other computers
You can set up Dropbox to sync your files not just to the cloud but across multiple computers. Anything that is in your Dropbox account on one computer will be automatically synced to all of your computers.

Start writing up an assignment on your work laptop. Save the file in your Dropbox folder. Leave the laptop at work. Go home. Guess what's waiting for you on your home computer? That's right, the file that you created at work. Keep refining the assignment at home. Go to work. There it is. Mind-blowing.

Access from anywhere on the Web
You're meeting with a colleague and you need to bring up an assignment but you don't have your laptop with you? No problem. Open a Web browser and login to your account on dropbox.com. You'll see the exact same directory structure that is on your laptop. Click on the file you want to download and view it. Done.

And you can upload any file you want to your Dropbox account through a Web browser. And once it's uploaded it will instantly sync with your other computers. Upload via Web and it'll be synced to your school laptop the next time you open the lid.

Access from Web-enabled mobile devices
Out at the club and want to impress the ladies with your amazing Shakespeare PowerPoint presentation (hey, it could happen right?)? Take out your iPhone/Android/whatever and fire up the free Dropbox mobile app. Navigate to your Dropbox directory and download the file to your phone.

Or, more likely, you see a sweet grammar error on a huge outdoor billboard. Snap a picture of it with your camera phone and then "share" it to Dropbox (that option automatically appears once you install the Dropbox app on Android). It will deposit your image in your Dropbox account and you can pull it up at school the next day to show to your kids.

Share files without actually emailing the files
This one really blew my mind. Dropbox automatically creates a "Public" folder. Anything you put in there can be shared with anyone on the Web (don't worry, by default no one can see anything in there). You just ask Dropbox to generate a public link to that file. Anyone with that link will then be able to download the file.

Here's the mindblowing part: The recipient will download only the latest version of your file.

I sometimes find it necessary to tweak assignments. Usually it's to clarify an instruction. But once the kids have the assignment, it's usually too late to change things. But now I can post the public link to the assignment instructions (I have a class moodle site) and I can make changes when necessary. When a student clicks on the assignment link, she will see the most up-to-date version.

Consider another file that often changes: my gymnastics team roster. As the season goes on, kids inevitably quit or sometimes we actually gain a few kids. The activities office needs updated rosters at various points in the season. Instead of emailing them multiple versions of an Excel spreadsheet, I can just send them that one public link to my roster file. I update it on my school laptop. Dropbox syncs the new version to the cloud. The activities office can click on that same link week after week and will get the most up-to-date version of the file each time!

This totally avoids the confusion of, "Wait, you sent me three versions... which one should I look at?"

Amazing. There's no reason to ever email a file as an attachment again. And, as an added bonus, you don't clog up people's Inboxes with large attachments.

Next: Part 3: How I set it up

Teacher Tech Tip: Cloud storage via Dropbox.com

Cloud storage will make your life easier by giving you fool-proof file backups and super-useful new ways to access and share your files! Invaluable for teachers and, well, everyone.

I assure you I'm not a corporate shill (well, other than for my own company, that is), I just like to spread the word when I find a service that I like. Well here's a service that I LOVE:

Dropbox.com is free cloud storage. It's awesome. I used it during this past school year and it kind of changed my life.

Why is cloud storage a big deal and why should you care?
At a basic level cloud storage is a super-easy and super-reliable way to backup your files. But once you've backed up your files to the cloud, there are many awesome new ways to access and interact with your data. It's kind of mind-blowing.

I'm a tech geek and it took me a few weeks to really wrap my brain around what was now possible thanks to cloud storage. It's more than just a backup; it's a massive paradigm shift.

This post is written for teachers but it's also tagged "startup" because anyone building a business could benefit from what cloud storage / Dropbox has to offer.

Monday, July 11, 2011

Sunshine, southern California, and... recruiting?!

From: Marina del Rey, CA
I lived in LA for six years so every summer I come back to enjoy the sunshine, spend time with my acrobat friends on Muscle Beach, and just relax. Well I've just arrived in LA, but this year I'm on a mission: I'm building EssayTagger.com even while I work on my tan and burning off my winter fat!

Here's the view from my "office" (aka the Marina del Rey Starbucks):

I'm also working my contacts while I'm out here. LA isn't nearly as jam-packed with tech talent as the Bay Area is (I lived up there for two years before LA), but there is a lot of development going on down here.

I have an acquaintance that I'm trying to recruit to do some of the more hard-core Flash ActionScript development. And I'm piecing together the company's advisory board; a friend of mine in Santa Monica successfully started his own social networking site (no, I'm not friends with Mark Zuckerburg) and I'm hoping to get him to sign on to advise us as we build and grow.

As you can see, building a company is very stressful
On top of that, I've got to crank through the Java development while I'm here. Our mid-August demo target comes a mere 2-3 weeks after I return from LA. I've got to get the bulk of the work done while I'm here.

So this really is a working vacation--and arguably more work than vacation (right, IRS?).

Thursday, July 7, 2011

I'm going all-in!

As of today I have resigned from my teaching and coaching positions. Building EssayTagger.com will be my sole focus for the foreseeable future.

I agonized over this decision for months, but it essentially boiled down to the push and pull of two factors.

The first was that it was becoming clear that I could not function to the best of my ability in my current environment. I loved everything that was going on inside of my classroom, but--as most teachers are well aware--the frustrations outside of the classroom can become toxic and unbearable. I was working way too hard to be that unhappy.

But I don't want to dwell on past frustrations. This space is about looking ahead, working toward an exciting future.

And that's where the second part comes in.

A friend's photo, but a familiar sight. Poor Jess!
My mentor told me that grading essays was by far the worst part of being a high school English teacher. I'm sure you teachers out there know well where he's coming from. I certainly felt that pain when I had 102 Senior English Lit synthesis papers come in on the same day.

While crawling through those papers I began to dream of ways to make grading more efficient. And then a killer idea crystalized.

As the days and weeks and months went by it became more and more clear that I needed to pursue this idea. It IS the future of grading essays.

As a result, I'm pushing forward with an incredible amount of excitement that far outweighs the frustrations of the past.

I hope those of you who are teachers will forgive me for stepping off the front lines. But I believe in this product that we're building and I am confident that it will improve teachers' lives (how exactly will EssayTagger.com help you grade essays more efficiently? Well, we're still in stealth mode so you'll have to wait a few more weeks to find out).

So while I may no longer be directly impacting students, I am hoping to directly impact teachers (and, let's be honest, make a modest profit along the way!).

I also knew all along that this company would require my full attention; there was no way that I could build it in my free time and still teach and coach. I mean, "free time"?! What free time?! This was always going to be a full-time commitment.

The future looks bright
I am, by nature, a very risk-averse person. I hate gambling. I generally focus more on avoiding the worst-case scenario than shooting for the best-case scenario. It's not very exciting or sexy, but I play it safe.

And yet I have resigned from my job and am launching this startup company with zero fear. I am not up late at night, biting my fingernails, wondering if I'll default on my mortgage. Maybe I should be. Maybe I'm a fool.

18"?! Just give up!
But I know the pain that teachers feel when grading papers and I know that this product we're building can be a huge help. I know that the technology hurdles are daunting--especially since I'm about five years out of date on the latest programming tools and trends!--but I'm confident that I can overcome them. And, as you'll see in the coming weeks, I have access to some incredibly gifted and resourceful people that will be involved in the business.

I'm too optimistic and too excited about all of this to be nervous or scared. The opportunity here and the possibilities are so great that they've overridden my conservative, risk-averse nature.

I know that our profession needs as many dedicated, talented people it can find. I'd like to think I was one of the ones that fit that bill. And I am sorry to leave the ranks. But if I--if we--can make this project a reality... well then we'll all have reason to celebrate.

The plan
Obviously we are already a few weeks into this project. Luckily I've got my brother-in-law on board to help with the business side and I've been reaching out to people I know who can help out on the technology side.

We are tentatively planning a modest round of financing in mid-August to cover operating expenses for the first seven months. That's also the target for a working demo or site beta so we can show the investors what it is they're investing in.

Early September is the target for the actual site launch. We would likely begin with an open beta period for a month or so as we polish off the rough edges and continue implementing more features.

By October we should be fully up-and-running, focusing hard on spreading the word and attracting new users.

We've already figured out how to run the company for a ridiculously tiny amount of money. mostly thanks to crazy advances in technology and the fact that we'll only have one full-time employee: me! A small additional financing round will probably be necessary in March to bridge us to the point where we're making a profit.

I would like to give this company at least a year to see where we end up by September 2012. Because of the low costs of the operation, we don't need insane adoption rates to reach the break-even point. Our initial goal is to hit 1,000 paid users within the first 12-18 months; by Web terms that's just a drop of water in the ocean. There are about 125,000 high school English teachers in America, 114,000 Social Studies teachers, and untold tens of thousands of university instructors and professors that might benefit from our product. And we're just looking to nab 1,000 of them, initially.

I like our odds.

One final pic: At the peak of her insanity, Jess posted this photo with this caption:

"I r helpin u grade, cuz my grammer iz better than theirs."

And no, cats trained to grade essays is not the solution I have in mind. Though I think maybe Flynn here should be our mascot!

Hello, EssayTagger!

Thanks to Keith for that great introduction a few weeks back. Truth be told, my involvement here started over the dinner table and I managed to successfully insert myself in the business. I guess that negotiations class in b-school did come in handy!

All joking aside, this project hits two of my passions: education and technology. Education because - well, who doesn't care about education? I was blessed with a great education with some wonderful teachers back in my time, and I've always wanted to give back to improve the quality of education and teacher's lives. And technology because that's always been my interest from the first day I laid fingers on an Apple IIe back in grade school. My career to date has been on the business software side of things, so I'm looking forward to doing something really amazing to help people (and not just some organization's bottom line).

I'll be posting occasionally about education, the business as well as my non-programmer perspectives on technology. Chief Everything Officer? COO? Whatever my title, I want to have some fun and make a difference!!

Tuesday, July 5, 2011

A Big Decision: Use a traditional Web host or commit to Google App Engine (GAE)?

Oh tradeoffs, why must you torture us so?


The dilemma:
One of the hundreds of things on my to-do list is to figure out Web hosting. For what we want to do a Virtual Private Server (VPS) or cloud VPS seems like the best option. A standard Tomcat host environment won't work because our current designs rely on having OpenOffice installed as a service that we can make calls into. A VPS solution essentially gives us a fresh server that may or may not even have an OS installed on it yet and we can install and configure it however we like.

A VPS setup gives us that freedom and a cloud-based VPS gives us scalable horsepower. Awesome.

But what happens when the server instance crashes? What happens when the database crashes? Presumably a VPS (and certainly the cloud variety) would have redundant-enough distributed/RAID data storage, but what happens if we do suffer data loss?

Any half-decent dot-com needs to have recovery strategies in place to handle any possible calamity, regardless of how unlikely they are.

And here's our first problem: I'm not much of a hardware guy. I really do NOT want to muck through all of this.

But even if we had the world's greatest server admin, we would merely be in good position to recover from disasters when they happen; no one--no matter how good--can make server disasters disappear altogether.

And a VPS--or any Web host or colo option--requires too much machine/environment maintenance and disaster recovery.

The solution(?): Google App Engine
The best way to offload these concerns seems to be to run your code off of Google App Engine (GAE) instead of a traditional Web host/Web server.

Friday, July 1, 2011

Two-legged authentication via OAuth2 to Google Storage: Easier than it seems

First of all, if you're reading this post on purpose and have any clue what the title actually means, then you're in the right place.

If you aren't a tech geek, give up now and make better use of the next five minutes of your life.

Wednesday, June 29, 2011

Corporate email accounts via Google Apps

I set up the EssayTagger.com email accounts today through Google Apps. I already use Gmail for my personal mail and my school district transitioned to Google Apps-hosted services last semester.

As far as I'm concerned, Google Apps for your organization is a no-brainer. My overall philosophy for EssayTagger.com is to leverage as much outside expertise as possible--which is another way of saying: offload as much as possible, wherever practical. Yes, I know how to do a whole lot of the tech stuff on my own, but there's a lot of it that I shouldn't be doing on my own because other people can do it better and more cost-effectively.

Sunday, June 26, 2011

Time-out for: Summer!

From: Des Plaines, IL
This looks like a product photo but it is actually a shot from my cell phone. My neighbor sure knows how to cool off in the hot, humid summers! And his two-year-old daughter has shockingly good aim with that water cannon!

 Okay, now that we've cooled off, back to work!

Wednesday, June 22, 2011

Domain name purchased!

It's hard coming up with a good domain name these days. We decided that our domain name should:
  • Describe the service.
  • Be professional and appropriate for both teachers and students.
    • (no goofy, random names--like google, moodle, GoDaddy, etc.)
    • (and nothing that suggests teacher laziness: FasterGrading, EasyGrading, etc)
  • And yet still be at least a little memorable.
  • Be reasonably easy to spell since students may be typing in the URL.
  • Last, but not least: be available for purchase!
In the early phases when I was first playing with this idea I grabbed WritingBrilliance.com. But I think you'll agree that it's too long and too prone to misspellings.

After a lot of brainstorming and a lot of registrar lookups we ended up with: EssayTagger.com.

It fits all of the criteria reasonably well and, as you'll see in the coming weeks, it really does describe our service.

I went with Register.com as my registrar. I've used them for most of my other sites and I've been happy with them. I'm put off by the flashier registrars and their marketing campaigns.

Sunday, June 19, 2011

Time-out for: Gymnastics (and Photoshop) fun!

From: Elk Grove High School
I'm proud to say that my gymnasts took home the 2011 MSL Boys Gymnastics Conference Championship this year! Everything came together at just the right moment and we beat the other 10 teams in our Conference (three of which were top-10 in the state! Oh, we're in Illinois, by the way--one of the few states that has a high school gymnastics league). And since it was our turn to host Varsity Conference, we got to do it in our own gym.

2011 MSL Champs!

There's a great article about the win from the local paper here:

The trophy is designed to have an 8x10 team photo mounted in it. The Varsity roster tends to change a bit by the end of the season, so I wanted to take a new photo to put in the trophy. Plus I wanted the trophy itself to be in the photo.

Here's how it turned out. Nice!

The trophy looks nice in "the cage"--our tiny, tiny gym!

And here's a closer look at the team photo:

Yes, I'm the shortest guy in the photo

But here's your brainteaser challenge: Notice anything odd about the photo?
The answer after the break.

Monday, June 13, 2011

First addition to the team: Yutaka, Chief Everything Officer

From: Des Plaines, IL
I'm the guy with the educational vision and the tech know-how.

But I kind of hate dealing with a lot of the nitty-gritty business details. But this project will get nowhere without someone solid working the biz side.

Enter Yutaka.

He is a UC Berkeley graduate and has an MBA from the UCLA Anderson School of Management and over 15 years of experience with a strong focus on software--everything from modeling client data/organizations to sales to business development. He's already doing an amazing job investigating and planning and projecting everything that needs to be done to keep us on target.

Oh yeah, and he's my brother-in-law.

Yutaka posing with my sister and their daughter. Photo by Kenny Nakai.

I love the title I've given Yutaka: Chief Everything Officer. But he tells me that in reality I would be the CEO (the traditional Chief Executive Officer role) and he would be more like the COO.  In these early stages we're playing things a bit loosely but obviously everything will be formalized and solidified in the coming weeks.

Watch this space for blog posts from Yutaka!

School's out! Let's get started!

From: Des Plaines, IL

I am super proud of what my Senior English classes achieved this year, but I am totally exhausted! As a second-year teacher I'm still struggling to figure out that life-school balance. So far: All school, no life.

Look at all that learning going on!

The killer for me is that I also coach. Girls gymnastics begins in mid-November and then runs straight into boys gymnastics (for which I'm the head coach) and that season runs almost to the end of May. Between teaching and coaching I've just been through five straight months of 80-hr weeks!

So I've managed to barely crawl to the finish line at the end of Year Two.

Celebrating graduation with one of my seniors

But there shall be no rest this summer! I have a vision for how essays can be graded faster and better than ever before. This summer is going to be all about diving into building this technology and building this company.

This approach will be the future of grading essays. Of this, I have no doubt.

English teachers, Social Studies teachers, and college instructors will suddenly find themselves with HOURS of their lives back, their students will get incredible feedback on their work, and administrators will have a plethora of real-world data that is more reflective of actual student achievement and critical thinking (or so I think) than any standardized test score.

How am I going to do this? Well, before I was a high school English teacher I was a professional programmer in the dot-com world for nine years. I graduated cum laude from Princeton with a degree in Computer Science. And I know a ton of super-talented, super-resourceful people who can offer whatever expertise or experience I lack.

We are currently in stealth mode so I can't share too much just yet.

But I can tell you that we are aiming at a mid-August demo/beta and a full-blown launch in September. It will take a ton of hard work throughout the whole summer, but words cannot express how excited I am by this idea and by this challenge!

Watch this space for updates on our progress, ruminations on the state of education in America, a lot of tech gobbledy-gook (despite being an English teacher I am a super-geek at heart), advice and lessons-learned for other startups and entrepreneurs, and other random tidbits.