<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[azure sky]]></title>
  <link href="http://blog.azuresky.ca/atom.xml" rel="self"/>
  <link href="http://blog.azuresky.ca/"/>
  <updated>2012-02-17T07:56:09+00:00</updated>
  <id>http://blog.azuresky.ca/</id>
  <author>
    <name><![CDATA[Michael Chang]]></name>
    <email><![CDATA[michael.chang@azuresky.ca]]></email>
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Thoughts on French Toast]]></title>
    <link href="http://blog.azuresky.ca/blog/2012/02/thoughts-on-french-toast/"/>
    <updated>2012-02-17T07:51:00+00:00</updated>
    <id>http://blog.azuresky.ca/blog/2012/02/thoughts-on-french-toast</id>
    <content type="html"><![CDATA[<p>Attempted to make Baked French Toast today. Some thoughts for next time:</p>

<ul>
<li>Bread is supposed to absorb lots of egg/milk mixture. Adding more bread
is generally a bad idea.</li>
<li>Consider making egg/milk mixture ahead of time to make the recipe
easier to prepare. Or let the bread sit in the mixture in the fridge.</li>
<li>Add lots of cinnamon.</li>
<li>Consider how to add moisture &#8211; syrup, fruit, jam all come to mind.</li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Oreo Cheesecake Cupcakes]]></title>
    <link href="http://blog.azuresky.ca/blog/2012/02/oreo-cheesecake-cupcakes/"/>
    <updated>2012-02-14T01:04:00+00:00</updated>
    <id>http://blog.azuresky.ca/blog/2012/02/oreo-cheesecake-cupcakes</id>
    <content type="html"><![CDATA[<ol>
<li>Preheat oven to <strong>275 F (135 C)</strong>.</li>
<li>Line <strong>16 muffin tins</strong> with paper liners. (Fill empty slots in a
muffin tin with water.)</li>
<li>Place <strong>one oreo (whole)</strong> in the bottom of each of the sixteen cups.</li>
<li>Beat <strong>2 8-oz packages cream cheese</strong>.</li>
<li>Gradually beat in <strong>1/2 cup sugar</strong> and <strong>1/2 teaspoon vanilla</strong>.</li>
<li>Gradually pour in <strong>2 large eggs, lightly beaten</strong>.</li>
<li>Beat in <strong>1/2 cup sour cream</strong> and a <strong>pinch of salt</strong>.</li>
<li><strong>Pour</strong> batter into the tins, filling each almost to the top.</li>
<li><strong>Bake</strong>, rotating pan halfway through, until filling is set (about
22-25 minutes).</li>
<li><strong>Cool</strong> in pans at least 15 minutes, then <strong>refrigerate</strong> at least
four hours.</li>
</ol>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[What I Really Wish I Knew In 1B]]></title>
    <link href="http://blog.azuresky.ca/blog/2012/02/what-i-really-wish-i-knew-in-1b/"/>
    <updated>2012-02-11T11:13:00+00:00</updated>
    <id>http://blog.azuresky.ca/blog/2012/02/what-i-really-wish-i-knew-in-1b</id>
    <content type="html"><![CDATA[<p><em>I originally wrote this article for
<a href="http://mathnews.uwaterloo.ca/wordpress/?p=1809">Volume 118, Issue 3</a>
of mathNEWS.</em></p>

<h2>Sleep is Important</h2>

<p>It&#8217;s easy to get caught up in interviews, assignments, projects,
midterms, and late nights playing board games. Don&#8217;t forget to sleep!
As much as your friends may brag about getting through the week on
three hours of sleep, you&#8217;ll be much more productive if your manage
your energy and get enough sleep through the week.</p>

<h2>Find Your Passion</h2>

<p>You will find many opportunities to make decisions in your life. You might
be choosing between sleeping or studying for another three hours, between
a co-op opportunity in the San Francisco Bay Area or a co-op opportunity
in Kitchener, or between pasta or breaded fish at the cafeteria.</p>

<p>So why are you wasting your time doing things you don&#8217;t like and that
won&#8217;t take you a step closer to reaching your goals? When you put down
this paper, go do something that will make your life better.</p>

<h2>Don&#8217;t Date Someone From Your Cohort</h2>

<p>If you are (un)fortunate enough to be in a program with a cohort, think
<strong>very carefully</strong> before dating someone in your class. There are so many
ways it could end horribly. I&#8217;ll let your imagination run wild here.</p>

<h2>Volunteering</h2>

<p>If you were one of the people who enjoyed volunteering in high school,
don&#8217;t just give up on it now that you&#8217;re here! Even if you&#8217;re not in
Engineering, WE-Connect, part of Waterloo Engineering Outreach, is
involved with many events where you can get involved. Every year,
volunteers are needed for the FIRST Lego League and the FIRST Robotics
Regional Competition on campus. Become an Orientation leader. Start a
business on campus. Run for student government. Get involved!</p>

<h2>Internet</h2>

<p>Whenever you go on Facebook, Twitter, or OMGUW, remember that you&#8217;re
representing the university - whether you like it or not. We&#8217;ll have to
see whether we&#8217;re going to clamp down and not put anything on the
Internet, or whether we&#8217;re going to accept that people do stupid things
and that it&#8217;s funny. Until then, think before you post.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[zsync: client-side rsync over HTTP]]></title>
    <link href="http://blog.azuresky.ca/blog/2012/01/zsync-client-side-rsync-over-http/"/>
    <updated>2012-01-27T05:03:00+00:00</updated>
    <id>http://blog.azuresky.ca/blog/2012/01/zsync-client-side-rsync-over-http</id>
    <content type="html"><![CDATA[<p> <em>I originally wrote this article for Volume 118, Issue 2 of mathNEWS.</em></p>

<p>I wonder when 4 GB+ virtual machine images became the norm in CS classes at this institution, but it&#8217;s clear that the network infrastructure outside of campus is clearly not ready to handle dozens of students downloading such large files all at once.</p>

<p>zsync is a tool that uses the rsync algorithm to download a file from a server, but with pre-computed metadata to help the algorithm scale well (and run over regular web servers). This allows users to resume incomplete downloads and verify your file is complete in one step. Packages may be available for your Linux distribution of choice. As of the time of writing, it&#8217;s available on homebrew (Mac) and Cygwin (Windows) as well. Sources can also be downloaded from <a href="http://zsync.moria.org.uk/downloads">http://zsync.moria.org.uk/downloads</a>.</p>

<p>I first ran into zsync when I was downloading a Ubuntu release, and I&#8217;ve started using it over jigdo.</p>

<p>For TAs and support staff, making content available by zsync is straightforward. Simply run:</p>

<p><code>zsyncmake -C -e -u <em>&lt;url&gt;</em> <em>&lt;file&gt;</em></code></p>

<p>For example, for the CS 136 VM, one could run:</p>

<p><code>zsyncmake -C -e -u http://www.student.cs.uwaterloo.ca/~cs136/VirtualMachine/CS136.ova ~cs136/public_html/VirtualMachine/CS136.ova</code></p>

<p>This creates a <em>&lt;file&gt;.zsync</em> file containing metadata and checksums which the zsync client can use. Simply make this file available in public_html (perhaps in the same folder as the Open Virtualization Archive (OVA) itself).</p>

<p>For students, once zsync is installed, downloading a file is as simple as</p>

<p><code>zsync <em>&lt;url&gt;</em></code></p>

<p>Where <em>&lt;url&gt;</em> is the URL of the .zsync metadata file. The man page contains details on other flags, which may be useful if you are resuming an incomplete download or trying to sync from a file with a different name and similar contents (e.g. a previous version of a virtual machine).</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Software Engineers Attend Conference]]></title>
    <link href="http://blog.azuresky.ca/blog/2012/01/software-engineers-attend-conference/"/>
    <updated>2012-01-27T05:03:00+00:00</updated>
    <id>http://blog.azuresky.ca/blog/2012/01/software-engineers-attend-conference</id>
    <content type="html"><![CDATA[<p> <em>I originally wrote this article for Volume 118, Issue 2 of mathNEWS.</em></p>

<p>Last week, nearly two dozen students represented Waterloo at the Canadian Undergraduate Software Engineering Conference (CUSEC) in Montreal, Quebec. In between shivering through the Montreal Winter, discovering the RESO (underground city), and trying to help egg-cat with their homework assignments, we absorbed knowledge from the following speakers:</p>

<p><strong>Alexis Ohanian</strong>, founder of Reddit, spoke about progress made against SOPA/PIPA; how it is the World&#8217;s Internet, not America&#8217;s Internet; how the fight isn&#8217;t nearly over yet.</p>

<p><strong>Jeremy Ashkenas</strong>, creator of CoffeeScript, argued the case for code as an art form, rather than just a process to be engineered.</p>

<p><strong>Greg Kroah-Hartman</strong>, Linux kernel developer, talked about how big the kernel is, how much it changes every day, and how to get involved contributing patches as a kernel newbie.</p>

<p><strong>Bret Victor</strong>, known for designing experimental UI concepts at Apple, discussed how current code-compile-debug cycles require the programmer to execute code in one&#8217;s head, and that the latency of interaction for developers makes it difficult to discover novel things about code. He also demoed a real-time JavaScript IDE concept that updated a canvas in real time, allowed <a href="http://worrydream.com/ScrubbingCalculator/">variables&#8217; values to be tweaked by dragging sliders</a>, and displayed the <a href="http://worrydream.com/LadderOfAbstraction/">trajectory of a player across time</a>. He then spoke about having a guiding principle, gave examples of historical figures with guiding principles, and then discussed the pros and cons of living by your own guiding principle &#8211; to a standing ovation.</p>

<p><strong>Manveer Heir</strong>, Senior Designer at BioWare, warned everyone sternly to stay as far away from the game industry as possible &#8211; before telling those who remained how to get in, and what it&#8217;s like in the industry.</p>

<p>In between speakers, we ran around handing out resumes and making pleasant conversation, rode up and down the hotel elevators, and talked in our sleep. We played chess amongst ourselves at games night, taught the first-years how to tip at a pub, and made it back to Waterloo.</p>

<p>Now for a week of catching up on assignments and studying for quizzes.</p>

<p>Maybe we&#8217;ll actually get a chance to pay back some of our sleep debt. Next week.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Is Life Without a Laptop Still Feasible?]]></title>
    <link href="http://blog.azuresky.ca/blog/2012/01/is-life-without-a-laptop-still-feasible/"/>
    <updated>2012-01-27T05:02:00+00:00</updated>
    <id>http://blog.azuresky.ca/blog/2012/01/is-life-without-a-laptop-still-feasible</id>
    <content type="html"><![CDATA[<p><em>I originally wrote this article for Volume 118, Issue 2 of mathNEWS.</em></p>

<p>When I was in first year, I went without a laptop.</p>

<p>Why?</p>

<p>Laptops are heavy, expensive, or both. Their bright, ever-flashing screens potentially distract dozens of one&#8217;s peers when used in lecture halls. You&#8217;re always hunting for the next electrical outlet, so that you&#8217;re not locked out of your own data by a dead battery. They depreciate in value really quickly.</p>

<p><em>They</em> told me that it was possible to complete all my assignments without a laptop. We had labs on campus, after all. Granted, campus was really far from Ron Eydt Village for those long, cold, February nights, but at least they were there. At least one was open, no matter what hour of day or night. If there was ever a night where I had trouble sleeping, I could procrastinate on Facebook for an hour or two before diving into nano (&#8211; I hadn&#8217;t yet bothered to try out vim or emacs &#8211;), finishing off my assignment, and uploading my code to Marmoset.</p>

<p>This term, I realized something was different. The Piazza group for CS 136 contained this question:</p>

<blockquote>
<strong>Linux Labs</strong><br />
Just wondering where exactly the Linux labs are? http://www.cs.uwaterloo.ca/cscf/teaching/labs Lists the Linux labs as CS488 students only - any ideas?</blockquote>


<p>And, in one of the follow-up responses:</p>

<blockquote>So I can login in MC3006, but I&#8217;m not logging into a Ubuntu system. I have gedit, but not RunC. What am I screwing up here?</blockquote>


<p>It occurs to me that there no longer appears to be a documented 24/7 X11/RDP lab for general use by CS students.</p>

<p>Not that there aren&#8217;t options. There are certainly alternatives &#8211; one could use the RDP clients maintained by MFCF to access their Solaris and Windows machines, and then use SSH (and probably X-forwarding) to access the undergraduate CS environment. One could likewise use SSH/X-forwarding/Portable Xming on the Nexus machines maintained by other faculties, like Engineering or AHS. Or one could figure out how to get X-forwarding to work in one of the Mac labs &#8211; though that tends to be more hit-and-miss than I&#8217;d like.</p>

<p>One could also skip lectures to do the assignments during the few precious hours when the labs actually are open, Monday to Friday, 0800 to 2100. Gosh, my bank has better hours than that. It&#8217;s open on Saturday, for example.</p>

<p>As for me; I&#8217;ve been borrowing my friend&#8217;s old laptops for almost eight months now. I hate this feeling of being constantly chained to the edges of the room where laptop outlets exist. I miss all times I met and absorbed knowledge from upper-years at two in the morning. I feel less like a ninja and more like a zombie. I&#8217;m also constantly afraid that I&#8217;ll submit an assignment that works <em>just fine</em> when run over SSH X-forwarding, and yet mysteriously breaks when run on ye olde thin client. Perhaps I&#8217;m being paranoid. I do wonder, though, whether I&#8217;d survive, if I was a first-year today.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Thoughts on Two-Factor Authentication]]></title>
    <link href="http://blog.azuresky.ca/blog/2012/01/thoughts-on-two-factor-authentication/"/>
    <updated>2012-01-17T03:39:00+00:00</updated>
    <id>http://blog.azuresky.ca/blog/2012/01/thoughts-on-two-factor-authentication</id>
    <content type="html"><![CDATA[<p><em>I originally wrote this article for Volume 117 of mathNEWS.</em></p>

<p><strong>WARNING:</strong> Two-Factor Authentication isn&#8217;t for
everybody. Just as it helps keep bad people out of your account(s), it
can be just as easily used to lock yourself out of your own
account(s). You lose access to your account if your phone is stolen or
wiped, your phone&#8217;s battery dies, if the time on your phone is
inaccurate, or if you accidentally delete your key from your
phone.Make sure you know what you&#8217;re doing and evaluate the risks and
benefits before you consider enabling Google Authenticator, or any
other form of two-factor authentication.</p>

<p>Today, many of us store lots of data in the cloud. Many of us
archive years&#8217; worth of email in GMail, store hundreds (thousands?) on
Facebook, and host our websites on self-managed Virtual Private
Servers. (Okay, maybe not <em>all</em> of us do that last one,
but enough of my classmates do that I think it&#8217;s worth thinking
about.) And it&#8217;s not uncommon for all of this data to be protected by
mere six to eight character alphanumeric passwords. While most of you
are too smart to use a password that can be found in a dictionary, I
wonder: How many of you use the same password across multiple sites on
the Internet? How many of you store your WatIAM password in plaintext
on your hard drive? Could you bear to lose all those precious emails
to the actions of a malicious stranger? Could you bear to have one of
your peers reject your dream co-op job on your behalf after swiping
your password after &#8220;borrowing&#8221; your laptop? While Google
Authenticator won&#8217;t help with your JobMine woes, it can help you
protect your email account from being compromised &#8211; because an
attacker would need both your <strong>password</strong> and your
<em>phone</em> in order to access your account remotely.</p>

<p>Google Authenticator is comprised of two parts - software that runs
on your smartphone to generate time-based one-time passwords (TOTPs),
and software on the server side which should be capable of verifying
those one-time passwords. The smartphone software is available for iOS
(3.1.3+), Android (1.5+), and BlackBerry (4.5-6.0) devices. Enabling
Google Authenticator is outside of the scope of this article, but if
you perform a search with your favourite search engine, you&#8217;ll likely
find instructions on how to use it.</p>

<p>I&#8217;ve spent the past two weeks using Google Authenticator. It hasn&#8217;t
particularly been a walk in the park, but it&#8217;s quite functional.</p>

<p>Initially setting up the application-specific password for my phone
to use to sync with GMail took a bit of fiddling. I&#8217;ve had to be
especially careful about making sure my phone&#8217;s battery never dies
(and making sure I always have my spare battery fully charged).
Pulling my phone out and unlocking it in the middle of what used to be
a five second email check is a bit cumbersome. After a while, though,
the extra password step becomes routine when I&#8217;m using Google services
on an untrusted (e.g. work) computer. I&#8217;ve also had to forego my usual
experimenting with new Android ROMs because I need my phone to be
stable if I want to be able to access&#8230; well, everything. Little
inconveniences&#8230; but that&#8217;s all security really is, these days.</p>

<p>That said, there&#8217;s been some pretty nifty stuff too. The other day
I also discovered that LastPass supports Google Authenticator as a
second factor. Granted, it&#8217;s a bit awkward to use LastPass with Google
services (enter a password and a TOTP to access software that fills in
a username and password so I can be asked for another TOTP&#8230; :/) so
I&#8217;ve gone back to using a memorable password for Google, but I&#8217;ve now
started using LastPass handle some of the other passwords in my life.
As well, a few hours ago, I managed to get the Google Authenticator PAM
to work on one of my servers. Granted, dealing with time skew was an
issue (the server takes the time from the Dom0, which isn&#8217;t
particularly in sync with internet time&#8230;) but apart from some hacks
(answering yes an extra time during configuration) to deal with that,
it works rather nicely.</p>

<p>To be honest, though, I&#8217;m not sure how much longer I&#8217;ll keep using
Google Authenticator. On the one hand, once I got past the initial
set-up, things worked really well. On the other hand, I still have to
deal with using the same password to access unofficial student
records, enroll in classes, rank job offers, and check homework
assignments online. Half of the banks I use still demand that online
banking use an alphanumeric password that is exactly six, seven, or
eight characters long. It seems somewhat silly by comparison to
protect years-old email exchanges with two-factor auth when some
supreme entity or other has declared such short alphanumeric passwords
as sufficient for almost everything else in my life.</p>

<p>I do think it&#8217;d be absurd to try and force everyone to use
two-factor auth. It depends on what trade-offs each user is willing to
make. As it is, I&#8217;m forced to use a &#8220;stronger&#8221; password to log on to a
computer in a CS lab (which easily happens every day) and a weaker
password to enroll in classes (which happens maybe once a term) and a
weaker password yet to tell my bank to pay my tuition for the term.
Why? It should clearly be the other way around.</p>

<p>Still, for the paranoid among us&#8230; Google Authenticator is there.
The source is available&#8230; or you can just use it. Or not. The
decision is yours to make.</p>
]]></content>
  </entry>
  
</feed>

