<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Grockit blog &#187; software development</title>
	<atom:link href="http://grockit.com/blog/main/category/software-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://grockit.com/blog/main</link>
	<description>Grockit</description>
	<lastBuildDate>Tue, 08 May 2012 20:49:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Hundreds of thousands of new updates</title>
		<link>http://grockit.com/blog/main/2011/08/22/new-content-editor/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new-content-editor</link>
		<comments>http://grockit.com/blog/main/2011/08/22/new-content-editor/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 21:05:59 +0000</pubDate>
		<dc:creator>Ari Bader-Natal</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[expert series]]></category>
		<category><![CDATA[feature]]></category>
		<category><![CDATA[grockit]]></category>
		<category><![CDATA[guest post]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://grockit.com/blog/main/?p=4525</guid>
		<description><![CDATA[An abbreviated guest post version of this post can be found on the Mechanical Turk blog today. The primary learning activity on Grockit is problem solving, so it’s probably not surprising that Grockit has developed a large (and growing) library of problems to solve. What began as a few hundred problems has quickly turned into [...]]]></description>
			<content:encoded><![CDATA[<p>An abbreviated<a href="http://mechanicalturk.typepad.com/blog/2011/10/editors-note-ari-bader-natal-is-the-chief-learning-architect-at-grockit-the-fast-growing-online-social-learning-startup-bac.html" target="_blank"> guest post version of this post can be found on the Mechanical Turk</a> blog today.</p>
<p>The primary learning activity on <a href="https://grockit.com" target="_blank">Grockit</a> is problem solving, so it’s probably not surprising that Grockit has developed a large (and growing) library of problems to solve. What began as a few hundred problems has quickly turned into hundreds of thousands of questions, answers, explanations, and more.  Over the past few years, we’ve developed an assortment of technologies and processes to make this possible. Over the past few weeks, we’ve been revamping this infrastructure in some powerful ways, and I wanted to share a few (technical) notes on what we did, how, and why.</p>
<p><img style="float: right; padding-left: 10px;" src="http://aniszczyk.org/wp-content/uploads/2010/04/got_git_tshirt.jpg" alt="" width="200" height="200" /> When you’ve got tens or hundreds of people authoring problems, things inevitably get messy. Invisible markup affects question formatting in unexpected ways, mathematical expressions are input in several different ways, questions often get modified and revised by a sequence of different authors, and it gets increasingly difficult to figure out who changed what, when, and how.  In short, a fully-featured content management system (CMS) was in order.  At the same time, however, there are some meaningful customizations that we made to our editor that a CMS wasn’t designed to support: everything from AP exam question types, alignments to various state standards, images externally hosted on Amazon <a href="http://aws.amazon.com/s3/">S3</a>, special handling of long reading passages, supporting open-ended responses to certain math problems, a combination of skill tags and taxonomies, and a slew of other requirements specific to the type of “content” that we needed to “manage.” Ultimately, we decided to take a hybrid approach, using a customized application for the high-level structure, and a version control system for low-level content management.  The first challenge was building this hybrid application (an engineering problem), and the second challenge was moving from our existing system to the new one (a process problem). I’ll expand a bit on how we approached the engineering problem and how we tackled the process problem.</p>
<p>Grockit’s new content editor banishes hidden HTML markup by replacing the standard rich-text editor with a plain-text editor that uses <a href="http://daringfireball.net/projects/markdown/">Markdown</a> to signal formatting. Markdown was designed to keep things simple and intuitive, and that’s just what we were looking for. In order to know who changed what, when, and how, we rely on <a href="http://ftp.newartisans.com/pub/git.from.bottom.up.pdf">Git</a>, a distributed version control system frequently used in software development, where many different people are changing different parts of a system over time. Beyond accounting for every last text edit, git allows us to do full-text search of content, and even do full-text search through past versions of content. Think “track-changes”, but on steroids. Git is generally accessed from the file system, but we were looking for a simple web front-end for our system. <a href="http://grockit.com/blog/main/files/2011/08/editor.png" target="_blank"><img style="float: left; padding: 10px 10px 10px 0;" src="http://grockit.com/blog/main/files/2011/08/editor.png" alt="" width="407" height="204" /></a> The team at <a href="https://github.com/github">GitHub</a>, an immensely popular website for collaboration on open-source software development, put together a fantastic tool that we adopted and modified, named <a href="https://github.com/github/gollum">Gollum</a>. Gollum was developed as a git-backed wiki (in the form of a Ruby <a href="http://www.sinatrarb.com/">Sinatra</a> application)  that uses Markdown for formatting, and incorporates the browser-ready <a href="http://www.mathjax.org/">MathJax</a> engine for beautiful <a href="http://en.wikipedia.org/wiki/LaTeX">LaTeX</a> typesetting of mathematical expressions in modern web browsers. For example:   \[ P\left(X_{vi} = 1|\theta_v,\beta_i,\alpha_i,\gamma_i\right) = \gamma_i + \frac{1-\gamma_i}{1+e^{-\alpha_i(\theta_v - \beta_i)}}\]</p>
<p>Loosely-coupling the Gollum-derived editor with the <a href="https://github.com/nathansobo/monarch">Monarch</a>-based application afforded us with a customized editor that supported change tracking and reverting, full-text search of current and past version of content, much-simplified markup, more beautiful math, and a slew of other improvements and enhancements.  This new system, however, assumed that text is in Markdown format. All of the existing questions, answers, and explanations weren’t, though, and that left something of a challenge.</p>
<p>The challenge: convert each bit of content in the <a href="https://grockit.com" target="_blank">Grockit</a> system from free-form HTML to a Grockit-flavored Markdown without losing the necessary visual styling, then verify that the conversion was done correctly, fix it if it wasn’t, and then deploy the approved version to the production system once ready. <strong>Then repeat, hundreds of thousands of times. Clearly, we needed an automated process.</strong> We know that <em>automated</em> doesn’t necessarily mean <em>accurate</em>, however, so we decided that a partially-automated, partially-manual process was the best way to ensure that Grockit questions, answers, and explanations would continue to be accurate. Here’s what we did:</p>
<p><a style="float: right;" href="http://grockit.com/blog/main/files/2011/08/turk.png" target="_blank"><img title="turk" src="http://grockit.com/blog/main/files/2011/08/turk.png" alt="" width="508" height="199" /></a> The first step, an automated process to convert HTML to Gollum-ready Markdown (codename: Smeagol) got us started. Some of the changes were so minor that no manual verification was necessary, and the new version could be immediately deployed to the production system.  <a href="http://grockit.com/blog/main/files/2011/08/tracker.png" target="_blank"><img style="float: left; padding: 0 10px 0 0;" src="/blog/main/files/2011/08/tracker.png" alt="" width="284" height="341" /></a> For the rest, we used Amazon’s <a href="https://www.mturk.com/">Mechanical Turk</a> service, for each item, to ask three different people whether or not the before and after (i.e. Smeagol and Gollum) content looked the same. If all three agreed that the conversion worked, we felt confident in switching to the Gollumnized Markdown. If not, we needed someone else to check and fix the change. For this, we built on the <a href="https://www.pivotaltracker.com/">Pivotal Tracker</a> <a href="https://www.pivotaltracker.com/help/api?version=v3">API</a> to build up an organized to-do list for a team of Grockit content authors to work through. In our trial run with Algebra I in the Academy, <strong>45,000 conversion quality ratings were submitted in the first hour alone!</strong> Once a correction was saved, Grockit would start displaying the Gollumnized version. The result:  A rolling process (without race conditions!) to update all of Grockit’s content, one field at a time, to a much cleaner, simpler, more trackable, more searchable, more flexible form moving forward.</p>
]]></content:encoded>
			<wfw:commentRss>http://grockit.com/blog/main/2011/08/22/new-content-editor/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Store That Landing Page</title>
		<link>http://grockit.com/blog/main/2010/01/05/store-that-landing-page/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=store-that-landing-page</link>
		<comments>http://grockit.com/blog/main/2010/01/05/store-that-landing-page/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 23:49:14 +0000</pubDate>
		<dc:creator>mathew</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[customer development]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://grockit.com/?p=2200</guid>
		<description><![CDATA[We are seriously into split-testing at Grockit. For all of our split-tests, we generate a standard report for each bucket of users that includes a whole suite of behaviors like these: Once you&#8217;ve bolted-on visionary inspiration and beautiful design to achieve a high degree of product/market fit for your web application, it&#8217;s time to optimize [...]]]></description>
			<content:encoded><![CDATA[<p>We are seriously into <a href="http://www.startuplessonslearned.com/2008/09/one-line-split-test-or-how-to-ab-all.html">split-testing</a> at Grockit. For all of our split-tests, we generate a standard report for each bucket of users that includes a whole suite of behaviors like these:</p>
<p><img class="aligncenter size-full wp-image-2207" title="2010-01-05_1546" src="http://grockit.com/blog/main/files/2010/01/2010-01-05_15461.png" alt="2010-01-05_1546" width="288" height="95" /></p>
<p>Once you&#8217;ve bolted-on <a href="http://andrewchenblog.com/2009/12/04/does-every-startup-need-a-steve-jobs/">visionary inspiration and beautiful design</a> to achieve a high degree of <a href="http://pmarca-archive.posterous.com/the-pmarca-guide-to-startups-part-4-the-only">product/market fit</a> for your web application, it&#8217;s time to optimize the business and split-testing is one of the most powerful tools you have in your arsenal.</p>
<p>Our custom split-test reporting lets us really get a good handle on the <a href="http://kissmetrics.tumblr.com/post/99372998/calculating-customer-lifetime-value-the-quick">lifetime behavior (and -value)</a> of a particular group of users who have a specific and explicit Grockit experience. This goes above and beyond the more standard &#8216;did more people click through on this variation?&#8217; flavor of split-test reporting.</p>
<p>But wait, there&#8217;s more:</p>
<p>Segmenting your users by source &amp; acquisition channel is a widespread best practice, most often done by tacking on <a href="http://books.google.com/books?id=LNYD1THE8NMC&amp;pg=PT164&amp;lpg=PT164&amp;dq=kaushik+url+parameter+tracking&amp;source=bl&amp;ots=KLsjty8yHt&amp;sig=odIDxW5pgojtM8C5Mv8EDNeHdpk&amp;hl=en&amp;ei=XctDS8idNZTesgPPsODFBA&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=2&amp;ved=0CAsQ6AEwAQ#v=onepage&amp;q=&amp;f=false">custom URL parameters</a> to the end of, say, an Adwords destination or email newsletter URL. We do this too. In fact, you must be smart about segmenting your users when you get to the scaling step of the <a href="http://startup-marketing.com/the-startup-pyramid/">Startup Pyramid</a> in order to develop your marketing channels.</p>
<p>At Grockit, we&#8217;ve connected this type of off-site channel segmentation with our on-site split-test reporting. When you land on Grockit as a new visitor, we create a guest account for you, which is then populated with all of your user data if you choose to signup, and continues to track your usage of Grockit, so we know how well we are serving you.</p>
<p>One of the bits of data that we store for each user is the original URL that you landed on the first time you came to Grockit. This lets us run a split-test comparison report on any group of different landing URLs/URL parameters. Using this tool, we can analyze both off-site variables like advertising channels, and also on-site factors like landing pages that position Grockit differently for different groups of users.</p>
<p>All this is, of course, in the service of ironing out the kinks in your <a href="http://steveblank.com/2010/01/04/make-no-little-plans-–-defining-the-scalable-startup/">scalable startup</a> equation, and not just for the sake of metrics alone.</p>
]]></content:encoded>
			<wfw:commentRss>http://grockit.com/blog/main/2010/01/05/store-that-landing-page/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Varnish Your Website For Heavy Traffic</title>
		<link>http://grockit.com/blog/main/2009/04/03/varnish-your-website-for-heavy-traffic/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=varnish-your-website-for-heavy-traffic</link>
		<comments>http://grockit.com/blog/main/2009/04/03/varnish-your-website-for-heavy-traffic/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 18:58:26 +0000</pubDate>
		<dc:creator>farbood nivi</dc:creator>
				<category><![CDATA[grockit]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://grockit.com/?p=782</guid>
		<description><![CDATA[We are looking into various page caching methods for Grockit web pages. Page caching facilitates faster loads on pages that are being simultaneously hit by many users. Currently we are exploring Varnish as a possible page caching solution and we would love to hear about people&#8217;s experience with Varnish or other page caching solutions. Interestingly, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://home.howstuffworks.com/guide-to-furniture-finishes-ga1.htm"><img class="alignright size-thumbnail wp-image-785" src="/blog/main/files/2009/04/how-to-varnish-wooden-furniture-1-150x150.jpg" alt="" width="150" height="150" /></a>We are looking into various page caching methods for Grockit web pages. Page caching facilitates faster loads on pages that are being simultaneously hit by many users.</p>
<p>Currently we are exploring <a href="http://varnish.projects.linpro.no/" target="_blank">Varnish</a> as a possible page caching solution and we would love to hear about people&#8217;s experience with Varnish or other page caching solutions.</p>
<p>Interestingly, the Varnish project was started by the online division of Norwegian tabloid newspaper <a href="http://www.vg.no/" target="_blank">Verdans Gang</a>. The lead developer being <a href="http://en.wikipedia.org/wiki/Poul-Henning_Kamp" target="_blank">Poul-Henning Kamp</a> with additional support by <a href="http://www.linpro.no/en" target="_blank">Linpro</a>, a Linux solutions company.</p>
]]></content:encoded>
			<wfw:commentRss>http://grockit.com/blog/main/2009/04/03/varnish-your-website-for-heavy-traffic/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

