<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Michele Pratusevich, a pathological dilettante</title>
 <link href="https://mprat.org/atom.xml" rel="self"/>
 <link href="https://mprat.org"/>
 <updated>2023-02-15T15:11:39+00:00</updated>
 <id>https://mprat.org</id>
 <author>
   <name>Michele Pratusevich</name>
   <email>michele.pratusevich@gmail.com</email>
 </author>

 
 <entry>
   <title>Favorite Podcasts 2019-2021</title>
   <link href="https://mprat.org/blog/2021/10/18/podcasts-list.html"/>
   <updated>2021-10-18T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2021/10/18/podcasts-list</id>
   <content type="html">&lt;p&gt;What is now becoming an annual tradition, here is my list of favorite podcasts from 2019-2021. See my past posts for comparison:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/blog/2017/02/15/podcasts-list.html&quot;&gt;2016-2017&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/blog/2018/08/17/podcasts-list.html&quot;&gt;2017-2018&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/blog/2020/02/09/podcasts-list.html&quot;&gt;2018-2019&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ve combined my 2019, 2020, and 2021 lists, since I (like many of us) was driving much much less, and therefore had less time to listen to podcasts. I didn’t particularly like this change of events (I really like podcasts!) but it meant I shifted my podcast focus a little bit.&lt;/p&gt;

&lt;p&gt;This list is organized by category and annotated with average podcast length and a “seriousness scale.”&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;&lt;strong&gt;Stories / long form journalism:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is by far my favorite kind of podcast format, tried and true. I devour this stuff, adding a few new podcasts in the regular mix from last year.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://www.earhustlesq.com/&quot;&gt;Ear Hustle&lt;/a&gt; - This is the most unique podcast I’ve definitely heard. It is produced by an inmate in San Quentin prison in CA (together with Radiotopia) all about live in prison. Most of the episodes are serious, but they are absolutely riveting.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;https://wondery.com/shows/even-the-rich/&quot;&gt;Even The Rich&lt;/a&gt; - The various seasons take story arcs through the rich and powerful - what makes them tick, what is their downfall, what are their stories behind the scenes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How the world works:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Who doesn’t love analysis of social behavior? This list is identical to last year’s - these podcasts are timeless, my absolute favorites.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;http://freakonomics.com/hours/&quot;&gt;Freakonomics&lt;/a&gt; - From the authors of the popular book &lt;a href=&quot;http://amzn.to/2kAaLr9&quot;&gt;Freakonomics&lt;/a&gt;, they dive into why certain trends exist in the world from the perspective of economics. Very accessible to any audience, and I always come away learning something.&lt;/li&gt;
  &lt;li&gt;(20 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;http://www.npr.org/podcasts/510289/planet-money&quot;&gt;Planet Money&lt;/a&gt; - Another NPR podcast talks about stories related to the economy, spending, or money, but tells it in an easy way that is engaging to listen to.&lt;/li&gt;
  &lt;li&gt;(30 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://www.npr.org/sections/codeswitch/&quot;&gt;Code Switch&lt;/a&gt; - Gene and Shereen from NPR take on race in America. They discuss various topics related to race, always respectfully, and always from the heart.&lt;/li&gt;
  &lt;li&gt;(30 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://www.npr.org/podcasts/510324/rough-translation&quot;&gt;Rough Translation&lt;/a&gt; - The host talks about foreign stories, told in the context of different cultures. You don’t hear these kinds of stories in American news!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Science and technology:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(20 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;http://www.npr.org/podcasts/510308/hidden-brain&quot;&gt;Hidden Brain&lt;/a&gt; - An NPR podcast that talks about a human behavior phenomenon and attempts to explain it from the perspective of sociology, psychology, or neuroscience. The episodes are told in story format, and you come away thinking about how the episode might apply to your own life.&lt;/li&gt;
  &lt;li&gt;(30 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;https://cd.foundation/podcast/&quot;&gt;The Pipeline: All Things CD &amp;amp; DevOps&lt;/a&gt; - I wanted to get a bit more knowledge into casual topics in CI/CD over the last year or so, and I found this podcast (by the Linux Foundation) engaging and interesting. Topics are varied, and there are often guest speakers with interesting ideas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Home &amp;amp; Garden:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(10 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;https://www.epicgardening.com/podcast/&quot;&gt;Epic Gardening&lt;/a&gt; - Kevin the host talks excitedly about short topics related to home gardening. The topics are varied, and just short enough to keep up with almost daily!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enjoy! What podcasts do you like?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Favorite Podcasts 2018-2019</title>
   <link href="https://mprat.org/blog/2020/02/09/podcasts-list.html"/>
   <updated>2020-02-09T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2020/02/09/podcasts-list</id>
   <content type="html">&lt;p&gt;What is now becoming an annual tradition, here is my list of favorite podcasts from 2018-2019. See my &lt;a href=&quot;/blog/2017/02/15/podcasts-list.html&quot;&gt;2016-2017 post&lt;/a&gt; and &lt;a href=&quot;/blog/2018/08/17/podcasts-list.html&quot;&gt;2017-2018 post&lt;/a&gt; for comparison!&lt;/p&gt;

&lt;p&gt;I am still driving to work, but less often now, so there are not too many additions to my classics from last year.&lt;/p&gt;

&lt;p&gt;As usual, this list is organized by category and annotated with average podcast length and a “seriousness scale.”&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;I have listened to many podcasts and have wasted a few hours listening to some pretty bad ones. Here are some of my favorites - I hope you find something you’re looking for!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stories / long form journalism:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is by far my favorite kind of podcast format, tried and true. I devour this stuff, adding a few new podcasts in the regular mix from last year.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;http://www.radiolab.org/&quot;&gt;Radiolab&lt;/a&gt; - When you think of long-from journalism and storytelling in audio form you think of Radiolab. In a single episode you will experience all emotions from rock bottom to giddy top, all through a single theme or story the hosts tell in a jam-packed 40 minutes. Not for the faint of heart - the topics they cover are often serious and will make you think.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://www.earhustlesq.com/&quot;&gt;Ear Hustle&lt;/a&gt; - This is the most unique podcast I’ve definitely heard. It is produced by an inmate in San Quentin prison in CA (together with Radiotopia) all about live in prison. Most of the episodes are serious, but they are absolutely riveting.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://wondery.com/shows/we-crashed/&quot;&gt;We Crashed: The Rise and Fall of WeWork&lt;/a&gt; - After WeWork went up in a firey ball of investor losses, Wondery made a podcast to explore exactly why. I love long-form journalism and storytelling, so this fits my style perfectly.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://www.stitcher.com/podcast/cadence13/gangster-capitalism&quot;&gt;Gangster Capitalism&lt;/a&gt; - An in-depth story about the college admission’s scandal from 2018 and the mastermind behind it, it is a serious story about rich families and college admissions. I personally was not satisfied with the ending, but the story was a great one to listen to.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How the world works:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Who doesn’t love analysis of social behavior? This list is identical to last year’s - these podcasts are timeless, my absolute favorites.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;http://freakonomics.com/hours/&quot;&gt;Freakonomics&lt;/a&gt; - From the authors of the popular book &lt;a href=&quot;http://amzn.to/2kAaLr9&quot;&gt;Freakonomics&lt;/a&gt;, they dive into why certain trends exist in the world from the perspective of economics. Very accessible to any audience, and I always come away learning something.&lt;/li&gt;
  &lt;li&gt;(20 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;http://www.npr.org/podcasts/510289/planet-money&quot;&gt;Planet Money&lt;/a&gt; - Another NPR podcast talks about stories related to the economy, spending, or money, but tells it in an easy way that is engaging to listen to.&lt;/li&gt;
  &lt;li&gt;(30 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://www.npr.org/sections/codeswitch/&quot;&gt;Code Switch&lt;/a&gt; - Gene and Shereen from NPR take on race in America. They discuss various topics related to race, always respectfully, and always from the heart.&lt;/li&gt;
  &lt;li&gt;(30 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://www.npr.org/podcasts/510324/rough-translation&quot;&gt;Rough Translation&lt;/a&gt; - The host talks about foreign stories, told in the context of different cultures. You don’t hear these kinds of stories in American news!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Science and technology:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(20 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;http://www.npr.org/podcasts/510308/hidden-brain&quot;&gt;Hidden Brain&lt;/a&gt; - An NPR podcast that talks about a human behavior phenomenon and attempts to explain it from the perspective of sociology, psychology, or neuroscience. The episodes are told in story format, and you come away thinking about how the episode might apply to your own life.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;http://creative.gimletmedia.com/shows/dtr/&quot;&gt;Reply All&lt;/a&gt; - This podcast claims to be about the internet. Really, it’s about interesting stories that are facilitated by the internet, discussing weird technological glitches, crowdsourcing miracles, memes, and much much more. The hosts are very entertaining, but I give this a &lt;em&gt;serious&lt;/em&gt; rating because the topics discussed are often deep.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Food:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is a new category added for 2018-2019. I’ve been getting more into cooking, food, and baking, and my podcast preferences reflect that.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;https://www.iheart.com/podcast/105-savor-28019899/&quot;&gt;Savor&lt;/a&gt; - The two hosts love food, and talk about the history of food, where it comes from, and what is interesting about it. It combines trivia, history, and food - 3 of my favorite things. The two hosts also have a great rapport, and their banter makes things interesting!&lt;/li&gt;
  &lt;li&gt;(25 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;https://www.traderjoes.com/digin/post/inside-tjs-podcast&quot;&gt;Inside Trader Joe’s&lt;/a&gt; - This is a branded podcast from Trader Joe’s talking about how they run their business. Good thing it’s centered around food! Trader Joe’s has a unique business model and a unique approach to food, so it combines business and food from the inside. Unlike other branded podcasts, this is NOT an advertisement for Trader Joe’s.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enjoy! What podcasts do you like?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Lasercutter Memes</title>
   <link href="https://mprat.org/blog/2019/04/18/lasercutter-memes.html"/>
   <updated>2019-04-18T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2019/04/18/lasercutter-memes</id>
   <content type="html">&lt;p&gt;I recently got trained on the lasercutter at &lt;a href=&quot;http://artisansasylum.com/&quot;&gt;Artisan’s Asylum&lt;/a&gt; and wanted to do a project! Thankfully, my friend &lt;a href=&quot;https://www.emiliejosephs.com/&quot;&gt;Emilie&lt;/a&gt; had just the thing.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h4 id=&quot;memes&quot;&gt;Memes&lt;/h4&gt;

&lt;p&gt;Memes (i.e. units of culture) have been on the internet for so long that some people are starting to print them out to share. I hear this is getting especially common in nursing homes or retirement communities, but I read that on the internet so I don’t know.&lt;/p&gt;

&lt;p&gt;What we did instead was etch a meme instead of print it out! It took a few tries to get all the etched settings right, but it turned out great. This involved importing the PNG into &lt;a href=&quot;https://inkscape.org/&quot;&gt;Inkscape&lt;/a&gt;, tracing the bitmap, and cleaning it up to make a printable SVG.&lt;/p&gt;

&lt;h4 id=&quot;the-final-product&quot;&gt;The Final Product&lt;/h4&gt;

&lt;p&gt;Personally, I think it looks gorgeous:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/manatee.jpg&quot; alt=&quot;Manatee picture&quot; class=&quot;post-pic&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Protecting Yourself Against rm</title>
   <link href="https://mprat.org/blog/2018/10/26/protecting-against-rm.html"/>
   <updated>2018-10-26T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2018/10/26/protecting-against-rm</id>
   <content type="html">&lt;p&gt;Those who use the command-line on GNU/Linux operating systems know and love &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rm&lt;/code&gt;. But it also comes with so much power! No one wants to accidentally &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rm -rf&lt;/code&gt; the company data. To prevent myself from doing this on our data server, I aliased &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rm&lt;/code&gt; to something more sensible.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;First, I created a shell script &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/are_you_sure_rm.sh&lt;/code&gt; in my home directory. The file was pretty simple:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#!/bin/bash

echo &quot;You just tried to do rm.
If you really meant to do so, then type /bin/rm followed
by what you want to do. It will be unprotected.
It is recommended you do /bin/rm -i for interactive mode.&quot;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Next, I made it executable:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;chmod +x ~/are_you_sure_rm.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Lastly, I added an alias for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rm&lt;/code&gt; to the native shell by adding this line to my &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.bash_aliases&lt;/code&gt; file.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# make sure to prompt on every removal of a file
alias rm=&quot;~/are_you_sure_rm.sh&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After logging out and back in, my new superpower is activated.&lt;/p&gt;

&lt;p&gt;Now every time I try to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rm&lt;/code&gt; something when SSHed into the company data server, my shell warns me! Amazing!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Why I Left Amazon</title>
   <link href="https://mprat.org/blog/2018/09/03/why-i-left-amazon.html"/>
   <updated>2018-09-03T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2018/09/03/why-i-left-amazon</id>
   <content type="html">&lt;p&gt;Friday August 17, 2018 was my last day at &lt;a href=&quot;https://www.amazon.com/b?ie=UTF8&amp;amp;node=16008589011&quot;&gt;Amazon Go&lt;/a&gt; as an Applied Research Scientist II. The following Monday August 20th, 2018 was my first day at my new job as Senior Machine Learning Engineer at &lt;a href=&quot;https://root-ai.com/&quot;&gt;Root.ai&lt;/a&gt;. Deciding to leave Amazon was not an easy decision, and I wanted to share my personal reasons for leaving Amazon, both for myself for the future and for others in similar situations.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;There are many reasons to leave a job, but ultimately it boils down to one thing: are you running FROM something or running TO something? For me, the decision to leave Amazon was not because of anything at Amazon, but because of the opportunity I was given a chance to run towards. I was definitely running TOWARDS my new job at Root.&lt;/p&gt;

&lt;h4 id=&quot;what-i-did-at-amazon&quot;&gt;What I did at Amazon&lt;/h4&gt;

&lt;p&gt;I spent a total of 2.5 years at Amazon. I joined after working for almost a year at an ultimately unsuccessful startup. At the time, I wanted to cut my teeth at research, and a big company like Amazon was going to be a good place to take a risk on doing research; a startup simply didn’t have the luxury of taking a risk on a new engineer eager to do research. I was also looking for mentorship and a professional network - I wanted to see how things could be done well. So the leap of faith between me and Amazon was mutual; I was given the title Applied Research Scientist (after a few months of asking nicely) despite not having a PhD, and in return I was expected to do world-class research.&lt;/p&gt;

&lt;p&gt;My primary responsibility was to invent new algorithms, techniques, and processes for understanding the world around us. As an &lt;em&gt;applied&lt;/em&gt; research scientist (as opposed to just a plain old research scientist) I was also expected to take these new algorithms and apply them to problems faced by Amazon, which often meant collaborating with engineers to put the algorithms into production code. In practice, you really could only do one of those two things: you were either the researcher who couldn’t write code, or the coder who wasn’t great at research. My strength is adapting to the needs of the situation as they arise, and my strength to flow between doing and researching mode was not given a chance to flourish.&lt;/p&gt;

&lt;p&gt;In my time at Amazon, I succeeded at my two primary goals: getting mentorship (check) and learning how research works at a big company (check). In the process, I have made professional connections that I will carry with me for years to come, and on the research side I got an &lt;a href=&quot;https://arxiv.org/abs/1806.05779&quot;&gt;ArXiV paper&lt;/a&gt; in the process.&lt;/p&gt;

&lt;h4 id=&quot;nagging-feeling&quot;&gt;Nagging Feeling&lt;/h4&gt;

&lt;p&gt;When I first took the job at Amazon, I did not know whether I would be the kind of person who climbs the corporate ladder and makes a corporate career at one place. Most of my peers from MIT did NOT follow this path, and honestly, that made me want to try it even more. My peer role models put startups and “working for yourself” on a pedestal, but I wanted to see for myself why that was the case. At 22 years old after my Master’s, I just didn’t know enough about the world to know what I wanted. So I did what any engineer would do: I experimented. In Amazon’s terms, I took a &lt;em&gt;bias for action&lt;/em&gt; and went for it. I took the corporate job to see what it was like, learn what it means to do research in a corporate setting, and get mentorship for the future.&lt;/p&gt;

&lt;p&gt;The offer I got from Amazon was very tempting: secret project out of a research group in the Boston area to work in a mixed hardware / software research problem with engineers and leaders at all levels. The pay was good, the benefits were better than the non-existent benefits I had at the startup before, and it hit my top-2 goal wish list. Besides, I had a good gut feeling about my would-be boss. And we all know that that’s often the most important thing. However, there were two big downsides:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;I would have to commute 50+ minute by car one way. I didn’t own a car (easily fixable), and that was a LOT of lost time. I was not sure how important this was to me at the time.&lt;/li&gt;
  &lt;li&gt;I did not know what the project was. I did not find out what we were working on (back then it wasn’t even called Amazon Go) until my first day on the job.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first issue, the commute, I thought would be outweighed by all the benefits of working at Amazon. For the better part of 2.5 years, I was right about that.&lt;/p&gt;

&lt;p&gt;The second issue, the project, I knew I was taking a risk. My previous job (at Ditto Labs) had been in image and video analytics, which I was not passionate about. In contrast, before my MEng I had worked at &lt;a href=&quot;http://meet.mit.edu/&quot;&gt;MEET&lt;/a&gt;, where the mission and the core of what we were doing informed everything we were doing. Comparing those two experiences, at MEET I was excited to come to work every day, even when it was hard (there was literally a war towards the end of my stay in Israel). At Ditto, when things got tough, it was hard to find a foundation to fall back on. In hindsight, I should have known this would eventually be an issue.&lt;/p&gt;

&lt;p&gt;On my first day at Amazon, I found out we were revolutionizing shopping, and my hopes sank a little bit. I was simply not passionate about optimizing or improving shopping. From day one, this nagged at me. However, it didn’t rear it’s ugly head until I contemplated leaving.&lt;/p&gt;

&lt;p&gt;Throughout my time at Amazon, I focused on learning the most I could while adding the most value that I could. I took on projects that I thought were interesting, even proposing my own project that eventually led to the ArXiV paper, despite my lack of passion about physical retail. I still felt like I was adding value to the company and the group every day through my work. My focus was really on learning the most I could about what kind of work excited me, and it didn’t matter what problems I worked on to achieve that goal.&lt;/p&gt;

&lt;h4 id=&quot;finding-root&quot;&gt;Finding Root&lt;/h4&gt;

&lt;p&gt;When a recruiter contacted me out of the blue about a robotics opportunity in the farming sector, I was more excited than I should have been. The nagging feeling about not working on something I believed in stood up in full force. I was reminded of my work with MEET years ago, when I felt excited to be coming to work every day not because of the work but because of the mission and the long-term vision. With Root, I was excited by the prospect of being on board with a larger vision of improving the world.&lt;/p&gt;

&lt;p&gt;Leaving Amazon was not running away from a “bad opportunity” at Amazon, by no means. It was running towards an opportunity where I could be at my best, to a company with a mission that excited me. At Root, I could be both an engineer and a researcher (I didn’t have to choose or check a box), and I could do it fluidly while creating tangible, move-the-needle value from day one.&lt;/p&gt;

&lt;h4 id=&quot;summary&quot;&gt;Summary&lt;/h4&gt;

&lt;p&gt;Root and Amazon could not be more different. But then again, I was approaching the two jobs at different points in my life, and I was a different person than I was 2.5 years ago. At Root, I was employee number 5 (if you count the co-founders). In my group at Amazon, I was employee number 13 (but by the time I left, I was the 6-th most senior group member, because of attrition). But overall, what I really was doing was running towards an opportunity that hit better with my career trajectory and my strength.&lt;/p&gt;

&lt;p&gt;To summarize my reasons for leaving:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I was running towards an opportunity where I believed in the mission and long-term vision of the company.&lt;/li&gt;
  &lt;li&gt;In my new role I was fluidly moving between research and engineering, without being pigeon-holed into a single role.&lt;/li&gt;
  &lt;li&gt;In my new role I am responsible for making company-wide recommendations for computer vision and machine learning. My choices would directly impact the company’s future.&lt;/li&gt;
  &lt;li&gt;My commute was shortened from 50+ minutes by car to 10 minutes by bike.&lt;/li&gt;
  &lt;li&gt;If I were to found my own company one day, being closer to the founders / venture capital money was a valuable career move.&lt;/li&gt;
  &lt;li&gt;I was ready to move from the “learn a lot” phase to the “do a lot” and “make a lot of mistakes” phase of my career.&lt;/li&gt;
  &lt;li&gt;In Amazonian terms, I was ready to step up my &lt;em&gt;ownership&lt;/em&gt; game to the next level.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My reasons for leaving, like many before me, were personal. Your own mileage may vary. If anyone is in a similar predicament and wants to get in touch to discuss career trajectories, please feel free to get in touch.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Blogging with Jupyter for Learning Julia Part 2</title>
   <link href="https://mprat.org/blog/2018/08/25/blogging-with-jupyter-part-2.html"/>
   <updated>2018-08-25T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2018/08/25/blogging-with-jupyter-part-2</id>
   <content type="html">&lt;p&gt;I’ve previously posted about &lt;a href=&quot;/blog/2017/03/18/blogging-with-jupyter.html&quot;&gt;Blogging with Jupyter&lt;/a&gt; in a previous post. For the &lt;a href=&quot;http://learningjulia.com/2018/08/25/image-stitching-part-2.html&quot;&gt;latest post on LearningJulia&lt;/a&gt; I needed one additional feature: LaTeX equation numbering in Jupyter. Here’s how I got that to work.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h4 id=&quot;getting-latex-equation-numbering-in-jupyter-notebooks&quot;&gt;Getting LaTeX Equation Numbering in Jupyter Notebooks&lt;/h4&gt;

&lt;p&gt;LaTeX natively supported in Markdown editing in a Jupyter notebook through MathJax. Getting it to work in Jupyter notebooks involves installing the &lt;a href=&quot;https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/index.html&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jupyter_contrib_nbextensions&lt;/code&gt;&lt;/a&gt; package.&lt;/p&gt;

&lt;p&gt;These instructions are taken from the &lt;a href=&quot;https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/install.html&quot;&gt;official install docs&lt;/a&gt;, and they worked for me.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
jupyter nbextension enable equation-numbering/main
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then, restarting the jupyter kernel enables the extension. To get the numbered equations to show up in a markdown notebook, just use LaTeX syntax:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;\begin{equation}
H u - v = 0
\end{equation}

\begin{equation}
\begin{bmatrix}
h_1 &amp;amp; h_2 &amp;amp; h_3 \\
h_4 &amp;amp; h_5 &amp;amp; h_6 \\
h_7 &amp;amp; h_8 &amp;amp; h_9
\end{bmatrix}\begin{bmatrix}
u_1 \\ u_2 \\ 1
\end{bmatrix}
-
\begin{bmatrix}
v_1 \\ v_2 \\ 1
\end{bmatrix} = 0
\end{equation}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This is the result!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/jupyter_notebook_eqn_numbers.jpg&quot; alt=&quot;Jupyter notebook equation numbering&quot; class=&quot;post-pic&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The only downside of this extension is that every time you re-compile a cell with equation numbering, the numbers keep incrementing. The good part is that the extension comes with a way to fix this problem: a little widget at the top of the notebook appears. When you click it, the numbering is restarted:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/jupyter_eqn_renumbering.jpg&quot; alt=&quot;Renumbering widget&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Pretty cool, right?&lt;/p&gt;

&lt;h4 id=&quot;getting-latex-equation-numbering-in-nbconvert&quot;&gt;Getting LaTeX Equation Numbering in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nbconvert&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;Automatically, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nbconvert&lt;/code&gt; will apply these new extensions. The one thing it won’t do is apply the correct MathJax settings in the style. To do that, all I needed was to add these lines:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;script type=&quot;text/x-mathjax-config&quot;&amp;gt;
MathJax.Hub.Config({
    TeX: {
        equationNumbers: { autoNumber: &quot;AMS&quot; }
    }
});
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;to the exported &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.html&lt;/code&gt; file after running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nbconvert&lt;/code&gt;. And the result works great!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/jupyter_eqn_final.jpg&quot; alt=&quot;Final output of numbering&quot; class=&quot;post-pic&quot; /&gt;&lt;/p&gt;

&lt;p&gt;You can read the full blog post &lt;a href=&quot;http://learningjulia.com/2018/08/25/image-stitching-part-2.html&quot;&gt;here&lt;/a&gt; to learn what all these equations mean.&lt;/p&gt;

&lt;h4 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h4&gt;

&lt;p&gt;I hope this helps someone else, or at the very least, future me!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Favorite Podcasts 2017-2018</title>
   <link href="https://mprat.org/blog/2018/08/17/podcasts-list.html"/>
   <updated>2018-08-17T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2018/08/17/podcasts-list</id>
   <content type="html">&lt;p&gt;As I move from a driving commute to a biking commute, I anticipate my podcast consumption to decrease over the coming years. As a followup to my &lt;a href=&quot;/blog/2017/02/15/podcasts-list.html&quot;&gt;previous post&lt;/a&gt; of podcasts I listen to from 2016-2017, here is the 2017-2018 list, organized by category and annotated with average podcast length and a “seriousness scale.”&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;I have listened to many podcasts and have wasted a few hours listening to some pretty bad ones. Here are some of my favorites - I hope you find something you’re looking for!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stories / long form journalism:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is by far my favorite kind of podcast format, tried and true. I devour this stuff, adding a few new podcasts in the regular mix from last year.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;http://www.radiolab.org/&quot;&gt;Radiolab&lt;/a&gt; - When you think of long-from journalism and storytelling in audio form you think of Radiolab. In a single episode you will experience all emotions from rock bottom to giddy top, all through a single theme or story the hosts tell in a jam-packed 40 minutes. Not for the faint of heart - the topics they cover are often serious and will make you think.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;http://www.wnyc.org/shows/deathsexmoney&quot;&gt;Death, Sex, &amp;amp; Money&lt;/a&gt; - From WNYC studios, the host picks a topic in the realm of human existence (which can be summarized by either death, sex, or money), and though a series of short stories strung together to form a longer story, dives deep into the personal nitty-gritty. Once in a while an episode is light-hearted, but often it is a serious discussion of all sorts of issues related to the human experience.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://audioboom.com/channel/covert&quot;&gt;Covert&lt;/a&gt; - Stories of the most dangerous military operations of all time from various different governments. The episodes often come in two parts and will keep you on your toes the entire time!&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://www.earhustlesq.com/&quot;&gt;Ear Hustle&lt;/a&gt; - This is the most unique podcast I’ve definitely heard. It is produced by an inmate in San Quentin prison in CA (together with Radiotopia) all about live in prison. Most of the episodes are serious, but they are absolutely riveting.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://audioboom.com/channel/mafia&quot;&gt;Mafia&lt;/a&gt; - These are long-form stories about historical mafia figures from American history, their stories, and how they got caught.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How the world works:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Who doesn’t love analysis of social behavior? This list is nearly identical to last year’s - these podcasts are timeless.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;http://freakonomics.com/hours/&quot;&gt;Freakonomics&lt;/a&gt; - From the authors of the popular book &lt;a href=&quot;http://amzn.to/2kAaLr9&quot;&gt;Freakonomics&lt;/a&gt;, they dive into why certain trends exist in the world from the perspective of economics. Very accessible to any audience, and I always come away learning something.&lt;/li&gt;
  &lt;li&gt;(20 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;http://www.npr.org/podcasts/510289/planet-money&quot;&gt;Planet Money&lt;/a&gt; - Another NPR podcast talks about stories related to the economy, spending, or money, but tells it in an easy way that is engaging to listen to.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;http://www.wnyc.org/shows/radiolabmoreperfect&quot;&gt;More Perfect&lt;/a&gt; - The creators of Radiolab decided to make a serious podcast that dove into the legal cases that form the precedents for how the US Supreme Court and justice system work. As of this writing there is only one season, but each episode dives into a story about a seminal but little-know Supreme Court justice or court case from American history.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://99percentinvisible.org/&quot;&gt;99% Invisible&lt;/a&gt; - Roman Mars takes on the underlying design and architecture of our world. The descriptions are detailed and very interesting!&lt;/li&gt;
  &lt;li&gt;(30 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://www.npr.org/sections/codeswitch/&quot;&gt;Code Switch&lt;/a&gt; - Gene and Shereen from NPR take on race in America. They discuss various topics related to race, always respectfully, and always from the heart.&lt;/li&gt;
  &lt;li&gt;(30 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://www.npr.org/podcasts/510324/rough-translation&quot;&gt;Rough Translation&lt;/a&gt; - The host talks about foreign stories, told in the context of different cultures. You don’t hear these kinds of stories in American news!&lt;/li&gt;
  &lt;li&gt;(20 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;http://creative.gimletmedia.com/shows/why-we-eat-what-we-eat/&quot;&gt;Why We Eat What We Eat&lt;/a&gt; - Short anecdotes about food and eating habits. Unfortunately it doesn’t seem like they are producing any new episodes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Trivia:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unfortunately in this category, I have not found any good podcasts! My perennial favorite, &lt;a href=&quot;http://www.goodjobbrain.com/&quot;&gt;Good Job Brain!&lt;/a&gt;, has stopped producing new episodes, and it turns out that &lt;a href=&quot;http://qi.com/podcast/&quot;&gt;No Such Thing As A Fish&lt;/a&gt; perfectly puts me to sleep!&lt;/p&gt;

&lt;p&gt;If you have good trivia podcast recommendations, please send them my way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Science and technology:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The only big change from last year was that the Talking Machines podcast got boring, so I stopped listening!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(20 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;http://www.npr.org/podcasts/510308/hidden-brain&quot;&gt;Hidden Brain&lt;/a&gt; - An NPR podcast that talks about a human behavior phenomenon and attempts to explain it from the perspective of sociology, psychology, or neuroscience. The episodes are told in story format, and you come away thinking about how the episode might apply to your own life.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;http://creative.gimletmedia.com/shows/dtr/&quot;&gt;Reply All&lt;/a&gt; - This podcast claims to be about the internet. Really, it’s about interesting stories that are facilitated by the internet, discussing weird technological glitches, crowdsourcing miracles, memes, and much much more. The hosts are very entertaining, but I give this a &lt;em&gt;serious&lt;/em&gt; rating because the topics discussed are often deep.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Entrepreneurship:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In a change from last year, I have given up listening to this category of podcast. I decided I don’t want to buy into the internet marketing / click-bait world, and am content working in startups (where I get enough entrepreneurship).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gardening and Homesteading:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is a new category added for 2017-2018. As I’ve gotten more interested in growing my own food / local agriculture, I’ve been listening to more and more of these kinds of podcasts!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;https://livinghomegrown.com/podcast/&quot;&gt;Living Homegrown with Theresa Loe&lt;/a&gt; - Theresa Loe talks about canning, gardening, organic vegetables, etc. in an easy-to-approach away. She often does interviews with experts, who are equally approachable and explain things easily.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;https://smalltownhomestead.com/modern-homesteading-podcast/&quot;&gt;The Modern Homesteading Podcast&lt;/a&gt; - The podcast host talks about homesteading essentials, and always brings in personal anecdotes from his own homestead. Because they are personal stories, the lessons learned are real, solid advice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enjoy! What podcasts do you like?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Deep Learning Approximation</title>
   <link href="https://mprat.org/projects/neuralnets/2018/06/15/dla.html"/>
   <updated>2018-06-15T00:00:00+00:00</updated>
   <id>https://mprat.org/projects/neuralnets/2018/06/15/dla</id>
   <content type="html">&lt;p&gt;During my time at Amazon I worked on a deep learning project called Deep Learning Approximation that I got approval to &lt;a href=&quot;https://arxiv.org/abs/1806.05779&quot;&gt;publish my work on ArXiv&lt;/a&gt;.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;Deep Learning Approximation speeds up the runtime of neural networks, which is especially relevant for pay-per-compute or limited-compute embedded environments. It decouples the task of speeding up neural networks from the task of making them more accurate. It enables tuning off-the-shelf networks for runtime, to complement fine-tuning for accuracy.&lt;/p&gt;

&lt;h4 id=&quot;abstract&quot;&gt;Abstract&lt;/h4&gt;

&lt;p&gt;Neural networks offer high-accuracy solutions to a range of problems, but are costly to run in production systems because of computational and memory requirements during a forward pass. Given a trained network, we propose a techique called Deep Learning Approximation to build a faster network in a tiny fraction of the time required for training by only manipulating the network structure and coefficients without requiring re-training or access to the training data. Speedup is achieved by by applying a sequential series of independent optimizations that reduce the floating-point operations (FLOPs) required to perform a forward pass. First, lossless optimizations are applied, followed by lossy approximations using singular value decomposition (SVD) and low-rank matrix decomposition. The optimal approximation is chosen by weighing the relative accuracy loss and FLOP reduction according to a single parameter specified by the user. On PASCAL VOC 2007 with the YOLO network, we show an end-to-end 2x speedup in a network forward pass with a 5% drop in mAP that can be re-gained by finetuning.&lt;/p&gt;

&lt;h4 id=&quot;details&quot;&gt;Details&lt;/h4&gt;

&lt;p&gt;Read the full paper for all the juicy details!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Blogging with Jupyter for Learning Julia</title>
   <link href="https://mprat.org/blog/2017/03/18/blogging-with-jupyter.html"/>
   <updated>2017-03-18T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2017/03/18/blogging-with-jupyter</id>
   <content type="html">&lt;p&gt;For the &lt;a href=&quot;http://learningjulia.com&quot;&gt;Learning Julia&lt;/a&gt; blog, I use &lt;a href=&quot;http://jupyter.org&quot;&gt;Jupyter notebooks&lt;/a&gt; as my primary blogging tool. The website is generated with &lt;a href=&quot;http://jekyllrb.com&quot;&gt;Jekyll&lt;/a&gt; and hosted with &lt;a href=&quot;https://pages.github.com/&quot;&gt;Github pages&lt;/a&gt;. with a single command-line &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jupyter&lt;/code&gt; command and some custom configuration, I generate an HTML file I can embed into a Jekyll post.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h1 id=&quot;my-workflow&quot;&gt;My workflow&lt;/h1&gt;

&lt;p&gt;The workflow of a new post on &lt;a href=&quot;http://learningjulia.com&quot;&gt;Learning Julia&lt;/a&gt; is as follows:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;In a Jupyter notebook, write some Julia code&lt;/li&gt;
  &lt;li&gt;When I get to the point where I learned something, go back through the notebook and add markdown annotations and text&lt;/li&gt;
  &lt;li&gt;Convert the notebook into an HTML file&lt;/li&gt;
  &lt;li&gt;Create a new post, write the introduction, embed the HTML notebook output, and write any final thoughts or concepts&lt;/li&gt;
  &lt;li&gt;Publish!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I’ll walk you through all my steps I use and show you any custom code.&lt;/p&gt;

&lt;h1 id=&quot;steps-1-and-2-jupyter-notebooks&quot;&gt;Steps 1 and 2: Jupyter Notebooks&lt;/h1&gt;

&lt;p&gt;Launch a Jupyter notebook with the Julia kernel using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jupyter notebook&lt;/code&gt;. Code away!&lt;/p&gt;

&lt;h1 id=&quot;step-3-convert-to-html&quot;&gt;Step 3: Convert to HTML&lt;/h1&gt;

&lt;p&gt;I use &lt;a href=&quot;https://nbconvert.readthedocs.io/en/latest/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nbconvert&lt;/code&gt;&lt;/a&gt; to convert a Jupyter notebook into an HTML file. I extended the basic HTML output template to do the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Any images in the Jupyter notebook output are saved as separate images rather than base64&lt;/li&gt;
  &lt;li&gt;The image paths need to point to a URL for the Jekyll site.&lt;/li&gt;
  &lt;li&gt;Multiple outputs are collapsed into a single output cell. For example, in a line with multiple print statements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nbconvert&lt;/code&gt; comes with a set of built-in preprocessors that already do some of these tasks. For example, the &lt;a href=&quot;https://github.com/jupyter/nbconvert/blob/master/nbconvert/preprocessors/extractoutput.py&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ExtractOutputPreprocessor&lt;/code&gt;&lt;/a&gt; saves the images locally, and the &lt;a href=&quot;https://github.com/jupyter/nbconvert/blob/master/nbconvert/preprocessors/coalescestreams.py&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;coalesce_streams&lt;/code&gt;&lt;/a&gt; processor squeezes multiple outputs into a single output cell.&lt;/p&gt;

&lt;p&gt;The easiest way to set the configuration for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nbconvert&lt;/code&gt; is through a Python script. You can see the one I use here:&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/mprat/a843b08e315621d91a667124a243abeb.js?file=nbconvert_config.py&quot;&gt; &lt;/script&gt;

&lt;p&gt;I set the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ExecutePreprocessor&lt;/code&gt; as well - since I am setting the preprocessors manually I still want to make sure the entire notebook is re-executed, to preserve the input / output indices.&lt;/p&gt;

&lt;p&gt;Notice how the HTML output is written into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_includes/notebooks&lt;/code&gt; folder in the Jekyll project. The images are then saved into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;assets/imgs/{notebook_name}&lt;/code&gt; folder. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ExtractOutputPreprocessor&lt;/code&gt; by default saves images as relative paths, but we want to change them to url paths. I do this by the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jekyllurl()&lt;/code&gt; function in the template. This outputs a Liquid filter that is accessible in the &lt;a href=&quot;https://gist.github.com/mprat/a843b08e315621d91a667124a243abeb#file-jekyll-tpl&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nbconvert&lt;/code&gt; template&lt;/a&gt; I used. It is an extension of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;basic.tpl&lt;/code&gt; template, but slightly modified.&lt;/p&gt;

&lt;p&gt;You can see the filter outputs for example in line 133.&lt;/p&gt;

&lt;p&gt;The second filter, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;svg_filter&lt;/code&gt;, removes the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DOCTYPE&lt;/code&gt; lines in in-line SVGs to avoid rendering errors that look like this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/imgs/svg_template_error.png&quot; alt=&quot;SVG template error&quot; /&gt;&lt;/p&gt;

&lt;p&gt;You can see it in action on line 113 in my &lt;a href=&quot;https://gist.github.com/mprat/a843b08e315621d91a667124a243abeb#file-jekyll-tpl&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nbconvert&lt;/code&gt; template&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nbconvert&lt;/code&gt; with this configuration, do:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;	jupyter nbconvert &lt;span class=&quot;nt&quot;&gt;--config&lt;/span&gt; nbconvert_config.py PATH_TO_NOTEBOOK.ipynb&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;I am currently using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nbconvert&lt;/code&gt; version 5.1.1.&lt;/p&gt;

&lt;h1 id=&quot;step-4-create-a-new-post&quot;&gt;Step 4: Create a new post&lt;/h1&gt;

&lt;p&gt;After the conversion is done, it is saved into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_includes/notebooks/&lt;/code&gt; folder. I create a new post (with the standard Jekyll header, etc.) and include the notebook named &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;04-imfilter.html&lt;/code&gt; with:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{% include notebook/04-imfilter.html %}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;If I know Mathjax is needed in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.html&lt;/code&gt;, I make sure to add&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{% include mathjax.html %}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;to the header. You can see &lt;a href=&quot;https://gist.github.com/mprat/411d9139d79be068c44e98cfbfcf7862&quot;&gt;mathjax.html here&lt;/a&gt; - it is just a few script tags that include MathJax from its CDN.&lt;/p&gt;

&lt;p&gt;I do any extra post writing here, with some final thoughts.&lt;/p&gt;

&lt;h1 id=&quot;step-5-publish&quot;&gt;Step 5: Publish&lt;/h1&gt;

&lt;p&gt;When all is said and done, I push the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.html&lt;/code&gt; files, image files, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.markdown&lt;/code&gt; post, and a new post is born!&lt;/p&gt;

&lt;h1 id=&quot;references&quot;&gt;References&lt;/h1&gt;

&lt;p&gt;To figure out the configurations used in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nbconvert&lt;/code&gt;, I used the following references:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://gist.github.com/dkmehrmann/3fd9e8b89a6e442fdc8787a4c1dbf4f2&quot;&gt;dkmehrmann’s convert script&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nbconvert.readthedocs.io/en/latest/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nbconvert&lt;/code&gt; documentation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/jupyter/nbconvert/tree/master/nbconvert&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nbconvert&lt;/code&gt; source code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to check out my entire Jekyll configuration, feel free to poke around the &lt;a href=&quot;http://github.com/mprat/learningjulia&quot;&gt;Learning Julia repository on Github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hope this helps!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Favorite Podcasts 2016-2017</title>
   <link href="https://mprat.org/blog/2017/02/15/podcasts-list.html"/>
   <updated>2017-02-15T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2017/02/15/podcasts-list</id>
   <content type="html">&lt;p&gt;I have a 45-minute commute to work (each way) every day, so I’ve been listening to lots of podcasts. Here is a roundup of my favorite podcasts from 2016-2017, organized by category and annotated with average podcast length and a “seriousness scale.”&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;I have listened to many podcasts and have wasted a few hours listening to some pretty bad ones. Here are some of my favorites - I hope you find something you’re looking for!&lt;/p&gt;

&lt;p&gt;Stories / long form journalism:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;http://www.radiolab.org/&quot;&gt;Radiolab&lt;/a&gt; - When you think of long-from journalism and storytelling in audio form you think of Radiolab. In a single episode you will experience all emotions from rock bottom to giddy top, all through a single theme or story the hosts tell in a jam-packed 40 minutes. Not for the faint of heart - the topics they cover are often serious and will make you think.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;http://www.wnyc.org/shows/deathsexmoney&quot;&gt;Death, Sex, &amp;amp; Money&lt;/a&gt; - From WNYC studios, the host picks a topic in the realm of human existence (which can be summarized by either death, sex, or money), and though a series of short stories strung together to form a longer story, dives deep into the personal nitty-gritty. Once in a while an episode is light-hearted, but often it is a serious discussion of all sorts of issues related to the human experience.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;https://serialpodcast.org/season-two&quot;&gt;Serial Season Two&lt;/a&gt; - The entire podcast season is devoted to telling a single story. In Season 2 the hosts talk about the story of Bowe Berghdal, a US Army private who was captured in Afghanistan and held by the Taliban for 5 years before his release. Needless to say, this series is very serious. (They also have a Season 1, but I don’t like listening to murder mysteries).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How the world works:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(30 minutes) &lt;em&gt;silly&lt;/em&gt; &lt;a href=&quot;http://creative.gimletmedia.com/shows/dtr/&quot;&gt;DTR&lt;/a&gt; - Tinder and Gimlet Creative come together to give you 40 minutes of pure hilarity through stories and case studies of people in the online dating world. The topics mostly cover how dating has changed in the face of technology.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;http://freakonomics.com/hours/&quot;&gt;Freakonomics&lt;/a&gt; - From the authors of the popular book &lt;a href=&quot;http://amzn.to/2kAaLr9&quot;&gt;Freakonomics&lt;/a&gt;, they dive into why certain trends exist in the world from the perspective of economics. Very accessible to any audience, and I always come away learning something.&lt;/li&gt;
  &lt;li&gt;(20 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;http://www.npr.org/podcasts/510289/planet-money&quot;&gt;Planet Money&lt;/a&gt; - Another NPR podcast talks about stories related to the economy, spending, or money, but tells it in an easy way that is engaging to listen to.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;http://www.wnyc.org/shows/radiolabmoreperfect&quot;&gt;More Perfect&lt;/a&gt; - The creators of Radiolab decided to make a serious podcast that dove into the legal cases that form the precedents for how the US Supreme Court and justice system work. As of this writing there is only one season, but each episode dives into a story about a seminal but little-know Supreme Court justice or court case from American history.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Trivia:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;silly&lt;/em&gt; &lt;a href=&quot;http://www.goodjobbrain.com/&quot;&gt;Good Job Brain!&lt;/a&gt; - A weekly (less recently, since they’ve been writing a &lt;a href=&quot;http://amzn.to/2kMaH8L&quot;&gt;book&lt;/a&gt; that is also awesome) quiz show /  trivia podcast hosted by 4 tech workers from SF. Each episode is themed around a topic, and there is usually a joke about poop somewhere. Very funny!&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;silly&lt;/em&gt; &lt;a href=&quot;http://qi.com/podcast/&quot;&gt;No Such Thing As A Fish&lt;/a&gt; - A (nearly) weekly British podcast centered around hilarious news stories of the week, filled with quips and laughs.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;silly&lt;/em&gt; &lt;a href=&quot;http://tmsidk.com/&quot;&gt;Tell Me Something I Don’t Know&lt;/a&gt; - A live show hosted in New York City, where famous people and “regular audience members” compete for having the most interesting fact. Hosted by Steven Dubner, one of the hosts / authors of Freakonomics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Science and technology:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(20 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;http://www.npr.org/podcasts/510308/hidden-brain&quot;&gt;Hidden Brain&lt;/a&gt; - An NPR podcast that talks about a human behavior phenomenon and attempts to explain it from the perspective of sociology, psychology, or neuroscience. The episodes are told in story format, and you come away thinking about how the episode might apply to your own life.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;http://creative.gimletmedia.com/shows/dtr/&quot;&gt;Reply All&lt;/a&gt; - This podcast claims to be about the internet. Really, it’s about interesting stories that are facilitated by the internet, discussing weird technological glitches, crowdsourcing miracles, memes, and much much more. The hosts are very entertaining, but I give this a &lt;em&gt;serious&lt;/em&gt; rating because the topics discussed are often deep.&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;http://www.thetalkingmachines.com/&quot;&gt;Talking Machines&lt;/a&gt; - One of the few podcasts out there discussing machine learning, it is hosted by Ryan Adams, a professor at Harvard. In each episode he discusses a topic from machine learning, and has a guest speaker with him to debate and discuss. If you don’t know anything about machine learning, this one is going to be pretty boring.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Entrepreneurship:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;(15 minutes) &lt;em&gt;casual&lt;/em&gt; &lt;a href=&quot;https://thedistance.com/&quot;&gt;The Distance&lt;/a&gt; - A quick short podcast where each episode highlights a small family business that has been around for a long time (usually over 20 years or multiple generations). The host tells the story of the business, including interviewing the owners, giving background on the business, and highlighting successes / failures.&lt;/li&gt;
  &lt;li&gt;(40 minutes) _casual &lt;a href=&quot;http://www.madfientist.com/podcast/&quot;&gt;The Financial Independence Podcast&lt;/a&gt; - The Mad Fientist hosts a personal finance blogger as a guest to the podcast to talk about their story in personal finance or reaching financial independence. These guys are not professionals, so it is just a conversation between two average people about their financial plans and goals. I can understand if this is not your cup of tea ;)&lt;/li&gt;
  &lt;li&gt;(40 minutes) &lt;em&gt;serious&lt;/em&gt; &lt;a href=&quot;http://www.sidehustlenation.com/side-hustle-show/&quot;&gt;The Side Hustle Show&lt;/a&gt; - Hosted by Nick, a dynamic and bouncy host who has worked on side hustles for years, The Side Hustle Show features a successful entrepreneur in each episode who has a unique story. The conversation involves discussing how others can learn from other people who have been successful in building a business.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enjoy! What podcasts do you like?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Installing Zim Wiki on OSX</title>
   <link href="https://mprat.org/blog/2015/09/08/installing-zim-on-osx.html"/>
   <updated>2015-09-08T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2015/09/08/installing-zim-on-osx</id>
   <content type="html">&lt;p&gt;Running programs meant for Linux are hard to run on OSX, especially if they use graphics. This is how I got &lt;a href=&quot;http://zim-wiki.org/&quot;&gt;Zim wiki&lt;/a&gt; running on OSX.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h4 id=&quot;installing-zim-as-a-stand-alone-app&quot;&gt;Installing Zim as a stand-alone app&lt;/h4&gt;

&lt;p&gt;After using a Linux computer for 5 years, my work environment changed and I am now using OSX full-time. One addition to my personal productivity suite has been Zim wiki, a personal wiki system made of a bunch of text files and a Python wrapper that I sync between my various machines / partitions using Dropbox. The downside of switching operating systems, I had to get Zim wiki running on OSX.&lt;/p&gt;

&lt;p&gt;I took much of my inspiration from the &lt;a href=&quot;https://wiki.gnome.org/action/show//Projects/GTK+/OSX/Building?action=show&amp;amp;redirect=GTK%2B%2FOSX%2FBuilding&quot;&gt;Gnome-wiki page on building GTK for OSX&lt;/a&gt; and someone’s &lt;a href=&quot;http://docs.gz.ro/node/183&quot;&gt;earlier blog post for how to package Zim as an app on OSX&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My setup:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;OSX Yosemite 10.10.3&lt;/li&gt;
  &lt;li&gt;Zim 0.63&lt;/li&gt;
  &lt;li&gt;Anaconda Python&lt;/li&gt;
  &lt;li&gt;Homebrew for package management&lt;/li&gt;
  &lt;li&gt;XCode 6.2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are my series of steps (for OSX Yosemite 10.10.3 and Zim 0.63):&lt;/p&gt;

&lt;ol&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Download the Zim source files from the &lt;a href=&quot;http://zim-wiki.org/downloads.html&quot;&gt;zim downloads page&lt;/a&gt;&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Make sure you have XCode, svn, git, curl, and OpenSSL installed. My package manager is Homebrew and I installed it with those, but people use different things. From here, the instructions are basically taken from the guide for &lt;a href=&quot;https://wiki.gnome.org/action/show//Projects/GTK+/OSX/Building?action=show&amp;amp;redirect=GTK%2B%2FOSX%2FBuilding&quot;&gt;setting up GTK for OSX&lt;/a&gt;&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;
    &lt;p&gt;Download &lt;a href=&quot;https://git.gnome.org/browse/gtk-osx/plain/gtk-osx-build-setup.sh&quot;&gt;gtk-osx-build-setup.sh&lt;/a&gt; in your home directory and run it&lt;/p&gt;

    &lt;div lang=&quot;bash&quot; class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; sh gtk-osx-build-setup.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;In general, I prefer not to mess with environment variables, especially the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PATH&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LD_LIBRARY_PATH&lt;/code&gt;, since I don’t want to mess up my work environment, and don’t want to have to keep track of changing them when I run Zim. So, my solution does not involve changing any of those variables.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;
    &lt;p&gt;This will install &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild&lt;/code&gt;, but it is installed in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~/.local/bin/jhbuild&lt;/code&gt;. So make an alias for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild&lt;/code&gt; command by adding this to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.bashrc&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.bash_profile&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.zshrc&lt;/code&gt;:&lt;/p&gt;

    &lt;div lang=&quot;bash&quot; class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; alias jhbuild=&quot;~/.local/bin/jhbuild&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild bootstrap&lt;/code&gt; at the command line&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild meta-gtk-osx-bootstrap&lt;/code&gt;&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild build meta-gtk-osx-core&lt;/code&gt;&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild build meta-gtk-osx-themes&lt;/code&gt;&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild build meta-gtk-osx-python&lt;/code&gt;&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild build pygtk&lt;/code&gt;.&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;If all of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild&lt;/code&gt; commands run without a problem, you should be good to go to set up a stand-alone app. Of course, there are many ways for them to go wrong, but if you want help with those feel free to leave a comment or send me an email and I’ll try to help. From here the instructions come from a &lt;a href=&quot;http://docs.gz.ro/node/183&quot;&gt;blog post about how to create a stand-alone Zim app&lt;/a&gt;. First, download &lt;a href=&quot;http://sveinbjorn.org/platypus&quot;&gt;Platypus&lt;/a&gt;. It is a program that can be used to bundle apps on OSX.&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;
    &lt;p&gt;Run Platypus and change the parameters as follows:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;strong&gt;App Name&lt;/strong&gt;: Zim&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Script Type&lt;/strong&gt;: Bash&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Script Path&lt;/strong&gt;: click “New” below the path, then replace &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;echo 'Hello, World'&lt;/code&gt; with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;../Resources/zim-0.63/zim.py&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Output&lt;/strong&gt;: none&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Identifier&lt;/strong&gt;: default&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Author&lt;/strong&gt;: default&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Version&lt;/strong&gt;: 1.0&lt;/li&gt;
      &lt;li&gt;Uncheck all 4 options (including “remain running after initial execution”)&lt;/li&gt;
      &lt;li&gt;Click the + sign for “Files to be bundled” and add the source folder for the Zim source.&lt;/li&gt;
      &lt;li&gt;If you want the icon for Zim, then you can drag the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zim.png&lt;/code&gt; file from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;zim-0.63/data/&lt;/code&gt; directory into where the icon is&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Click Create to create your app, and save it anywhere (the Desktop is a nice place.)&lt;/p&gt;
&lt;ol class=&quot;detail-list&quot;&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Drag your new icon into the Dock, and you can click it to launch Zim!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I haven’t yet figured out how to get the tray icon working - I suspect I am missing a GTK plugin to build with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild&lt;/code&gt;, so if you figure it out, I am excited to know!&lt;/p&gt;

&lt;p&gt;I had two main errors (with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild&lt;/code&gt;) that I was able to fix, and there are many more that can happen. I will describe my two errors here, and if you have others, feel free to post in the comments / email me and I’ll update this with more.&lt;/p&gt;

&lt;h4 id=&quot;error-1-libxml2-or-in-general-missing-packages&quot;&gt;Error 1: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libxml2&lt;/code&gt;, or in general missing packages.&lt;/h4&gt;

&lt;p&gt;During some parts of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild&lt;/code&gt; process I kept running into errors where I was missing packages when they clearly were there. This is most likely because &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild&lt;/code&gt; is not building or linking the packages with the correct version of Python or GTK. To solve this, when an error comes up, I selected 4 from the terminal menu (i.e. open a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild&lt;/code&gt; shell), then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt; into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Python-2.7.8&lt;/code&gt; directory, and do:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;make
make install 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then exit the shell with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exit&lt;/code&gt;, and continue the build process. (&lt;a href=&quot;https://www.mail-archive.com/gtk-osx-devel-list@gnome.org/msg00151.html&quot;&gt;Reference from this forum post&lt;/a&gt;).&lt;/p&gt;

&lt;h4 id=&quot;error-2-libgtk-quartz-200dylib&quot;&gt;Error 2: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libgtk-quartz-2.0.0.dylib&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;After I finished all the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jhbuild&lt;/code&gt; compiling without errors, I ran into an error after packaging, where I would open Zim, but every “wrong”” movement such as random mouse clicks, backspaces too vigorously, or clicking some buttons would crash Zim horribly with the error that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libgtk-quartz-2.0.0.dylib&lt;/code&gt; plugin failure.&lt;/p&gt;

&lt;p&gt;What fixed this for me was changing the default Python expected by Zim to Anaconda Python. The path for my Anaconda Python is in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/Users/mprat/anaconda/bin/python&lt;/code&gt;, while all the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.py&lt;/code&gt; files in the Zim source were expecting to use Python from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/usr/bin/python&lt;/code&gt;, as set by Linux. So I opened the Zim source files in Sublime and changed all the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#!/usr/bin/python&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#!/Users/mprat/anaconda/bin/python&lt;/code&gt;, and re-packaged the app with Platypus. After that, no &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libgtk-quartz-2.0.0.dylib&lt;/code&gt; problems.&lt;/p&gt;

&lt;p&gt;I hope this helps anyone else struggling to install Zim on their OSX machines!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Word Frequency in the King James Bible</title>
   <link href="https://mprat.org/blog/2015/02/05/mapreduce.html"/>
   <updated>2015-02-05T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2015/02/05/mapreduce</id>
   <content type="html">&lt;p&gt;Somehow in undergrad I never got around to learning about the &lt;a href=&quot;http://en.wikipedia.org/wiki/MapReduce&quot;&gt;MapReduce&lt;/a&gt; algorithm. To fix this, I learned about it from the first lecture of MIT’s &lt;a href=&quot;http://nil.csail.mit.edu/6.824/2015/&quot;&gt;6.824: Distributed Systems Engineering&lt;/a&gt;, and will attempt to explain MapReduce here, then implement it in Python on a real live example.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;In short, MapReduce is an algorithm for parallelizing computation, based on a two-step process of “mapping” and “reducing.” If you are interested in reading the full Google Research publication about MapReduce, it is online &lt;a href=&quot;http://research.google.com/archive/mapreduce.html&quot;&gt;here&lt;/a&gt;, and is a fairly accessible paper.&lt;/p&gt;

&lt;p&gt;In the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;map&lt;/code&gt; step, some function is “mapped” into a list of elements, and the output is a list of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(key, value)&lt;/code&gt; pairs, where each &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(key, value)&lt;/code&gt; pair is the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;key&lt;/code&gt; (or the elements in the list, before the function was applied to it) and the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;value&lt;/code&gt;, which is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;f(key)&lt;/code&gt;, or the value returned after the function is mapped to that element.&lt;/p&gt;

&lt;p&gt;At the end of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;map&lt;/code&gt; phase, the output can be thought effectively of two lists: one list of all the original &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;key&lt;/code&gt;s, and one list of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;value&lt;/code&gt;s mapped to new values according to some function.&lt;/p&gt;

&lt;p&gt;Then in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reduce&lt;/code&gt; phase, this list of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;value&lt;/code&gt;s is aggregated (or reduced) into one element that is the solution to whatever algorithm is desired.&lt;/p&gt;

&lt;p&gt;The reason MapReduce is so powerful and parallelizable is that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;map&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reduce&lt;/code&gt; functions can be done in parallel to multiple lists (in fact, the mapping of function to elements of a list is inherently parallelizable, since the same function is applied to all elements of a list independently).&lt;/p&gt;

&lt;h1 id=&quot;an-example&quot;&gt;An example&lt;/h1&gt;

&lt;p&gt;It helps to think of an example. Let’s say we want to take the &lt;a href=&quot;https://web.archive.org/web/20130530223318/http://patriot.net/~bmcgin/kjv12.txt&quot;&gt;King James Bible&lt;/a&gt; and count the occurrence of each word (this allows us to find the most common word, etc.). This can be done in a parallel way with MapReduce, as follows:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;map&lt;/code&gt; phase consists of taking each line of the text file as a list of space-separated words and mapping it to a list of word-value pairs &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(word, 1)&lt;/code&gt;. For example, the sentence&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &quot;I cried unto thee&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;becomes&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  (&quot;I&quot;, 1), (&quot;cried&quot;, 1), (&quot;unto&quot;, 1), (&quot;thee&quot;, 1)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;map&lt;/code&gt; function is taking a list of words and outputting 1 every time it sees a word. This means that each time a word is seen, the 1 is like a counter.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reduce&lt;/code&gt; phase just takes the list (or lists) of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(word, 1)&lt;/code&gt; values given above and sums the numbers for each word. This means that in the end, each word will be a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(word, int)&lt;/code&gt; value, where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;int&lt;/code&gt; is the number of times that word was seen in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;map&lt;/code&gt; phase.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the end, correctly implementing MapReduce on the King James Bible will yield the following results as the top 5 words that appear:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;('the', 63937)
('and', 51699)
('of', 34624)
('to', 13569)
('that', 12913)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Actually implementing a parallelized version of MapReduce is challenging, since the communication between the threads that do the computation and the threads that do the dispatching gets rather hairy. For 6.824, the assignment is all implemented in &lt;a href=&quot;http://golang.org/&quot;&gt;Go&lt;/a&gt; and is in general much faster than Python, but it would be in poor taste to post the solutions to the homework on line. Instead, one can write a single-threaded version of MapReduce for the same task in Python, as shown here.&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/mprat/99108d89c72ba3b85975.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;For efficiency’s sake, instead of using tuples to represent values, my Python implementation uses dictionaries. Additionally, when the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;map&lt;/code&gt; step happens, there is part of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;reduce&lt;/code&gt; step that happens at the same time. Namely, when words are constructed, they are automatically added to a dictionary that keeps track of their frequency in that line, but only because the dictionary syntax used there is cleaner than using nested &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;if&lt;/code&gt; statements to check whether a key exists in the dictionary already.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>A Fictional Middle East</title>
   <link href="https://mprat.org/blog/2014/02/13/a-fictional-middle-east.html"/>
   <updated>2014-02-13T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2014/02/13/a-fictional-middle-east</id>
   <content type="html">&lt;p&gt;I have never written a piece of fiction before. My first attempt, written in February 2014 over the course of a week, was prompted by a “call for fiction” submission to &lt;a href=&quot;http://mashallahnews.com/&quot;&gt;Mashallah News&lt;/a&gt;. The prompt was this (taken directly from the Mashallah News website):&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Imagine alternate fates for what is, at present, a complicated Middle East. While the various crises sweeping the region might oppress our sense of what is possible and confine our hopes to a handful of initiatives, our imaginations are beyond the scope of contemporary limitations. By inviting writers to use the tools of fiction to contemplate the farfetched and seemingly impossible, we hope to spark a very real debate about what kinds of future Middle Easts are conceivable.&lt;/em&gt;&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;My attempt to answer this question is below, written 6 months after moving to the Middle East. Originally, my story did not have a title. I am still struggling with the appropriate title for this story, since I have a hard time summarizing my main point in four words. I hope you will enjoy it - feedback is more than welcome.&lt;/p&gt;

&lt;h4 id=&quot;the-future-godless-levant&quot;&gt;the future godless levant&lt;/h4&gt;

&lt;p&gt;“There is no such thing as religion anymore!” I say, ending my lecture. The eager students applaud and file out of the room as a few students stay behind. “So when you said Maronite Christians, you were talking about the Shiite Muslims, right?” one girl asks. “No, they were all Jews anyway!” says another, rather flippantly. I try to hold back my laughter as I explain that the definitions of separate religions and sects from the 21st century were different than they had been in the first century BC.&lt;/p&gt;

&lt;p&gt;My students are all talented. But as headmistress, the students I advise are the most obstinate - the ones no other educator can handle. The ones who had been beaten as children for not staying quiet during nap time. The ones who had built a radio receiver from their parent’s old vacuum parts to listen to for satellite signals from outer space. The ones who have radical ideas about the isolation of the Middle East from the rest of the world. Or about religion. Or about the next privacy-invading technology. Or the military. The ones who will end up both destroying our civilization as we know it and the ones that will lead it to new heights. But all of them respect me because my brother is the mayor of our village. They know that they can discuss anything with me - I am the most patient and the most inviting. And no matter what it is, I will find out anyway.&lt;/p&gt;

&lt;p&gt;I go back to my office to start my daily grading of papers and find a student from the morning class waiting for me.&lt;/p&gt;

&lt;p&gt;“Can I confess something?”&lt;/p&gt;

&lt;p&gt;“No need to confess - here we speak our minds.”&lt;/p&gt;

&lt;p&gt;She looks me squarely in the eyes. “I think I believe in God.”&lt;/p&gt;

&lt;p&gt;I look out my window and see the students sitting around the olive tree, eating lunch. I like to think I am part of that tree - rooted in tradition, but more like the olive who will either fall within the protection of the tree, or be carefully picked and taken for other purposes. Students have come to me with this before, so I am not concerned.&lt;/p&gt;

&lt;p&gt;“It is no crime to believe in God, but you know religion is against the law.”&lt;/p&gt;

&lt;p&gt;She looks at me like she is hiding something. I ask her, gently, “Are there others? Have you been meeting in private?”&lt;/p&gt;

&lt;p&gt;She tells me the whole story - the readings, the meetings, the prayers. She and her friends have not decided what God they believe in, just that they believe in a God. Organized religion is against the law, punishable by imprisonment and heavy fines. But I know the way to reach the mind is through the heart. No amount of coercion, fines, torture, imprisonment, will make a difference of opinion. The change must come from within. She planted the seed in her own brain, and she must be the one to stifle it’s growth.&lt;/p&gt;

&lt;p&gt;“A god is different from religion. A god is flexible, a god listens, a god helps. Religion is cumbersome, does not bend, and often gets in the way of how we really feel. It dictates how we act, how we feel, what we do, and does not tolerate differences of opinion. My true faith lies with people.” I told her my own story.&lt;/p&gt;

&lt;p&gt;Before this village grew up out of the dirt, I lived in a different time and place. We were all children of farmers - simple and poor and bound to the land. We thanked our God for our crops, our parents, our lives, our futures. Our religion and our traditions were intertwined - they told us what to eat, how to dress, what we could do. We were dependent, we were stuck. I was blessed to be one of my family. We were rooted in our traditions, confident in our means. But then the wars came. People from a distant village, equally rooted in their beliefs came and told us our roots were infected and false. My brother and I fled, disowning all that we had known for so long. Our branch had fallen. I stopped eating, I stopped sleeping, I stopped praying. To me, our religion was dead. Our arguments had caused nothing but bloodshed, simply over what we could and could not do, or where we could and could not go.&lt;/p&gt;

&lt;p&gt;We started our new lives on a small simple farm here, where our village stands, outlawing religion within the city walls. The olives that bore fruit in groves outside the new village were our new religion. We had no prayer meetings, we had no place of worship. People slowly came to the village, seeking refuge from their own droughts. We worked the land, made our village services, made our schools. The people who were moving to our village were the same age as those who had destroyed my former home. But the people who came were even stronger. They had hated, they had loved, and they had fallen from the comfort of their roots. Many who came had been so dependent on their religion, they did not know how to live without it. We held weekly discussions about what we believed, who we really loved. I came to realize that faith in an individual means more than faith in a being I have never seen. I believed that the widowed mother of three would find shelter from the horrors and pursue her dream of making clothes. She did. I believed that the young man who ran from his father’s zeal would build his new house with his bare hands and find a spouse  to share it with him. He did. The child who dreamed in swathes of color became a painter. The elderly woman took her books out of hiding and started a library. Over and over, the strength of people who fled and came here were shown to me. I pray not to a god who listens to everyone, not to a god who judges me. I pray to a god who believes in the will of the individual. But I don’t pray to the God that told me that people were a certain way, that they had to act a certain way.&lt;/p&gt;

&lt;p&gt;I look back to her, realizing I had been talking without looking at her, eyes fixated at the olive tree. “To me, my god is people. It is everywhere, in each and every person. But religion reminds me of the injustice I have seen.”&lt;/p&gt;

&lt;p&gt;She looks at me, eyes glistening and glazed, looking off into the distance. “I am not ashamed to believe in god, but I am scared to grow on my own.”&lt;/p&gt;

&lt;p&gt;“God is like the olive tree - sacred to each one of us, but free in form to grow. Religion is like the wire that holds the tree to grow a certain way. We all deserve our chances, we all have faith in our own way. But we are free.”&lt;/p&gt;

&lt;p&gt;I leave her in my office; she needs time to collect her thoughts. I believe she will make the right choice. I don’t have faith in God anymore - no one does - but I have faith in her.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>MEET Fellowship</title>
   <link href="https://mprat.org/projects/meet/2013/09/22/meet-fellowship.html"/>
   <updated>2013-09-22T00:00:00+00:00</updated>
   <id>https://mprat.org/projects/meet/2013/09/22/meet-fellowship</id>
   <content type="html">In one of the most adventurous and spontaneous decisions of my life thus far, I decided to spend a year living and working in Jerusalem for [MEET](http://meet.mit.edu), teaching computer science for change. (For a laymen's description of MEET, check out [my other post](/projects/meet/2013/07/10/meet-mission-program.html).)

&lt;!-- more --&gt;

#### My role at MEET, 2013-2014

From August 2013 to August 2014, I am a full-time staff member (the second ever MEET Fellow) at MEET based in Jerusalem. MEET is an NGO that aims to empower Israeli and Palestinian youth to bring about positive change in their communities and solve complex problems by teaching them computer science and business skills over three years in an after-school high school program. &lt;img class=&quot;detail-img thumbnail&quot; src=&quot;/imgs/meet_students_working1.jpg&quot; alt=&quot;MEET students working hard.&quot;&gt;

My responsibilities include (but are not limited to)...

- {: .detail-text} teaching all yearlong computer science classes (Y1 and Y2, both Jerusalem and Nazareth) and providing feedback, advice, and mentoring to all (~140) students
	- {: .detail-text} mentoring individual and group projects
	- {: .detail-text} creating and designing all said projects
	- {: .detail-text} providing feedback and mentoring to two students studying overseas
	{: .detail-list}
- {: .detail-text} developing the new computer science curriculum for the Y2 yearlong and Y3 summer (collaborating with the business curriculum team leads)
	- {: .detail-text} creating content, connecting experts, thinking big
	{: .detail-list}
- {: .detail-text} improving the Y1 yearlong curriculum from 2012-2013
- {: .detail-text} serving as &quot;Head of Curriculum&quot; and think about high-level issues related to the 3-year computer science sequence
	- {: .detail-text} writing up transition materials for the next yearlong and summer instructors
	{: .detail-list}
- {: .detail-text} serving as &quot;Head of Instructors&quot; as a liaison between the Middle East staff and the MIT instructors that are recruited to teach the summer program
	- {: .detail-text} thinking about MIT instructor needs
	- {: .detail-text} thinking about CS curricular needss
	{: .detail-lixt}
- {: .detail-text} helping with summer instructor recruitment and spring / pre-summer preparation
- {: .detail-text} managing and coordinating MEET alumni TAs for the yearlong and the summer
{: .detail-list}

The year will be an exciting mix of intensity, teaching, management, and on-the-fly thinking. Of course, all done in conjunction with Talya, the program manager.

#### Goals

Goals:

- {: .detail-text} Become a better computer science instructor, both for explaining fundamental concepts and as a project mentor
- {: .detail-text} Learn basic conversational Hebrew and Arabic (as a consequence of living in Jerusalem)
- {: .detail-text} Improve my middle-management skills
- {: .detail-text} Learn a new computer-science-related technology I have never worked with before
- {: .detail-text} Publish my lecture notes / lesson plans / labs in a coherent way somewhere on the internet
- {: .detail-text} Figure out the best way to provide feedback to so many students at a time adn in an effective way
- {: .detail-text} Think about what is _really_ important to teach from CS to empower young students to change the world
{: .detail-list}

I am excited to see the students grow as they continue their computer science studies, and I am excited to help them produce successful individual and group projects throughout the year and the summer.

In all, I took this job knowing that it will be both challenging and rewarding. My education thus far has brought me to a point where I am ready to take on challenges and share my knowledge with the world, empowering both myself and others.</content>
 </entry>
 
 <entry>
   <title>MEET summer 2013 on mostly academics</title>
   <link href="https://mprat.org/projects/meet/2013/07/25/meet-summer-2013.html"/>
   <updated>2013-07-25T00:00:00+00:00</updated>
   <id>https://mprat.org/projects/meet/2013/07/25/meet-summer-2013</id>
   <content type="html">&lt;p&gt;In Fall 2013 I applied to be a summer instructor for MEET, an NGO who’s mission is to empower Israeli and Palestinian youth to create social, political, and economic change within the Middle East, both by giving them a network for interaction but also business and technical skills. By some strange happenstance, I was accepted to be an instructor (to teach Y2s web development, something I knew nothing about), and I agreed. Through a whirlwind of preparation, culture shock, and educational mayhem, I think I helped bring MEET one small step closer to it’s mission.&lt;/p&gt;

&lt;p&gt;Between July 8, 2013 and July 21, 2013, I (as a member of a 5-person team), taught web programming (MVC patterns, Django, HTML, CSS, Javascript) to 60 Israeli and Palestinian high school students at the Hebrew University campus in Jerusalem for around 8 hours a day, 6 days a week.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h4 id=&quot;the-task-and-the-team&quot;&gt;the task and the team&lt;/h4&gt;

&lt;p&gt;Our team of 5 instructors - me, Aline, Kyle, Lorenzo, and Nikhil, could not have been more diverse in our experience with computer science and teaching, but we were tasked with teaching the group of Y2 students (a group of 40) how to make a dynamic website. We were not given a syllabus or any context, but were told that by the end of the summer the students had to know HTML, CSS, Javascript, Django, and how to put all of those together to make a dynamic website.&lt;/p&gt;

&lt;p&gt;Lorenzo was the veteran: he had been at MEET two previous summers, and was given the role of team lead. In his former life he graduated from MIT with a degree in math and was now working for a financial company in Mexico City.&lt;/p&gt;

&lt;p&gt;Aline was the other vet: she had been at MEET once before, had graduated MIT with a degree in neuroscience (but had started out as a CS person), worked as a professional chef, and now worked as a technical recruiter in San Francisco.&lt;/p&gt;

&lt;p&gt;Nikhil was the second half of our international cohort: he graduated from MIT with a degree in EECS and was now pursuing a master’s in India while simultaneously working for GE.&lt;/p&gt;

&lt;p&gt;Kyle was my year at MIT, also EECS, and star of the track team, set up to work in Chicago for a financial company after the summer.&lt;/p&gt;

&lt;p&gt;Our task was incredible: we had no material from previous years, so we had to come up with a curriculum, come up with projects, develop the lessons, and deliver them to the students. All in the span of 13 academic days. BAM.&lt;/p&gt;

&lt;h4 id=&quot;the-summer-preparations&quot;&gt;the summer preparations&lt;/h4&gt;

&lt;p&gt;The spring preparation I was told was going go take about 10 hours in the spring, on top of a few in-person training sessions.&lt;/p&gt;

&lt;p&gt;The in-person training sessions were incredibly interesting: the history of the Middle East / the conflict, a geography lesson about the Middle East, a seminar on teaching, a talk about other initiatives doing peace work similar to MEET, a session where a Gazan Palestinian and an Israeli Jew were brought in to talk to us about their own personal narratives, and a session about MEET in general. It was an opportunity to meet other instructors not on my team and get a bit of insight into the organization and the problem it was trying to solve.&lt;/p&gt;

&lt;p&gt;Because the 5 of us were in different timezones all over the world, we did not plan much other than the basics of who was responsible for what topics. Most of us (myself included) had never even learned Django ourselves, and we were expected to teach it to the students.&lt;/p&gt;

&lt;p&gt;We had discussions about whether we needed to do an intro lesson on topics like “what is a server” and “what is a database” - the basics many CS students take now for granted. How would we have student work? How would project work be saved? How would the projects look like? What experience did the students already have? How well did they ACTUALLY know python?&lt;/p&gt;

&lt;p&gt;These were all questions I in retrospect should have asked more often and more forcefully. I now understand that I came to the summer not wholly prepared for what we were going to teach and not understanding the context of the students we were teaching. I was told that “the students were really smart” and “the students work really hard”, which I took to mean that they had mastered basic python and knew some stuff from CS outside of what they were taught. Oh boy is that a wrong assumption to make in teaching.&lt;/p&gt;

&lt;p&gt;I also realized that while I knew the students were learning both CS and business, I didn’t know what they were learning in the business curriculum. I didn’t know for how long. I really didn’t know much…&lt;/p&gt;

&lt;p&gt;On the plane flight from JFK to Tel Aviv (which by the way, took me nearly 18 hours including layover time), I spend the majority of it working through the Django tutorials and playing with my own Django app. I figured, if I can work through the Django tutorials in a sleep-deprived plane flight, how hard could it be to teach this to some high schoolers who knew python?&lt;/p&gt;

&lt;p&gt;I landed in Tel Aviv and was academically prepared to teach the material. The lessons were not super prepped, but I figured, how hard could that be?&lt;/p&gt;

&lt;h4 id=&quot;the-students-and-the-instructors&quot;&gt;the students and the instructors&lt;/h4&gt;

&lt;p&gt;One thing to understand is the deliberate naming that is “instructor”. MEET does not hire “teachers”, they hire “instructors” and “mentors”. These people are meant to be role models for the students, to be guidance and advice, rather than teachers. MEET is not school, and we don’t want to treat the students as such.&lt;/p&gt;

&lt;p&gt;The role of the instructor is not only to provide high-quality education but also to provide a role model for following MEET’s 6 values:&lt;/p&gt;

&lt;ol class=&quot;detail-list&quot;&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Lead by example&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Think big&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Act with integrity&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Treat everyone with respect and equality&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Embrace teamwork&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Strive for excellence&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So we are not teachers - we are positive role models. This is a subtle point of social engineering that has stuck and made a lasting positive impact. By calling the MIT cohort “instructors”, we are emphasizing the discinction between formal educator and informal role model. As one of the MIT instructors, I felt like I was closer to the latter than the former, all because of that one word choice.&lt;/p&gt;

&lt;h4 id=&quot;the-summer&quot;&gt;the summer&lt;/h4&gt;

&lt;p&gt;In the week before the student classes began, the instructors and the staff all bonded with a barbecue at Mustafa’s house (MEET Student Relations Manager, living in Beit Zafafa), &lt;a href=&quot;http://www.flickr.com/photos/mpratland/sets/72157634730392020/&quot;&gt;a trip to the Negev&lt;/a&gt;, dinners, lunches, office MEETings, and class prep time. We worked frantically to prepare our lectures and yet have time to explore Jerusalem, this historic, amazing city we all wanted to be in.&lt;/p&gt;

&lt;p&gt;We started teaching, and quickly realized the level of the students: the short of it is that they were not as strong as we were told. In fact, most of our assumptions were just not correct. The thing I am proud of was that we started off the summer with a lecture on clients and servers, what that means, and where a website fits into that.&lt;/p&gt;

&lt;p&gt;But when we started to teach Django and Javascript - arguably harder concepts than HTML and CSS - we ran into problems. We discovered that students didn’t have a good idea about what &lt;a href=&quot;http://en.wikipedia.org/wiki/Class_(computer_programming)&quot;&gt;classes&lt;/a&gt; where, what URLs were, or really what we were trying to do in the first place. Aline, Kyle, and I worked and re-worked the lessons to finally find a better fit for the students as we were approaching crunch time for the projects. We were lucky to have two groups of students to teach. The unfortunate part was that one group of students got the shorter end of the stick while the “second” group got the benefit of our re-works.&lt;/p&gt;

&lt;p&gt;I now understand that this work and rework process is natural for an instructor - to work, rework, test, retest, present, re-present, and guide the students in any and all ways possible. The unfortunate side effect of that was that we were regularly pulling 11+ hour days (between in-class time, socializing with the students at dinner, re-designing the lessons, testing the labs, testing the software on the university and then MEET computers, and running occasional tutoring sessions) and then socializing with staff and instructors and exploring the city / surroundings of Jerusalem in our “free” time. It was a love-hate relationship as you can understand.&lt;/p&gt;

&lt;h4 id=&quot;the-projects&quot;&gt;the projects&lt;/h4&gt;

&lt;p&gt;The way we designed the curriculum for the summer was with the goal in mind that the students had to have, in groups, something presented at the end of the summer that demonstrated all that they had learned over the summer. So we alloted 7 full days of project work (that was about 20 hours for each group), to create a website that we (the instructors) had designed for them.&lt;/p&gt;

&lt;p&gt;We each had to build the project prototype to prove to both ourselves and the rest of the Middle East staff that we were in fact capable of building such a website, and to prove that it was possible.&lt;/p&gt;

&lt;p&gt;We had 5 projects overall, and each student team took a project and ran with it. Some groups went far, some groups not that far, but all ended up with projects that they presented at the end of the summer program to the rest of MEET. Oh, did I mention the code for the projects &lt;a href=&quot;https://github.com/meet-projects&quot;&gt;is on Github&lt;/a&gt;. The projects are not actually live anywhere (we did not buy server space or have time to teach how to deploy an actual website), but the students nonetheless had enough time to barely build a functioning local copy of &lt;a href=&quot;/projects/meet/2013/07/22/meet-summer-2013-projects.html&quot;&gt;a few projects with Django&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&quot;the-end&quot;&gt;the end&lt;/h4&gt;

&lt;p&gt;Even though the summer experience was not easy, I can say that the prep work over the spring semester and the countless hours, reworks, and redesigns of the lessons during the summer were worth it: the students were proud of their projects by the end of the summer, the instructors as a group were closer, and all came out of the summer feeling a bit closer to achieving the MEET mission.&lt;/p&gt;

&lt;p class=&quot;detail-text&quot;&gt; See more photos from MEET on &lt;a href=&quot;http://www.flickr.com/photos/mpratland/sets/72157634571668890/&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;ext-logo-link flickr_logo&quot; src=&quot;/imgs/white-flickr.png&quot; alt=&quot;Michele Pratusevich's MEET Flickr album&quot; /&gt;&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>MEET project descriptions from Summer 2013</title>
   <link href="https://mprat.org/projects/meet/2013/07/22/meet-summer-2013-projects.html"/>
   <updated>2013-07-22T00:00:00+00:00</updated>
   <id>https://mprat.org/projects/meet/2013/07/22/meet-summer-2013-projects</id>
   <content type="html">&lt;p&gt;MEET students in summer 2013 worked on 10 different projects. The code is all on Github, and the (rough) descriptions are below.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h4 id=&quot;meetconnection&quot;&gt;&lt;a href=&quot;http://github.com/meet-projects/meetme1-y2-2013&quot;&gt;MeetConnection&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;A social network to bring together MEET students / staff / instructors to ask questions and search for other users. Idea proposed by Nikhil.&lt;/p&gt;

&lt;h4 id=&quot;meetme&quot;&gt;&lt;a href=&quot;http://github.com/meet-projects/meetme2-y2-2013&quot;&gt;MeetMe&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;A social network to find users in your area with similar interests and get connected to them. Idea proposed by Nikhil.&lt;/p&gt;

&lt;h4 id=&quot;share&quot;&gt;&lt;a href=&quot;http://github.com/meet-projects/share-y2-2013&quot;&gt;Share&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Create and share surveys that can be taken online. Idea proposed by Aline.&lt;/p&gt;

&lt;h4 id=&quot;booklists&quot;&gt;&lt;a href=&quot;http://github.com/meet-projects/bookLists-y2-2013&quot;&gt;BookLists&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;A book recommendation, tracking, and reviews website. Idea proposed by Kyle.&lt;/p&gt;

&lt;h4 id=&quot;taste&quot;&gt;&lt;a href=&quot;http://github.com/meet-projects/musicLists-y2-2013&quot;&gt;Taste&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;A music-ranking and organizing website that you can share with your friends. Idea proposed by Kyle.&lt;/p&gt;

&lt;h4 id=&quot;tobecontinued&quot;&gt;&lt;a href=&quot;http://github.com/meet-projects/tobecontinued-y2-2013&quot;&gt;ToBeContinued&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;A collaborative story-telling website turned into a turn-based game. Idea proposed by Michele.&lt;/p&gt;

&lt;h4 id=&quot;storieshare&quot;&gt;&lt;a href=&quot;http://github.com/meet-projects/storieshare-y2-2013&quot;&gt;StorieShare&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;A collaborative story-telling website. Idea proposed by Michele.&lt;/p&gt;

&lt;h4 id=&quot;survme&quot;&gt;&lt;a href=&quot;http://github.com/meet-projects/survme-y2-2013&quot;&gt;SurvMe&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Create and share surveys that can be taken and shared and visualized online. Idea proposed by Aline.&lt;/p&gt;

&lt;h4 id=&quot;shooksookbits&quot;&gt;&lt;a href=&quot;http://github.com/meet-projects/shooksookmegabits-y2-2013&quot;&gt;ShookSookBits&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Marketplace organizer with maps, shops, and products of the Old City of Jerusalem. Idea proposed by Lorenzo.&lt;/p&gt;

&lt;h4 id=&quot;shooksookbytes&quot;&gt;&lt;a href=&quot;http://github.com/meet-projects/shooksookbytes-y2-2013&quot;&gt;ShookSookBytes&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Marketplace organizer with maps, shops, and products of the Old City of Jerusalem.Idea proposed by Lorenzo.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>MEET the program</title>
   <link href="https://mprat.org/projects/meet/2013/07/10/meet-mission-program.html"/>
   <updated>2013-07-10T00:00:00+00:00</updated>
   <id>https://mprat.org/projects/meet/2013/07/10/meet-mission-program</id>
   <content type="html">&lt;p&gt;As every MIT undergrad does, I was looking for something interesting to do with my summer. I knew I was going to be graduating in June and was looking for a unique summer experience. I had already decided early in Fall 2012 (my fall semester senior year) that I would take a gap year between the end of my undergrad and the start of my MEng (Master’s in Engineering) at MIT. But I wanted to kick off my year with the right summer experience - MEET was the answer.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h4 id=&quot;meet-in-general&quot;&gt;MEET in general&lt;/h4&gt;

&lt;p&gt;I had heard about MEET, but all that I knew about it was that it stood for “Middle East Education through Technology” and that they taught computer science to Israeli and Palestinian high school students.&lt;/p&gt;

&lt;p&gt;Knowing basically nothing about the program and knowing no one who had done it before (later it turned out I did, but when decision time came I didn’t know that), I felt drawn to what MEET was trying to do. I was drawn to it’s ideals, goals, mission, and vision.&lt;/p&gt;

&lt;p&gt;Look at the mission for yourself: “Our mission is to educate and empower tomorrow’s most promising Palestinian and Israeli leaders to take action towards creating positive economic, political, and social impact in the Middle East.” (taken straight from &lt;a href=&quot;http://meet.mit.edu/different/&quot; title=&quot;MEET's Mission and Vision&quot;&gt;their website&lt;/a&gt;). By investing many resources into a small group of students, MEET was aiming to foster a network of future Israeli and Palestinian leaders, doers, facilitators, entrepreneurs. I agreed with the philosophy. Young people are the ones who will make change. Education is key. Technology is a vector for problem solving skills, modernization, critical thinking, teamwork. I specifically liked the idea of a longer program - I didn’t think a one-off camp or academic program would come close to achieving the mission. MEET was not a one-off program (students in MEET were in the program for three years and then even later through an alumni program), so it sounded more plausible.&lt;/p&gt;

&lt;p&gt;For students in MEET, their commitment was high: they committed at the minimum one month every summer, and one 3-hour weekly meeting for the two intervening years. They came to MEET with a strong academic record, a good working knowledge of English (all classes are taught in English), and a high score in a group dynamics test. During the summer after their freshman year in high school, they became “Y1s”. By the time they were Y3s, they would be ready to take on the world as entrepreneurs, makers, doers, and facilitators of change.&lt;/p&gt;

&lt;p&gt;Don’t get me wrong, the idea of making change in the Middle East through one small program is a crazy idea. But no one makes big change without a few big ideas. Even though the outcomes from MEET’s interventions could not be measurable for years to come, my gut feeling told me it was a worthwhile investment of my time and energy.&lt;/p&gt;

&lt;p&gt;I wanted to be a part of MEET - to work with the students and the staff to come one step closer to the ultimate vision. I applied, interviewed, and was accepted as a summer instructor for summer 2013.&lt;/p&gt;

&lt;p&gt;At the time, here is what the student CS curriculum looked like:&lt;/p&gt;

&lt;ul class=&quot;detail-list&quot;&gt;
	&lt;li class=&quot;detail-text&quot;&gt; Year 1:&lt;/li&gt;
		&lt;ul class=&quot;detail-list&quot;&gt;
		&lt;li class=&quot;detail-text&quot;&gt; Summer: Introduction to programming (python) &lt;/li&gt;
		&lt;li class=&quot;detail-text&quot;&gt; Yearlong: Skill building, personal projects, HTML/CSS introduction &lt;/li&gt;
		&lt;/ul&gt;
	&lt;li class=&quot;detail-text&quot;&gt; Year 2: &lt;/li&gt;
		&lt;ul class=&quot;detail-list&quot;&gt;
		&lt;li class=&quot;detail-text&quot;&gt; Summer: Web programming (MVC design pattern, HTML/CSS, Javascript, Django) &lt;/li&gt;
		&lt;li class=&quot;detail-text&quot;&gt; Yearlong: Skill practice, integration with business, group project ideation and workplan &lt;/li&gt;
		&lt;/ul&gt;
	&lt;li class=&quot;detail-text&quot;&gt; Year 3: &lt;/li&gt;
		&lt;ul class=&quot;detail-list&quot;&gt;
		&lt;li class=&quot;detail-text&quot;&gt; Summer: Group project completion&lt;/li&gt;
		&lt;/ul&gt;
&lt;/ul&gt;

&lt;p&gt;And I wanted to play my part.&lt;/p&gt;

&lt;h4 id=&quot;me-and-meet&quot;&gt;me and MEET&lt;/h4&gt;

&lt;p&gt;To be honest, I did not know much about the conflict in the Middle East (let alone specifically Jerusalem) before I began preparing for MEET. It was an issue that unfortunately did not mean anything to me in my daily life in the United States, and it’s and one that the media does not feel the need to seamlessly cover. I knew it was a conflict and I knew I didn’t know about it. While I was going to be in Jerusalem I was determined to find out more.&lt;/p&gt;

&lt;p&gt;I was asked many questions from friends at home and abroad about why I chose to do MEET. From the American camp I heard: 
&lt;i&gt;Are you Jewish? Is that why you are personally invested in the conflict?&lt;/i&gt; 
&lt;i&gt;Are you interested in international development work? Humanitarian aid? NGOs?&lt;/i&gt;
&lt;i&gt;Aren’t you giving up a lot of time and money for something you won’t do for a living?&lt;/i&gt;
&lt;i&gt;Are you crazy? It’s dangerous there.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;And from the Middle East I heard: 
&lt;i&gt;What is your religion? Will you make aliyah&lt;/i&gt; (both the good and the bad connotations)&lt;i&gt;?&lt;/i&gt;
&lt;i&gt;What made you give up your summer to come to Jerusalem instead?&lt;/i&gt;
&lt;i&gt;Why do you think computer science is a tool for change?&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;After thinking about these questions and many more of my own, I came up with a list of goals I wanted to achieve over the summer at MEET, and to reflect on later:&lt;/p&gt;

&lt;ul class=&quot;detail-list&quot;&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Understand the historical context for the Israeli-Palestinian conflict&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Discuss with Israeli and Palestinian adults the meaning of the conflict to them&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Form an opinion about the conflict&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Assess my opinions for whether MEET’s mission will help solve the conflict&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Finalize my relationship with religion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MEET is an amazing program. Shalom, Salaam.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>MIT Graduation Cap</title>
   <link href="https://mprat.org/blog/2013/06/06/graduation-hat.html"/>
   <updated>2013-06-06T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2013/06/06/graduation-hat</id>
   <content type="html">&lt;p&gt;MIT has many &lt;a href=&quot;http://old.mitadmissions.org/topics/life/hacks_traditions/&quot;&gt;interesting traditions&lt;/a&gt;. But my personal favorite is the tradition of MIT’s graduation hats. I had a lot of fun with this tradition, especially given the weather.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;The term “walking at graduation” means a lot to someone who spent 4 years as an undergraduate at MIT. No matter what you studied or what extracurriculars you had, the 4 years you spent at MIT were hard. The last official thing you do with the Institvte is receiving your diploma at graduation, where the graduate wants to go out in style.&lt;/p&gt;

&lt;p&gt;Now, the PhDs already go out in style. See their graduation regalia, courtesy of &lt;a href=&quot;http://www.capgown.com/Merchant2/merchant.mvc?Screen=PROD&amp;amp;Product_Code=Complete_MIT&amp;amp;Category_Code=MIT&quot;&gt;CapGown.com&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/mit-phd-regalia.jpg&quot; alt=&quot;MIT PhD regalia&quot; /&gt;&lt;/p&gt;

&lt;p&gt;But the Bachelor’s regalia is all black and made of some kind of cheap plastic. To go out in style, what many undergraduates do is decorate their graduation caps with various items that are unique to them.&lt;/p&gt;

&lt;h1 id=&quot;my-graduation-cap&quot;&gt;My graduation cap&lt;/h1&gt;

&lt;p&gt;I graduated with my Bachelor of Science in Electrical Engineering and Computer Science on June 6, 2013. The forecast for that day was 90% chance of rain. At least it was supposed to be 75 degrees F or so. A few years go, I had spent $5 on &lt;a href=&quot;http://www.amazon.com/gp/product/B0006GK724/ref=oh_aui_detailpage_o00_s00?ie=UTF8&amp;amp;psc=1&quot;&gt;Amazon to buy an umbrella hat&lt;/a&gt;, just for fun. But the night before graduation, it seemed like I had made an amazing decision.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/umbrella_hat.jpg&quot; alt=&quot;Michele in an umbrella hat&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Because you see, I could just affix my umbrella hat to my graduation cap to cover my cap from the rain. The cap wasn’t very structural - it’s some black plastic covering over a cardboard cap.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/umbrella_hat_and_cap.jpg&quot; alt=&quot;Cap with an umbrella hat&quot; /&gt;&lt;/p&gt;

&lt;p&gt;However, I wasn’t sure it this would be (1) enough, or (2) quite indicative of me. So I decided to combine this with an idea that had started growing on me over the course of the past semester. I spent so much time in the White Mountains in New Hampshire with the [MIT Outing Club)(http://mitoc.mit.edu) that it felt almost natural to put a map of the White Mountains on my graduation cap. Together with a MITOC patch.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/map_on_cap.jpg&quot; alt=&quot;Map on cap&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/mitoc_cap.jpg&quot; alt=&quot;Map and patch&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Of course, combine this with the umbrella hat and you have quite an exit.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/graduation_cap.jpg&quot; alt=&quot;Final graduation cap&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/sea_of_caps.jpg&quot; alt=&quot;Sea of caps&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As you can see, not everyone has their caps decorated. It makes you feel that much more special. What happened to me was that the Dean of Student Life asked me to take my umbrella hat off my cap to not obstruct the view. I readily complied, not wanting to jeopardize actually walking at graduation. Hence the lack of umbrella hat in my graduation photo with mom and dad.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/graduation_family.jpg&quot; alt=&quot;Graduation photo with mom and dad&quot; /&gt;&lt;/p&gt;

&lt;p&gt;All in all, I am quite happy with my unique graduation cap. Not as good as the graduated cylinder to measure the rainfall during the ceremony, but definitely very indicative of me.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>EECSCon Poster</title>
   <link href="https://mprat.org/projects/irephotography/2013/04/04/eecscon-mobile-rephotography.html"/>
   <updated>2013-04-04T00:00:00+00:00</updated>
   <id>https://mprat.org/projects/irephotography/2013/04/04/eecscon-mobile-rephotography</id>
   <content type="html">&lt;p&gt;EECSCon is happening this coming Saturday! I made a poster describing my SuperUROP work on mobile rephotography. Check out my poster &lt;a class=&quot;text_link&quot; href=&quot;/docs/rephotography.pdf&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;! If you don’t want to look at the PDF, parts of the poster are reproduced below as images.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;&lt;img class=&quot;post-img&quot; src=&quot;/imgs/rephotography-whatis.png&quot; alt=&quot;What is Rephotography.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;EECSCon itself was an interesting experience. It was the first time I had to make a poster about academic “research” work. Putting together all of my thoughts without going into the technical details was quite a challenge, but luckily I was working on a graphics-and-computer-vision project, so I had lots of images I could show.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Education Designathon and iCampus Prize</title>
   <link href="https://mprat.org/projects/terminus/2013/03/15/designathon-icampus-terminus.html"/>
   <updated>2013-03-15T00:00:00+00:00</updated>
   <id>https://mprat.org/projects/terminus/2013/03/15/designathon-icampus-terminus</id>
   <content type="html">&lt;p&gt;After successfully working on Terminus (with Shawn!) at the &lt;a href=&quot;http://www.edudesignathon.com/&quot;&gt;Education Designathon&lt;/a&gt; held at MIT in spring 2013, I decided that the Terminus project from 11.127 so long ago would be a great entry for the &lt;a href=&quot;http://icampusprize.mit.edu/&quot;&gt;MIT iCampus Prize Competition&lt;/a&gt; in the spring of 2013.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h4 id=&quot;the-education-designathon&quot;&gt;the education designathon&lt;/h4&gt;

&lt;p&gt;I have always loved education - as a system, as a problem, as a project. However, I’ve had a hard time thinking of ways I can use my computer science training to help with education (sure, MOOCs, but I haven’t yet decided whether those are beneficial for education or not). In either case, when I got an email from Jessica Artilles advertising the designathon, I was super excited.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/designathon3.png&quot; alt=&quot;Professor Woodie Flowers giving the opening talk at the Education Designathon&quot; class=&quot;designathon-pic&quot; /&gt;
(Photo credit to Jessica Artilles.)&lt;/p&gt;

&lt;p&gt;Here is Professor Woodie Flowers, professor of mechanical engineering at MIT and founder of FIRST robotics, giving the opening talk at the Education Designathon.&lt;/p&gt;

&lt;p&gt;A “designathon” instead of a “hackathon” that promised to bring together education experts and technologists alike was going to be exciting.&lt;/p&gt;

&lt;p&gt;At the designathon of course I started working on a problem but soon realized that it was already solved. So to my luck, I found Shawn (yes, original Terminus group member Shawn!) at the designathon too and we decided we wanted to continue with Terminus.&lt;/p&gt;

&lt;p&gt;We approached the problem this time from an element of fun: we wanted to use the 24-hours-or-so that we had at the hackathon to learn a new technology. So we decided to tackle writing Terminus for the web. We had a heck of a time finding the old Terminus files (I had put them on Github but they were not complete), so we eventually found our storyboarding document and started to redesign the code from scratch. (I will talk about the technical details later.)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/designathon2.png&quot; alt=&quot;Michele and Shawn hard at coding&quot; class=&quot;designathon-pic&quot; /&gt;
(Photo credit to Jessica Artilles.)&lt;/p&gt;

&lt;p&gt;We’re hard at work, coding, eating, enjoying our challenge for ourselves.&lt;/p&gt;

&lt;p&gt;At the end of the day-and-a-half that we spent redesigning, coding, learning, and tweaking, we were to go with a version of Terminus that was almost identical to our &lt;a href=&quot;/projects/terminus/2011-04-15-a-linux-learning-game.html&quot;&gt;Java version&lt;/a&gt; except written in Javascript. We presented for 2 minutes and demo’ed the project, to great success at the designathon.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/designathon.png&quot; alt=&quot;Michele with a stupid face and Shawn looking happy presenting our work at the designathon&quot; class=&quot;designathon-pic&quot; /&gt;&lt;/p&gt;

&lt;p&gt;(Here’s a rather embarassing photo of me and Shawn talking about Terminus at the end of the hackathon. Photo credit to Jessica Artilles.)&lt;/p&gt;

&lt;p&gt;For our Terminus web-hack, we ended up getting the “Best Scalable Assignment” prize at the Designathon, and were encouraged by OEIT (MIT’s Office of Education and Information Technology) to apply for the iCampus Prize.&lt;/p&gt;

&lt;h4 id=&quot;icampus-the-competition&quot;&gt;iCampus: the competition&lt;/h4&gt;

&lt;p&gt;Whenever you re-appropriate a project for a competition or a cause (rather than just playing at a hackathon), it is criticl to again understand the audience and specifications. If not to create a winning entry, the information about audience will give your project a message, tagline, and story. In a sentence, the iCampus prize is a competition to use technology to enhance living and learning at MIT.&lt;/p&gt;

&lt;p&gt;Shawn and I both decided to continue work on Terminus at least for the iCampus prize. The first-round submission was due a week after the designathon, so we had to get to work!&lt;/p&gt;

&lt;h4 id=&quot;the-terminus-story&quot;&gt;the Terminus story&lt;/h4&gt;

&lt;p&gt;The reasoning goes like this: MIT’s computing system (called Debathena) is built on top of Ubuntu Linux. The majority of undergraduates, when they first get to campus, have no idea how to use the computers that the university is providing. Sure, there is some graphical interfaces, but part of the beauty of Debathena is that there are a number of terminal commands developed specifically for MIT - for printing, searching for users, creating mailing lists, accessing student group files and folders, and many more.&lt;/p&gt;

&lt;p&gt;The barrier to learning these terminal commands for MIT undergraduates is manyfold:&lt;/p&gt;

&lt;ul class=&quot;detail-list&quot;&gt;
  &lt;li class=&quot;detail-text&quot;&gt;We don’t have the time to make mistakes&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;We use our own personal computers for almost everything&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;There is no MIT-specific tutorial&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Terminus aims to solve all these problems at MIT (for freshman, undergraduates, and graduate students alike). We bring gamification into the picture. Through the exploratory environment provided by Terminus, we empower MIT students to become more familiar with the terminal, both for MIT-specific commands and for general use.&lt;/p&gt;

&lt;h4 id=&quot;the-re-design-technical-details&quot;&gt;the re-design: technical details&lt;/h4&gt;

&lt;p&gt;Now that we knew our audience, we had to get designing. We narrowed down our desired feature list to a few key points that dictated a few major design choices:&lt;/p&gt;

&lt;ol class=&quot;detail-list&quot;&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Accessible anywhere (within internet range acceptible)&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;No complex hosting&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;No login needed&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Both general and MIT-specific commands&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To address each of these choices, we came up with the following solutions:&lt;/p&gt;

&lt;ol class=&quot;detail-list&quot;&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Web app!&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;No backend database - all front-end, all-Javascript / jQuery&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;No saving game state&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Slightly modified game logic from the original Java version&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We decided that our implementation was going to be a simple web game built all in Javascript. We found &lt;a href=&quot;https://github.com/jcubic/jquery.terminal&quot;&gt;this Javascript plugin&lt;/a&gt; that would do some of our work - we had to add the game logic. For now, because we were using only-front-end-Javascript for the game play, we decided to host it out of my public locker space on MIT servers. We later decided to move it to it’s own hosting (also on MIT servers).&lt;/p&gt;

&lt;p&gt;The re-write was also an opportunity for us to clean up the code. Towards the end of our Java run, we had become sloppy and finished the game with a lot of hacks. The original system design was not upheld as we scrambled towards a project deadline. But this time, we wanted to adhere to our code system design. We came up with an easy design so we could add rooms and tasks with relative ease.&lt;/p&gt;

&lt;h4 id=&quot;the-re-design-gameplay&quot;&gt;the re-design: gameplay&lt;/h4&gt;

&lt;p&gt;In our re-implementation, we had to add to our basic gameplay from the Java version of Terminus. We had to really think through our analogy between a file system and a world, bridging the connections between locations with appropriate “terminal commands” or game actions. We took the time to formalize our game map, ending up with this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/level_map.png&quot; alt=&quot;The Terminus level map for the Javascript redesign&quot; class=&quot;levelmap&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The level system is long, providing for a more interesting game experience. The levels were grouped in this manner to teach types of basic skills together, with the intention of later on providing a feature to skip through levels. Our product for the iCampus prize did not involve any feature for skipping levels, but it did eventually teach you to create symbolic links to other levels from your home directory.&lt;/p&gt;

&lt;p&gt;(Incidentally, in the game, your “Home” directory has a similar purpose to a UNIX “home” directory.)&lt;/p&gt;

&lt;p&gt;One major re-design from the previous version was the addition of an MIT-specific environment where MIT-specific terminal commands are taught. You can get here from home, and it is a cute simulated environment that both teaches MIT-Debathena terminal commands and mirrors features of MIT.&lt;/p&gt;

&lt;p&gt;One major design decision was to still include graphics on the page, very much like the original Java version. For the game play, we decided that graphics spice up the text-only nature of the game.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/terminus_javascript1.png&quot; alt=&quot;A screenshot of Terminus, the Javascript version&quot; class=&quot;terminus-java1&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;in-short&quot;&gt;In short&lt;/h4&gt;

&lt;p&gt;Terminus provides a solution to a common problem at MIT: the computing environment is Ubuntu Linux, and there are many custom commands on the MIT Debathena computing system that incoming students are not familiar with. By exploring the safe (yet challening) environment of Terminus, they can become more familiar with both the command-line environment and the MIT computing environment at their own pace.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The First Version of Terminus in Java</title>
   <link href="https://mprat.org/projects/terminus/2011/05/10/first-java-version.html"/>
   <updated>2011-05-10T00:00:00+00:00</updated>
   <id>https://mprat.org/projects/terminus/2011/05/10/first-java-version</id>
   <content type="html">&lt;p&gt;A first attempt was made in Java. It was pretty decent for a final project for a non-coding class. And it had sweet graphics.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h4 id=&quot;before-you-code-design&quot;&gt;Before you code: design!&lt;/h4&gt;

&lt;p&gt;The name of your game can make or break your success. Fortunately, &lt;strong&gt;Terminus&lt;/strong&gt; sounds both sufficiently cool and sufficiently related to the word “terminal” that our job in that respect was done. The medium was also a no-brainer: the ideal metaphor is no metaphor at all. For us, because we were teaching terminal commands, it made the most sense for Terminus to be a computer game.&lt;/p&gt;

&lt;p&gt;Before starting full-force on the development of the game, factors like the audience, basic mechanics, plot lines, and outstanding features need to be fleshed out to avoid unpleasantness later on.&lt;/p&gt;

&lt;h4 id=&quot;know-the-problem&quot;&gt;Know the problem&lt;/h4&gt;

&lt;p&gt;We identified a few main barriers to learning terminal commands that we tried to overcome with game design and aesthetic choices:&lt;/p&gt;

&lt;ul class=&quot;detail-list&quot;&gt;
  &lt;li class=&quot;detail-text&quot;&gt;The terminal is ugly&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Documentation is convoluted, hard to find, and sparse&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;The terminal is unforgiveable - if you mess up there is no “CTRL-Z”&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;The immediate benefit of learning terminal commands is not obvious&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The choices in mechanics and aesthetics attempt to battle (and in some cases mockingly mimic) these barriers.&lt;/p&gt;

&lt;h4 id=&quot;know-the-audience&quot;&gt;Know the Audience&lt;/h4&gt;

&lt;p&gt;Our target audience was high school and early college students. These were people who have use for knowing terminal commands, or are likely to be deciding whether they “get” or “don’t get” computers. We wanted to capture and engage the population that would benefit from learning the terminal - either to advance their chosen academic track or to move them towards a technical education.&lt;/p&gt;

&lt;p&gt;On one hand, this audience was an easy one, since we knew them well: we were in the same age group. On the other hand, this audience is a fickle one, hard to please and easily distracted. And yet another problem was that we did not exactly fall within our target audience, since most of us were already familiar with using the terminal. We anticipated problems later on for testing, but went ahead with the design process.&lt;/p&gt;

&lt;h4 id=&quot;game-design-mechanics-and-play&quot;&gt;Game design: mechanics and play&lt;/h4&gt;

&lt;p&gt;A text-based adventure could only be successful if the gameplay, plot, and activities are engaging enough for the user. Our first big challenge was to create a storyline around the various terminal commands that was engaging enough for our target audience.&lt;/p&gt;

&lt;p&gt;We settled on a basic gameplay that drew analogies between terminal concepts and fantastical experiences:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;strong&gt;computer&lt;/strong&gt;&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;&lt;strong&gt;abstraction&lt;/strong&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;file system&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;a series of rooms&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;terminal commands&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;spells&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;the cursor&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;your position&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;And instead of commands like “go north”, we used parallels from the computing world to explain the new “spells”:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;&lt;strong&gt;command&lt;/strong&gt;&lt;/th&gt;
      &lt;th style=&quot;text-align: left&quot;&gt;&lt;strong&gt;abstraction&lt;/strong&gt;&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;cd&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;“&lt;strong&gt;c&lt;/strong&gt;hange &lt;strong&gt;d&lt;/strong&gt;irection”&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;ls&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;“&lt;strong&gt;l&lt;/strong&gt;ook at your &lt;strong&gt;s&lt;/strong&gt;urroundings”&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;grep&lt;/td&gt;
      &lt;td style=&quot;text-align: left&quot;&gt;a cute sidekick elf&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;A huge benefit of the game being themed around magic is that any discrepancies with reality are merely brushed into the voodoo pile. The abstraction of a “spell” alludes to an underlying respect for the systems that you deal with when interacting with the terminal - it sets up the learner to expect to not understand everything at face value.&lt;/p&gt;

&lt;p&gt;The game starts immediately with role play: you are a wizard in training, learning the spells of the great masters. You are told you are on a quest to find the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo&lt;/code&gt; password, needing to enlist the help of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grep&lt;/code&gt; your elf friend. As you interact with the environment, move through the world, and reach the end of the first level, you are given a series of tasks that force practice of basic commands like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;less&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mv&lt;/code&gt;. We identified these four commands has the most important to teach initially, based on merely our own experience. At first our design of the world, challenges, and tasks included practice of an ambitious set of commands, but time constraints forced us to pick a few to focus on. When moving forward, more thought and data gathering needs to be placed on which commands to introduce in order.&lt;/p&gt;

&lt;p&gt;The environment itself was designed to be completely safe - you cannot execute arbitrary commands, and there is no possibility in harming the game itself with any mistakes. Unlike a real terminal, Terminus will forgive the user for their mistakes.&lt;/p&gt;

&lt;h4 id=&quot;game-design-aesthetic&quot;&gt;Game design: aesthetic&lt;/h4&gt;

&lt;p&gt;Lastly, we decided that the game would benefit from pictures that added to the allure of the game. Retro-pixel-art graphics would add to the gamification, bringing in silly pictures to reward the user when they typed correct commands.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/terminus_java1.png&quot; alt=&quot;Screenshot of the opening page of Terminus, the first Java version&quot; class=&quot;terminus-java1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The aesthetic was clean and simple: terminal on the left, rewarding picture on the right.&lt;/p&gt;

&lt;h4 id=&quot;java-is-the-chosen-one&quot;&gt;Java is the chosen one&lt;/h4&gt;

&lt;p&gt;I was nearing the end of my sophomore year at MIT when the Terminus project started. At that point, I was not yet a declared computer science major. I had taken 6.01, MIT’s introductory computer science class taught in very basic python, but the language I was most familiar with was Java. I had taken it in high school just 2-3 years before, and was taking 6.005, MIT’s software development class taught in Java, that semester.&lt;/p&gt;

&lt;p&gt;11.127 was not a computer science class (by all MIT standards it was “a humanities class”) and therefore deserved the best ratio of excellence to effort. Out of our group of five, it was decided that Shawn and I were going to be the main coders. Because I was less experienced, we chose Java (my then-comfort language) as our language of choice - it would be easiest to code with the least amount of effort.&lt;/p&gt;

&lt;p&gt;Absolutely no thought was given to the distribution of the game: we were going for pure ease of finishing. That’s how our first version of Terminus ended up as a Java program.&lt;/p&gt;

&lt;p&gt;Back in the day before Github became cool, our code repository was hosted on MIT servers as a password-protected SVN repository. I have since uploaded the (decompiled Java) code to Github, but have lost all SVN commits and tags because of coding inexperience.&lt;/p&gt;

&lt;h4 id=&quot;graphics&quot;&gt;Graphics&lt;/h4&gt;

&lt;p&gt;Emma was excited about trying graphic design, so she took on the role of lead designer, making all the retro-90s-pixel-graphics for the first Java version of Terminus.&lt;/p&gt;

&lt;h4 id=&quot;lessons-learned&quot;&gt;Lessons learned&lt;/h4&gt;

&lt;p&gt;The main takeaway from this design process was that no aspect of the design can be overlooked. We brainstormed and designed the gameplay and aesthetic, but neglected to think about the use case of a deployed version of the game: as a Java app, there is a high barrier to using the game in the first place. We should have approached building this game as a web application from the start. The technical challenges of building the application in Java (and with a time crunch of a final project deadline) were the challenges of novice coders building a system - version control, namespace variables, adequate commenting, and code system design were all issues we ran into that could have been improved for the next time.&lt;/p&gt;

&lt;p&gt;Moving forward, don’t make Java apps if you want to have your products delivered, and make sure to use git rather than SVN.&lt;/p&gt;

&lt;p&gt;In conclusion, the first version of Terminus as a Java application made a beautiful final project for 11.127/CMS.590.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Playing Zork on Linux</title>
   <link href="https://mprat.org/blog/2011/04/28/playing-zork-on-linux.html"/>
   <updated>2011-04-28T00:00:00+00:00</updated>
   <id>https://mprat.org/blog/2011/04/28/playing-zork-on-linux</id>
   <content type="html">&lt;p&gt;The inspiration behind Terminus, Zork, is a fantastic game. Here’s a guide for how to set it up to play on your Linux machine (tested on Ubuntu &amp;gt;= 12.04).&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h4 id=&quot;download&quot;&gt;Download&lt;/h4&gt;

&lt;p&gt;First, you need to download the game itself. &lt;a href=&quot;http://www.infocom-if.org/downloads/downloads.html&quot;&gt;Here&lt;/a&gt; is the link from Infocom, the company that was created by the original programmers of Zork. The Mac binaries of Zork I, Zork II, and Zork III are all available.&lt;/p&gt;

&lt;h4 id=&quot;software-packages&quot;&gt;Software packages&lt;/h4&gt;

&lt;p&gt;You need to install the following packages:&lt;/p&gt;

&lt;div lang=&quot;bash&quot; class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo apt-get install frotz uudeview
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;frotz&lt;/code&gt; will be used for running the game, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;uudeview&lt;/code&gt; is for uncompressing the files.&lt;/p&gt;

&lt;h4 id=&quot;go-go-go&quot;&gt;Go go go!&lt;/h4&gt;

&lt;ol class=&quot;detail-list&quot;&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Download the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.hqx&lt;/code&gt; file of your choosing from the &lt;a href=&quot;http://www.infocom-if.org/downloads/downloads.html&quot;&gt;Zork download&lt;/a&gt; page.&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Move the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.hqx&lt;/code&gt; file from the download location to a location of your choosing using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mv&lt;/code&gt; command.&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;
    &lt;p&gt;Uncompress the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.hqx&lt;/code&gt; file using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;uudeview&lt;/code&gt; command with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-i&lt;/code&gt; flag (to disable interactivity).&lt;/p&gt;

    &lt;div lang=&quot;bash&quot; class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;uudeview -i zorki.hqx   	
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;
    &lt;p&gt;Use the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;frotz&lt;/code&gt; command to play.&lt;/p&gt;

    &lt;div lang=&quot;bash&quot; class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;frotz ZORKI  	
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;PROFIT!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/imgs/zork.png&quot; alt=&quot;Screenshot of Zork being played on a Linux machine&quot; id=&quot;zork-pic&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Enjoy the fun that is Zork!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Gamification and a Linux Learning Game</title>
   <link href="https://mprat.org/projects/terminus/2011/04/15/a-linux-learning-game.html"/>
   <updated>2011-04-15T00:00:00+00:00</updated>
   <id>https://mprat.org/projects/terminus/2011/04/15/a-linux-learning-game</id>
   <content type="html">&lt;p&gt;What started as a final project for a class ended up as an effective Linux-learning game.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h4 id=&quot;the-beginning-a-class&quot;&gt;The beginning: a class&lt;/h4&gt;

&lt;p&gt;This semester (Spring 2011) I took one of the most enjoyable classes I have ever taken at MIT: 11.127/CMS.590, or Educational Games, taught by &lt;a href=&quot;http://education.mit.edu/people/eric-klopfer&quot;&gt;Professor Eric Klopfer&lt;/a&gt; from the Urban Studies and Planning department. (Since then, the class has been renamed &lt;a href=&quot;http://education.mit.edu/classes/11127&quot;&gt;Computer Games and Simulations for Education and Exploration&lt;/a&gt;.) The main goal of the class was to discuss and utilize gamification techniques to create games that were both educational and fun. At the end of the semester, our project groups were to use the gamification principles we studied to create effective learning games.&lt;/p&gt;

&lt;h4 id=&quot;gamification&quot;&gt;Gamification&lt;/h4&gt;

&lt;p&gt;The idea behind gamification is simple. “Gamification” is the act of turning something into a game. When applied to education and learning, it is even simpler. You make something into a game, and learners find it more fun. Because learners find it more fun, they learn more. Although education and gaming experts disagree about exactly what constitutes gamification, a few sample characteristics are:&lt;/p&gt;

&lt;ul class=&quot;detail-list&quot;&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Competition (either with yourself or against others)&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Narrative (plot, characters)&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Exploration (giving the user interesting choice)&lt;/li&gt;
  &lt;li class=&quot;detail-text&quot;&gt;Rewards (points, virtual currency, stars)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(partially edited and bastardized from the &lt;a href=&quot;http://en.wikipedia.org/wiki/Gamification&quot;&gt;Wikipedia article&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Services like Foursquare thrive on the idea of gamification: you get points by checking in to a location and earning rewards. But less obvious examples are also elements of gamification. For example, Github’s repository “stars”: &lt;img src=&quot;/imgs/github_stars.png&quot; alt=&quot;Github's stars on a repository for Terminus&quot; id=&quot;github-stars&quot; /&gt; and Yelp’s compliment icons: &lt;img src=&quot;/imgs/yelp_compliments1.png&quot; alt=&quot;Yelp's compliment icons and badges&quot; id=&quot;yelp-comp&quot; /&gt;
These icons and rewards give the user freedom to explore the possibilities of the environment, creating a persona for themselves in whichever way they choose, possibly competing against others for particular achievements.&lt;/p&gt;

&lt;p&gt;One easy way to gamify something boring is to relate it to something more fun. Recycling bottles outside the supermarket gives rewards: you get money back! Safety trainings at work become increasingly similar to dramas about losing fingers, complete with suspenseful music. What is more fun - listening to someone talk about safety or &lt;em&gt;watching a movie&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;In the recycling example, the intent is not to educate, but rather to recycle as much material as possible. The relationship between money and materials is made obvious and the metaphor is clear: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;materials == money&lt;/code&gt;. You recycle more, you get more money (and the benefit to you is a mtaphor for the benefit of recycling on society). In the safety video example, there is a real educational goal. However, the relationship between the product and the gamification is completely off: safety is serious, but the gamified movie is not. Dramatic movies are purely for entertainment, so the gamification of the safety video exactly opposes the inherent message. Taking these two differences to light, we take anecdotal evidence for the success of the two gamified activities: in a high school classroom, you hear students talking about collecting recycled bottles to earn spare change, but while watching the safety video you hear sneers and laughs around the room.&lt;/p&gt;

&lt;p&gt;From this we learn a lesson: the closer the metaphor is to the desired lesson learned, the more effective the metaphor.&lt;/p&gt;

&lt;h4 id=&quot;the-task&quot;&gt;The task&lt;/h4&gt;

&lt;p&gt;For the last group assignment for 11.127 (to create any kind of game in any medium with significant educational value), my group and I decided to apply exactly this last principle - closely relating the metaphor to the lesson - quite literally.&lt;/p&gt;

&lt;h4 id=&quot;the-context&quot;&gt;The context&lt;/h4&gt;

&lt;p&gt;The Linux command-line terminal is a daunting black box. First looking at it, it looks like a void of nothingness waiting to eat you alive. 
&lt;img src=&quot;/imgs/terminal.png&quot; alt=&quot;A screenshot of a Linux command-line terminal&quot; id=&quot;terminal-pic&quot; /&gt;&lt;/p&gt;

&lt;p&gt;But if you’ve ever used a terminal, you know that it’s like exploring an unknown abyss, mapping a new land, discovering something new. For those who have played the 1977 interactive fiction text-based adventure, &lt;em&gt;Zork&lt;/em&gt;, this is nothing new. &lt;em&gt;Zork&lt;/em&gt;, the quintessential text-based adventure game written at MIT from 1977-1979, is arguably the most well-known text-based adventure game, originally written by Tim Anderson, Marc Blank, Bruce Daniels, and Dave Lebling from the MIT Dynamic Modeling Group. 
&lt;img src=&quot;/imgs/zork.png&quot; alt=&quot;Screenshot of Zork being played on a Linux machine&quot; id=&quot;zork-pic&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For a more detailed game-oriented history of Zork, check out &lt;a href=&quot;http://www.gamasutra.com/view/feature/1499/the_history_of_zork.php?print=1&quot;&gt;this Gamasutra article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But Zork was only played by computer nerds of the 1970s (and beyond). To play it required at least a familiarity of a terminal (back then it was a DOS box, much scarier than today’s modern Linux terminal). (Incidentally, if you want to play it and use Linux, &lt;a href=&quot;/yak-shaving/2011/04/28/playing-zork-on-linux.html&quot;&gt;here’s how&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;By today’s standards, Zork is not a “modern game,” but back then, it used the most advanced user-input techniques of the time: the keyboard and the DOS prompt. Shockingly (or perhaps not), the text-based adventure game model mimics what the programmers of that era knew inside and out - terminal commands.&lt;/p&gt;

&lt;h4 id=&quot;the-main-idea-the-main-goal&quot;&gt;The main idea; the main goal&lt;/h4&gt;

&lt;p&gt;Given the similarity between a user-terminal interaction and a user-text-based-adventure-game interaction, the Terminus team decided to tackle the problem of teaching users how to use the terminal through a gamified text-based adventure game.&lt;/p&gt;

&lt;p&gt;The main goal: to make the command-line terminal a less scary place. To use the techniques of gamification to teach terminal commands to users.&lt;/p&gt;

&lt;h4 id=&quot;the-original-team&quot;&gt;The original team&lt;/h4&gt;

&lt;p&gt;The original team was formed after discussion about the game idea during the 11.127 class sessions: Shawn Conrad ‘12/MEng ‘13, Michaela LaVan ‘12, Michele Pratusevich ‘13, Emma Tolley ‘11, and David Zhou ‘12 were the original team members. Most of the artwork credit goes to Emma Tolley, with later artwork being added by Shawn Conrad. Original storyboarding by Michaela LaVan and David Zhou.&lt;/p&gt;
</content>
 </entry>
 
 
</feed>