<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>David Hu</title>
 <link href="http://david-hu.com/atom.xml" rel="self"/>
 <link href="http://david-hu.com/"/>
 <updated>2015-01-14T17:41:36-05:00</updated>
 <id>http://david-hu.com/</id>
 <author>
   <name>David Hu</name>
   <email>david@david-hu.com</email>
 </author>

 
 <entry>
   <title><em>Khantemplations:</em> A Khanpilation of thoughts on life and work</title>
   <link href="http://david-hu.com/2015/01/14/khantemplations.html"/>
   <updated>2015-01-14T00:00:00-05:00</updated>
   <id>http://david-hu.com/2015/01/14/khantemplations</id>
   <content type="html">&lt;table class='email-header-table'&gt;
  &lt;tr&gt;
    &lt;td class='email-field-key'&gt;From:&lt;/td&gt; &lt;td class='email-field-value'&gt;david@khanacademy.org&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class='email-field-key'&gt;To:&lt;/td&gt; &lt;td class='email-field-value'&gt;Khan Academy Team &amp;lt;team@khanacademy.org&amp;gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class='email-field-key'&gt;Date:&lt;/td&gt; &lt;td class='email-field-value'&gt;Sat, Aug 9, 2014 at 2:23 PM&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class='email-field-key'&gt;Subject:&lt;/td&gt; &lt;td class='email-field-value'&gt;Say what you wanna say, and let the words fall out&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;Dear colleague,&lt;/p&gt;

&lt;p&gt;Hi, I&amp;#8217;m David. I just graduated from college earlier this year, and I just started full-time a month ago.&lt;/p&gt;

&lt;p&gt;As a student, life has always been structured with a clear next step and short-term goals. Get good grades. Get into university. Get a job.&lt;/p&gt;

&lt;p&gt;But what now? I have no one to answer to now. No one to enforce rules or set expectations. No clear directions or structure.&lt;/p&gt;

&lt;p&gt;Should I work hard at work? Make new friends or maintain existing ones? How do I find a soulmate? Should I climb our corporate breadmaster hierarchy ladder,&lt;i class='treeeee'&gt;&amp;nbsp;&lt;/i&gt; and strive for the coveted Assistant Breadmaster title?&lt;/p&gt;

&lt;p&gt;In the process of figuring out priorities and structuring my life, I&amp;#8217;ve found our 1:1s and AMAs very helpful. But I want to know more about everyone here, and so I have a few questions for you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is one thing you wish you knew when you first started at Khan Academy?&lt;/li&gt;

&lt;li&gt;What is one thing you wish you knew when you first graduated?&lt;/li&gt;

&lt;li&gt;Is there anything you think you did right? What worked well for you?&lt;/li&gt;

&lt;li&gt;What advice do you have for new grads or interns?&lt;/li&gt;

&lt;li&gt;&amp;#8230; and anything else that you want to say.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whoever you are — intern or full-timer, junior or senior, young or 26-and-married,&lt;i class='treeeee'&gt;&amp;nbsp;&lt;/i&gt; developer or content producer, De-Facto Software Kingpin or Director of Wellness,&lt;i class='treeeee'&gt;&amp;nbsp;&lt;/i&gt; human or dancer&lt;i class='treeeee'&gt;&amp;nbsp;&lt;/i&gt; — I want to hear from you! I would love to get a broad range of differing perspectives.&lt;/p&gt;

&lt;p&gt;Be specific or general. Talk about work or not. Anything from &lt;a href='http://bjk5.com/post/71559049069/the-most-common-feedback-we-give-dev-interns'&gt;&amp;#8220;Small and frequent code reviews&amp;#8221;&lt;/a&gt; to &amp;#8220;Announce &amp;#8216;bread&amp;#8217; loudly because people are wearing headphones&amp;#8221;&lt;i class='treeeee'&gt;&amp;nbsp;&lt;/i&gt; to &amp;#8220;If you&amp;#8217;re not happy, be happy.&amp;#8221;&lt;/p&gt;

&lt;p&gt;Say a little or a lot. Maybe just one cryptic word to puzzle over, or make this your magnum opus. Whatever it is, I will read it and think about it.&lt;/p&gt;

&lt;p&gt;I also think this would be a great opportunity to share with everyone — not only the new grads and interns among us, but also existing and future employees. So, I&amp;#8217;m planning to compile this into an internal publication for everyone&amp;#8217;s edification. By default, I will anonymize your contribution. But,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you use the codeword &lt;strong&gt;fearless&lt;/strong&gt; somewhere, I will attach your name next to your thoughts.&lt;i class='treeeee'&gt;&amp;nbsp;&lt;/i&gt;&lt;/li&gt;

&lt;li&gt;If you don&amp;#8217;t want me to share your thoughts at all with anyone, use codeword &lt;strong&gt;bread&lt;/strong&gt;.&lt;i class='treeeee'&gt;&amp;nbsp;&lt;/i&gt;&lt;/li&gt;

&lt;li&gt;If you&amp;#8217;re allergic to emails or have more to say, I&amp;#8217;d be happy to have a 1:1. Respond with codeword &lt;strong&gt;Tea-Rex&lt;/strong&gt;.&lt;i class='treeeee'&gt;&amp;nbsp;&lt;/i&gt;&lt;/li&gt;

&lt;li&gt;If we&amp;#8217;ve already had this conversation before, reply with the standard company codeword for this situation, &lt;strong&gt;tortoise&lt;/strong&gt;.&lt;i class='treeeee'&gt;&amp;nbsp;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you so much. I, and I hope others, will appreciate this.&lt;/p&gt;

&lt;p&gt;In the words of the highly respected CEO, educational philanthropist, and role model to many of us here,&lt;i class='treeeee'&gt;&amp;nbsp;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I don&amp;#8217;t think you should wait. I think you should Speak Now.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;(Note: The spinning hand-tree asterisk thing &lt;i class='treeeee'&gt;&amp;nbsp;&lt;/i&gt; denotes an inside joke at Khan Academy.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So I sent the above annoyingly long email to err&amp;#8217;body at work. And they didn&amp;#8217;t fire me — far from it, my colleagues turned out to be really helpful people:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Received responses from 25 individuals&lt;/li&gt;

&lt;li&gt;Responses with codeword &lt;strong&gt;Tea-Rex&lt;/strong&gt;: 2&lt;/li&gt;

&lt;li&gt;Responses with codeword &lt;strong&gt;bread&lt;/strong&gt;: 2&lt;/li&gt;

&lt;li&gt;Responses with codeword &lt;strong&gt;fearless&lt;/strong&gt;: 11&lt;/li&gt;

&lt;li&gt;One response used every codeword (I ended up cancelling out &lt;strong&gt;bread&lt;/strong&gt; with &lt;strong&gt;fearless&lt;/strong&gt; and went on a 1:1 with this mischievous individual)&lt;/li&gt;

&lt;li&gt;Responses from young and old, intern and full-timer, and across departments&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='khantemplations_khanpilation'&gt;Khantemplations Khanpilation&lt;/h2&gt;

&lt;p&gt;I had enough responses that I decided to compile this into a book made from dead trees. To add insult to injury to my environmentalist friends, I ordered 150 of these (to distribute. I promise I&amp;#8217;m not smoking them):&lt;/p&gt;
&lt;img alt='Box of Khantemplations' src='/images/khantemplations/box-of-khantemplations.jpg' width='680' /&gt;
&lt;p&gt;Here are the table of contents:&lt;/p&gt;
&lt;img alt='Table of contents of Khantemplations' src='/images/khantemplations/toc.jpg' width='680' /&gt;
&lt;p&gt;And here&amp;#8217;s a photo of one of the section dividers because I like how fancy they look:&lt;/p&gt;
&lt;img alt='Section divider of Khantemplations' src='/images/khantemplations/section-divider.jpg' width='680' /&gt;
&lt;p&gt;Thanks to &lt;a href='http://generic.cx/'&gt;Marcos&lt;/a&gt; for knowing all the things about printed book design — from suggesting Adobe InDesign for layout to giving me ideas for cover designs. I used BookBaby for the printing.&lt;/p&gt;

&lt;h2 id='butchered_paraphrasing_and_merciless_editorializing_of_responses'&gt;Butchered paraphrasing and merciless editorializing of responses&lt;/h2&gt;

&lt;p&gt;I don&amp;#8217;t want to distribute this book publicly, because I told my colleagues this would be distributed for internal publication only (and I love them). So instead, here is a summary with anonymized quotes mixed in (I hope. If I leak PII, you are free to sue me). It&amp;#8217;s a hodge-podge of advice, regrets, and lessons from my co-workers. &lt;strike&gt;By condensing it into a dry list of bulleted points, I've managed to suck out all the anecdotes that once weaved each response into a beautiful flowing narrative with story and character. Well beauty and soul be damned — I'm an emotionless engineer!&lt;/strike&gt;&lt;/p&gt;

&lt;p&gt;My proofreader friends encouraged me to actually de-wall-of-text it. So I did. Thanks to you, I&amp;#8217;m no longer emotionless and am now capable of love.&lt;/p&gt;
&lt;div class='khantemplations-summary'&gt;
&lt;h3&gt;1. Take risks, make mistakes, and learn from them&lt;/h3&gt;

&lt;p&gt;This is the single most unanimous and uncontested life advice from my colleagues. Take chances, go on adventures, be bold, and be outgoing, especially when you&amp;#8217;re young, energetic, and unburdened:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Take risks — it will only get harder to take them the older you get.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;I wish I could have been less nervous and more outgoing in work and social life. There&amp;#8217;s not much to gain by being shy.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Taking chances always pays off. Tackle unknowns, not knowns.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It&amp;#8217;s not always rainbows and butterflies. And you&amp;#8217;ll make mistakes. But do it anyway, because it is through mistakes that we learn the most.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Don&amp;#8217;t be afraid to struggle through difficult experiences.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Oh and don&amp;#8217;t be afraid to make mistakes. Go looking for mistakes.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;It is okay to make mistakes. In fact it is preferable.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hear this very often, but it takes courage to take risks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;I live my life by two rules: 1) Do the right thing. 2) Do the courageous thing. Courage means doing something in spite of our fears. Because we all have fears, and not being afraid of something isn&amp;#8217;t hard. Being afraid of something and doing it anyways is.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It&amp;#8217;s all too easy to do what we&amp;#8217;ve always done before. Go home. Play video games. Facebook stalk. Catch up on &lt;a href='http://www.reddit.com/r/taylorswift'&gt;/r/taylorswift&lt;/a&gt;. (Wait&amp;#8230; what do you mean not everyone does this?) Having lived in the real world for only 7 months, I&amp;#8217;ve found that doing things outside of my comfort zone — flying to a random desert with a bunch of lunatics I just met who wear onesies through the airport (I love you all) — have allowed me to grow as a person.&lt;/p&gt;

&lt;h3&gt;2. Invest in people&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;One of the biggest takeaways from my year abroad is to value and prioritize my relationships more.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So much of finding a career is just knowing the right people.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;I wish I knew the value of a network. Jobs, internships, and general career opportunities are so heavily based on who you know and how you can get in.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Multiple respondents expounded on the importance of mentorship in growing at work.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Find role models and mentors. Invest in good people, personally and professionally. Be proactive in this — reach out.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But also make an effort to reach out to people outside of work. For one coworker, work consumed their conversations, social activity, and life. And then,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;When it came time for that job to pass, and for me to go join something else, I felt a very strange hole in my identity.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Transitioning from school to work means transitioning from seeing classmates everyday to maintaining those friendships, but is also an opportunity to make new friends:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;After college, maintaining friendships takes a lot more effort. You have to actually schedule things! &amp;#8230; Just accept the extra overhead because it&amp;#8217;ll be worth it when you look back.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;For the first 3 years out of school, I formed a lot of close friendships that still last today. We were all single, enjoying independence, and learning a lot about growing up — work, money, dating, traveling, cooking, etc.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Your health, the health of the people you care about, and the relationships you have with your close family and friends are the only things that really matter.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;3. No, really, invest in people&lt;/h3&gt;

&lt;p&gt;People and relationships were discussed in so many different ways that I split this into two points! (But really, it&amp;#8217;s so I can title this blog post &amp;#8220;10 Things You Must Know After You Graduate Or Be A Regretful Miserable Lonely Wreck Forever&amp;#8221; if I wanted to.)&lt;/p&gt;

&lt;p&gt;This section is more about how and what you can do.&lt;/p&gt;

&lt;p&gt;Perhaps the best way to grow is by surrounding yourself with the sort of people you want to become:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Find the role models who can be your true mentors, and do your best to work with them.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Don&amp;#8217;t wait for people to come to you. If you see a person you really respect or is doing something cool or seems like they have their head on straight or could be someone you can lean on (or could lean on you) reach out to them! Build the bridge yourself and make the first move.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Love.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Care and be helpful. You will never (NEVER) regret going out of your way to do something helpful to or nice for someone else. You will regret times when you could have gone out of your way and chose not to.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;I tried to have lots of love and respect for those around me.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Hone the art of really good listening.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Tell your parents you love them.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stay in touch and just spend time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Identify the bright and kind people in your life, and make sure you stay in touch with them.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Keep a list of the contacts you value; use recurring tasks to ensure you keep in touch; learn from them and network through them; return the favor.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;One of my favorite things was a weekly supper club where we&amp;#8217;d all get together and try to cook a home cooked meal.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Put yourself in different social circles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Finding a soulmate: There&amp;#8217;s no science to this. Lots of my friends are in happy relationships through friends. Just have to make time and space for this to happen. Surround yourself with interesting people you want to be around, and put yourself in different circles.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But, at the end of the day, you have to accept that nothing is permanent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;People around you will come and go. People around you will change and you will too.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;4. Make yourself happy, because impressing your grandmother won&amp;#8217;t&lt;/h3&gt;

&lt;p&gt;Listen to yourself and do what makes you happy. Make happiness something you control, and not something dictated by the approval of others:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;You are the only one you have to impress and be accountable to at the end of the day. An amazing resume, a prestigious job, a diploma from the best school, stays at the coolest hotels, first class tickets, basically anything that is about impressing others will not necessarily make you happy and satisfied.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Don&amp;#8217;t ever sacrifice your happiness or sanity for money, power or some ill-fated glory. All that stuff fades away and at the end of the day you&amp;#8217;re left with yourself.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Don’t make decisions based on how you think you&amp;#8217;ll be perceived by others.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;I followed my heart and went with my gut, rather than being influenced by others&amp;#8217; opinions.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How to be happy? I don&amp;#8217;t know. But here are some ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Take some time off after graduation to just focus on yourself. Do those things you love. I travelled, spent time with friends, and played guitar. Reevaluate things.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Live and work in the moment.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Practice gratitude every day.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I do the latter by writing three different things/people I&amp;#8217;m grateful for in my journal each day.&lt;/p&gt;

&lt;h3&gt;5. Work hard, take a break, work hard&lt;/h3&gt;

&lt;p&gt;Many of my colleagues credit where they&amp;#8217;re at now to hard work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Guard your time for creating things. This doesn&amp;#8217;t mean sacrificing family or love — there are lots of other things people waste time on.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Work hard. Be present and proactive. Do not underestimate how much impact you can have on the world if you consistently work hard. Consistently working hard will have more impact than any single decision.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;I worked (and still work) really hard. That&amp;#8217;s a hard thing for a lot of people to do, to actually commit yourself 100% into something no matter what the pay, outcome or gain for you is.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But what does it mean to work hard? Work 25 hours a day? Clone yourself? Blast Taylor Swift while you work?&lt;/p&gt;

&lt;p&gt;Perhaps, focus only on the important things and drop the rest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;You — and only you — are in charge of your own attention and focus. They are very finite resources which you spend every second. Spend them with care.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;If what you are doing is not important, and if you don&amp;#8217;t think it is going to lead to something important, then why are you doing it?&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And maybe you&amp;#8217;ll be able to work hard in the long run by not working hard all the time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;At past jobs I have worked too much and it led to burnout and feeling pretty miserable. I&amp;#8217;ve found that by just working hard when I can and not being upset at myself for when I can&amp;#8217;t, I can keep a much more sustainable and productive cadence.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;If college is a series of sprints, life after college is a marathon. &amp;#8230; Pace yourself, and you&amp;#8217;ll accomplish more and be much happier.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;6. Assume you&amp;#8217;re stupid so you can always be learning&lt;/h3&gt;

&lt;p&gt;I&amp;#8217;ve struggled with this — I&amp;#8217;ve always felt I had to prove myself. But I&amp;#8217;ve found that ultimately, being selfless and working towards shared goals is for the best. And that means if there&amp;#8217;s something you don&amp;#8217;t understand, if there&amp;#8217;s something that will deter you from getting the job done, speak up, even if you think you&amp;#8217;ll look foolish for it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Don&amp;#8217;t worry about being smart. It just causes you to stress out too much about your mistakes and occasionally even decide not to ask for help when you might need it.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Don&amp;#8217;t be afraid to be honest with your mentors and managers — they want honesty above all else and will do whatever they can to help.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;School didn&amp;#8217;t teach you as much as you think it did. Assume you are stupid going in and just listen. Learn from others.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;If you see every experience as a learning experience, you&amp;#8217;ll come to value every moment.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Don&amp;#8217;t just practice — &lt;a href='http://projects.ict.usc.edu/itw/gel/EricssonDeliberatePracticePR93.pdf'&gt;deliberate practice&lt;/a&gt;.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;7. Take the lead; be proactive&lt;/h3&gt;

&lt;p&gt;Paraphrasing a response: Be grateful if you work in a good environment, but at the same time, it is your responsibility to speak up, voice dissent, and improve the work culture, for that is how a good environment is made and preserved.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;Company culture is comprised of individuals stepping forward and taking the lead on shaping it — from board game nights to karaoke nights to hiking trips.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Don’t wait for others to tell you what to do. Nobody knows what the fuck is going on in this world&amp;#8230; they look for others to tell them what is next. Be that person.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Aim high and take ownership.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;8. Figure out what you want to do, and do it&amp;#8230; maybe&lt;/h3&gt;

&lt;p&gt;Should you follow your passion? Many of my colleagues are at Khan Academy because they&amp;#8217;re so passionate about education:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;You have to find what you&amp;#8217;re doing personally meaningful. If you&amp;#8217;re like me, spending 8+ hours a day on something you don&amp;#8217;t believe in just isn&amp;#8217;t possible.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;There were moments when I told myself I was an idiot to leave&amp;#8230; just for a chance at KA. There was a period of a few months where I was definitely following my feelings rather than thoughts about which route was the most secure, but I&amp;#8217;m tremendously glad I did it.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But what if you don&amp;#8217;t know what you enjoy? How can you find out?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;One of the best things that I did was reading blogs and looking for companies that appeal to me on more than just a monetary level, but on some sort of spiritual or philosophical level.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;One thing I&amp;#8217;ve found helpful is to take a few minutes at the end of every weekday to list the things I did at work. I then mark my favorite and least favorite things. Over time, I can see what I&amp;#8217;m enjoying and what I&amp;#8217;m not enjoying, and I can work towards doing more of the things I love and less of the things I don&amp;#8217;t.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;I tried to take on a variety of projects&amp;#8230; which really paid off as time went on — in part, because I discovered what kind of work I enjoy doing&amp;#8221;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But, be pragmatic. Like the answer to so many questions, it depends. Where are you now? What do you enjoy? Will you grow? Can you can support yourself?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;You&amp;#8217;ll have time to follow your passion your whole life, build a reputation of great work and trust to enable you to do whatever your passion may be.&amp;#8221;&lt;/li&gt;

&lt;li&gt;(paraphrased) &amp;#8220;Financial success is not insignificant, and I don&amp;#8217;t deride people who choose financial well-being. It allows you to take care of your family. What matters most to me is you weigh that proportionately relative to your other criteria.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;When choosing a job, I would have been much better off optimizing for the right team to work with over function&amp;#8230;. They were very nice people, but unfortunately, they were not inspirational, and I didn&amp;#8217;t realize how much I needed that.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One respondent noted that earning experience put them in a position to choose rather than beg for any job they could get.&lt;/p&gt;

&lt;h3&gt;9. Climb the corporate bureaucracy by using this 1 weird old tip&lt;/h3&gt;

&lt;p&gt;Sorry, I don&amp;#8217;t really have a neat theme to tie all this together. It&amp;#8217;s just a collection of work-related thoughts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At your first job, you may initially feel overwhelmed. But things are going to be OK. You&amp;#8217;ll figure them out. It just takes time.&lt;/li&gt;

&lt;li&gt;One colleague learned to be pragmatic instead of stressing out about doing everything the right way, and in so doing, developed a bias towards doing and shipping things.&lt;/li&gt;

&lt;li&gt;Priorities shift and projects change. So, &amp;#8220;developing skills is what really counts — learning how to work well with others, communicate ideas, manage stress, and balance your life.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Take time every week to reflect, set goals, and work for yourself. Be your own &amp;#8216;academic advisor.&amp;#8217;&amp;#8221;&lt;/li&gt;

&lt;li&gt;From a team lead: &amp;#8220;It is absolutely critical that you become a person who does not drop things on the floor. When you say you&amp;#8217;ll do something, when an idea occurs to you, when an issue is raised in a meeting and isn&amp;#8217;t resolved, you have got that thing. It is recorded in some safe place, and you know that you will follow up on it. If you&amp;#8217;re not going to do something, that is a conscious decision, not an accident.&amp;#8221;&lt;/li&gt;

&lt;li&gt;You can accomplish a lot more with a team, and build something bigger than yourself.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;10. How I learned to stop worrying and accept that no one really knows what they&amp;#8217;re doing&lt;/h3&gt;

&lt;p&gt;But it&amp;#8217;s OK, because we&amp;#8217;re young and we&amp;#8217;re reckless. We&amp;#8217;ll take this way too far. It&amp;#8217;ll leave you breathless, or with a nasty scar&amp;#8230;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8220;If something is likely to make your life better, you should do it. If it turns out poorly, you can change that decision later.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;I think most of the best things that have happened to me in my life have been not totally my own choice. Looking back on them, I made some proximal decision that put me in a position to experience that thing, but very rarely was I primarily responsible for the best things that have happened to me.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;Most decisions you&amp;#8217;re going to make are not going to ruin your life. It may seem so scary at the time, but the things that I look back on most fondly are the times when I was pretty scared.&amp;#8221;&lt;/li&gt;

&lt;li&gt;&amp;#8220;That thing you are losing sleep over because you are worrying about it? Get over it, it&amp;#8217;s not worth that kind of time and energy.&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 id='takeaways'&gt;Takeaways&lt;/h2&gt;

&lt;p&gt;Okay, that was a long list of stuff. And you&amp;#8217;ve probably heard a lot of it before. Yeah yeah, take risks. Yeah yeah, be happy instead of chasing approval. Yeah yeah, love. Yeah yeah, yeah yeah, yeah yeaaaaahhhh!!!!! It&amp;#8217;s a damn cold night, tryna figure out this life&amp;#8230;.&lt;/p&gt;

&lt;p&gt;So what&amp;#8217;s going to be different this time? Frankly, I don&amp;#8217;t know. That&amp;#8217;s up to you to figure out. But I hear ya — I don&amp;#8217;t remember myself the last time a blog post changed my life.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m not saying I want to change your life. But on the other hand, I&amp;#8217;d feel bad if you read this far and just ended up wasting 10 minutes of your life, so actually yes, maybe I do want to change your life. Let&amp;#8217;s frame it as, I hope you can derive some tangible benefit from this.&lt;/p&gt;

&lt;p&gt;So here&amp;#8217;s an idea. Pretend this is an experiment. Try to live by just one of these principles for a day. If you didn&amp;#8217;t die, great success! Maybe try for a week next time, and push yourself to go even further. You can stop at any time if it isn&amp;#8217;t working and you&amp;#8217;ve given it a serious honest effort.&lt;/p&gt;

&lt;p&gt;So I&amp;#8217;d love to know if you found this worthwhile — if there&amp;#8217;s something you read that challenged your beliefs, if you chose to do something differently because you were successfully brainwashed by my Silicon Valley tech company friends&amp;#8217; words, if you become a billionaire one day (and it was all because of this post, right?), or if you just have Taylor Swift (or Avril Lavgine or Sara Bareilles) stuck in your head right now. Any of these outcomes would make me happy.&lt;/p&gt;

&lt;p&gt;You can tell me when it&amp;#8217;s over, if the high was worth the pain. Something something Starbucks lovers.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id='acknowledgements'&gt;Acknowledgements&lt;/h2&gt;

&lt;p&gt;Credits to &lt;a href='http://bjk5.com/'&gt;Ben Kamens&lt;/a&gt; for the &lt;i class='treeeee large'&gt;&amp;nbsp;&lt;/i&gt; gif.&lt;/p&gt;

&lt;p&gt;The acknowledgments from &lt;em&gt;Khantemplations&lt;/em&gt; is reprinted below.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thanks to Marcia for giving me that little nudge to actually send out the initial email. Thanks to Marcos for suggesting InDesign for typesetting this compilation and conceiving and laying out various book cover concepts. Thanks to Jessie for reading drafts, providing feedback, and keeping me on track to finish this. Thanks to Ian for providing feedback on cover designs. Thanks to Marcos and Tabitha for giving last minute feedback on the content typesetting and layout.&lt;/p&gt;

&lt;p&gt;And of course, thanks to all you Khantributors whose responses made up this book. Thank you for taking the time to send me your words or go on walks. Thank you for being brave and letting your thoughts be heard. You have made this possible. So from the bottom of my heart, thank you. Your thoughts have given me much to think about and to act on.&lt;/p&gt;

&lt;p&gt;Did you not have a chance to have your voice heard? Well, I hope this is just the beginning. May this be the kindling that fuels future discussions!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Thanks to Eddie Du, Jessie Duan, Mary He, Nigel Pynn-Coates, Owen Wang, and Jamie Wong for &lt;strike&gt;proofreading&lt;/strike&gt; making me realize the first draft of this blog post was a piece of turd. Especially thanks to Jessie for bringing up thoughtful points that got me to rewrite this blog post, and Eddie for the quotes formatting. I&amp;#8217;d let any of you teach English to of my future unborn baby(ies). I love you all.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Open-Sourcing UW Flow</title>
   <link href="http://david-hu.com/2014/02/28/open-sourcing-uw-flow-draft.html"/>
   <updated>2014-02-28T00:00:00-05:00</updated>
   <id>http://david-hu.com/2014/02/28/open-sourcing-uw-flow-draft</id>
   <content type="html">&lt;p&gt;We&amp;#8217;re really excited to be open-sourcing &lt;a href='https://uwflow.com'&gt;uwflow.com&lt;/a&gt; — a project that three friends and I have been working on for the past year and a half.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s some highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Flow lets University of Waterloo students plan courses with friends.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Some numbers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Last month, we served 40K pageviews to 9K unique visitors.&lt;/li&gt;

&lt;li&gt;Last year, users made 480K searches.&lt;/li&gt;

&lt;li&gt;In total, users have contributed 47K ratings and reviews.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Who made this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Development: &lt;a href='https://github.com/mduan'&gt;Mack&lt;/a&gt;, &lt;a href='https://github.com/jswu'&gt;Sandy&lt;/a&gt;, &lt;a href='http://jamie-wong.com'&gt;Jamie&lt;/a&gt;, and me&lt;/li&gt;

&lt;li&gt;Marketing: &lt;a href='https://twitter.com/TerranceKwok'&gt;Terrance&lt;/a&gt; and &lt;a href='https://medium.com/@Shubham'&gt;Shubham&lt;/a&gt; (Sept. 2012 - April 2013)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;We&amp;#8217;re open-sourcing with the permissive MIT license because we want anyone to be able to fork and host this for their school.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Check out &lt;a href='https://github.com/UWFlow/rmc'&gt;the code on GitHub&lt;/a&gt;, and come talk to us in &lt;a href='https://www.hipchat.com/gAUVWHvA3'&gt;our public chat room&lt;/a&gt;!&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read on for how we started and why we&amp;#8217;re open-sourcing.&lt;/p&gt;

&lt;h2 id='how_we_started'&gt;How we started&lt;/h2&gt;

&lt;p&gt;Two years ago, I met up with Mack and Sandy to hack on a side project with these goals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launch fast and iterate&lt;/li&gt;

&lt;li&gt;Make something useful&lt;/li&gt;

&lt;li&gt;Be startup viable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea was to also use this as our engineering capstone project &lt;a href='#f1'&gt;&amp;#91;1]&lt;/a&gt;, as well as potentially be a business that we could continue after we graduate. We could get course credit for doing a startup while still in school!&lt;/p&gt;

&lt;p&gt;Over the next few months, we came up with about 300 ideas. But, nothing stuck. Nothing met all our criteria &lt;em&gt;and&lt;/em&gt; that we&amp;#8217;d be dying to work on everyday for the next two years.&lt;/p&gt;

&lt;p&gt;Four months later, we finally agreed on something. We all hated planning courses — choosing the classes and professors that would make up your next term&amp;#8217;s timetable. Taken from Sandy&amp;#8217;s standard pitch:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It&amp;#8217;s like doing taxes. Each time, it&amp;#8217;s inevitable, and each time, it&amp;#8217;s a pain. Right now, students use the undergraduate calendar to look through thousands of courses before even knowing what&amp;#8217;s out there. And that doesn&amp;#8217;t even include opinions from people who had taken those courses before. For that, we rely on friends and word of mouth. But that’s both incomplete and inconvenient.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So we thought, it&amp;#8217;d be awfully useful to have a website where we could see what our friends are planning to take, what they&amp;#8217;ve taken, and what they thought about those courses. Unfortunately, nothing like that that existed (or was widely used) at Waterloo to our knowledge.&lt;/p&gt;

&lt;p&gt;Perfect. We&amp;#8217;ll build it.&lt;/p&gt;

&lt;h2 id='development'&gt;Development&lt;/h2&gt;

&lt;p&gt;We started coding in September 2012. Much of the work was done in the first two months. In an effort to launch early, we made sacrifices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Skipped class&lt;/li&gt;

&lt;li&gt;&lt;a href='https://github.com/UWFlow/rmc/graphs/punch-card'&gt;Stayed up all night&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Aggressively cut features&lt;/li&gt;

&lt;li&gt;Used up all of our assignment grace days&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of these, I regret the all-nighters. They helped with hitting deadlines (such as course enrollment periods), but were harmful to our health, happiness, and long-term productivity.&lt;/p&gt;

&lt;p&gt;Our tech stack and codebase came to be heavily influenced by where we had interned &amp;#8211; in particular, Khan Academy and ContextLogic. We borrowed practices, technologies, tools, and coding styles. We owe Flow to those internship experiences.&lt;/p&gt;

&lt;p&gt;We were fortunate to have some awesome people join us. Two students in the Accounting faculty whom we met at the VeloCity residence, Terrance and Shubham, volunteered to help us out with growth and marketing. Two months after we started coding, our classmate and good friend Jamie asked to join us to form our engineering capstone project team. &lt;a href='#f2'&gt;&amp;#91;2]&lt;/a&gt;&lt;/p&gt;

&lt;h2 id='launch'&gt;Launch&lt;/h2&gt;

&lt;p&gt;We first launched after two weeks of coding. It was an embarrassing MVP to just our Software Engineering class of 80 students. A few weeks after that, we launched to the 1500-strong Accounting faculty, and then a few weeks later, to the entire campus.&lt;/p&gt;

&lt;p&gt;To get the word out, we tried all sorts of things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Told all of our friends&lt;/li&gt;

&lt;li&gt;Posted on &lt;a href='http://www.reddit.com/r/uwaterloo/comments/12csk0'&gt;Reddit&lt;/a&gt;, Facebook, blogs, and forums&lt;/li&gt;

&lt;li&gt;Emailed residence dons and professors&lt;/li&gt;

&lt;li&gt;Walked up to students and told them&lt;/li&gt;

&lt;li&gt;Facebook ads (Sandy had credits as a former intern)&lt;/li&gt;

&lt;li&gt;Posters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most effective channel was social media &amp;#8211; Facebook and Reddit. Posters and other physical media were among the least effective &amp;#8211; we saw no discernible impact the week we had posters like this all over campus:&lt;/p&gt;
&lt;div style='text-align: center;'&gt;
  &lt;img alt='Flow poster' src='/images/flow-poster.jpg' width='300' /&gt;
&lt;/div&gt;
&lt;p&gt;The first few months after launch were a really exciting time. We had 450 sign-ups the first day, and got lots of &lt;a href='http://www.reddit.com/r/uwaterloo/comments/12csk0'&gt;positive feedback&lt;/a&gt; and &lt;a href='https://uwflow.uservoice.com/forums/179420-general/filters/top'&gt;ideas for features&lt;/a&gt;. We ran a focus group, and one keen user typed up all of this of her own initiative:&lt;/p&gt;
&lt;div style='text-align: center;'&gt;
  &lt;img alt='Flow focus group feedback' src='/images/flow-focus-group-feedback.jpg' width='300' /&gt;
&lt;/div&gt;
&lt;p&gt;(Today, a year after, most of these are still TODOs. Yep, we&amp;#8217;re lazy bums.)&lt;/p&gt;

&lt;p&gt;To seed our ratings and reviews, we scraped sources including official, publicly-released course critiques. We then hosted a &amp;#8220;beer and review night&amp;#8221; at the VeloCity residence, where we gave out beer in exchange for ratings and reviews.&lt;/p&gt;

&lt;p&gt;We also ran a raffle contest, giving out a Nexus 7 and other goodies. This effectively doubled our ratings and reviews. If you&amp;#8217;re a Flow user, that&amp;#8217;s why you (still) get those mysterious points for reviewing courses.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;ve found that our biggest traffic gains came from announcing new, useful features, such as our &lt;a href='http://www.reddit.com/r/uwaterloo/comments/1qe1xl'&gt;launch of class sections info&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id='business'&gt;Business?&lt;/h2&gt;

&lt;p&gt;Though we had some good traction, Flow didn&amp;#8217;t really work out as a monetizable business. We were fortunate to have won a pitch contest from Waterloo&amp;#8217;s &lt;a href='http://velocity.uwaterloo.ca/'&gt;Velocity startup incubator&lt;/a&gt;, and we are thankful for all the assistance and mentorship they&amp;#8217;ve provided us. We also interviewed at YCombinator, but didn&amp;#8217;t get further. &lt;a href='#f3'&gt;&amp;#91;3]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We realized we weren&amp;#8217;t enamoured with selling to universities &amp;#8211; we wanted to build things our users would love. We didn&amp;#8217;t want Flow to turn into mandate-ridden enterprise bloatware that would alert you every 20 minutes to ask if you don&amp;#8217;t want to be logged out. Or sell that in Powerpoint presentations to &amp;#8220;decision makers&amp;#8221; who wouldn&amp;#8217;t be the end-users.&lt;/p&gt;

&lt;p&gt;We thought about possibly serving the exploding online courses market, but our core userbase was college students on campus. We did not have the heart to pivot and abandon them.&lt;/p&gt;

&lt;p&gt;Neither did the idea of squeezing money from students greatly appeal to us &amp;#8211; whether that&amp;#8217;s through ads (that we never even look at ourselves), or through textbooks (that we haven&amp;#8217;t bought since being clueless first-years).&lt;/p&gt;

&lt;p&gt;We did, however, all agree on one thing. We wanted Flow to continue to be used and maintained long after we graduate, whether as a sustainable business or some other means.&lt;/p&gt;

&lt;p&gt;We then realized that we much preferred to see Flow sustained as a community-supported, open-sourced project, than to submit to the whims of the highest bidder.&lt;/p&gt;

&lt;h2 id='opensource'&gt;Open-source&lt;/h2&gt;

&lt;p&gt;So, that&amp;#8217;s why we&amp;#8217;re open-sourcing. Explicitly, the reasons are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We&amp;#8217;ll (hopefully) be graduating in two months.&lt;/li&gt;

&lt;li&gt;We hope Flow continues to help students long after we graduate.&lt;/li&gt;

&lt;li&gt;We want to see Flow continue as a student-driven project for students.&lt;/li&gt;

&lt;li&gt;We have lots of features and improvements we wanted to make, but didn&amp;#8217;t get the time. For example, analyzing prerequisites, recommending courses, building a conflict-free timetable, and auditing degree requirements.&lt;/li&gt;

&lt;li&gt;We&amp;#8217;ve always wanted to bring Flow to other universities (and others have asked us), but our hands were full with just Waterloo. Now others can do that for us. :)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So over the past few days and months, we&amp;#8217;ve prepared the codebase to be open-sourced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrote developer docs.&lt;/li&gt;

&lt;li&gt;Ensured tests were in good order.&lt;/li&gt;

&lt;li&gt;Wrote a style guide and set up a linter.&lt;/li&gt;

&lt;li&gt;Tested setup on fresh installs of Mac and Linux (Ubuntu 12).&lt;/li&gt;

&lt;li&gt;Picked the permissive MIT license so you can fork, modify, and host this for your school.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Want to contribute?&lt;/strong&gt; Check out the &lt;a href='https://github.com/UWFlow/rmc'&gt;code on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Not sure where to start?&lt;/strong&gt; Perhaps you can tackle &lt;a href='https://github.com/UWFlow/rmc/issues'&gt;one of these issues&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have questions or just want to talk?&lt;/strong&gt; Come hang out with us in &lt;a href='https://www.hipchat.com/gAUVWHvA3'&gt;our public chat room&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to fork Flow to be a white-labelled platform for your school?&lt;/strong&gt; Awesome &amp;#8211; go for it. Just be wary that the data scrapers are tied to &lt;a href='https://github.com/uWaterloo/api-documentation'&gt;Waterloo&amp;#8217;s APIs&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id='whats_next'&gt;What&amp;#8217;s next?&lt;/h2&gt;

&lt;p&gt;Although we&amp;#8217;re graduating, we&amp;#8217;ll still be the primary maintainers of Flow for a while. But, we&amp;#8217;ll be on the lookout for active contributors to whom we can gradually hand off responsibilities &amp;#8211; review pull requests, ensure the site stays up, ensure Flow stays up to date, and, eventually, take over as primary maintainers.&lt;/p&gt;

&lt;p&gt;Oh, and a few things coming up soon:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email logins! We&amp;#8217;re thinking of you, non-Facebook friends.&lt;/li&gt;

&lt;li&gt;We&amp;#8217;ll be boothing at the &lt;a href='https://uwaterloo.ca/engineering/events/software-engineerings-capstone-design-symposium'&gt;SE Capstone Symposium&lt;/a&gt; on March 21 in DC. Drop by and say hi!&lt;/li&gt;

&lt;li&gt;Secret surprise.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to everyone who gave us a shot. Thank you for rating courses, writing reviews, making searches, sharing schedules, giving us feedback, or just reading this far.&lt;/p&gt;
&lt;hr class='article-divider' /&gt;
&lt;h2 id='footnotes'&gt;Footnotes&lt;/h2&gt;
&lt;a name='f1'&gt; &lt;/a&gt;
&lt;p&gt;&amp;#91;1] Also known as the Fourth Year Design Project, this is a 3-course sequence where Software Engineering students at Waterloo work on a single project in teams of 3-4 over the span of 20 months. Instead of a purely educational school project, we thought of this as the perfect opportunity to do a startup while we were still in school (and get course time and credit at the same time).&lt;/p&gt;
&lt;a name='f2'&gt; &lt;/a&gt;
&lt;p&gt;&amp;#91;2] Although Jamie is one of the most competent programmers I&amp;#8217;ve worked with, and we&amp;#8217;ve pair-programmed in ACM contest practices, we just &lt;em&gt;had&lt;/em&gt; to ask him Fizz Buzz anyway. You know. Just in case. We also asked him his favourite interview question ever: &amp;#8220;What&amp;#8217;s your greatest weakness?&amp;#8221; If you ever interview him, make sure to ask him questions like that.&lt;/p&gt;
&lt;a name='f3'&gt; &lt;/a&gt;
&lt;p&gt;&amp;#91;3] Here&amp;#8217;s the email Harj sent us:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I&amp;#8217;m sorry to say we decided not to fund you guys. It was a tough decision because we enjoyed meeting you and it&amp;#8217;s clear you&amp;#8217;re good programmers. Our concern is that while you&amp;#8217;ve build good software, we couldn&amp;#8217;t see how you&amp;#8217;ll be able to acquire enough users to grow this into the kind of large, independent company that investors are hoping to fund. We think it would be best if you finished college and in the meantime worked on projects because they were interesting rather than trying to come up with a startup idea right now. That approach actually often leads to better startup ideas anyway and we&amp;#8217;d encourage you to reapply again in the future, we&amp;#8217;d be happy to hear from you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We agree with pretty much all points.&lt;/p&gt;

&lt;p&gt;Also, here&amp;#8217;s a picture of us at YCombinator:&lt;/p&gt;
&lt;img alt='David, Mack, and Sandy at YCombinator' src='/images/david-mack-sandy-yc.jpg' width='680' /&gt;
&lt;p&gt;&amp;#8230; fixing things we broke the previous night.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Start with Mockups</title>
   <link href="http://david-hu.com/2013/09/25/start-with-mockups.html"/>
   <updated>2013-09-25T00:00:00-04:00</updated>
   <id>http://david-hu.com/2013/09/25/start-with-mockups</id>
   <content type="html">&lt;p&gt;My friends and I are working on a side project &amp;#8212; &lt;a href='http://uwflow.com'&gt;a course planning website for our university&lt;/a&gt;. We decide to add a new feature that involves some UI work. My friend goes off to hack on it. 300 lines of code later, he&amp;#8217;s done part of the UI and shows it to us. Here&amp;#8217;s what it looks like:&lt;/p&gt;
&lt;img alt='UW Flow manually select course prototype' src='/images/mockups/flow-select-course-2.png' width='680' /&gt;
&lt;p&gt;It lets you add a course (done) for a specific term (not yet done).&lt;/p&gt;

&lt;p&gt;We discuss this for a few minutes, and realize that the extra information in the dropdown isn&amp;#8217;t necessary in this context. At this point, the user has a course in mind and just needs to find it, so all that&amp;#8217;s needed is the course code and name. Something like this (with &lt;a href='http://ivaynberg.github.io/select2/'&gt;Select2&lt;/a&gt;):&lt;/p&gt;
&lt;img alt='UW Flow manually select course prototype 2: small version' src='/images/mockups/flow-select-course-4.png' width='680' /&gt;
&lt;p&gt;Being smaller, we can place this dropdown next to term headings &amp;#8212; we get the &amp;#8220;for a specific term&amp;#8221; part for free without designing more UI.&lt;/p&gt;

&lt;p&gt;So, we agreed to scrap the first prototype and redo most of the UI. We were regretful of the throwaway code, but it was better than writing more throwaway code.&lt;/p&gt;

&lt;p&gt;How could we have averted this?&lt;/p&gt;

&lt;h2 id='start_with_mockups'&gt;Start with Mockups&lt;/h2&gt;

&lt;p&gt;We didn&amp;#8217;t need 300 lines of code to figure that out. With a rough 5-minute sketch, we could engage in the same level of discussion.&lt;/p&gt;

&lt;p&gt;As a programmer, I&amp;#8217;ve found it incredibly helpful &amp;#8212; before coding any piece of UI &amp;#8212; to first draw a mockup. Just like a lean startup, the goal is to get feedback, fail fast, and iterate quickly. Experiment with multiple ideas before settling on one.&lt;/p&gt;

&lt;p&gt;This has been a lesson we&amp;#8217;ve learned during my internships at &lt;a href='https://siftscience.com'&gt;Sift Science&lt;/a&gt; as well &amp;#8212; particularly since our &lt;a href='http://tonyhschu.ca/'&gt;awesome designer&lt;/a&gt; just joined in August. So, we now operate with this rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For any major additions to the UI, please always draw some quick mockups on paper first. And by draw, I mean scrawl, scratch, barf graphite onto paper, whatever you want. This is not art. You will not be judged on how pretty it looks &amp;#8212; I promise you. Mockups are purely meant to define interaction and layout &amp;#8212; not visual styling/design.&lt;/p&gt;

&lt;p&gt;The purpose of a mockup is to be able to very quickly iterate on UI concepts, before it gets much more difficult to change once committed to code. It&amp;#8217;s also much easier for someone to give you feedback for big changes on a 5-minute mockup than on beautiful shiny working code and UI.&lt;/p&gt;

&lt;p&gt;Another advantage of starting with low-fidelity mockups is that it focuses time and attention on trying different layouts and interactions, instead of refining one and being stuck at a local maximum.&lt;/p&gt;

&lt;p&gt;A pencil-and-paper mockup also makes it easy to communicate to other team members what it is that you&amp;#8217;re building, concretely (heh).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Finally, just to emphasize that a mockup is a communication and ideation tool &amp;#8212; not the end result &amp;#8212; here are some of my brilliant masterpieces that you can &lt;em&gt;mock&lt;/em&gt; at:&lt;/p&gt;
&lt;!--If you can't mock it, it's not a mock-up!--&gt;&lt;!--TODO: read tai-jin's hipchat--&gt;&lt;!-- TODO: uwflow examples --&gt;&lt;img alt='Unreleased side project: 7 concepts for a tagging widget' src='/images/mockups/vim-awesome-1.jpg' width='680' /&gt;
&lt;p&gt;Seven concepts of a tagging widget for an unreleased side project. We ended up going with #4. On other mockups where I heavily relied on hover states, my friend gave good reasons to avoid them and suggested alternatives (while still showing relevant info without clutter).&lt;/p&gt;
&lt;!--- Here, this mock-up and subsequent discussion with a friend to focus on less on-hover elements...--&gt;
&lt;p&gt;Here&amp;#8217;s a series of three mockups depicting the UX to get human training data to improve a customer&amp;#8217;s &lt;a href='https://siftscience.com/how-it-works'&gt;machine learning model&lt;/a&gt; for Sift Science.&lt;/p&gt;
&lt;img alt='' src='/images/mockups/sift-survey-2.jpg' width='680' /&gt;
&lt;p&gt;Notice the misbehaving, &lt;em&gt;untrained&lt;/em&gt; puppy in the upper-right.&lt;/p&gt;
&lt;img alt='' src='/images/mockups/sift-survey-1.jpg' width='680' /&gt;
&lt;p&gt;(The &amp;#8220;share on Facebook and Twitter&amp;#8221; button is a joke.)&lt;/p&gt;
&lt;img alt='' src='/images/mockups/sift-survey-3.jpg' width='680' /&gt;
&lt;p&gt;The puppy has been trained into a fraud-fighting dog!&lt;/p&gt;

&lt;p&gt;I hope that shows you can be devoid of artistic skills and still draw mockups.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Why Interns should Blog</title>
   <link href="http://david-hu.com/2012/09/14/why-interns-should-blog.html"/>
   <updated>2012-09-14T00:00:00-04:00</updated>
   <id>http://david-hu.com/2012/09/14/why-interns-should-blog</id>
   <content type="html">&lt;p&gt;At the University of Waterloo in Canada, all engineering students enroll in a co-op program (&amp;#8220;co-op&amp;#8221; is Canadian for internship). We alternate between four months of work and four months of study, graduating after five years with eight study terms and up to six co-op terms (two years of work experience)! Consequently, there&amp;#8217;s usually Waterloo interns at many tech companies in Canada and the USA.&lt;/p&gt;

&lt;p&gt;Now, for software engineering students in my class, we&amp;#8217;re required to write &lt;a href='http://softeng.uwaterloo.ca/Current/work_report_guidelines.htm'&gt;technical work reports&lt;/a&gt; that usually ends up being 20 to 30 pages or longer, for four co-op terms. The goal is to assess judgement and writing ability, but the format is very rigid and unsuitable for many development internships.&lt;/p&gt;

&lt;p&gt;One day, it occurred to me what a great win it&amp;#8217;d be for everyone if even a portion of this effort could be turned into public blog posts. To illustrate the potential, of the 80ish students in my class, just three blogged about their internships to my knowledge. Of those three, all of them made the front page of Hacker News! In fact, one was even invited to present a TEDx talk and got his next co-op through a blog post.&lt;/p&gt;

&lt;p&gt;With ideas from some of my classmates and my mentor &lt;a href='http://bjk5.com/'&gt;Ben Kamens of Khan Academy&lt;/a&gt;, I composed a proposal arguing why we should let students write public blog posts for their work reports:&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Dear Software Engineering administrators,&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve received some feedback from students in our class regarding the existing work report format. As an academic rep, I&amp;#8217;d like to communicate this to you.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve been told that the format feels contrived. Ideally, when one encounters a problem during a co-op term for which one needs to make a choice, one would conduct an analysis, write a report based on it, and then implement the solution. However, what many of us usually do is to just hold an informal discussion and make a quick choice after that. When it&amp;#8217;s time to write the report, students may &amp;#8220;exaggerate the problem and pretend the choice was made after a full study.&amp;#8221;&lt;/p&gt;

&lt;p&gt;There are also students who resort to submitting self-study reports or confidential reports if their work term did not produce an appropriate subject that will satisfy the required format. Further, in many startup environments, there is little time to write a full report analyzing alternatives; it is preferable to just pick one and ship it, replacing/fixing it later if required. Fast iterations and user-facing work is emphasized, and it&amp;#8217;s just not practical to write a report of this size and scope for purely internal purposes.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m not recommending reducing or eliminating work reports altogether. Rather, I would like to propose an alternative:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For one work report submission, Software Engineering students can choose to write and publicize a technical blog post instead of a synthesis/analysis work report.&lt;/em&gt;&lt;/p&gt;

&lt;h2 id='why_a_blog_post'&gt;Why a blog post?&lt;/h2&gt;

&lt;p&gt;Blog posts are an important new form of media to complement and broaden a student&amp;#8217;s writing repertoire. Many startups have accompanying blogs that increase community engagement and drive traffic to their product. These blog posts could bring publicity for Waterloo&amp;#8217;s co-op students and Waterloo&amp;#8217;s co-op program. Because these blog posts will be public, students will be motivated &amp;#8211; not to satisfy a checklist of requirements &amp;#8211; but because their co-op employer, their colleagues, professionals in industry, and potentially a future employer will be reading it (this has actually happened).&lt;/p&gt;

&lt;p&gt;Further, not only do blog posts help increase publicity for the student, but they may actually be helpful to the community. For example, I have a friend writing a self-study report comparing various server push technologies and analyzing which are the most appropriate in certain scenarios. He was also considering writing a report on which mobile platform, Android or iOS, to develop for first. The amount of work and research put into a self-study work report would serve as a fantastic community resource if made publicly available as a blog post or a series of blog posts.&lt;/p&gt;

&lt;p&gt;My co-op mentor and lead developer at Khan Academy, Ben Kamens, repeatedly encourages all full-timers and interns to blog, even during company hours. On the topic of interns writing blog posts, he has also said:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;raises the market value of interns&lt;/li&gt;

&lt;li&gt;great practice for shipping work into the real world &amp;#8211; blogs are mini products, and getting familiar with moving past the &amp;#8220;it&amp;#8217;s not ready to ship&amp;#8221; inertia is invaluable&amp;#8221;&lt;/li&gt;

&lt;li&gt;possible that a community will spring up around the post &amp;#8211; might be invited to speak at a conference as a result&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are some examples of students in SE 2014 who have written blog posts based on their work terms and reaped significant benefits:&lt;/p&gt;

&lt;p&gt;Jamie Wong wrote a blog post about &lt;a href='http://jamie-wong.com/2012/08/22/what-i-did-at-khan-academy/'&gt;everything he did at Khan Academy&lt;/a&gt;. This found its way to the front page of &lt;a href='http://news.ycombinator.com/item?id=4423446'&gt;Hacker News with 102 points&lt;/a&gt; and subsequently attracted 12 000 visitors over 2 days. Jamie received a response from Peter Norvig, AI researcher and director of research at Google, congratulating him on his work.&lt;/p&gt;

&lt;p&gt;Another student&amp;#8217;s &lt;a href='http://david-hu.com/ka-ml.html'&gt;blog post on a co-op project&lt;/a&gt; received more than &lt;a href='http://news.ycombinator.com/item?id=3187350'&gt;200 points on Hacker News&lt;/a&gt;, was &lt;a href='http://www.reddit.com/r/programming/comments/lxsjj/how_khan_academy_is_using_machine_learning_to/'&gt;top post for a day on the programming community on Reddit&lt;/a&gt;, and was viewed by more than 20 000 visitors the day it was posted. As a result of this blog post, this student received multiple employment offers (one of which will be his next co-op term) and was also invited to present at a TEDx event.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.wenhaolue.com/'&gt;Wen-Hao&lt;/a&gt; wrote about his &lt;a href='http://corner.squareup.com/2012/08/ponydebugger-remote-debugging.html'&gt;project at Square, PonyDebugger&lt;/a&gt;, which attracted &lt;a href='http://news.ycombinator.com/item?id=4455110'&gt;260 points on Hacker News&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;From the perspective of work report markers, enforcing consistent marking might be an issue. Whereas the existing work report template is very well defined with unambiguous checklists, marking a blog post will leave more to the marker&amp;#8217;s discretion and judgement. Instead of specifying a rigid structure, for a public blog post, we may just want to set out some guidelines. As a starting point, here are some possibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;be on a technical subject&lt;/li&gt;

&lt;li&gt;have a minimum length requirement in number of words (can split up into a series of blog posts)&lt;/li&gt;

&lt;li&gt;be publicly accessible&lt;/li&gt;

&lt;li&gt;make an effort to promote to the relevant audience?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Grading could just be pass/fail; let the public nature of the blog post serve as the incentive to make an effort.&lt;/p&gt;

&lt;p&gt;If there are no other issues that we can&amp;#8217;t work around, I think this would be a great thing to try at least once.&lt;/p&gt;

&lt;p&gt;I truly wish this could be something very useful, not just for students themselves, but for the technical community in general.&lt;/p&gt;

&lt;p&gt;Thank you for your time and consideration!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;I&amp;#8217;ve received a response that the old work report format is being reworked to be less rigid, which is great to hear. However, there&amp;#8217;ll have to be more work done to have the blog post proposal fleshed out and accepted, but at least one professor likes the idea. We&amp;#8217;ll see where it goes.&lt;/p&gt;
&lt;!--It saddens me to see student effort expended on school assignments that are designed for the ease of evaluation.--&gt;
&lt;p&gt;Leaving public artifacts is a great way to not only provide natural incentives, but to allow for unbounded creativity and enrich the world at the same time. I sincerely wish that this would encourage more students who might have been thinking about blogging to blog.&lt;/p&gt;

&lt;p&gt;If you have any anecdotes about blog posts, or what I could do to convince my school, I&amp;#8217;d love to hear them!&lt;/p&gt;

&lt;p&gt;Also, I&amp;#8217;m overdue myself for another blog post about Khan Academy (I blame working on my 30-page work report :P). Stay tuned!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Announcing Numbers API</title>
   <link href="http://david-hu.com/2012/03/05/announcing-numbers-api.html"/>
   <updated>2012-03-05T00:00:00-05:00</updated>
   <id>http://david-hu.com/2012/03/05/announcing-numbers-api</id>
   <content type="html">&lt;p&gt;tl;dr: Check out &lt;a href='http://numbersapi.com'&gt;Numbers API&lt;/a&gt; for interesting facts about numbers.&lt;/p&gt;

&lt;p&gt;Back when I was &lt;a href='/2011/11/02/how-khan-academy-is-using-machine-learning-to-assess-student-mastery.html'&gt;interning at Khan Academy a few months ago&lt;/a&gt;, my intro project was to create a dashboard for exercise statistics. Among the &lt;a href='https://khan-academy.geckoboard.com/dashboard/9820993B8EEAB10E'&gt;variety of graphs and widgets&lt;/a&gt; was one that reported a factoid about the number of shipped exercises, such as &amp;#8220;We now have more exercises than the number of years Harriet the Galápagos tortoise lived (1830–2006).&amp;#8221;&lt;/p&gt;

&lt;p&gt;People seemed fascinated by their tidbits of random trivia. Sal Khan even suggested hosting a web service for these facts at numbers.khanacademy.org, but nothing came of that. That is, until now.&lt;/p&gt;

&lt;p&gt;My friend &lt;a href='http://mduan.com'&gt;Mack&lt;/a&gt; and I were deciding on a side project to distract our minds from Bode plots and Jacobians (if only Sal had some videos on Control Theory&amp;#8230;), and narrowed down a &lt;a href='/2012/01/05/my-experiment-in-daily-idea-generation.html'&gt;crapload of ideas&lt;/a&gt; to just one. The winner was an API for interesting number facts, based on the criteria of being novel, completable in a few weekends, and interesting to us.&lt;/p&gt;

&lt;p&gt;After a few weekends of on-and-off work, including a demo at our class&amp;#8217;s &lt;a href='http://sehackday.com/'&gt;student-organized hackathon&lt;/a&gt;, we&amp;#8217;re finally launching &lt;a href='http://numbersapi.com'&gt;numbersapi.com&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;We built Numbers API with Node and Express for the back-end and Sass + Compass to make CSS bearable. We designed the landing page and the web service together, and then Mack put together the first iteration of the landing page while I set up the server and wrote the API + docs. We then sort of swapped roles, and I had the chance to prettify the landing page to my tastes. I also yet again self-plagiarized from my work at Khan Academy and did 20% of the work required to convert the rolling numbers counter into a jQuery plugin (the other 80% is more testing, performance tuning, code clean-up, and greater extensibility).&lt;/p&gt;

&lt;p&gt;Mack, on the other hand, started hunting for content. I believe he used LXML to scrape Wikipedia and a Python natural-language processing toolkit to process sentences into a consistent grammatical form. This form was specifically chosen to be flexible enough to be used in a sentence like &amp;#8220;42 is &lt;strong&gt;&amp;#60;fact string&amp;#62;&lt;/strong&gt;.&amp;#8221; as well as &amp;#8220;We now have more exercises than &lt;strong&gt;&amp;#60;fact string&amp;#62;&lt;/strong&gt;.&amp;#8221; (I leave the exact form as an exercise to the reader.) This turned out to be non-trivial for &lt;em&gt;trivia&lt;/em&gt; facts, and we even resorted to manually combing for interesting facts on cardinal numbers (which were far &lt;em&gt;outnumbered&lt;/em&gt; by numbers used as names and codes) and phrasing them appropriately.&lt;/p&gt;

&lt;p&gt;This is just the beginning. Time-permitting, we are also thinking of extracting and paraphrasing interesting facts from the Guinness World Records, almanacs, numbers in nature, statistics, number of works by famous artists, etc.&lt;/p&gt;
&lt;!--Here's a charts of API usage statistics:--&gt;&lt;!--
&lt;div id=&quot;time-histograms&quot;&gt; &lt;/div&gt;
&lt;script&gt;
    $.get('http://numbersapi.com/type-time-highcharts', function(data) {
        var highchartsData = [];
        $.each(data, function(type, values) {

            highchartsData.push({
                name: type,
                data: values
            });
        });  // TODO use map
        new Highcharts.Chart({
            chart: {
                renderTo: 'time-histograms',
                type: 'spline',
                height: 400
            },
            credits: { enabled: false },
            title: { text: 'API usage over time' },
            series: highchartsData,
            yAxis: {
                title: { text: 'Requests' },
            },
            xAxis: {
                type: 'datetime'
            }
        });
    });
&lt;/script&gt;
&lt;noscript&gt;
    Please enable JavaScript to see charts.
&lt;/noscript&gt;
--&gt;
&lt;p&gt;Have fun, and we can&amp;#8217;t wait to know how you&amp;#8217;ll be using these number facts! We ask only that you be gentle to our server.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://numbersapi.com'&gt;Numbers API&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>My Experiment in Daily Idea Generation</title>
   <link href="http://david-hu.com/2012/01/05/my-experiment-in-daily-idea-generation.html"/>
   <updated>2012-01-05T00:00:00-05:00</updated>
   <id>http://david-hu.com/2012/01/05/my-experiment-in-daily-idea-generation</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve long had the fear that, should I ever want to do a startup, I wouldn&amp;#8217;t have an idea that I wanted to passionately pursue. So, for about a year, I&amp;#8217;ve been passively maintaining a list of any idea that pops into my head as a Google Doc. With about 40 items on that list, there wasn&amp;#8217;t anything that hadn&amp;#8217;t been done that I thought was particularly compelling. Then, one day, a meta-idea popped into my head: what if I spent 10 minutes every morning &lt;em&gt;actively&lt;/em&gt; generating ideas, writing down any thought I get in a stream-of-consciousness, unfiltered fashion? I could just cut back my morning Reddit + Hacker News + RSS reading.&lt;/p&gt;

&lt;p&gt;Would there be anything interesting? How many would I get? Would the volume trickle off after a few days? Would it increase the rate of passive ideas that pop into my head? Would it nurture my creativity and engender greater right-brain activity (whatever that means)? I was curious.&lt;/p&gt;

&lt;p&gt;So, I started this experiment hoping to do it every day for about a month. I didn&amp;#8217;t care how crappy the ideas were, as I kept in mind:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I&amp;#8217;m more interested in the results of this experiment than for anything worthwhile to come as a bonus side-effect.&lt;/li&gt;

&lt;li&gt;I don&amp;#8217;t care what anybody thinks. I did not need to show this to anybody.&lt;/li&gt;

&lt;li&gt;Have fun. If not, then I&amp;#8217;m doing it wrong.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By the end, I accumulated a total of 286 ideas over 29 days:&lt;/p&gt;

&lt;h2 id='all_ideas'&gt;All ideas&lt;/h2&gt;

&lt;p&gt;This is the raw list of my stream-of-consciousness writing, with some points edited to be clearer. (See below for my favourites.)&lt;/p&gt;
&lt;p&gt;
    &lt;div id='all-ideas'&gt;
        
        &lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Tue Nov. 15&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dream or sleeping patterns (this was just the first thing on my mind when I woke up to get me writing)&lt;/li&gt;

&lt;li&gt;Anonymous love messages - FB app?&lt;/li&gt;

&lt;li&gt;Open-sourced UserVoice (feature requests &amp;amp; questions forum)&lt;/li&gt;

&lt;li&gt;Are you working? Monitor computer usage: # of lines of code written, what sites visited, breakdown, what apps you used&lt;/li&gt;

&lt;li&gt;Vim plugin: show how a document or code was created. Show all insertions / deletions, commands used. (Show off your Vim skills.)&lt;/li&gt;

&lt;li&gt;Browser history analytics: time spent, histogram, scrolling behaviour, # of words read&lt;/li&gt;

&lt;li&gt;What to buy friends? FB app? Public wish list.&lt;/li&gt;

&lt;li&gt;What should I build? Voting. Private / public. Champion ideas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Wed Nov. 16&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;#8221;I&amp;#8217;m sleeping&amp;#8221; notifications &amp;#8211; chat, email, phone&lt;/li&gt;

&lt;li&gt;Public shaming service for productivity. I will X or owe everybody $20.&lt;/li&gt;

&lt;li&gt;Computer usage analytics: hours per program, file sizes, interactions, etc.&lt;/li&gt;

&lt;li&gt;Git analytics: commits / day, which hours, lines of code, etc.&lt;/li&gt;

&lt;li&gt;Learn a language morning cards / alarm clock&lt;/li&gt;

&lt;li&gt;Wiki: summary (tl;dr) of &lt;em&gt;everything&lt;/em&gt;: articles, books, movies, shows, news (with multiple granularity: days, weeks, months). For the impatient.&lt;/li&gt;

&lt;li&gt;Meme tracker: keep updated on new memes (eg. for Reddit) or ways of saying things (eg. &amp;#8220;redundant X is redundant&amp;#8221;, &amp;#8220;y u no&amp;#8221;, &amp;#8220;le *&amp;#8221;, etc.)&lt;/li&gt;

&lt;li&gt;Top news or Reddit distilled to a newsletter&lt;/li&gt;

&lt;li&gt;Learning protocol / specification; universal learner&amp;#8217;s profile. API specs. (like OpenSocial for students)&lt;/li&gt;

&lt;li&gt;Who are you most compatible with? FB app?&lt;/li&gt;

&lt;li&gt;Programming wiki: JS, CSS, &lt;em&gt;any language&lt;/em&gt;. Good examples, usage, advice, links to references, StackOverflow questions, collaboratively created, threaded comments w/ upvotes? Seeded (eg. with MDN)?&lt;/li&gt;

&lt;li&gt;Open-source / wiki code snippets, recipes, etc. Eg. iterate over each line of file, in every language.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Thu Nov. 17&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(4 Khan Academy ideas (where I was interning at the time))&lt;/li&gt;

&lt;li&gt;Global ideas; people submit their issues / problems they would pay to have solved&lt;/li&gt;

&lt;li&gt;&amp;#8220;You&amp;#8217;re going to be late&amp;#8221; automatic notifier on calendars&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Fri Nov. 18&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nutritional info daily: scan products&amp;#8217; barcodes (or enter manually) what you&amp;#8217;re eating in a day. Stats, recommendations, are you healthy?&lt;/li&gt;

&lt;li&gt;What similar people are doing / reading / working&lt;/li&gt;

&lt;li&gt;Real-time Reddit: stories being submitted, upvotes generated&lt;/li&gt;

&lt;li&gt;Am I wasting my time? Daily email usage, chat, Reddit, terminal, gaming. Histograms.&lt;/li&gt;

&lt;li&gt;Mall / store item locator. Insert what you want. Gives short Hamiltonian path. Recommendations, ads.&lt;/li&gt;

&lt;li&gt;Learn from coding master. Get paid to coach.&lt;/li&gt;

&lt;li&gt;Virtual pair-programming over internet.&lt;/li&gt;

&lt;li&gt;What are my friends doing? eg. Visiting LA, watching which movies, seeing which concerts, go to Startup Weekend. Recommendations. Meetups. Organize trips or bring together groups going to same event.&lt;/li&gt;

&lt;li&gt;directory / wiki of failed attempts / ideas&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Sat Nov. 19&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where did you buy that / what is that product? Take picture or scan barcode. Gives links.&lt;/li&gt;

&lt;li&gt;Mobile app: need to be where at what time (checks with GPS). If not, server publicly shames you (posts on your twitter, FB, etc.).&lt;/li&gt;

&lt;li&gt;Something between PaaS and SaaS: you give data schema, can just write client-side app. Server only for data persistence + external requests.&lt;/li&gt;

&lt;li&gt;Restaurants: where do I eat today? Recommendations (proximity and favour unvisited places), ads.&lt;/li&gt;

&lt;li&gt;API: translate a word into multiple languages and make pretty Wordle-like motif&lt;/li&gt;

&lt;li&gt;Google image search with upvotes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Sun Nov. 20&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplified / pretty UI for weather. Single line graph for temperature &amp;amp; precipitation; zoom in and out&lt;/li&gt;

&lt;li&gt;Self-diagnose: answer quiz about lots of health-related signals (eg. age, sex, conditions, etc.). Tells probability of various forms of cancer, depression, various diseases.&lt;/li&gt;

&lt;li&gt;JS plugin: quote expander for long text. Replace long / less important text with intro sentence or a pre-written summary; click to expand&lt;/li&gt;

&lt;li&gt;Chrome extension for reading level of Reddit / HN articles&lt;/li&gt;

&lt;li&gt;Person info gatherer: that person&amp;#8217;s Wikipedia article, LinkedIn, FB, blog, what known for, phone #s, locations, etc.&lt;/li&gt;

&lt;li&gt;How arrogant is this writer / blog? ML or voting&lt;/li&gt;

&lt;li&gt;Particle filter algorithm demo in JS&lt;/li&gt;

&lt;li&gt;Public shaming: web scraping or write script. &amp;#8220;David&amp;#8217;s blog did not have a new article by date.&amp;#8221; API for GitHub, web, social, etc.&lt;/li&gt;

&lt;li&gt;Culture wiki: travelling to / migrating to new country? Learn social norm, fairy tales, popular movies, people, how to act, etc.&lt;/li&gt;

&lt;li&gt;Article recommendations based on what you like / dislike. Use Reddit info?&lt;/li&gt;

&lt;li&gt;Beginning {programmer,engineering,electrician,doctor,painter,etc.}: what to learn? What skills are most useful in industry? What tools are used?&lt;/li&gt;

&lt;li&gt;Goals web: Bayes net. eg. &amp;#8220;I want to work at Google&amp;#8221;. Lists possible prereqs (what did other people do before accomplishing certain goal?) Click prereqs to recursively get their prereqs. Get your own personalized path to goal. Infer structure and probabilities from user input. Eg. Are you a prof? What did you do before / to become one?&lt;/li&gt;

&lt;li&gt;What do similar people do? Eg. What do HN readers, standing-desk users, Cubans, GEB readers, rock climbers, terminally-ill, etc. like to do? What are their age groups, ethnicities, hobbies, other characteristics? (eg. Reads Reddit? Have a blog? Contributing to StackOverflow? Doing a startup? Working at tech company? Have read book X? Age histogram? Played piano?) You fill out detailed profile / answer questions like 20Q. Recommends what you could do. Recursively see what people doing each recommended item like to do.&lt;/li&gt;

&lt;li&gt;Wallpaper rotates between top daily submissions to /r/wallpapers or /r/earthporn or other source&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Mon Nov. 21&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Alternatives to: software, other things. Function clusters. Ratings, Feature charts. Reviews. Network. Use X if doing Y, etc.&lt;/li&gt;

&lt;li&gt;Problem: need help finishing what I started&lt;/li&gt;

&lt;li&gt;Commentary on non-fiction books. Criticisms, summaries, wiki errata. Community annotations.&lt;/li&gt;

&lt;li&gt;Atheist, evolution, etc. arguments, common rebuttals/responses, appropriate counter-rebuttals. Rebuttals to common misbeliefs. Arguments flowchart to convince somebody of X.&lt;/li&gt;

&lt;li&gt;Online UML creator&lt;/li&gt;

&lt;li&gt;Online (JS) data visualization: dumb simple straight copy+paste, or input data in cells or chart. WYSIWYG configuration. Output appropriate charts, get permalink to output, produce HighCharts (or other JS charting software) code.&lt;/li&gt;

&lt;li&gt;Pair picture slideshows to music: slide transitions match sounds in music; slide mood matches tempo/pitch/loudness; find appropriate music for givens slides; find appropriate pictures for given music&lt;/li&gt;

&lt;li&gt;Wikipedia road map: most linked articles, visualize links as web&lt;/li&gt;

&lt;li&gt;Distinctions Venn diagram: enter two keyword / phrases. Uses Wikipedia / Google / some API to find similarities and differences&lt;/li&gt;

&lt;li&gt;Online PDF editor: annotations, form fields, etc.&lt;/li&gt;

&lt;li&gt;HN / Reddit auto-submit. Go to sleep; will automatically submit article at optimal pick-up time&lt;/li&gt;

&lt;li&gt;Map of HN readers, Redditors, etc. for each article. Links between stories commented by the same user&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Tue Nov. 22&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code for academic papers: open-source implementations&lt;/li&gt;

&lt;li&gt;App feedback / usage: Post screenshots, videos, playback IDK! etc. (I&amp;#8217;ve forgotten what I meant when I initially wrote this now.)&lt;/li&gt;

&lt;li&gt;Do I have bad breath meter&lt;/li&gt;

&lt;li&gt;Blue light filter (software or physical): For reading phones at night, etc. (Flux)&lt;/li&gt;

&lt;li&gt;JobVite for seekers: Recommendations, where to apply, resume hosting, checklists, what other jobs seekers are doing, common qualifications / keywords of other seekers, etc.&lt;/li&gt;

&lt;li&gt;Given some website, outputs a packaged theme: colour scheme, font scheme, templates, CSS, design elements, widgets, etc. Make it easy to copy another website&amp;#8217;s design&lt;/li&gt;

&lt;li&gt;Dumb simple one-click easy-to-use program for SSH forwarding to access Pandora, other US-only services elsewhere&lt;/li&gt;

&lt;li&gt;Reddit picture viewer (with captions): Collage of pictures&lt;/li&gt;

&lt;li&gt;Q&amp;amp;A or discussion forum on any webpage or Wikipedia page. Common misconceptions? Browser extension?&lt;/li&gt;

&lt;li&gt;LaTeX-as-a-service on a server: will compile LaTeX for you; API (because LaTeX is a pain to setup)&lt;/li&gt;

&lt;li&gt;Design critiques: people can comment on webpage. Possibly automatically check against design guidelines? Lint / page-speed for design.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Wed Nov. 23&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mistake database: document every mistake you&amp;#8217;ve made. People upvote. Good for learning a new language, technology, skill, coding contests, etc. (eg. Python&amp;#8217;s default args evalled once; JS closure-in-for-loop gotcha)&lt;/li&gt;

&lt;li&gt;Joke database: upvotes, etc.&lt;/li&gt;

&lt;li&gt;Talk topics: enter what you like / have talked about; suggests other ones&lt;/li&gt;

&lt;li&gt;Re-word sentences: Here&amp;#8217;s what I want to say. What&amp;#8217;s the best way of wording it?&lt;/li&gt;

&lt;li&gt;Number range trivia app: Estimate a certain number (eg. # of lions). See who&amp;#8217;s the closest. Histogram of other users&amp;#8217; estimates, mean, etc.&lt;/li&gt;

&lt;li&gt;Apps for common board games: apples-to-apples, Pictionary, etc.&lt;/li&gt;

&lt;li&gt;Ping-pong ball-collecting robot (for training on a bucket of balls)&lt;/li&gt;

&lt;li&gt;Can I get into university X? ML? Enter marks, extracurriculars, etc. to determine which programs / schools suitable and probability of acceptance. User voting?&lt;/li&gt;

&lt;li&gt;Career choice. ML (do a quiz; answer 20Q questions) suggestions. Ask existing professionals.&lt;/li&gt;

&lt;li&gt;What tools / libraries / framework is it built with? Tries to automatically detect? Wiki?&lt;/li&gt;

&lt;li&gt;Aggregate karma: GitHub, StackOverflow, Reddit, HN, Twitter followers, etc. Total followers, following, etc. Another layer of game mechanics, interesting challenges, and badges! Follow your friends! Leaderboards.&lt;/li&gt;

&lt;li&gt;Share interesting code / one-liners (like Commandlinefu for any language)&lt;/li&gt;

&lt;li&gt;Share how you solved technical challenge&lt;/li&gt;

&lt;li&gt;Open-source or user-contributed API dictionary&lt;/li&gt;

&lt;li&gt;Make Google search results link directly to result instead of redirect&lt;/li&gt;

&lt;li&gt;Critique platform: Upload any media (eg. pictures, videos, links, text, etc.). People annotate with critiques (eg. more whitespace here, change to this font, this colour, redesign like this, etc.). StackOverflow-like game mechanics. Offer monetary bounties?&lt;/li&gt;

&lt;li&gt;Decision-making platform: What are your criteria, budget, needs, etc. ML or user-contributed w/ voting and StackOverflow game mechanics.&lt;/li&gt;

&lt;li&gt;Bike-sharing for interns&lt;/li&gt;

&lt;li&gt;Share browser bookmarks + aggregate stats, recommendations, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Thu Nov. 24&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Warning, prompts, reminders to go to sleep: alarm clock for sleeping.&lt;/li&gt;

&lt;li&gt;Quiz you on knowledge of a programming language. Warns you if dangerously lacking; shows percentile? Suggests articles / books / gives tips to fill you in on crucial gaps in your knowledge.&lt;/li&gt;

&lt;li&gt;Random app ideas generator? Eg. {social,photo-sharing} for {neighbours,music lovers}. Markov chains?&lt;/li&gt;

&lt;li&gt;Improve this line of code / how to write this more idiomatically / code reviews&lt;/li&gt;

&lt;li&gt;what&amp;#8217;s the term for &amp;#8220;concept&amp;#8221; (like /r/tipofmytongue) or fill in the blank: &amp;#8220;blah blah ____ blah&amp;#8221;. ML or user-contributed w/ game mechanics&lt;/li&gt;

&lt;li&gt;Check for updates on page. If there are, refreshes or just replace with new content with minimal visible reflowing or show some indication&lt;/li&gt;

&lt;li&gt;Lure theists / beliefs in certain things: Asks questions. User does quiz. Question by question, a contradiction is built up, or slowly lead to more ridiculous things.&lt;/li&gt;

&lt;li&gt;Write comments in code. Will find related StackOverflow posts. Prevent you doing stupid things such as parse user-provided HTML with regex.&lt;/li&gt;

&lt;li&gt;What apps + tools should I use? For programmers, musicians, designers, etc. Aggregates what people use. Create your own usesthis profile, find similar ppl, have nice page to link to from your blog, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Fri Nov. 25&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Haiku-ify: Take sentence (or paragraph or article), convert to Haiku or other poem&lt;/li&gt;

&lt;li&gt;What can I get for X dollars?&lt;/li&gt;

&lt;li&gt;Pandora client for Mac - free version&lt;/li&gt;

&lt;li&gt;Lint all - lint a directory (detect file types)&lt;/li&gt;

&lt;li&gt;Mercurial / Git pre-submit linter&lt;/li&gt;

&lt;li&gt;Tutorial or wiki for beginning programmers on everything: introduces Linux, Vim, Git, JS, Firebug or Chrome dev tools, Python or Ruby, C or C++, a functional language, Makefile, Apache or Nginx, DNS, setting up a server, a web framework, where / how to ask for help, how to debug, etc. (things not always taught in school but useful in industry)&lt;/li&gt;

&lt;li&gt;Travel app: checklists, itineraries, games, weather, etc.&lt;/li&gt;

&lt;li&gt;Someone lonely / wants conversation near you&lt;/li&gt;

&lt;li&gt;Go eat lunch with somebody close by (for those who don&amp;#8217;t want to eat alone)&lt;/li&gt;

&lt;li&gt;Create fake FB wall posts for screenshotting (to submit to Reddit (like /r/atheism))&lt;/li&gt;

&lt;li&gt;Mistake database with regexes to capture it. Lint existing or new code.&lt;/li&gt;

&lt;li&gt;Malware / virus to force-upgrade IE users or install Chrome frame&lt;/li&gt;

&lt;li&gt;Browser upgrade for old people: Chrome but with IE icon (or look?), auto-import settings and bookmarks, really really easy setup.&lt;/li&gt;

&lt;li&gt;Pro-tips around your neighbourhood / city. Where to eat, best place for haircut, when garbage truck comes around, where to get X, where Y hangs out, etc.&lt;/li&gt;

&lt;li&gt;Jimmy Wales &amp;#8220;A personal appeal&amp;#8221; banner parody / creator&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Sat Nov 26&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Am I sleeping? Mobile app + alarm. If sleeping notifies others and updates chat client statuses&lt;/li&gt;

&lt;li&gt;Arbitrarily-detailed math proofs: click each step to expand into more steps, and so on&lt;/li&gt;

&lt;li&gt;Game: take short sentence and recursively replace words with definitions. Guess the original word / phrase&lt;/li&gt;

&lt;li&gt;Get real-world colour in RGB (mobile camera app)&lt;/li&gt;

&lt;li&gt;Find top colours: Compare any two (or two similar colours): ask which one is prettier. Or ask which one is the more canonical &amp;#8220;green&amp;#8221;. Ask which colour goes better with another one. Game mechanics to create aggregate info for colour designers.&lt;/li&gt;

&lt;li&gt;Comparison test of prettiness: Side-by-side display two different versions, ask people which one they prefer.&lt;/li&gt;

&lt;li&gt;Idiom linter: linter replaces common code constructs with their more idiomatic or more efficient forms (or more correct ways, but prompts first): eg. if (a) return true; else return false; &amp;#8211;&amp;gt; return a;&lt;/li&gt;

&lt;li&gt;Happy birthday personalized Google / homepage&lt;/li&gt;

&lt;li&gt;Mobile app for ml-class or ai-class or other Stanford online courses&lt;/li&gt;

&lt;li&gt;Mandatory knowledge every person must know: eg. instinctive drowning response, Heimlich manoeuvre, etc. Quizzes you&lt;/li&gt;

&lt;li&gt;&amp;#8220;Hip&amp;#8221; tracker &amp;#8211; what&amp;#8217;s trendy right now (Google search trends or Twitter or upvotes). Comparisons of common things, eg. languages or frameworks&lt;/li&gt;

&lt;li&gt;Wiki for most idiomatic way to do a common task X in every language (eg. file I/O, print a line, regex test, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Sun Nov. 27 (at Yosemite today :)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yelp-like tips (eg. best menu item, do X) (take highlights / common parts) of reviews for everything: eg. Places, tourist attractions&lt;/li&gt;

&lt;li&gt;Simultaneous wake-up: alarm keeps ringing if all parties are not awake (or just notifies if other party has hit snooze or has not cancelled alarm)&lt;/li&gt;

&lt;li&gt;Bear / wildlife detector / mapper&lt;/li&gt;

&lt;li&gt;Documents for every location / place to visit: maps, rules, brochures, etc.&lt;/li&gt;

&lt;li&gt;Common mapping software for parks / indoor places / fairs&lt;/li&gt;

&lt;li&gt;Travel itinerary for different places&lt;/li&gt;

&lt;li&gt;Get to sleep app: plays a boring lecture with monotonous voice; boring book; soothing sounds&lt;/li&gt;

&lt;li&gt;Interesting stories about the places / things near you&lt;/li&gt;

&lt;li&gt;App: extremely simple and easy-to-understand open-source / wiki instructions for everything: microwaves, cars, various hardware, etc.&lt;/li&gt;

&lt;li&gt;Remote-activated middle finger lights on side / back of car&lt;/li&gt;

&lt;li&gt;Next rest stop app (for road trips)&lt;/li&gt;

&lt;li&gt;Mechanical / animatronic dog to scare away burglars&lt;/li&gt;

&lt;li&gt;Synchronize car stereos (or phones or other devices): like lots of boomboxes / speakers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Mon Nov. 28&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Water or calorie consumption estimate: walk this far / do this exercise this long. How much energy depleted?&lt;/li&gt;

&lt;li&gt;Number of deaths at certain locations. Mobile app? Closest death to you.&lt;/li&gt;

&lt;li&gt;Motivational stuff: pictures, videos, etc.&lt;/li&gt;

&lt;li&gt;Mobile app: voice notes&lt;/li&gt;

&lt;li&gt;Dictation software: write by dictating. Shows you guessed text along with audio recordings, make it very very easy to edit misguesses. Voice commands for editing.&lt;/li&gt;

&lt;li&gt;Am I healthy? Enter sleeping hours, exercise types &amp;amp; times, eating, drinking, washroom breaks, etc. Tells how healthy you are compared to others, what you should be doing to improve, what you are at risk of&lt;/li&gt;

&lt;li&gt;Infographic / size viewer creator. I can&amp;#8217;t visualize extreme numbers. Express numbers in other things / forms, such as number of Plutos to make up mass of Earth, probability of death from wolf attack, number of books to stack to how high, number of times around the Earth, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Tue Nov. 29&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Productivity: only allow certain apps to run for a specified time. Blocks Reddit, HN, etc. after a while. Enforced rate of text entry or something to force you to do work.&lt;/li&gt;

&lt;li&gt;Build-a-web app TopCoder / contracting. Modularize components, eg. contest to design logo, contest to write code for this tiny component, this API, etc.&lt;/li&gt;

&lt;li&gt;Safety tips website with micromorts info (probability of death)&lt;/li&gt;

&lt;li&gt;Scan product barcode (or take picture) at store; get reviews&lt;/li&gt;

&lt;li&gt;Watch TV show together over internet with live chat, polls, predictions, etc.&lt;/li&gt;

&lt;li&gt;Enforce reasonable tab order on forms: left-to-right to bottom-right&lt;/li&gt;

&lt;li&gt;Tool updates: new tools, plugins, reviews, etc.&lt;/li&gt;

&lt;li&gt;What software do you use? Updates you on software your friends starts using or similar people, or trending new software or alternatives replacing incumbents&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Wed Nov. 30&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Post your standing desk setup picture (or just desk + monitor setup). List products / hardware + price&lt;/li&gt;

&lt;li&gt;Life hacks website: number of people doing it, upvotes / downvotes, reviews, cautions, related profiles to you, related hacks&lt;/li&gt;

&lt;li&gt;jQuery Earth globe plugin&lt;/li&gt;

&lt;li&gt;Motivational Growl messages: On Reddit too much? Reminds you to work on day&amp;#8217;s most important tasks. When you open computer, shows you what you should be doing today (from your task list) in very big text in middle of screen. Occasional reminders throughout the day&lt;/li&gt;

&lt;li&gt;Who do I look like? Faces database or closest matching celebrity&lt;/li&gt;

&lt;li&gt;Drag + drop tangrams app (probably exists)&lt;/li&gt;

&lt;li&gt;What is it like in place X? Temperature, web cam, traffic, weather, etc.&lt;/li&gt;

&lt;li&gt;Markov chain twitter messages&lt;/li&gt;

&lt;li&gt;&amp;#8220;What hipsters are using now&amp;#8221; descriptions of new technologies, used by whom, switching from, comparisons, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Thu Dec. 1&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Little known facts about me&lt;/li&gt;

&lt;li&gt;What does it sound like / media library&lt;/li&gt;

&lt;li&gt;Gift picker: answer quiz about person, suggests gifts&lt;/li&gt;

&lt;li&gt;Brainstorming tool: As you enter ideas, will show images / word associations to inspire you&lt;/li&gt;

&lt;li&gt;What would you rather do? 2 difficult scenarios: eg. Break arm or leg&lt;/li&gt;

&lt;li&gt;Anonymous email sending (definitely exists)&lt;/li&gt;

&lt;li&gt;Shared logins: Use service X together, split the bill&lt;/li&gt;

&lt;li&gt;Discussion aggregator: all comments about a site / page from HN, Reddit, Twitter, etc. (So blog authors don&amp;#8217;t need to update with links to discussion on HN, etc.). Plugin so blog authors can put it on their page, separated by section. Or browser extension to see comments on other sites on any webpage.&lt;/li&gt;

&lt;li&gt;HN / Reddit Wordle, aggregate stats, time trends, interesting visualizations, etc.&lt;/li&gt;

&lt;li&gt;Anonymous love messages / compliments &amp;#8211; anybody can create a page (or add to existing one) for any real person, and write positive things for that person. Donations&lt;/li&gt;

&lt;li&gt;Upvote anything at any granularity: highlight chunks of text or quotable sentences and just upvote those, or pictures or parts of pictures. Discuss anything on any webpage&lt;/li&gt;

&lt;li&gt;Public webpage / website like / upvote directory.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Fri Dec. 2&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Word games online: write one word / three words or 1 sentence of story. Other continue it&lt;/li&gt;

&lt;li&gt;Conventional way / idioms of doing X in Y&lt;/li&gt;

&lt;li&gt;Translate code into story (literate programming)&lt;/li&gt;

&lt;li&gt;CSS generate from WYSIWYG editor&lt;/li&gt;

&lt;li&gt;Real-life snakes and ladders (use slides?)&lt;/li&gt;

&lt;li&gt;Mobile app: Pro-tips at certain locations. eg. Avoid that side trail&lt;/li&gt;

&lt;li&gt;Which usernames / emails are mostly taken? Suggestions. User-contributed ideas?&lt;/li&gt;

&lt;li&gt;Better diff (more context / side-by-side) for GitHub&lt;/li&gt;

&lt;li&gt;Gifts exchange (some illegible word)&lt;/li&gt;

&lt;li&gt;Secret Santa for everything, eg. birthdays&lt;/li&gt;

&lt;li&gt;Checklists for everything. User-submitted, customize (or fork) for self or company, etc. (eg. Web service pre-launch)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Sat Dec. 3&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New website / web app launches&lt;/li&gt;

&lt;li&gt;jQuery animation generator. WYSIWYG UI.&lt;/li&gt;

&lt;li&gt;Draw stick figures; they will battle and interact with each other. Different sizes / weapons have different characteristics (but limited ink?). Draw and save your army; battle with others&lt;/li&gt;

&lt;li&gt;Beautiful CGI landscape + music (eg. glider through game like Skyrim) People can contribute to beautiful landscape&lt;/li&gt;

&lt;li&gt;jQuery element explosion / text letter-by-letter explosion plugin&lt;/li&gt;

&lt;li&gt;Blog article &amp;#8211;&amp;gt; game: different letters / words are different enemies with different characteristics. Certain letters / features are obstacles / part of the map. Browser extension?&lt;/li&gt;

&lt;li&gt;See what other people (or aggregate history) are doing on the site: their cursor positions, clicks, etc. Live chat with other visitors? (eg. on article that have just hit HN / Reddit)&lt;/li&gt;

&lt;li&gt;Video comments to articles: easy and painless, one-click record with webcam&lt;/li&gt;

&lt;li&gt;Live article discussions: live chat and Google+ hangouts? Popular HN / Reddit articles&lt;/li&gt;

&lt;li&gt;Game mechanics for life (Make real life as addictive as WoW or Second Life)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Sun Dec. 4&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visualize your bill / spendings: Histogram, categorize, timeline, etc.&lt;/li&gt;

&lt;li&gt;Company that helps people live a nomadic lifestyle: arrange lodgings, language mentor, etc.&lt;/li&gt;

&lt;li&gt;HN / Reddit daily paper newspaper, delivery&lt;/li&gt;

&lt;li&gt;Short story / article writing contest (like TopCoder)&lt;/li&gt;

&lt;li&gt;Multiple collaborators writing by expanding: Click a word or sentence, make that into a story (flesh it out)&lt;/li&gt;

&lt;li&gt;Food roulette: Random restaurant near you&lt;/li&gt;

&lt;li&gt;Stay in touch: Randomly connects you with a friend you haven&amp;#8217;t talked to for some time, updates you on what they&amp;#8217;re up to&lt;/li&gt;

&lt;li&gt;Online virtual browsing of real stores. 3D, look like actual store?&lt;/li&gt;

&lt;li&gt;Behind the scenes website: How article was written (with actual edits and such), how was web app made, course prepared, etc. Show granular steps.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Mon Dec. 5&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git rebase GUI (inspired from one of Mack&amp;#8217;s ideas)&lt;/li&gt;

&lt;li&gt;Game: everybody contributes to a drawing. Add in details, colour, etc. (Optional penis / obscenities filtering)&lt;/li&gt;

&lt;li&gt;Pictures on timeline + music with text experience: customize &amp;amp; send to loved one (like very customized e-card)&lt;/li&gt;

&lt;li&gt;Reliable thorough useful modular formula sheets. Allow forking, customizing by changing notation, collaborating, upvotes. Cheat-sheet creator for a class.&lt;/li&gt;

&lt;li&gt;Audio / voice journal&lt;/li&gt;

&lt;li&gt;Make time predictions about tasks. Eg. finish blog post by 9 pm / in 3 hours. Occasional reminders, see histogram, prediction accuracy / biases. Convert to time card with hours worked. Google Calendar integration&lt;/li&gt;

&lt;li&gt;Disputes / comfort levels / satisfaction in relationships. Tell your partner complaints or choose common ones, fill out survey, etc.&lt;/li&gt;

&lt;li&gt;Public &amp;#8220;I love you&amp;#8221; messages: lots of customization: theme, background, uploads, font, etc. (like about.me)&lt;/li&gt;

&lt;li&gt;&amp;#8220;My greatest wish is to &amp;#8230;&amp;#8221; (fill in blank) with upvotes, FB likes, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Tue Dec. 6&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App that monitors your bank transactions, emails, etc. for anomalous or fraudulent activity&lt;/li&gt;

&lt;li&gt;TopCoder for designers (or just use upvotes)&lt;/li&gt;

&lt;li&gt;What words come to mind for this book / movie / show / etc. ? Tagging, Wordle. Find similar things by tags?&lt;/li&gt;

&lt;li&gt;Submit your fantasy. Upvotes. Actors will act them out&lt;/li&gt;

&lt;li&gt;Aggregate everything you need to catch up on: eg. HN, Reddit, chat logs, email, Twitter, FB, code review, various app notifications&lt;/li&gt;

&lt;li&gt;Learn from an expert: screencasts of professionals doing / making something with audio commentary&lt;/li&gt;

&lt;li&gt;Draw shapes + colour &amp;#8211;&amp;gt; generate CSS 3&lt;/li&gt;

&lt;li&gt;Platform for free educational videos made by professionals in field. Upvotes.&lt;/li&gt;

&lt;li&gt;Word this sentence in a certain style: Victorian England, cowboy, gangsta, Southern, etc. How would they say it? ML or upvotes or both?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Wed Dec. 7&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reddit link bait title generator&lt;/li&gt;

&lt;li&gt;Intuition for equation: graphs of it, adjust values of parameters and see effect; incrementally applies transformations and see what graphs / table of values looks like at each stage&lt;/li&gt;

&lt;li&gt;Reddit joke explainer / updates you on new memes / inside jokes (possible duplicate Nov. 16)&lt;/li&gt;

&lt;li&gt;&amp;#8220;Concretely&amp;#8221;: What are practical applications of various theoretical tools / equations? Why am I learning this / what concretely is this useful for?&lt;/li&gt;

&lt;li&gt;Is that design stolen / what other sites share that design / code&lt;/li&gt;

&lt;li&gt;Site to replace interview phone screens: three coding questions, interviewer can watch sped-up version of how code was written later&lt;/li&gt;

&lt;li&gt;Interview technique: give a few commit messages. Have them code those&lt;/li&gt;

&lt;li&gt;Problems database: what bothers you in life? Upvotes&lt;/li&gt;

&lt;li&gt;Shared, anonymous FB, twitter, G+ accounts. Use to comment anonymously on public posts&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Thu Dec. 8&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Alarm for going to sleep: audio reminders, air strike sirens, etc. Interrupts computer eventually&lt;/li&gt;

&lt;li&gt;Opposing viewpoints comment site or plugin. Rebuttals to arguments. Show how many support or oppose given topic; show most upvoted argument, most upvoted rebuttal, etc.&lt;/li&gt;

&lt;li&gt;Conversation topics: enter what you plan to talk about. Suggests others, top news, etc. Recommendations based on other users&lt;/li&gt;

&lt;li&gt;Line-by-line commenting on other sites. Plugin or central site. Like MS Word or Google Docs commenting (possible duplicate Dec. 1)&lt;/li&gt;

&lt;li&gt;Programming language &amp;#8220;pop quizzes&amp;#8221;: contests, vote on which questions you liked, winners get karma?&lt;/li&gt;

&lt;li&gt;Bike-mounted radar / laser-rage finder. Warns you of incoming traffic&lt;/li&gt;

&lt;li&gt;Age-guessing game. Upload your photo + age, see what others think. Guessers get karma for close guesses&lt;/li&gt;

&lt;li&gt;Mnemonics: eg. &amp;#8220;Every Good Boy Deserves Fudge&amp;#8221; but for &lt;em&gt;every&lt;/em&gt; subject. Eg. anatomy, every formula&lt;/li&gt;

&lt;li&gt;Set bash prompt to emoticon (eg. table-flipping) or informative indication depending on current directory, # of files, some custom script, presence of version control directories, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Fri Dec. 9&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users flag telemarketers&amp;#8217; phone #s, software in phone blocks or warns of them&lt;/li&gt;

&lt;li&gt;Alternative uses for common household items. Eg. pipe cleaners can be used for cleaning pipes, cylindrical CD holders can be used as bagel holders&lt;/li&gt;

&lt;li&gt;&amp;#8220;What I should have said&amp;#8221; post original conversation, but add what would have been much better response / comeback. Upvotes, other suggestions&lt;/li&gt;

&lt;li&gt;Bike-mounted smartphone holder&lt;/li&gt;

&lt;li&gt;&amp;#8220;Challenge Accepted&amp;#8221; - people pay to see stunts / dares (eg. eat X chili peppers, hop on one foot while X and Y for Z distance). Acceptors upload video proof and judged by community or moderators? Money refunded if no acceptors.&lt;/li&gt;

&lt;li&gt;&amp;#8220;Thank you&amp;#8221;: public thanks or shaming people&lt;/li&gt;

&lt;li&gt;Video Q&amp;amp;A: upvote questions, then go directly to part of video where it&amp;#8217;s answered&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Sat Dec. 10&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debate anything: hangouts / chat rooms just for debate&lt;/li&gt;

&lt;li&gt;Tracking / sharing with neighbours: list what you have / can offer&lt;/li&gt;

&lt;li&gt;What tools do you use at work? For hobbies? Aggregate stats&lt;/li&gt;

&lt;li&gt;Think you can improve something? Upload &amp;#8220;before&amp;#8221; and &amp;#8220;after&amp;#8221; images. Improve designs, UI, etc. Commenting &amp;amp; voting&lt;/li&gt;

&lt;li&gt;What is your P(death | some time range)? Enter your activities. Tells at what times / doing what you are most likely to die. Also enter any activity, eg. 5 hours flying, and equate that to something else, eg. X time in car&lt;/li&gt;

&lt;li&gt;Get large / small #s in terms of other things. Eg. lifetimes of the universe, something vivid / shocking (possible duplicate Nov. 28)&lt;/li&gt;

&lt;li&gt;Review any item in restaurant menu: query where is best burrito? Sort by most popular item at any restaurant&lt;/li&gt;

&lt;li&gt;Crowdsource decision making: state your scenario, lists pros &amp;amp; cons. Others can add discussion + voting (comments are colour-coded to show which side you support) (possible duplicate (similar) Nov. 23)&lt;/li&gt;

&lt;li&gt;Your quirks, and who else shares it (eg. smelling books, touching tongue)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Sun Dec. 11&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revision control blame that finds when line of code was originally added, ignore displacements, whitespace, etc. Or shows timeline of that line of code through history and every change that was made to it.&lt;/li&gt;

&lt;li&gt;Vim plugin that finds documentation of function or language feature (on ctrl-k?)&lt;/li&gt;

&lt;li&gt;Find similarities between you and someone else &amp;#8211;&amp;gt; gives talk topics (mobile NFC app)&lt;/li&gt;

&lt;li&gt;Mutual / collaborative brainstorming. Real-time, upvotes? Time limit? Winner? (Most upvotes)&lt;/li&gt;

&lt;li&gt;Enter Git commit message before working. Get analytics (eg. time taken), automatically sets that as status message to teammates&lt;/li&gt;

&lt;li&gt;Which is better: anyone can upload 2 images, set a custom question, customize # of views / demographics, etc. (possible duplicate Nov. 26)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Mon Dec. 12&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Culture characteristics. Venn diagrams&lt;/li&gt;

&lt;li&gt;Bash prompt creator: apply colours to ranges, special fields (current directory, hostname, time, etc.), useful Unicode symbols. WYSIWYG UI.&lt;/li&gt;

&lt;li&gt;Collaboratively created CSS / JS bugs and quirks test pages with demos. Upvotes, comments for workarounds.&lt;/li&gt;

&lt;li&gt;Place wagers on show outcomes. Polls.&lt;/li&gt;

&lt;li&gt;Post-Christmas gift bartering / trading (possible duplicate Dec. 2)&lt;/li&gt;

&lt;li&gt;Creative gift ideas wiki&lt;/li&gt;

&lt;li&gt;Image &amp;#8211;&amp;gt; auto slice, HTML, CSS&lt;/li&gt;

&lt;li&gt;Simulated &amp;#8220;Cash Cab&amp;#8221; in taxis just for fun (just trivia game, no prize money)&lt;/li&gt;

&lt;li&gt;Ghost you: See your jogging, biking, race progress (where you were at that time) on previous day / best day. Mobile app with GPS&lt;/li&gt;

&lt;li&gt;Mobile app that finds strangers around you that you might want to talk to. Finds common interests, or pre-defined criteria for matches&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Tue Dec. 13&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Take article, write it in style of some author or other article. (eg. Zed Shaw) ML or crowdsourced&lt;/li&gt;

&lt;li&gt;Software to implement &amp;#8220;stop in the middle&amp;#8221; technique to avoid procrastination. Gives you 5-min warning, lets you write reminders of how you were planning to finish, then stops you (less barrier to returning to work on it)&lt;/li&gt;

&lt;li&gt;Work bartering: I&amp;#8217;ll program something in exchange for you designing or drawing something. More efficient allocation of resources&lt;/li&gt;

&lt;li&gt;Visiting a city? Enter time in city, finds what&amp;#8217;s interesting, etc. Gives TSP-tour of places you would find more interesting&lt;/li&gt;

&lt;li&gt;Recommendations for places to visit. Attractions, landmarks, cities, countries, etc. Traveller&amp;#8217;s profile&lt;/li&gt;

&lt;li&gt;What are people getting each other? Enter gift + recipient details. Power recommendations, ads, etc. (possible duplicate (similar) Dec. 1)&lt;/li&gt;

&lt;li&gt;Public ideas for A/B testing. Write description, people submit ideas, upvotes, and receive karma or money based on # of conversions of suggested alternative&lt;/li&gt;

&lt;li&gt;Get IP address of all sites in browser history, or as you visit sites&lt;/li&gt;

&lt;li&gt;FB automatic location changer&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
    &lt;/div&gt;
&lt;/p&gt;&lt;script&gt;
$.getScript('/js/jquery.foldlist.js', function() {
    $('#all-ideas').foldList();
});
&lt;/script&gt;
&lt;p&gt;Frequently-occurring words:&lt;/p&gt;
&lt;a href='/images/idea-tag-cloud3.png'&gt;
    &lt;img alt='Ideas Frequent Words Cloud' src='/images/idea-tag-cloud3.png' width='900' /&gt;
&lt;/a&gt;
&lt;h2 id='my_favourites'&gt;My favourites&lt;/h2&gt;

&lt;p&gt;I picked some items that particularly interest me, whether it&amp;#8217;s because I would find it fun to work on or wish it existed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Challenge Accepted&lt;/strong&gt;: users pay to see stunts / dares (eg. eat X chili peppers, hop on one foot while X and Y for Z distance). Acceptors upload video proof which is judged by community or moderators. Money refunded if no acceptors.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Productivity&lt;/strong&gt;: Did I work today? Report computer usage: # of lines of code written, # of commits, what sites visited, what apps used, email usage, Reddit, terminal, chat, gaming, etc. Generate report and graphs of all this, compare with previous days. Set quotas; will warn and eventually block usage of time-wasters. Enter your commit message &lt;em&gt;before&lt;/em&gt; coding &amp;#8212; automatically sets this as your status message for teammates to see.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Karma&lt;/strong&gt;: Aggregate all of it! GitHub, StackOverflow, Reddit, Hacker News, Twitter followers, Facebook likes, etc. Stats for total followers, following, graphs, etc. Add another layer of game mechanics, interesting achievements, and badges! Follow your friends and beat them! Leaderboards.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;What are &lt;strong&gt;similar people doing&lt;/strong&gt;, reading, or working on? Eg. What do HN readers, standing-desk users, Cubans, GEB readers, rock climbers, terminally-ill, etc. like to do? What are their age groups, ethnicities, hobbies, other characteristics? (eg. Reads Reddit? Have a blog? Contributing to StackOverflow? Doing a startup? Working at tech company? Have read book X? Age histogram? Played piano?) You fill out detailed profile and answer questions. Recommends what you could do. Recursively see what people doing each recommended item like to do. Find similar people near me or friends going to same events, and suggest / facilitate going together.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Problem: I &lt;strong&gt;need help finishing&lt;/strong&gt; what I started&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;For beginning &lt;strong&gt;designers&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I really wish there existed some platform where I could upload a screenshot (or other media: video, text, etc.) of a design I was working on, and just have people suggest ideas to make it look better or annotate and nitpick whitespace, colouring, fonts, etc. I would definitely enjoy critiquing others and may even pay to use it to get high quality feedback, or be hooked in with StackOverflow-like game mechanics.&lt;/li&gt;

&lt;li&gt;Votes: TopCoder for designers, or upload two images and people will select which they prefer&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Programming Wiki&lt;/strong&gt;: There really needs to be more consistent, higher-quality, and collaboratively-edited documentation for every language. Should not only document definitions, but also provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a variety of good examples (hosted on GitHub/gists?)&lt;/li&gt;

&lt;li&gt;usage advice&lt;/li&gt;

&lt;li&gt;links to other references&lt;/li&gt;

&lt;li&gt;links to relevant StackOverflow questions&lt;/li&gt;

&lt;li&gt;the idiomatic/conventional way of doing something&lt;/li&gt;

&lt;li&gt;recipes for common tasks (such as file I/O)&lt;/li&gt;

&lt;li&gt;common beginner mistakes with upvotes (eg. Python’s default args evalled once; JS closure-in-for-loop gotcha)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also in need is a consistent and high-quality set of tutorials for CS students to prepare them for industry and teach things that might not be taught in school: introduce Linux; Vim; Git and GitHub; JS; Firebug or Chrome dev tools; Python or Ruby; C or C++; a functional language; Makefile and a shell; unit testing; Apache or Nginx; DNS; setting up a server; a web framework; where / how to ask for help; how to debug; blogging and communicating; resume + interviewing; etc.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;On any given term, half of all Waterloo co-op students are working while half are studying on campus. With over 100 per term working in California, we need a &lt;strong&gt;bike sharing program for Silicon Valley interns&lt;/strong&gt;!&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Conversation&lt;/strong&gt;: Suggest topics from what you have talked about previously, your interests, news. Mobile app to find similarities between two users and suggests topics based on those, or find people near you that you maybe interested in talking to.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Malware / &lt;strong&gt;virus to force-upgrade IE users&lt;/strong&gt; or install Chrome frame (I won&amp;#8217;t be doing this but maybe somebody will :)&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pro-tips&lt;/strong&gt; mobile app: eg. &amp;#8220;Avoid that side trail&amp;#8221;, find interesting stories near you, number of deaths near you, closest death near you. Around your neighbourhood / city: Where to eat, best place for haircut, where to get X, where Y hangs out, etc.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mobile app for&lt;/strong&gt; ml-class or ai-class or other &lt;strong&gt;Stanford online courses&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Remote-activated &lt;strong&gt;middle finger lights&lt;/strong&gt; on side or back of car: Would be fun to make and serve a noble purpose &amp;#8212; that of expressing my thorough indignation at the offending party regardless of time of day &amp;#8212; but alas, I don&amp;#8217;t have a car and can&amp;#8217;t drive.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Watch TV shows together over internet&lt;/strong&gt; with live chat, polls, predictions, etc.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Collaborative brainstorming&lt;/strong&gt;: Real-time with upvotes, game mechanics, and karma. Optionally, will show images and word associations to inspire you.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Git rebase GUI&lt;/strong&gt;: drag-and-drop where to move branch; visually select a range of commits to squash into one commit&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Study aids&lt;/strong&gt;: collaboratively-created formula sheets. Allow forking, customizing notation, upvotes, customizations for classes. Cheat-sheet creator for a class. User-contributed mnemonics (&amp;#8220;Every Good Boy Deserves Fudge&amp;#8221;) for every subject (eg. anatomy) and every formula.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Word this sentence&lt;/strong&gt; in a certain style: eg. Victorian England, gangsta, Southern, lawyerese. How would they say it? User-contributed + game mechanics + upvotes. Would be fun to train a machine learning algorithm (similar to training translation software).&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Work bartering&lt;/strong&gt;: I’ll program something in exchange for you designing or drawing something. More efficient allocation of resources&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decision-making&lt;/strong&gt; platform: Eg. I&amp;#8217;m looking to get a VPS but I&amp;#8217;m completely new to this. I&amp;#8217;ll explain my scenario, criteria, and budget, and users will comment, suggest and vote on alternatives. May also feature collaboratively-edited pros and cons, gather common scenarios, and StackOverflow-like game mechanics.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Go &lt;strong&gt;eat lunch with somebody close by&lt;/strong&gt; (for those who don’t want to eat alone)&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discussion aggregator&lt;/strong&gt;: Blog posts that have hit Hacker News or Reddit are commonly edited with a link to those comments. Why not pull in comments from those and other sources, and display them, separated by source, under the post? Could possibly also be a browser extension.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Vim show-off&lt;/strong&gt;: plugin to save and see time-lapse of how code/article was created. Show all insertions / deletions and commands used.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Restaurants&lt;/strong&gt;: My friends and I always have difficulty deciding where to eat. I want a daily recommendation that favours places I haven&amp;#8217;t visited yet and eventually learns my taste from my ratings. Also, sometimes I just want to find where to get the best pineapple fried rice, and I don&amp;#8217;t care which restaurant as long as they have delicious pineapple fried rice. Let me review, rate, and query by menu items.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='noteworthy_experiment_observations'&gt;Noteworthy experiment observations&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It seemed to me that I had more thoughts &amp;#8212; thus likely more ideas &amp;#8212; after waking up to a good night&amp;#8217;s sleep.&lt;/li&gt;

&lt;li&gt;The inspiration for many ideas came from recent happenings. Many times my thought process would start with recounting recent events and thinking if there were any associated problems.&lt;/li&gt;

&lt;li&gt;The previous point suggests that it may make more sense to actually record &lt;em&gt;problems&lt;/em&gt; instead of or in addition to ideas &amp;#8212; I&amp;#8217;ve been taught that there are many different ways of solving a problem, but focusing on a possible solution too early may blind one from other solutions.&lt;/li&gt;

&lt;li&gt;One cool thing was that the rate of passive ideas definitely increased. After a few weeks, I noticed that ideas would just pop into my head during my daily 40-minute bike rides to and from my internship &amp;#8212; I was &lt;em&gt;not&lt;/em&gt; actively generating ideas, but they would come while I was relaxed and having other thoughts. I estimate that, on average, 1-2 ideas per day came in this manner.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id='now_its_your_turn'&gt;Now it&amp;#8217;s your turn&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;m not claiming any of these rambling thoughts; I wrote most of these because I truly wish they existed so that I could use them, or because I would derive enjoyment from building it. Further, I&amp;#8217;m sure many of these have already been attempted or exist (which, of course, does not preclude another competitor).&lt;/p&gt;

&lt;p&gt;This technique of daily morning brainstorming can be applied to almost anything that would benefit from a list, and not just startup/project ideas. Here&amp;#8217;s some ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;research topics&lt;/li&gt;

&lt;li&gt;design / UI ideas&lt;/li&gt;

&lt;li&gt;product ideas&lt;/li&gt;

&lt;li&gt;blog topics&lt;/li&gt;

&lt;li&gt;things to do&lt;/li&gt;

&lt;li&gt;conversation topics with friends&lt;/li&gt;

&lt;li&gt;gift ideas&lt;/li&gt;

&lt;li&gt;self improvements&lt;/li&gt;

&lt;li&gt;from a recent HN post: &lt;a href='http://swanson.github.com/blog/2011/12/04/whats-on-your-learning-list.html'&gt;things to learn&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;this list itself: what to apply this technique to (then generate each of those lists!)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you&amp;#8217;re reading this blog post and others on a daily basis, then you have time to do this. Although I did this in the morning and found that a good time, you don&amp;#8217;t have to; &lt;a href='http://mduan.com'&gt;my friend Mack&lt;/a&gt; tried this when he was showering, biking, or bored and came up with a respectable list after a week. Do it during any dead time, such as in transportation, and use the &lt;a href='http://en.wikipedia.org/wiki/Method_of_loci'&gt;method of loci&lt;/a&gt; to hold on to those thoughts for recording later. I&amp;#8217;m sure you can come up with better ideas that are more relevant to your life.&lt;/p&gt;

&lt;p&gt;The golden rule is to not filter yourself: switch off your analytic faculties and let your thoughts flow unhindered. It&amp;#8217;s amazing what your brain will conjure if you just let it loose with unrestrained thoughts. The platinum rule is to make something of your giant list; without action, all the ideas in the world are for nought.&lt;/p&gt;

&lt;p&gt;Give it a try. Pretty soon, you may find yourself with an endless torrent of project ideas to occupy all your free time.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>On my Internship at Khan Academy</title>
   <link href="http://david-hu.com/2012/01/05/khan-academy-internship-post-mortem.html"/>
   <updated>2012-01-05T00:00:00-05:00</updated>
   <id>http://david-hu.com/2012/01/05/khan-academy-internship-post-mortem</id>
   <content type="html">&lt;p&gt;In true Khan Academy fashion I made a video to sum up my internship, at the suggestion of our &lt;a href='http://bjk5.com'&gt;lead developer Bengineer Kamens&lt;/a&gt;. I was not very good at emulating Sal Khan, so the video just evolved in my own style. As I became more and more sleep-deprived, I became less and less rational, and re-recorded some parts I thought were boring. Consequently, some speech is difficult to make out, so you can just read the transcript below or enable captions.&lt;/p&gt;

&lt;p&gt;Anyway, the video is not meant to be taken too seriously; I&amp;#8217;m not actually that crazy in real life (but I may be if sleep-deprived :P).&lt;/p&gt;

&lt;p&gt;(EDIT: Yes, that is actually my voice, although I&amp;#8217;ve been told it doesn&amp;#8217;t sound like me in real life at all.)&lt;/p&gt;
&lt;object height='382' width='680'&gt;&lt;param name='movie' value='http://www.youtube.com/v/fUiHSaoXQOs?version=3&amp;amp;hl=en_US&amp;amp;rel=0' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed allowfullscreen='true' allowscriptaccess='always' height='382' src='http://www.youtube.com/v/fUiHSaoXQOs?version=3&amp;amp;hl=en_US&amp;amp;rel=0' type='application/x-shockwave-flash' width='680' /&gt;&lt;/object&gt;&lt;hr /&gt;
&lt;p&gt;Once upon a time on the internet, there was rage. Sir Rage was learning geometry on Khan Academy, when he forgot to multiply pi by 2 and got a problem wrong. (He should have used &lt;a href='http://tauday.com'&gt;tau&lt;/a&gt;.) Now, to be considered proficient and move on, one had to get 10 right answers in a row. Having now to restart from the very beginning, with his prior streak of 9 completely erased, caused Sir Rage to rage.&lt;/p&gt;

&lt;p&gt;This was not the only problem at Khan Academy. Our data showed that those who took 30 problems to get a streak performed much worse after a break than those who got a streak in 10.&lt;/p&gt;

&lt;p&gt;Those are two classification errors &amp;#8212; requiring some users to do too many problems, while letting through some users who may need more practice.&lt;/p&gt;
&lt;img alt='Problems with the streak' src='/images/ka-internship/thumbs/streak-problems.jpg' width='680' /&gt;
&lt;p&gt;What did we do about this?&lt;/p&gt;

&lt;p&gt;Well, we developed a machine learning algorithm that takes into account two weighted moving averages, current streak, number of correct answers, number of wrong answers, and percent correct. These inputs are fed into a function which spits out how likely you are to get the next problem correct. Above 94% and we say you&amp;#8217;re proficient.&lt;/p&gt;
&lt;img alt='Machine learning with logistic regression' src='/images/ka-internship/thumbs/machine-learning.jpg' width='680' /&gt;
&lt;p&gt;Now, we make you do only 5 problems on what you know well, but give you the chance to do more practice where it&amp;#8217;s actually needed.&lt;/p&gt;

&lt;p&gt;For two weeks we tested on 10% of users, and found that the new model had 21% more proficiencies, 16% more exercises attempted, and a reduction from about 17 problems done per proficiency to 12.&lt;/p&gt;
&lt;img alt='Screenshot of blog post: results' src='/images/ka-internship/ka-ml-results.png' width='680' /&gt;
&lt;p&gt;But did we lower the bar for proficiency?&lt;/p&gt;

&lt;p&gt;Well, it turns out that for both models accuracy is 95% after proficiency. After a break, users proficient under the new model tend to perform slightly better.&lt;/p&gt;

&lt;p&gt;So, does this tale end happily ever after? Not yet. This is the first step in our journey to improve assessment accuracy and make users happier.&lt;/p&gt;

&lt;h2 id='some_other_things_my_internship_spawned'&gt;Some other things my internship spawned&lt;/h2&gt;
&lt;p&gt;
&lt;img alt='Some highlights of my internship' src='/images/ka-internship/thumbs/things-i-did.jpg' width='680' /&gt;
&lt;/p&gt;
&lt;p&gt;To endlessly fascinate, we now have a &lt;a href='https://khan-academy.geckoboard.com/dashboard/9820993B8EEAB10E'&gt;dashboard of exercise usage statistics&lt;/a&gt; mixed in with random trivia!&lt;/p&gt;

&lt;p&gt;In our iterative attempts to improve the streak, we started with a constant acceleration, momentum model, but decided to just launch a UI change to abstract away the streak and appear more forgiving. For the model changes, we wanted to use the statistical findings on our data and address the type I and II errors. That seemed like a promising application of machine learning, so I trained a Naive Bayes classifier which yielded interesting results. Comrade Jace then joined forces to produce the logistic regression model that we launched.&lt;/p&gt;

&lt;p&gt;In the process I built a tool to allow us to better understand and evaluate different models, with pretty graphs and interactive simulations.&lt;/p&gt;

&lt;p&gt;After the first proficiency model launch, we wanted to study long-term impact. So, I hacked together a script to download and analyze problem logs with a map reduce.&lt;/p&gt;

&lt;p&gt;I built a UI to go through review problems, which are proficient exercises that you haven&amp;#8217;t done in a while. From here we can add game mechanics and an optimal scheduling algorithm.&lt;/p&gt;

&lt;p&gt;Comrade Jace and I also collaborated to produce a 55% increase in hint usage.&lt;/p&gt;

&lt;p&gt;Now, I really hope the other interns make videos of what they did too, such as building the &lt;a href='https://github.com/Khan/khan-exercises/'&gt;framework that powers all our exercises&lt;/a&gt; with comrade John.&lt;/p&gt;

&lt;h2 id='awesome_things_about_working_at_ka'&gt;Awesome things about working at KA&lt;/h2&gt;

&lt;p&gt;But you know what, I&amp;#8217;d rather talk about why &lt;em&gt;you&lt;/em&gt; should intern at Khan Academy, so I&amp;#8217;ll have go at that.&lt;/p&gt;

&lt;h3 id='the_ship_and_her_crew'&gt;The ship and her crew&lt;/h3&gt;

&lt;p&gt;Ship. Ship. Ship. Ship. Ship. Ship. Ship. Ship. Mushroom. Mushroom.&lt;/p&gt;
&lt;img alt='Shipping beats perfection' src='/images/ka-internship/thumbs/shipping.jpg' width='680' /&gt;
&lt;p&gt;Our naval culture is one of fast iterations and continuous deployment. To see your last hour&amp;#8217;s work on the live site in 3 minutes, impacting millions of users, has literally had me jumping up and down. I could do this any time of any day. As long as I got stuff done, how long I worked or when I came in was immaterial.&lt;/p&gt;
&lt;img alt='Deploying on my laptop' src='/images/ka-internship/thumbs/laptop.jpg' width='680' /&gt;
&lt;p&gt;The helpful crew has been helpful. For example, Google App Engine had no A/B testing framework, so &lt;a href='https://github.com/kamens/gae_bingo'&gt;comrade Bengineer Kamens built one&lt;/a&gt; in a weekend. We code review all non-trivial commits to maintain a clean and consistent code base. I&amp;#8217;ve learned a lot here, such as ML, UI design, good coding practices, blog post writing, and all the technologies we use. Also, &lt;a href='http://en.wikipedia.org/wiki/John_Resig'&gt;comrade John Resig&lt;/a&gt; is famous!&lt;/p&gt;
&lt;img alt='Happy rage face' src='/images/ka-internship/thumbs/happy-crying.jpg' width='680' /&gt;
&lt;p&gt;Interns are given massive amounts of autonomy, and with that, responsibility. You&amp;#8217;re an integral part of the core team of a non-profit startup &amp;#8212; make decisions, flesh out projects, and shape the future of Khan Academy. You&amp;#8217;re not just responsible for awesome code. You&amp;#8217;re not just responsible for awesome features. Through doing these things we want to make the world a better place by redefining education.&lt;/p&gt;
&lt;img alt='Challenge accepted' src='/images/ka-internship/thumbs/challenge-accepted.jpg' width='680' /&gt;
&lt;h3 id='perks'&gt;Perks&lt;/h3&gt;

&lt;p&gt;It&amp;#8217;s a lot of responsibility, but we have fun doing it. We&amp;#8217;re just a few blocks away from Laser Tag. We have intense board game nights every week. Being in downtown Mountain View, we&amp;#8217;re surrounded by a mountain of food. We pay very well for interns, competitive with Facebook. We have weekly company picnics, and you may get to have 1-on-1 walks with comrade Sal to discuss mathematics, your views on education, ask him questions, anything.&lt;/p&gt;
&lt;img alt='Mountain of food' src='/images/ka-internship/thumbs/mountain-of-food.jpg' width='680' /&gt;
&lt;p&gt;Since we&amp;#8217;re completely &lt;a href='https://github.com/Khan/'&gt;open&lt;/a&gt;-&lt;a href='https://khanacademy.kilnhg.com/Repo/Website/Group/stable'&gt;sourced&lt;/a&gt;, you can build up a portfolio of cool code and projects to show your mom. I got to write a &lt;a href='/2011/11/02/how-khan-academy-is-using-machine-learning-to-assess-student-mastery.html'&gt;blog post&lt;/a&gt; as part of my job, and it hitched a free ride on the Khan Academy karma train. I&amp;#8217;ve received many useful and insightful comments, among which are papers on which we&amp;#8217;re planning to base our algorithm for optimal review scheduling. (Thanks commenter Johnfranklin1299!)&lt;/p&gt;
&lt;img alt='All aboard the Khan Academy karma train!' src='/images/ka-internship/thumbs/karma-train.jpg' width='680' /&gt;
&lt;p&gt;We also get to visit schools that have adopted Khan Academy, and it feels great to see your work directly benefiting users.&lt;/p&gt;
&lt;img alt='School house on a hill' src='/images/ka-internship/thumbs/school.jpg' width='680' /&gt;
&lt;h3 id='impact'&gt;Impact&lt;/h3&gt;

&lt;p&gt;Users, our number one priority. Not shareholders, not search engines, not profits, not TechCrunch. We have over 100 million video views and close to 2 million problems done per day.&lt;/p&gt;

&lt;p&gt;In redefining education we face some of the hardest challenges.&lt;/p&gt;
&lt;img alt='? P = NP ?' src='/images/ka-internship/thumbs/technical-challenges.jpg' width='680' /&gt;
&lt;p&gt;Why must I learn at the same rate as those my age, when I&amp;#8217;m still struggling with basic algebra, or if I&amp;#8217;m a second grader about to conquer calculus on Khan Academy (true story)?&lt;/p&gt;

&lt;p&gt;Why can&amp;#8217;t we figure out exactly how to advance each and every student past a particular concept?&lt;/p&gt;

&lt;p&gt;Why shouldn&amp;#8217;t learning be as engaging as World of Warcraft?&lt;/p&gt;

&lt;p&gt;Why is learning something kids do, and not a lifelong pursuit in and of itself?&lt;/p&gt;

&lt;p&gt;Why should quality education be denied to the underprivileged?&lt;/p&gt;

&lt;p&gt;How many other &lt;a href='http://en.wikipedia.org/wiki/Srinivasa_Ramanujan'&gt;Srīnivāsa Rāmānujans&lt;/a&gt; are out there, held back by their poverty, just waiting to be discovered?&lt;/p&gt;
&lt;img alt='Why rage face' src='/images/ka-internship/thumbs/why.jpg' width='680' /&gt;
&lt;p&gt;I want to teach &lt;strong&gt;ALL&lt;/strong&gt; the humans! Teach them &lt;strong&gt;ALL&lt;/strong&gt; the things!&lt;/p&gt;
&lt;img alt='Teach all the things!' src='/images/ka-internship/thumbs/teach-all-the-things.jpg' width='680' /&gt;
&lt;p&gt;Education is a pillar that underlies our modern quality of life. I&amp;#8217;m not a genius. I&amp;#8217;m not smart enough to solve world hunger, societal prejudices, cultural clashes, war, the energy crisis, global warming, diseases, cancer. But if I can enable geniuses that do solve these problems, then I will have lived a satisfied life.&lt;/p&gt;
&lt;img alt='Khan Academy hand logo' src='/images/ka-internship/thumbs/ka-hand.jpg' width='680' /&gt;
&lt;h2 id='conclusion'&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;To make this dream a reality, we need motivated, talented developers who get things done.&lt;/p&gt;

&lt;p&gt;What do you look for in an internship? A talented team? Experience? Learning? Money? Food? Events? Make friends? Have fun? Challenging technical problems? Impact?&lt;/p&gt;
&lt;img alt='Need an internship? Comrade Zoidberg says, why not Khan Academy?' src='/images/ka-internship/thumbs/zoidberg.jpg' width='680' /&gt;
&lt;p&gt;Thank you Khan Academy for an awesome internship, and I hope you, dear viewer, may &lt;a href='http://khanacademy.org/r/jobs'&gt;have that experience&lt;/a&gt; too.&lt;/p&gt;

&lt;h2 id='one_more_thing'&gt;One more thing&lt;/h2&gt;

&lt;p&gt;Oh wait a minute, there is one more thing. The newest member of our team is a flying shark! It actually swims through the air! Come and see for yourself; the shark is not a lie.&lt;/p&gt;
&lt;img alt='Flying shark chasing a bird' src='/images/ka-internship/thumbs/flying-shark.jpg' width='680' /&gt;
&lt;p&gt;And, to make up for my inability to draw or enunciate, I highly recommend watching &lt;a href='http://khanacademy.org/r/tedtalk'&gt;Sal Khan&amp;#8217;s TED talk&lt;/a&gt; or &lt;a href='http://youtube.com/vihart'&gt;Vi Hart&amp;#8217;s videos on mathematical doodling&lt;/a&gt;.&lt;/p&gt;
&lt;img alt='My video recommendations' src='/images/ka-internship/thumbs/recommendations.jpg' width='680' /&gt;&lt;hr /&gt;
&lt;h2 id='behind_the_scenes'&gt;Behind the scenes&lt;/h2&gt;

&lt;p&gt;Here&amp;#8217;s all my drawings:&lt;/p&gt;
&lt;img alt='Drawings at the office' src='/images/ka-internship/first-batch.jpg' width='680' /&gt;&lt;img alt='Drawings at home' src='/images/ka-internship/thumbs/second-batch.jpg' width='680' /&gt;
&lt;p&gt;Here&amp;#8217;s my setup at the office, next to the legendary &lt;a href='http://www.youtube.com/watch?v=e1a6Bxc0OYQ'&gt;Vi Hart&amp;#8217;s desk&lt;/a&gt;:&lt;/p&gt;
&lt;img alt='My video recommendations' src='/images/ka-internship/thumbs/office-setup-1.jpg' width='680' /&gt;
&lt;p&gt;At home getting some more footage with my Android phone:&lt;/p&gt;
&lt;img alt='My video recommendations' src='/images/ka-internship/thumbs/home-setup-3.jpg' width='680' /&gt;</content>
 </entry>
 
 <entry>
   <title>How Khan Academy is using Machine Learning to Assess Student Mastery</title>
   <link href="http://david-hu.com/2011/11/02/how-khan-academy-is-using-machine-learning-to-assess-student-mastery.html"/>
   <updated>2011-11-02T00:00:00-04:00</updated>
   <id>http://david-hu.com/2011/11/02/how-khan-academy-is-using-machine-learning-to-assess-student-mastery</id>
   <content type="html">&lt;p&gt;See discussion on &lt;a href='http://news.ycombinator.com/item?id=3187350'&gt;Hacker News&lt;/a&gt; and &lt;a href='http://www.reddit.com/r/programming/comments/lxsjj/how_khan_academy_is_using_machine_learning_to/'&gt;Reddit&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;The Khan Academy is well known for its extensive library of over 2600 video lessons. It should also be known for its rapidly-growing set of now 225 exercises &amp;#8212; &lt;a href='https://khan-academy.geckoboard.com/dashboard/9820993B8EEAB10E'&gt;outnumbering stitches on a baseball&lt;/a&gt; &amp;#8212; with close to 2 million problems done each day.&lt;/p&gt;

&lt;p&gt;To determine when a student has finished a certain exercise, we award &lt;em&gt;proficiency&lt;/em&gt; to a user who has answered at least 10 problems in a row correctly &amp;#8212; known as a &lt;em&gt;streak&lt;/em&gt;. Proficiency manifests itself as a gold star, a green patch on teachers&amp;#8217; dashboards, a requirement for some badges (eg. gain 3 proficiencies), and a bounty of &amp;#8220;energy&amp;#8221; points. Basically, it means we think you&amp;#8217;ve mastered the concept and can move on in your quest to know everything.&lt;/p&gt;

&lt;p&gt;It turns out that the streak model has serious flaws.&lt;/p&gt;

&lt;p&gt;First, if we define proficiency as your chance of getting the next problem correct being above a certain threshold, then the streak becomes a poor binary classifier. Experiments conducted on our data showed a significant difference between students who take, say, 30 problems to get a streak vs. 10 problems right off the bat &amp;#8212; the former group was much more likely to miss the next problem after a break than the latter.&lt;/p&gt;

&lt;p&gt;False positives is not our only problem, but also false negatives. One of our largest source of complaints is from frustrated students who lost their streak. You get 9 correct, make a silly typo, and lose all your hard-earned progress. In other words, the streak thinks that users who have gotten 9 right and 1 wrong are at the same level as those who haven&amp;#8217;t started.&lt;/p&gt;

&lt;h2 id='in_search_of_a_better_model'&gt;In Search of a Better Model&lt;/h2&gt;

&lt;p&gt;These findings, presented by one of our full-time volunteers Jace, led us to investigate whether we could construct a better proficiency model. We prototyped a constant acceleration &amp;#8220;rocketship&amp;#8221; model (with heavy gnomes that slow you down on wrong answers), but ultimately decided that a prudent first step would be to just abstract away the streak model with the notion of &amp;#8220;fill up the bar&amp;#8221;.&lt;/p&gt;

&lt;p&gt;We went from displaying the user&amp;#8217;s current streak (bug not intended; could not find another screenshot):&lt;/p&gt;

&lt;p&gt;&lt;img alt='Old streak bar with buggy number display' src='/images/old-streak-bar-nan.png' /&gt;&lt;/p&gt;

&lt;p&gt;to this:&lt;/p&gt;

&lt;p&gt;&lt;img alt='New progress bar empty' src='/images/new-streak-bar-empty.png' /&gt;&lt;/p&gt;

&lt;p&gt;and when full:&lt;/p&gt;

&lt;p&gt;&lt;img alt='New progress bar full' src='/images/new-streak-bar-full.png' /&gt;&lt;/p&gt;

&lt;p&gt;This gave us greater freedom to experiment with different underlying models without disrupting the interface.&lt;/p&gt;

&lt;p&gt;Conversations with the team led me to conceive of applying machine learning to predict the likelihood of getting the next problem correct, and use that as the basis for a new proficiency model. Basically, if we think you&amp;#8217;re more than &lt;span class='maruku-inline'&gt;&lt;img alt='$t$' class='maruku-png' src='/images/latex/7ca2c7b5d8aded9e019a267b8ca1b94d.png' style='vertical-align: -0.0ex;height: 1.4444444444444444ex;' /&gt;&lt;/span&gt;% likely to get the next problem correct, for some threshold &lt;span class='maruku-inline'&gt;&lt;img alt='$t$' class='maruku-png' src='/images/latex/7ca2c7b5d8aded9e019a267b8ca1b94d.png' style='vertical-align: -0.0ex;height: 1.4444444444444444ex;' /&gt;&lt;/span&gt;, we&amp;#8217;ll say you&amp;#8217;re proficient.&lt;/p&gt;

&lt;p&gt;I started off by hacking together a naive Bayes binary classifier modified to give a probability estimate. I trained this on a few days&amp;#8217; worth of problem logs, and initial results were promising &amp;#8212; the most striking being that fewer problem were needed to attain the same level of &lt;em&gt;accuracy&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;What do I mean by accuracy? We define it as&lt;/p&gt;
&lt;div class='maruku-equation'&gt;&lt;img alt='$P(\text{next problem correct} | \text{just gained proficiency})$' class='maruku-png' src='/images/latex/57b67963fa87ffa9337ca44c66d1b88c.png' style='height: 2.333333333333333ex;' /&gt;&lt;span class='maruku-eq-tex'&gt;&lt;code style='display: none'&gt;P(\text{next problem correct} | \text{just gained proficiency})&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;which is just notation desperately trying to say &amp;#8221;&lt;em&gt;Given that&lt;/em&gt; we just gained proficiency, &lt;em&gt;what&amp;#8217;s the probability of&lt;/em&gt; getting the next problem correct?&amp;#8221;&lt;/p&gt;

&lt;p&gt;However, naive Bayes is typically used for &lt;em&gt;classification&lt;/em&gt; &amp;#8212; the task of determining which discrete category a data point belongs to &amp;#8212; rather than for &lt;em&gt;regression&lt;/em&gt; &amp;#8212; returning a continuous value (in our case, a probability estimate in &lt;span class='maruku-inline'&gt;&lt;img alt='$[0,1]$' class='maruku-png' src='/images/latex/09076d76213ded659a9c79d34d75bf19.png' style='vertical-align: -0.5555555555555556ex;height: 2.2222222222222223ex;' /&gt;&lt;/span&gt;).&lt;/p&gt;

&lt;p&gt;So, our full-time volunteer Jace, who is much more versed in statistics and machine learning, used R to quickly prototype and evaluate different machine learning algorithms and feature sets. R is the de-facto programming language for statistical computing and comes pre-packaged with data analysis and machine learning tools.&lt;/p&gt;

&lt;p&gt;To evaluate the different algorithms, input features, and thresholds, we came up with some metrics to gauge for desirable characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mean problems done to reach proficiency&lt;/strong&gt; &amp;#8212; ideally we like to minimize this so that students can spend less time rote grinding on problems they know well, and move on to other concepts.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;&lt;span class='maruku-inline'&gt;&lt;img alt='$P(\text{next problem correct} | \text{just gained proficiency})$' class='maruku-png' src='/images/latex/57b67963fa87ffa9337ca44c66d1b88c.png' style='vertical-align: -0.5555555555555556ex;height: 2.333333333333333ex;' /&gt;&lt;/span&gt;&lt;/strong&gt; &amp;#8212; Unfortunately, this is hard to correctly measure in our offline data set due to the streak-of-10 bias: students may loosen up after they gain proficiency and spend less time on subsequent problems.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Proficiency Rate&lt;/strong&gt; &amp;#8212; The percent of proficiencies attained per user-exercise pair. Again, this is hard to measure because of the streak bias.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Confusion matrix for predicted next problem correct&lt;/strong&gt; &amp;#8212; This is for comparing binary classifiers on their accuracy in predicting the outcome of any answer in a user&amp;#8217;s response history. We build up the &lt;a href='http://en.wikipedia.org/wiki/Confusion_matrix'&gt;confusion matrix&lt;/a&gt;, and from that extract &lt;a href='http://en.wikipedia.org/wiki/Sensitivity_and_specificity'&gt;two valuable measures&lt;/a&gt; of the performance of a binary classifier.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We tested various models, including naive Bayes, support vector machines, a simple 10-out-of-last-11-correct model, and logistic regression. Based on the metrics above, we settled on&amp;#8230;&lt;/p&gt;

&lt;h2 id='using_logistic_regression_as_a_proficiency_model'&gt;Using Logistic Regression as a Proficiency Model&lt;/h2&gt;

&lt;p&gt;(Feel free to skip this section if you&amp;#8217;re not technically inclined.)&lt;/p&gt;

&lt;p&gt;Logistic regression is usually used as a classifier that gives a reasonable probability estimate of each category &amp;#8212; exactly our requirement. It&amp;#8217;s so simple, let&amp;#8217;s derive it.&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s say we have the values of &lt;span class='maruku-inline'&gt;&lt;img alt='$n$' class='maruku-png' src='/images/latex/fba01e94f33c55af5e1ca9ef426e732b.png' style='vertical-align: -0.0ex;height: 1.0ex;' /&gt;&lt;/span&gt; input features (eg. percent correct), and we stuff them into a vector &lt;span class='maruku-inline'&gt;&lt;img alt='$\textbf{x}$' class='maruku-png' src='/images/latex/032c489f36aea9016e74552f02fb3bc7.png' style='vertical-align: -0.1111111111111111ex;height: 1.2222222222222223ex;' /&gt;&lt;/span&gt;. Let&amp;#8217;s say we also happen to know how much each feature makes it more likely that the user is proficient, and stuff those weights into a vector &lt;span class='maruku-inline'&gt;&lt;img alt='$\textbf{w}$' class='maruku-png' src='/images/latex/89f76807228c2e7520e8b61808dd67d6.png' style='vertical-align: -0.0ex;height: 1.1111111111111112ex;' /&gt;&lt;/span&gt;. We can then take the weighted sum of the input features, plus a pre-determined constant &lt;span class='maruku-inline'&gt;&lt;img alt='$w_0$' class='maruku-png' src='/images/latex/f4b958ed3d90b76b3c95541200b6e403.png' style='vertical-align: -0.3333333333333333ex;height: 1.3333333333333333ex;' /&gt;&lt;/span&gt; to correct for any constant bias, and call that &lt;span class='maruku-inline'&gt;&lt;img alt='$z$' class='maruku-png' src='/images/latex/750691ad1ce307572337e4ceabedde0d.png' style='vertical-align: -0.0ex;height: 1.0ex;' /&gt;&lt;/span&gt;:&lt;/p&gt;
&lt;div class='maruku-equation'&gt;&lt;img alt='$z = w_0 + \sum_{i=1}^n w_ix_i$' class='maruku-png' src='/images/latex/9b66e9991f41b29474ec730679c5a40f.png' style='height: 5.333333333333334ex;' /&gt;&lt;span class='maruku-eq-tex'&gt;&lt;code style='display: none'&gt;z = w_0 + \sum_{i=1}^n w_ix_i&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Now if we set &lt;span class='maruku-inline'&gt;&lt;img alt='$x_0 = 1$' class='maruku-png' src='/images/latex/d09e280fc87af315f9e8d59b1b15f998.png' style='vertical-align: -0.3333333333333333ex;height: 1.8888888888888888ex;' /&gt;&lt;/span&gt;, we can write that compactly as a linear algebra dot product:&lt;/p&gt;
&lt;div class='maruku-equation'&gt;&lt;img alt='$z = \mathbf{w}^T\mathbf{x}$' class='maruku-png' src='/images/latex/bc3db851e0c12df394acb11d295c8a5a.png' style='height: 2.0ex;' /&gt;&lt;span class='maruku-eq-tex'&gt;&lt;code style='display: none'&gt;z = \mathbf{w}^T\mathbf{x}&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Already, you can see that the higher &lt;span class='maruku-inline'&gt;&lt;img alt='$z$' class='maruku-png' src='/images/latex/750691ad1ce307572337e4ceabedde0d.png' style='vertical-align: -0.0ex;height: 1.0ex;' /&gt;&lt;/span&gt; is, the more likely the user is to be proficient. To obtain our probability estimate, all we have to do is &amp;#8220;shrink&amp;#8221; &lt;span class='maruku-inline'&gt;&lt;img alt='$z$' class='maruku-png' src='/images/latex/750691ad1ce307572337e4ceabedde0d.png' style='vertical-align: -0.0ex;height: 1.0ex;' /&gt;&lt;/span&gt; into the interval &lt;span class='maruku-inline'&gt;&lt;img alt='$(0,1)$' class='maruku-png' src='/images/latex/f1c708470867e676b8acaa707c24a9aa.png' style='vertical-align: -0.5555555555555556ex;height: 2.333333333333333ex;' /&gt;&lt;/span&gt;. We want negative values of &lt;span class='maruku-inline'&gt;&lt;img alt='$z$' class='maruku-png' src='/images/latex/750691ad1ce307572337e4ceabedde0d.png' style='vertical-align: -0.0ex;height: 1.0ex;' /&gt;&lt;/span&gt; to map into &lt;span class='maruku-inline'&gt;&lt;img alt='$(0, 0.5)$' class='maruku-png' src='/images/latex/8212bfb8a663953256af0fee22cb563d.png' style='vertical-align: -0.5555555555555556ex;height: 2.333333333333333ex;' /&gt;&lt;/span&gt; and positive values to fall in &lt;span class='maruku-inline'&gt;&lt;img alt='$[0.5, 1)$' class='maruku-png' src='/images/latex/903b83b68faf624f597a17e3d5ced5c8.png' style='vertical-align: -0.5555555555555556ex;height: 2.333333333333333ex;' /&gt;&lt;/span&gt;. We can do this by plugging &lt;span class='maruku-inline'&gt;&lt;img alt='$z$' class='maruku-png' src='/images/latex/750691ad1ce307572337e4ceabedde0d.png' style='vertical-align: -0.0ex;height: 1.0ex;' /&gt;&lt;/span&gt; into a sigmoid function &amp;#8212; in particular, we&amp;#8217;ll use the logistic function:&lt;/p&gt;
&lt;div class='maruku-equation'&gt;&lt;img alt='$h(z) = \frac{1}{1+e^{-z}}$' class='maruku-png' src='/images/latex/5c4f4d3b1657f920233f111a611889ed.png' style='height: 4.777777777777778ex;' /&gt;&lt;span class='maruku-eq-tex'&gt;&lt;code style='display: none'&gt;h(z) = \frac{1}{1+e^{-z}}&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;And that&amp;#8217;s it! &lt;span class='maruku-inline'&gt;&lt;img alt='$h(z)$' class='maruku-png' src='/images/latex/14b23cfa170b589028eeeec1e9066573.png' style='vertical-align: -0.5555555555555556ex;height: 2.333333333333333ex;' /&gt;&lt;/span&gt; is the probability estimate that logistic regression spits out.&lt;/p&gt;

&lt;p&gt;The tricky bit is in determining the values of the weight vector &lt;span class='maruku-inline'&gt;&lt;img alt='$\textbf{w}$' class='maruku-png' src='/images/latex/89f76807228c2e7520e8b61808dd67d6.png' style='vertical-align: -0.0ex;height: 1.1111111111111112ex;' /&gt;&lt;/span&gt; &amp;#8212; that is, training logistic regression so that &lt;span class='maruku-inline'&gt;&lt;img alt='$h$' class='maruku-png' src='/images/latex/399d4f7a28db2290bec05d8e4d310a7b.png' style='vertical-align: -0.0ex;height: 1.5555555555555556ex;' /&gt;&lt;/span&gt;, aka. the hypothesis function in machine learning terminology, gives us a good probability estimate. For brevity I&amp;#8217;ll spare you the details, but suffice to know that there are plenty of existing libraries to do that.&lt;/p&gt;

&lt;p&gt;So that raises the question, which features did we use?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ewma_3&lt;/code&gt; and &lt;code&gt;ewma_10&lt;/code&gt; &amp;#8212; Exponentially-weighted moving average. This is just math-talk for an average where we give greater weight to more recent values. It&amp;#8217;s handy because it can be implemented recursively as &lt;span class='maruku-inline'&gt;&lt;img alt='$S_t = \alpha \times y + (1 - \alpha) \times S_{t-1}$' class='maruku-png' src='/images/latex/15c61d40f1649355d53a82094175a2b4.png' style='vertical-align: -0.5555555555555556ex;height: 2.333333333333333ex;' /&gt;&lt;/span&gt;, where &lt;span class='maruku-inline'&gt;&lt;img alt='$\alpha$' class='maruku-png' src='/images/latex/1cee10dbde9c6610660a1cdfa4038b16.png' style='vertical-align: -0.0ex;height: 1.0ex;' /&gt;&lt;/span&gt; is the weighting factor, &lt;span class='maruku-inline'&gt;&lt;img alt='$y$' class='maruku-png' src='/images/latex/4d879bde964e549c6085ad630f56ad41.png' style='vertical-align: -0.4444444444444444ex;height: 1.4444444444444444ex;' /&gt;&lt;/span&gt; is the most recent value, and &lt;span class='maruku-inline'&gt;&lt;img alt='$S_{t-1}$' class='maruku-png' src='/images/latex/43b70f5ed50bd7f0e1aa9564bf2c9447.png' style='vertical-align: -0.4444444444444444ex;height: 2.0ex;' /&gt;&lt;/span&gt; is the previous exponential moving average. We set &lt;span class='maruku-inline'&gt;&lt;img alt='$\alpha$' class='maruku-png' src='/images/latex/1cee10dbde9c6610660a1cdfa4038b16.png' style='vertical-align: -0.0ex;height: 1.0ex;' /&gt;&lt;/span&gt; to 0.333 and 0.1 for &lt;code&gt;ewma_3&lt;/code&gt; and &lt;code&gt;ewma_10&lt;/code&gt; respectively.&lt;/li&gt;

&lt;li&gt;&lt;code&gt;current_streak&lt;/code&gt; &amp;#8212; This turned out to be a rather weak signal and we&amp;#8217;ll be discarding it in favour of other features in the future.&lt;/li&gt;

&lt;li&gt;&lt;code&gt;log_num_done&lt;/code&gt; &amp;#8212; &lt;span class='maruku-inline'&gt;&lt;img alt='$\log(\text{number of problems done})$' class='maruku-png' src='/images/latex/507fb6bb944b889e5e5b653435229476.png' style='vertical-align: -0.5555555555555556ex;height: 2.333333333333333ex;' /&gt;&lt;/span&gt;. We don&amp;#8217;t try to predict until at least one problem has been done.&lt;/li&gt;

&lt;li&gt;&lt;code&gt;log_num_missed&lt;/code&gt; &amp;#8212; &lt;span class='maruku-inline'&gt;&lt;img alt='$\log(\text{number of problems missed} + 1)$' class='maruku-png' src='/images/latex/af6b7864a4e001cb9dd164c0a2dd06c5.png' style='vertical-align: -0.5555555555555556ex;height: 2.333333333333333ex;' /&gt;&lt;/span&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;percent_correct&lt;/code&gt; &amp;#8212; &lt;span class='maruku-inline'&gt;&lt;img alt='$\frac{\text{number of problems correct}}{\text{number problems done}}$' class='maruku-png' src='/images/latex/b8de0ad98e9e391495a5379916b24ffe.png' style='vertical-align: -1.1111111111111112ex;height: 3.2222222222222223ex;' /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As for the proficiency threshold, we chose 94% based on our metrics.&lt;/p&gt;

&lt;p&gt;Now for some Python code. To compute the exponentially-weighted moving average:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='python'&gt;&lt;span class='lineno'&gt;1&lt;/span&gt; &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;exp_moving_avg&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;weight&lt;/span&gt;&lt;span class='p'&gt;):&lt;/span&gt;
&lt;span class='lineno'&gt;2&lt;/span&gt;     &lt;span class='n'&gt;ewma&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;EWMA_SEED&lt;/span&gt;
&lt;span class='lineno'&gt;3&lt;/span&gt; 
&lt;span class='lineno'&gt;4&lt;/span&gt;     &lt;span class='k'&gt;for&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt; &lt;span class='ow'&gt;in&lt;/span&gt; &lt;span class='nb'&gt;reversed&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nb'&gt;xrange&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;total_done&lt;/span&gt;&lt;span class='p'&gt;)):&lt;/span&gt;
&lt;span class='lineno'&gt;5&lt;/span&gt;         &lt;span class='n'&gt;ewma&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;weight&lt;/span&gt; &lt;span class='o'&gt;*&lt;/span&gt; &lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;get_answer_at&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt; &lt;span class='o'&gt;-&lt;/span&gt; &lt;span class='n'&gt;weight&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt; &lt;span class='o'&gt;*&lt;/span&gt; &lt;span class='n'&gt;ewma&lt;/span&gt;
&lt;span class='lineno'&gt;6&lt;/span&gt; 
&lt;span class='lineno'&gt;7&lt;/span&gt;     &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;ewma&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;and for the actual logistic regression hypothesis function:&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='python'&gt;&lt;span class='lineno'&gt; 1&lt;/span&gt; &lt;span class='k'&gt;class&lt;/span&gt; &lt;span class='nc'&gt;AccuracyModel&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nb'&gt;object&lt;/span&gt;&lt;span class='p'&gt;):&lt;/span&gt;
&lt;span class='lineno'&gt; 2&lt;/span&gt; 
&lt;span class='lineno'&gt; 3&lt;/span&gt;     &lt;span class='c'&gt;# ... snip ...&lt;/span&gt;
&lt;span class='lineno'&gt; 4&lt;/span&gt; 
&lt;span class='lineno'&gt; 5&lt;/span&gt;     &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;predict&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='p'&gt;):&lt;/span&gt;
&lt;span class='lineno'&gt; 6&lt;/span&gt;         &lt;span class='sd'&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class='lineno'&gt; 7&lt;/span&gt; &lt;span class='sd'&gt;        Returns: the probabilty of the next problem correct using logistic&lt;/span&gt;
&lt;span class='lineno'&gt; 8&lt;/span&gt; &lt;span class='sd'&gt;            regression.&lt;/span&gt;
&lt;span class='lineno'&gt; 9&lt;/span&gt; &lt;span class='sd'&gt;        &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class='lineno'&gt;10&lt;/span&gt; 
&lt;span class='lineno'&gt;11&lt;/span&gt;         &lt;span class='c'&gt;# We don&amp;#39;t try to predict the first problem (no user-exercise history)&lt;/span&gt;
&lt;span class='lineno'&gt;12&lt;/span&gt;         &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;total_done&lt;/span&gt; &lt;span class='o'&gt;==&lt;/span&gt; &lt;span class='mi'&gt;0&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt;
&lt;span class='lineno'&gt;13&lt;/span&gt;             &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;PROBABILITY_FIRST_PROBLEM_CORRECT&lt;/span&gt;
&lt;span class='lineno'&gt;14&lt;/span&gt; 
&lt;span class='lineno'&gt;15&lt;/span&gt;         &lt;span class='c'&gt;# Get values for the feature vector X&lt;/span&gt;
&lt;span class='lineno'&gt;16&lt;/span&gt;         &lt;span class='n'&gt;ewma_3&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;exp_moving_avg&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mf'&gt;0.333&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='lineno'&gt;17&lt;/span&gt;         &lt;span class='n'&gt;ewma_10&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;exp_moving_avg&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mf'&gt;0.1&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='lineno'&gt;18&lt;/span&gt;         &lt;span class='n'&gt;current_streak&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;streak&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt;
&lt;span class='lineno'&gt;19&lt;/span&gt;         &lt;span class='n'&gt;log_num_done&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;math&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;log&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;total_done&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='lineno'&gt;20&lt;/span&gt;         &lt;span class='n'&gt;log_num_missed&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;math&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;log&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;total_done&lt;/span&gt; &lt;span class='o'&gt;-&lt;/span&gt; &lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;total_correct&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='lineno'&gt;21&lt;/span&gt;         &lt;span class='n'&gt;percent_correct&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nb'&gt;float&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;total_correct&lt;/span&gt;&lt;span class='p'&gt;())&lt;/span&gt; &lt;span class='o'&gt;/&lt;/span&gt; &lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;total_done&lt;/span&gt;
&lt;span class='lineno'&gt;22&lt;/span&gt; 
&lt;span class='lineno'&gt;23&lt;/span&gt;         &lt;span class='n'&gt;weighted_features&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[&lt;/span&gt;
&lt;span class='lineno'&gt;24&lt;/span&gt;             &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;ewma_3&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;params&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;EWMA_3&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
&lt;span class='lineno'&gt;25&lt;/span&gt;             &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;ewma_10&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;params&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;EWMA_10&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
&lt;span class='lineno'&gt;26&lt;/span&gt;             &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;current_streak&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;params&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;CURRENT_STREAK&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
&lt;span class='lineno'&gt;27&lt;/span&gt;             &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;log_num_done&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;params&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;LOG_NUM_DONE&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
&lt;span class='lineno'&gt;28&lt;/span&gt;             &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;log_num_missed&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;params&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;LOG_NUM_MISSED&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
&lt;span class='lineno'&gt;29&lt;/span&gt;             &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;percent_correct&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;params&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;PERCENT_CORRECT&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt;
&lt;span class='lineno'&gt;30&lt;/span&gt;         &lt;span class='p'&gt;]&lt;/span&gt;
&lt;span class='lineno'&gt;31&lt;/span&gt; 
&lt;span class='lineno'&gt;32&lt;/span&gt;         &lt;span class='n'&gt;X&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;weight_vector&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nb'&gt;zip&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='o'&gt;*&lt;/span&gt;&lt;span class='n'&gt;weighted_features&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;  &lt;span class='c'&gt;# unzip the list of pairs&lt;/span&gt;
&lt;span class='lineno'&gt;33&lt;/span&gt; 
&lt;span class='lineno'&gt;34&lt;/span&gt;         &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;AccuracyModel&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;logistic_regression_predict&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;
&lt;span class='lineno'&gt;35&lt;/span&gt;             &lt;span class='n'&gt;params&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;INTERCEPT&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;weight_vector&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;X&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='lineno'&gt;36&lt;/span&gt; 
&lt;span class='lineno'&gt;37&lt;/span&gt;     &lt;span class='c'&gt;# See http://en.wikipedia.org/wiki/Logistic_regression&lt;/span&gt;
&lt;span class='lineno'&gt;38&lt;/span&gt;     &lt;span class='nd'&gt;@staticmethod&lt;/span&gt;
&lt;span class='lineno'&gt;39&lt;/span&gt;     &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;logistic_regression_predict&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;intercept&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;weight_vector&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;X&lt;/span&gt;&lt;span class='p'&gt;):&lt;/span&gt;
&lt;span class='lineno'&gt;40&lt;/span&gt;         &lt;span class='c'&gt;# TODO(david): Use numpy&amp;#39;s dot product fn when we support numpy&lt;/span&gt;
&lt;span class='lineno'&gt;41&lt;/span&gt;         &lt;span class='n'&gt;dot_product&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='nb'&gt;sum&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;itertools&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;imap&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;operator&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;mul&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;weight_vector&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;X&lt;/span&gt;&lt;span class='p'&gt;))&lt;/span&gt;
&lt;span class='lineno'&gt;42&lt;/span&gt;         &lt;span class='n'&gt;z&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;dot_product&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;intercept&lt;/span&gt;
&lt;span class='lineno'&gt;43&lt;/span&gt; 
&lt;span class='lineno'&gt;44&lt;/span&gt;         &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='mf'&gt;1.0&lt;/span&gt; &lt;span class='o'&gt;/&lt;/span&gt; &lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mf'&gt;1.0&lt;/span&gt; &lt;span class='o'&gt;+&lt;/span&gt; &lt;span class='n'&gt;math&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;exp&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='o'&gt;-&lt;/span&gt;&lt;span class='n'&gt;z&lt;/span&gt;&lt;span class='p'&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;There&amp;#8217;s another interesting problem here &amp;#8212; how do you display that probability value on the progress bar? We try to linearize the display and distribute it evenly across the bar. Since it&amp;#8217;s 4 am right now, I&amp;#8217;ll just give you the code for it (it&amp;#8217;s well-commented) and won&amp;#8217;t make any helpful explanatory graphs (unless people request it ;)).&lt;/p&gt;
&lt;div class='highlight'&gt;&lt;pre&gt;&lt;code class='python'&gt;&lt;span class='lineno'&gt; 1&lt;/span&gt; &lt;span class='k'&gt;class&lt;/span&gt; &lt;span class='nc'&gt;InvFnExponentialNormalizer&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='nb'&gt;object&lt;/span&gt;&lt;span class='p'&gt;):&lt;/span&gt;
&lt;span class='lineno'&gt; 2&lt;/span&gt;     &lt;span class='sd'&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class='lineno'&gt; 3&lt;/span&gt; &lt;span class='sd'&gt;    This is basically a function that takes an accuracy prediction (probability&lt;/span&gt;
&lt;span class='lineno'&gt; 4&lt;/span&gt; &lt;span class='sd'&gt;    of next problem correct) and attempts to &amp;quot;evenly&amp;quot; distribute it in [0, 1]&lt;/span&gt;
&lt;span class='lineno'&gt; 5&lt;/span&gt; &lt;span class='sd'&gt;    such that progress bar appears to fill up linearly.&lt;/span&gt;
&lt;span class='lineno'&gt; 6&lt;/span&gt; 
&lt;span class='lineno'&gt; 7&lt;/span&gt; &lt;span class='sd'&gt;    The current algorithm is as follows:&lt;/span&gt;
&lt;span class='lineno'&gt; 8&lt;/span&gt; &lt;span class='sd'&gt;    Let&lt;/span&gt;
&lt;span class='lineno'&gt; 9&lt;/span&gt; &lt;span class='sd'&gt;        f(n) = probabilty of next problem correct after doing n problems,&lt;/span&gt;
&lt;span class='lineno'&gt;10&lt;/span&gt; &lt;span class='sd'&gt;        all of which are correct.&lt;/span&gt;
&lt;span class='lineno'&gt;11&lt;/span&gt; &lt;span class='sd'&gt;    Let&lt;/span&gt;
&lt;span class='lineno'&gt;12&lt;/span&gt; &lt;span class='sd'&gt;        g(x) = f^(-1)(x)&lt;/span&gt;
&lt;span class='lineno'&gt;13&lt;/span&gt; &lt;span class='sd'&gt;    that is, the inverse function of f. Since f is discrete but we want g to be&lt;/span&gt;
&lt;span class='lineno'&gt;14&lt;/span&gt; &lt;span class='sd'&gt;    continuous, unknown values in the domain of g will be approximated by using&lt;/span&gt;
&lt;span class='lineno'&gt;15&lt;/span&gt; &lt;span class='sd'&gt;    an exponential curve to fit the known values of g. Intuitively, g(x) is a&lt;/span&gt;
&lt;span class='lineno'&gt;16&lt;/span&gt; &lt;span class='sd'&gt;    function that takes your accuracy and returns how many problems correct in&lt;/span&gt;
&lt;span class='lineno'&gt;17&lt;/span&gt; &lt;span class='sd'&gt;    a row it would&amp;#39;ve taken to get to that, as a real number. Thus, our&lt;/span&gt;
&lt;span class='lineno'&gt;18&lt;/span&gt; &lt;span class='sd'&gt;    progress display function is just&lt;/span&gt;
&lt;span class='lineno'&gt;19&lt;/span&gt; &lt;span class='sd'&gt;        h(x) = g(x) / g(consts.PROFICIENCY_ACCURACY_THRESHOLD)&lt;/span&gt;
&lt;span class='lineno'&gt;20&lt;/span&gt; &lt;span class='sd'&gt;    clamped between [0, 1].&lt;/span&gt;
&lt;span class='lineno'&gt;21&lt;/span&gt; 
&lt;span class='lineno'&gt;22&lt;/span&gt; &lt;span class='sd'&gt;    The rationale behind this is that if you don&amp;#39;t get any problems wrong, your&lt;/span&gt;
&lt;span class='lineno'&gt;23&lt;/span&gt; &lt;span class='sd'&gt;    progress bar will increment by about the same amount each time and be full&lt;/span&gt;
&lt;span class='lineno'&gt;24&lt;/span&gt; &lt;span class='sd'&gt;    right when you&amp;#39;re proficient (i.e. reach the required accuracy threshold).&lt;/span&gt;
&lt;span class='lineno'&gt;25&lt;/span&gt; &lt;span class='sd'&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class='lineno'&gt;26&lt;/span&gt; 
&lt;span class='lineno'&gt;27&lt;/span&gt;     &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;__init__&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;accuracy_model&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;proficiency_threshold&lt;/span&gt;&lt;span class='p'&gt;):&lt;/span&gt;
&lt;span class='lineno'&gt;28&lt;/span&gt;         &lt;span class='n'&gt;X&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;Y&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='p'&gt;[],&lt;/span&gt; &lt;span class='p'&gt;[]&lt;/span&gt;
&lt;span class='lineno'&gt;29&lt;/span&gt; 
&lt;span class='lineno'&gt;30&lt;/span&gt;         &lt;span class='k'&gt;for&lt;/span&gt; &lt;span class='n'&gt;i&lt;/span&gt; &lt;span class='ow'&gt;in&lt;/span&gt; &lt;span class='n'&gt;itertools&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;count&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;):&lt;/span&gt;
&lt;span class='lineno'&gt;31&lt;/span&gt;             &lt;span class='n'&gt;accuracy_model&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;update&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;correct&lt;/span&gt;&lt;span class='o'&gt;=&lt;/span&gt;&lt;span class='bp'&gt;True&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='lineno'&gt;32&lt;/span&gt;             &lt;span class='n'&gt;probability&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;accuracy_model&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;predict&lt;/span&gt;&lt;span class='p'&gt;()&lt;/span&gt;
&lt;span class='lineno'&gt;33&lt;/span&gt; 
&lt;span class='lineno'&gt;34&lt;/span&gt;             &lt;span class='n'&gt;X&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;append&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;probability&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='lineno'&gt;35&lt;/span&gt;             &lt;span class='n'&gt;Y&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;append&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;i&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='lineno'&gt;36&lt;/span&gt; 
&lt;span class='lineno'&gt;37&lt;/span&gt;             &lt;span class='k'&gt;if&lt;/span&gt; &lt;span class='n'&gt;probability&lt;/span&gt; &lt;span class='o'&gt;&amp;gt;=&lt;/span&gt; &lt;span class='n'&gt;proficiency_threshold&lt;/span&gt;&lt;span class='p'&gt;:&lt;/span&gt;
&lt;span class='lineno'&gt;38&lt;/span&gt;                 &lt;span class='k'&gt;break&lt;/span&gt;
&lt;span class='lineno'&gt;39&lt;/span&gt; 
&lt;span class='lineno'&gt;40&lt;/span&gt;         &lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;A&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;B&lt;/span&gt; &lt;span class='o'&gt;=&lt;/span&gt; &lt;span class='n'&gt;exponential_fit&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;X&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;Y&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='lineno'&gt;41&lt;/span&gt;         &lt;span class='c'&gt;# normalize the function output so that it outputs 1.0 at the&lt;/span&gt;
&lt;span class='lineno'&gt;42&lt;/span&gt;         &lt;span class='c'&gt;# proficency threshold&lt;/span&gt;
&lt;span class='lineno'&gt;43&lt;/span&gt;         &lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;A&lt;/span&gt; &lt;span class='o'&gt;/=&lt;/span&gt; &lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;exponential_estimate&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;proficiency_threshold&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='lineno'&gt;44&lt;/span&gt; 
&lt;span class='lineno'&gt;45&lt;/span&gt;     &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;exponential_estimate&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;x&lt;/span&gt;&lt;span class='p'&gt;):&lt;/span&gt;
&lt;span class='lineno'&gt;46&lt;/span&gt;         &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;A&lt;/span&gt; &lt;span class='o'&gt;*&lt;/span&gt; &lt;span class='n'&gt;math&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;exp&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;B&lt;/span&gt; &lt;span class='o'&gt;*&lt;/span&gt; &lt;span class='n'&gt;x&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;span class='lineno'&gt;47&lt;/span&gt; 
&lt;span class='lineno'&gt;48&lt;/span&gt;     &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;normalize&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;p_val&lt;/span&gt;&lt;span class='p'&gt;):&lt;/span&gt;
&lt;span class='lineno'&gt;49&lt;/span&gt;         &lt;span class='c'&gt;# TODO(david): Use numpy clip&lt;/span&gt;
&lt;span class='lineno'&gt;50&lt;/span&gt;         &lt;span class='k'&gt;def&lt;/span&gt; &lt;span class='nf'&gt;clamp&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;value&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;minval&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;maxval&lt;/span&gt;&lt;span class='p'&gt;):&lt;/span&gt;
&lt;span class='lineno'&gt;51&lt;/span&gt;             &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='nb'&gt;sorted&lt;/span&gt;&lt;span class='p'&gt;((&lt;/span&gt;&lt;span class='n'&gt;minval&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;value&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='n'&gt;maxval&lt;/span&gt;&lt;span class='p'&gt;))[&lt;/span&gt;&lt;span class='mi'&gt;1&lt;/span&gt;&lt;span class='p'&gt;]&lt;/span&gt;
&lt;span class='lineno'&gt;52&lt;/span&gt; 
&lt;span class='lineno'&gt;53&lt;/span&gt;         &lt;span class='k'&gt;return&lt;/span&gt; &lt;span class='n'&gt;clamp&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='bp'&gt;self&lt;/span&gt;&lt;span class='o'&gt;.&lt;/span&gt;&lt;span class='n'&gt;exponential_estimate&lt;/span&gt;&lt;span class='p'&gt;(&lt;/span&gt;&lt;span class='n'&gt;p_val&lt;/span&gt;&lt;span class='p'&gt;),&lt;/span&gt; &lt;span class='mf'&gt;0.0&lt;/span&gt;&lt;span class='p'&gt;,&lt;/span&gt; &lt;span class='mf'&gt;1.0&lt;/span&gt;&lt;span class='p'&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now, until Google App Engine supports NumPy, the implementation for &lt;code&gt;exponential_fit&lt;/code&gt; is just the &lt;a href='http://mathworld.wolfram.com/LeastSquaresFittingExponential.html'&gt;derivative of the least-squares cost&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The full, uncut, unaltered code is available at our &lt;a href='https://khanacademy.kilnhg.com/Repo/Website/Group/stable/Files/accuracy_model'&gt;Kiln repo&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id='showdown_logistic_regression__the_streak'&gt;Showdown: Logistic Regression &lt;img alt='vs.' id='showdown-swords' src='/images/showdown-swords.png' /&gt; The Streak&lt;/h2&gt;

&lt;p&gt;The metrics may tell us that logistic regression wins, but being the illogical, squishy human beings that we are, we yearned for an intuitive understanding of the unique behaviour of the different models. I developed an internal tool to simulate exercise responses and visualise the prediction of different models. Here&amp;#8217;s a highlight reel of the salient characteristics.&lt;/p&gt;

&lt;p&gt;As expected, order matters. Both models will weigh problems done more recently higher than earlier problems. What may be surprising is the relative importance:&lt;/p&gt;

&lt;p&gt;&lt;img alt='Position Matters' src='/images/answer-history-position-matters.png' /&gt;&lt;/p&gt;

&lt;p&gt;Logistic regression seems to care much less than streak.&lt;/p&gt;

&lt;p&gt;Both models monotonically increase confidence the more responses of the same type they receive:&lt;/p&gt;

&lt;p&gt;&lt;img alt='More positives increase likelihood of correct response' src='/images/answer-history-length-confidence.png' /&gt;&lt;/p&gt;

&lt;p&gt;Logistic regression also recognises consistently spotty performance:&lt;/p&gt;

&lt;p&gt;&lt;img alt='Longer alternating right-wrongs makes logistic regression sadder' src='/images/answer-history-consistently-spotty.png' /&gt;&lt;/p&gt;

&lt;p&gt;Logistic regression takes into account prior performance. So, getting lots correct is always a good thing, and you&amp;#8217;ll be able to recover faster from a wrong answer if you were previously doing well. Contrast with the streak model, which loses all memory after a single incorrect answer.&lt;/p&gt;

&lt;p&gt;&lt;img alt='Initial correct answers allow for an easier recovery' src='/images/answer-history-percent-correct-recovery.png' /&gt;&lt;/p&gt;

&lt;p&gt;This could also work against you. If you&amp;#8217;ve gotten lots of wrong answers, you&amp;#8217;ll need to do more work to convince logistic regression that you&amp;#8217;re actually competent. This mitigates one of the issues we had with the streak, where we found that there was a significant difference in actual proficiency for those getting a streak immediately vs. after 30 problems.&lt;/p&gt;

&lt;p&gt;&lt;img alt='Multiple wrong answers will count' src='/images/answer-history-wrongs-count.png' /&gt;&lt;/p&gt;

&lt;p&gt;Could this be overly harsh for struggling students? That&amp;#8217;s a question we are actively investigating, and as a stopgap measure we only keep the last 20 problems as history. This compromise has an insignificant effect on logistic regression&amp;#8217;s predictive accuracy, but it lets us sleep knowing that a student will not be damned for life if they were doing some unusual exploration and got 10 problems in a row wrong.&lt;/p&gt;

&lt;p&gt;Due to 4 am, I don&amp;#8217;t have an interactive demo on this page, but it won&amp;#8217;t be hard to add it. If you would like to play with this please say so.&lt;/p&gt;

&lt;h2 id='results'&gt;Results&lt;/h2&gt;

&lt;p&gt;This was a fairly large change that we, understandably, only wanted to deploy to a small subset of users. This was facilitated by &lt;a href='http://bjk5.com/post/10171483254/a-bingo-split-testing-now-on-app-engine-built-for-khan'&gt;Bengineer Kamen&amp;#8217;s GAE/Bingo split-testing framework for App Engine&lt;/a&gt;. Crucially, it allowed us to measure conversions as a way of gathering more accurate statistics on actual usage data.&lt;/p&gt;

&lt;p&gt;The experiment has been running for 6 days thus far with 10% of users using the new logistic regression proficiency model. Before I reveal anything else, see a screenshot of GAE/Bingo in action (from a few hours ago):&lt;/p&gt;

&lt;p&gt;&lt;img alt='Proficiency gained all - 228.97% (streak) vs 268.42% (accuracy)' src='/images/ab-test-proficiency-gained-all.png' /&gt;&lt;/p&gt;

&lt;p&gt;The graph above shows the results over time, so you can see when trends have stabilised.&lt;/p&gt;

&lt;p&gt;Now what you&amp;#8217;ve been waiting for, our current statistics (5 am PST, Nov. 2) show that, for the new model, we have:&lt;/p&gt;
&lt;noscript&gt;
  &lt;strong&gt;Please enable JavaScript for pretty charts.&lt;/strong&gt;
&lt;/noscript&gt;&lt;ul&gt;
&lt;li&gt; 20.8% more proficiencies earned: &lt;/li&gt;
&lt;/ul&gt;&lt;div id='proficiencies-earned-chart' /&gt;&lt;script&gt;
  new Highcharts.Chart({
    chart: {
      renderTo: 'proficiencies-earned-chart',
      type: 'bar',
      height: 200
    },
    legend: { enabled: false },
    credits: { enabled: false },
    title: {
      text: 'Proficiencies Earned per User'
    },
    xAxis: {
      categories: ['Streak', 'Accuracy']
    },
    yAxis: {
      title: {
        text: 'Total proficiencies earned / number of participants in group'
      }
    },
    series: [{
      data: [2.4205, 2.9237]
    }]
  });
&lt;/script&gt;&lt;noscript&gt;
  &lt;blockquote&gt; Proficiencies earned per user: 2.4205 for streak and 2.9237 for accuracy &lt;/blockquote&gt;
&lt;/noscript&gt;&lt;ul&gt; &lt;li&gt; 15.7% more new exercises attempted: &lt;/li&gt; &lt;/ul&gt;&lt;div id='new-exercises-chart' /&gt;&lt;script&gt;
  new Highcharts.Chart({
    chart: {
      renderTo: 'new-exercises-chart',
      type: 'bar',
      height: 200
    },
    legend: { enabled: false },
    credits: { enabled: false },
    title: {
      text: 'New Exercises Attempted per User'
    },
    xAxis: {
      categories: ['Streak', 'Accuracy']
    },
    yAxis: {
      title: {
        text: 'Total new exercises attempted / number of participants in group'
      }
    },
    series: [{
      data: [2.9843, 3.4533]
    }]
  });
&lt;/script&gt;&lt;noscript&gt;
  &lt;blockquote&gt; New exercises attempted per user: 2.9843 for streak vs. 3.4533 for accuracy &lt;/blockquote&gt;
&lt;/noscript&gt;&lt;ul&gt;
&lt;li&gt;
4.4 less problems done (26% less) per proficiency:
&lt;/li&gt;
&lt;/ul&gt;&lt;div id='problems-per-proficiency-chart' /&gt;&lt;script&gt;
  new Highcharts.Chart({
    chart: {
      renderTo: 'problems-per-proficiency-chart',
      type: 'bar',
      height: 200
    },
    legend: { enabled: false },
    credits: { enabled: false },
    title: {
      text: 'Problems Done per Proficiency'
    },
    xAxis: {
      categories: ['Streak', 'Accuracy']
    },
    yAxis: {
      title: {
        text: 'Total proficiencies gained / total problems done'
      }
    },
    series: [{
      data: [16.8, 12.4]
    }]
  });
&lt;/script&gt;&lt;noscript&gt;
  &lt;blockquote&gt; Problems done per proficiency: 16.8 for streak vs. 12.4 for accuracy &lt;/blockquote&gt;
&lt;/noscript&gt;
&lt;ul&gt;
&lt;li&gt;Essentially the same accuracy at proficiency:&lt;/li&gt;
&lt;/ul&gt;
&lt;div id='accuracy-at-proficiency-chart' /&gt;&lt;script&gt;
  new Highcharts.Chart({
    chart: {
      renderTo: 'accuracy-at-proficiency-chart',
      type: 'bar',
      height: 200
    },
    legend: { enabled: false },
    credits: { enabled: false },
    title: {
      text: 'Accuracy - P(next problem correct | just gained proficiency)'
    },
    xAxis: {
      categories: ['Streak', 'Accuracy']
    },
    yAxis: {
      title: {
        text: 'Total problems correct right after proficiency / total &quot;does problem right after proficiency&quot;'
      }
    },
    series: [{
      data: [0.951, 0.949]
    }]
  });
&lt;/script&gt;&lt;noscript&gt;
  &lt;blockquote&gt; Accuracy - P(next problem correct | just gained proficiency): 0.951 for streak vs. 0.949 for accuracy &lt;/blockquote&gt;
&lt;/noscript&gt;
&lt;ul&gt;
&lt;li&gt;Higher accuracy attained among a set of 3 pre-chosen easy problems. Jace came up with this statistic to gauge any actual differences in learning. The basic idea is: If accuracy as determined by logistic regression is a good approximation of competence, then higher attained accuracies would be indicative of greater competence. Note the precipitous drop at 94% for the accuracy model &amp;#8212; this is due to the proficiency threshold set at 94% for logistic regression, so once a user reaches that level, we tell them to move on. (A streak of 10 with no wrong answers nets an accuracy of 96.7%.)&lt;/li&gt;
&lt;/ul&gt;
&lt;div id='easy-accuracy-distribution-chart' /&gt;&lt;script&gt;
  new Highcharts.Chart({
    chart: {
      renderTo: 'easy-accuracy-distribution-chart',
      type: 'column',
      height: 300
    },
    legend: { enabled: true },
    credits: { enabled: false },
    title: {
      text: 'Easy Problems - Distribution of Accuracy Attained'
    },
    xAxis: {
      title: {
        text: 'Accuracy Attained'
      }
    },
    yAxis: {
      title: {
        text: 'Percent of Users'
      },
      max: 0.13,
      endOnTick: false
    },
    series: [{
      name: 'Streak',
      data: [[0.85, 0.1064], [0.9, 0.1052], [0.92, 0.1029], [0.94, 0.0973], [0.96, 0.0844]]
    }, {
      name: 'Accuracy',
      data: [[0.85, 0.1207], [0.9, 0.1200], [0.92, 0.1195], [0.94, 0.1181], [0.96, 0.0272]]
    }]
  });
&lt;/script&gt;&lt;noscript&gt;
  &lt;blockquote&gt;
    &lt;p&gt; Please enable JavaScript.&lt;/p&gt;

    &lt;p&gt; Easy Problems - Distribution of Accuracy Attained [% of Users, Accuracy Attained] &lt;/p&gt;
    &lt;p&gt; Streak: [[0.85, 0.1064], [0.9, 0.1052], [0.92, 0.1029], [0.94, 0.0973], [0.96, 0.0844]] &lt;/p&gt;
    &lt;p&gt; Accuracy: [[0.85, 0.1207], [0.9, 0.1200], [0.92, 0.1195], [0.94, 0.1181], [0.96, 0.0272]] &lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/noscript&gt;
&lt;ul&gt;
&lt;li&gt;Slightly higher accuracy attained for a set of 10 pre-chosen hard problems. Going above and beyond the call of duty seems much less popular here, among accuracy model participants.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id='hard-accuracy-distribution-chart' /&gt;&lt;script&gt;
  new Highcharts.Chart({
    chart: {
      renderTo: 'hard-accuracy-distribution-chart',
      type: 'column',
      height: 300
    },
    legend: { enabled: true },
    credits: { enabled: false },
    title: {
      text: 'Hard Problems - Distribution of Accuracy Attained'
    },
    xAxis: {
      title: {
        text: 'Accuracy Attained'
      }
    },
    yAxis: {
      title: {
        text: 'Percent of Users'
      },
      max: 0.05,
      endOnTick: false
    },
    series: [{
      name: 'Streak',
      data: [[0.85, 0.0464], [0.9, 0.0433], [0.92, 0.0395], [0.94, 0.0326], [0.96, 0.0193]]
    }, {
      name: 'Accuracy',
      data: [[0.85, 0.0473], [0.9, 0.0441], [0.92, 0.0407], [0.94, 0.0392], [0.96, 0.0025]]
    }]
  });
&lt;/script&gt;&lt;noscript&gt;
  &lt;blockquote&gt;
    &lt;p&gt; Please enable JavaScript.  &lt;/p&gt;

    &lt;p&gt; Easy Problems - Distribution of Accuracy Attained [% of Users, Accuracy Attained] &lt;/p&gt;
    &lt;p&gt; Streak: [[0.85, 0.0464], [0.9, 0.0433], [0.92, 0.0395], [0.94, 0.0326], [0.96, 0.0193]] &lt;/p&gt;
    &lt;p&gt; Accuracy: [[0.85, 0.0473], [0.9, 0.0441], [0.92, 0.0407], [0.94, 0.0392], [0.96, 0.0025]] &lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/noscript&gt;&lt;ul&gt;
  &lt;li&gt;P(do another problem | just answered incorrectly) not affected&lt;/li&gt;
  &lt;li&gt;11.7% more proficiencies earned for the hard problems&lt;/li&gt;
  &lt;li&gt;14.8% more proficiencies earned for the easy problems&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In high level terms, we increased overall interest &amp;#8212; more new exercises attempted, fewer problems done per proficiency &amp;#8212; without lowering the bar for proficiency &amp;#8212; P(next problem correct | just gained proficiency) was roughly the same for both groups. Further, it seemed that overall learning, as measured by the distribution of accuracies obtained, went up slightly under the new model.&lt;/p&gt;

&lt;p&gt;Optimistically, we hypothesise that our gains are from moving students quicker off exercises they&amp;#8217;re good at, while making them spend more time on concepts in which they need more practice. To confirm or deny this&amp;#8230;&lt;/p&gt;

&lt;h2 id='in_the_pipeline'&gt;In the Pipeline&lt;/h2&gt;

&lt;p&gt;&amp;#8230;we will look into truly where the new proficiencies are coming from. We are also interested in seeing if there is any variation in knowledge retention &amp;#8212; in particular, we want to know if P(next problem correct | took a few days break) is affected.&lt;/p&gt;

&lt;p&gt;This is just the end of the beginning for us. We wish to investigate and possibly implement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Stochastic gradient descent for online learning of logistic regression&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&amp;#8230;which would allow adaptive models per user and per exercise. Should we bump up the proficiency threshold for users who find the exercises too easy?&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;On a similar note, could we define a fitness function that takes into account both accuracy and student frustration, and find the optimal time to tell the student to move on? Could this allow us to maximize student learning by maximizing accuracy across many exercises?&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Model improvements. Here are some things we still need to try:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incorporate more features, such as time spent per problem, time since last problem done, and user performance on similar exercises.&lt;/li&gt;

&lt;li&gt;Experiment with non-linear feature transformations and combinations. Eg. &lt;span class='maruku-inline'&gt;&lt;img alt='$\frac{\text{ewma}}{\log(1-\text{ewma})}$' class='maruku-png' src='/images/latex/8e167e5a0c4748db3a4d485b13d238a2.png' style='vertical-align: -1.1111111111111112ex;height: 2.7777777777777777ex;' /&gt;&lt;/span&gt;&lt;/li&gt;

&lt;li&gt;Along with the above, apply regularization to prevent overfitting (thanks &lt;a href='http://www.ml-class.org/'&gt;Andrew Ng and ml-class&lt;/a&gt;!)&lt;/li&gt;

&lt;li&gt;Train and use separate models for the first 5 problems vs. those after that.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This work to create an accurate predictor has many other applications than just to power the proficiency meter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Determine if the user is struggling, and if so suggest a video to watch, using some hints, or taking a break.&lt;/li&gt;

&lt;li&gt;Determine the optimal date to schedule a review for spaced repetition learning.&lt;/li&gt;

&lt;li&gt;Tailor a custom mixed-question review session that addresses weak areas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stay tuned for a continuation blog post if we find more interesting results!&lt;/p&gt;

&lt;h2 id='obligatory_recruiting_plug'&gt;Obligatory Recruiting Plug&lt;/h2&gt;

&lt;p&gt;Think you can do better? Well, I agree! I&amp;#8217;m sure you know lots of ways to improve what we did. Good news: we&amp;#8217;re open-source and hiring!&lt;/p&gt;

&lt;p&gt;We welcome contributors to our &lt;a href='https://github.com/Khan/khan-exercises'&gt;exercises and exercise framework on GitHub&lt;/a&gt;. Some of our best exercises were created by volunteers: check out this awesome &lt;a href='http://www.khanacademy.org/exercises?exid=derivative_intuition'&gt;derivative intuition exercise&lt;/a&gt; created by Bengineer Eater.&lt;/p&gt;

&lt;p&gt;Another reason I love working at the Khan Academy is the &lt;a href='http://www.khanacademy.org/about/the-team'&gt;passionate and talented team&lt;/a&gt;. Our lead developer, &lt;a href='http://www.bjk5.com'&gt;Bengineer Kamens&lt;/a&gt;, is committed to our productivity and well-being. He Bengineers internal refactorings, tools, and spends much of his time getting new developers up to speed. Without his Bengineering, it would not have been possible to collect all this interesting data. Also, if you ever have a question about jQuery, you could just ask John Resig here.&lt;/p&gt;

&lt;p&gt;Do you want to make 0.1% improvements in ad click-thru rates for the rest of your life, or come with us and &lt;a href='http://www.khanacademy.org/jobs'&gt;change the world of education&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;Also, if you were wondering, we are not based in the UK, Canada, or Australia&amp;#8230; my Canadian heritage compels me to spell &amp;#8220;-our&amp;#8221; and &amp;#8220;-ise&amp;#8221; when it&amp;#8217;s not code. :P&lt;/p&gt;
&lt;hr /&gt;
&lt;h3 id='update_nov_3_2_am_pst'&gt;Update (Nov 3, 2 am PST)&lt;/h3&gt;

&lt;p&gt;Thank you all for your suggestions and feedback!&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s some interesting discussion on &lt;a href='http://news.ycombinator.com/item?id=3187350'&gt;Hacker News&lt;/a&gt; and &lt;a href='http://www.reddit.com/r/programming/comments/lxsjj/how_khan_academy_is_using_machine_learning_to/'&gt;Reddit&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id='update-2011-11-12'&gt;Update (Nov 12)&lt;/h3&gt;
&lt;p&gt;Having ran the experiment for more than two weeks now, we analysed 10 days&amp;#8217; data to see if longer-term knowledge retention was affected. It turns out that students are slightly more likely to answer correctly after taking a break under the new model:&lt;/p&gt;
&lt;div id='retention-rate-chart' /&gt;&lt;script&gt;
  new Highcharts.Chart({
    chart: {
      renderTo: 'retention-rate-chart',
      type: 'bar',
      height: 300
    },
    credits: { enabled: false },
    title: {
      text: 'Knowledge retention after 2 days break'
    },
    xAxis: {
      categories: ['P(next correct | proficient and took break)', 'P(next wrong | not proficient and took break)']
    },
    yAxis: {
      endOnTick: false
    },
    series: [{
      name: 'Streak',
      data: [0.861, 0.273]
    }, {
      name: 'Accuracy',
      data: [0.875, 0.283]
    }]
  });
&lt;/script&gt;&lt;noscript&gt;
  &lt;blockquote&gt;
    &lt;p&gt; P(next correct | proficient and took break) = 0.861 for streak, 0.875 for accuracy &lt;/p&gt;
    &lt;p&gt; P(next wrong | not proficient and took break) = 0.273 for streak, 0.283 for accuracy &lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/noscript&gt;
&lt;p&gt;These results are encouraging. It shows that the new model attempts to address one of the core problems with the streak &amp;#8212; the variability of student success rates after taking a break &amp;#8212; while at the same time increasing proficiency rates. Thus, we have reason to conclude that the accuracy model is just a better model of student proficiency.&lt;/p&gt;

&lt;p&gt;This information gave us the confidence to roll out from 10% to 100% of users. We have now officially launched the logistic regression proficiency model site-wide!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Test Post Please Ignore</title>
   <link href="http://david-hu.com/2011/08/27/test-post-pls-ignore.html"/>
   <updated>2011-08-27T00:00:00-04:00</updated>
   <id>http://david-hu.com/2011/08/27/test-post-pls-ignore</id>
   <content type="html">&lt;p&gt;Hello world!&lt;/p&gt;

&lt;p&gt;This is my first blog post.&lt;/p&gt;

&lt;p&gt;I had originally planned to write my own blog engine in Haskell, so that I could have a project through which to deeply learn a functional language and to get some practice with web development. However, I&amp;#8217;ve noticed that the larger the task, the more I tend to put it off. So, I decided to just go with an existing framework and then transition to my own blog engine, should I find it worthwhile. Recently, I found out about &lt;a href='https://github.com/mojombo/jekyll/'&gt;Jekyll&lt;/a&gt;, and it fit my original design requirements very well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple to set up&lt;/li&gt;

&lt;li&gt;Store blog posts as static text files&lt;/li&gt;

&lt;li&gt;Write and edit blog posts with my editor of choice ([gm]vim)&lt;/li&gt;

&lt;li&gt;Markdown formatting&lt;/li&gt;

&lt;li&gt;Publish and store blog posts on GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next I need to integrate Disqus for comments, tweak the CSS a little bit, and test on IE.&lt;/p&gt;

&lt;p&gt;In other news, I&amp;#8217;ll be starting my internship at the &lt;a href='http://www.khanacademy.org/'&gt;Khan Academy&lt;/a&gt; in two days. This is really a dream internship for me&amp;#8212;working on something I&amp;#8217;m deeply passionate about with a &lt;a href='http://www.khanacademy.org/about/the-team'&gt;small, world-class team&lt;/a&gt; that will hopefully revolutionize the education industry. Can&amp;#8217;t wait to start!&lt;/p&gt;

&lt;p&gt;The post title is a reference to the &lt;a href='http://www.reddit.com/r/pics/comments/92dd8/test_post_please_ignore/'&gt;top-scoring post on reddit&lt;/a&gt;.&lt;/p&gt;</content>
 </entry>
 
 
</feed>
