Skip to main content

Recurse Center, 2014-06-20

  • Fridays are optional in Hacker School, and people are given help with preparation for job interviews.
  • This week's exercise was a "know-your-language" type exercise and I decided to do it with Haskell, and confirmed the fact that I didn't know it too well. :)
  • I spent the afternoon writing the blog-post on OAuth2, and adding support for converting ditaa code blocks to png using Pygments. It may not have been the best use of time, but anyway…

Recurse Center, 2014-06-19

  • Yesterday was a bit more wandering than usual. I still have to finish (actually, start) the last chapter in the UPenn course (Monads). I hope to finish it during the weekend.
  • I started with reading Typeclassopedia, in the hope of getting comfortable with Functors and Applicatives and to get introduced to Monads. But, I got distracted before I got to the end of the part on Functors.
  • During the check-ins, Laura and Denise mentioned that they are both facing problems with OAuth, and would like to pair on it. I decided to join them, since I've had reasonable luck with OAuth, though I knew I didn't understand it very well. While they were working on getting it to work on OSX, I was trying to write a simple Python example to do it, and was getting a weird error about the response_type being not supported. I was using rauth in a way very similar to what I had done for statiki but the Hacker School API server wasn't letting me through. I could debug it only a little before lunch, and a little bit after lunch. And realized that the response_type had to be one of code or token and not json or empty. But this is a required parameter, and I expected rauth to do the right thing! I got back to it at the end of the day, and went through the RFC for OAuth2 and wrote up a simple Python script to implement the whole thing, without using any 3rd party oauth libraries. I think I understand the whole thing much better now, and will soon write up a blog post on it.
  • I spent about an hour or so on reviewing Nava's code (along with Tom, Amber and Patricia), that generated and solved mazes. We tried to make small incremental changes to her code, and improve it, hopefully giving her a sense of how to make the code more intentional.
  • Thursday evening presentations! People here have been working on such cool stuff! Maze solvers and percolation probability calculators, phone gap based mobile applications, a cool Midi based music generator, an emulator for MSP430 in Clojure, an event logger in ObjectiveC that can log to a web server and can be used by multiple clients to debug communication related issues, a HTTP server written from Scratch, a web server in Swift, a pattern matching based library in js, a heuristics based puzzle solver, and a web editor for jekyll! Holy cow! These presentations are extremely inspiring and will probably be the thing I look forward to the most, for the next 10 weeks.
  • I can't believe it's already end of week 2. 10 more to go!

Recurse Center, 2014-06-18

  • Amber talked about "exploring only until the current task is done" and moving on, which is could really be a lost opportunity to learn something new and gain a better understanding of the system I am working with.
  • Having something (anything not directly related to the current project I'm working on) scheduled for later in the day, doesn't seem to do me much good. I feel distracted for quite a long period before the scheduled time.
  • Abstractions and layers were talked about in the second exercise on Applicatives… Layering, FTW!
  • I spent about an hour or so in the afternoon reading the paper, One VM to rule them all. It talked about Truffle: an API to implement an AST parser for any language and Graal: a JIT compiler for the ASTs. Later in the day, I also went to the Papers we love meetup. The presentation and the talks were quite interesting!
  • I also started looking at Elm and playing with it.

Recurse Center, 2014-06-17

  • I've been bookmarking the interesting links that people post on Zulip and have a lot of reading to do. It would be nice if I had an easy way to send stuff on to my kindle. (pdfs, html, etc.). Instapaper works, but doesn't work as well as I would like it to. I just want a simple script that takes a list of urls and does the right thing. May be I will write something that uses Calibre, or even better someone already has.
  • I worked through exercises 08 and 10 of the haskell course, yesterday.
  • Chapter 8 was about how IO works in haskell. The exercise didn't involve too much, except I wasted a lot of time on tracking a stupidity of mine.
  • The next part of the course was an introduction to Functors, Applicative and Alternative. I'm not sure I totally understand and am comfortable with them, but I have been able to get through the exercises.
  • I think it's time for me to start working on some Elm tutorials, along with the Haskell exercises.
  • Also, I had questions about when to use type, newtype and data and incidentally found this section that ended with the following summary: "If you just want your type signatures to look cleaner and be more descriptive, you probably want type synonyms. If you want to take an existing type and wrap it in a new type in order to make it an instance of a type class, chances are you're looking for a newtype. And if you want to make something completely new, odds are good that you're looking for the data keyword."

Recurse Center, 2014-06-16

  • Didn't do anything during the weekend. Hopefully, this won't be the case all of the weekends. I had fun with my cousins, though.
  • Denise is already working on a twitter app that sounds similar to the idea I had.
  • I accidentally discovered that evince supports vim-like keybindings, which is cool.
  • When writing patterns for a function it helps to write the most general case first, and then write the edge cases.
  • I was feeling a little unproductive in the afternoon and I ended up attending Zach's talk on Community. I got a brief overview of the whole architecture, and got to know a little bit about reactjs and om. I don't think I'll get around to contributing to the project, since most of the stack is totally new to me, and I'm not particularly inclined to learn those things now.
  • I was working on Monoids for most part of the day and got through exercise 7. I started doing the I/O exercise around the end of the day.
  • The day ended with a talk on jobs related stuff by Nick and Sonali. It seems super unlikely for me to get a job (in the US), from what I understood from them. So, I needn't worry too much about that and focus on getting better at Haskel and as a programmer in general.

Recurse Center, 2014-06-12

  • Came to know about the project that Tom is working on for being able to auth integration of GitHub and Hacker School. This will be useful for me, when I get to working on the GitHub dashboard.
  • I spent an hour or so to clean up by blog workflow and help scripts to insert tags in Nikola posts, etc. I also have a script to make a post for each day, automatically.
  • lolcommit is an interesting project, and Max is using it for logging his work at Hacker School.
  • Learned about laziness and the consequences of it. You cannot have side-effects, in a lazy language, if you want to keep the sanity of the developers using your language.
  • Pattern matching forces evaluation.
  • Also, briefly read about seq, halting problem and bottom from the Haskell wiki.
  • The week ended with presentations by Hacker Schoolers from this batch. It was also Alum day, so we had some Alumni visiting. I missed half of the presentations because I had to leave early for Suguna's graduation.

I hope to continue to do some work on the tutorials during the weekend, and get back to it and finish them next week.

Recurse Center, 2014-06-11


Continue with the Haskell tutorials, with additional reading from Real World Haskell.


  • Finished exercises 4 and 5.
    • Learnt about Type classes in Haskell and how to create them and make data types instances of them.
    • Also came across a new algorithm of sieving called the Sieve of Sundaram, which was discovered by a student. Surprisingly, I never heard of it before!


  • A few of us had an interesting discussion about various places people grew up in and visited, and the cultures, etc.
  • Idea: implement a GitHub dashboard for organizations (say, HS batches) that give you different statistics, and interesting graphs. (Use elm?) [Update: Tom is working on HS and GitHub integration. So, that's perfect!]

Recurse Center, 2014-06-10

I came super early to try and get some work done in the quiet before the daily checkins time. Continued with the Haskell tutorial and reading the Real World Haskell.

Finished a couple of exercises from the UPenn course, that were pretty straight forward.

Also, finished a few exercises from chapter 3 of real world haskell, and partially finished implementing Graham scan for generating a convex hull for a set of points.

The exercises from both the places involved mainly learning about Algebraic Data Types.

Mary pinged me to ask how the first couple of days were, and it was good to talk to get a ping from her though I never talked to her.

I'm going to continue working on the Haskell exercises today.

I also got a couple of ideas for small projects:

  • Since, yelp is blocked from here, nobody can use yelp's API and work on any projects. It may be helpful to have an API proxy server that runs on a different server and forwards any requests coming to it.
  • A simple script to create a twitter list for each batch of Hacker School.

Doing them in Python would be pretty straight forward. I will try to work on these things in Haskell, once I'm reasonably comfortable with Haskell.

Recurse Center, 2014-06-09

Finally, I'm at Hacker School. The day began with introductions, breakfast and welcomes to HackerSchool.

The four rules of Hacker School were reiterated to all of us:

  • No (Feigning) surprise
  • No Well-actuallys
  • No Backseat driving
  • No Subtle-isms

It was made clear that each of us should watch ourselves not to break these rules, and being called on breaking these rules is totally cool, and we should stop about it and think for a moment and move-on. Breaking the rules doesn't make us bad hacker schoolers. We are all here to learn!

I liked the idea of all of us being asked to list out the things that we are nervous about, and excited about. I was happy to find that a lot of the people were nervous about the similar kinds of things I was nervous about. I'm not alone!

After the check-ins, I started off with the Introduction to Haskell course by Brent Yorgey. What I did was mostly a recap of what I learned from the first few chapters of Learn you a Haskell. I learnt about how credit card numbers are validated, apart from learning a little bit about lazy evaluation and thunks.

The day ended with burritos and game night Mafia!

Bookmarks [2014-06-10]

  • Marss86

    MARSSx86 (MARSS for short) is a tool for cycle accurate full system simulation of the x86-64 architecture, specifically multicore implementations. Our goal is to create a simple yet efficient full system architectural simulation environment based on existing tools.

  • What 50 pounds of clay can teach you about design — Medium

    while the “quantity” group was busily churning out piles of work”and learning from their mistakes”the “quality” group had sat theorizing about perfection, and in the end had little more to show for their efforts than grandiose theories and a pile of dead clay.

  • metablog: Why I don't mock

    So don't mock. Because it's impolite to not listen to what your code is trying to tell you.

  • Where's the value in open source? |

    Open source is about the people involved. Code can be replaced, re-written, even removed completely, and the project will continue to move forward. The open source community is made up of people who have dedicated their time and their life to see its success.

  • I Recommend These for Learning Haskell

    A friend of mine recommends reading 3 calculus books to learn calculus. I generalize it to reading from 3 sources to learn anything. I also postulate a law: the 3rd source you read is the best.