<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2753406156787341079</id><updated>2012-01-26T21:31:26.507-08:00</updated><category term='ethics'/><category term='scheme'/><category term='computer science'/><category term='education'/><category term='feed'/><category term='java'/><category term='austin'/><category term='vacation'/><category term='programming'/><category term='study abroad'/><category term='random'/><category term='shaim'/><category term='lisp'/><category term='advertising'/><category term='open source'/><category term='grad school'/><category term='django'/><category term='earthquake'/><category term='life'/><category term='c#'/><category term='miscellany'/><category term='interview'/><category term='taiwan'/><category term='f#'/><category term='purdue'/><category term='python'/><category term='digg'/><category term='entertainment'/><category term='silencer'/><category term='microsoft'/><category term='oopsla'/><category term='ubuntu'/><category term='programming languages'/><category term='boston'/><category term='work'/><category term='rant'/><category term='ragel'/><category term='google'/><title type='text'>Words on a Blog</title><subtitle type='html'>memoirs of some dude who isn't very good at naming things</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>59</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-7755283194222696071</id><published>2012-01-01T23:38:00.001-08:00</published><updated>2012-01-01T23:54:23.552-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='work'/><category scheme='http://www.blogger.com/atom/ns#' term='grad school'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>2011 in recap</title><content type='html'>&lt;p&gt;It's been precisely a year since my last post, so I guess it's time to make another one! I really wish there was a blogging platform with Google+ sharing controls. Wordpress has a great post editor but only supports public/private. Blogger has neither, and it &lt;i&gt;still&lt;/i&gt; doesn't support paragraph tags. Google+ posts are too simple formatting-wise and aren't easily searchable. It's 2012, where's my perfect blogging software?&lt;/p&gt;

&lt;p&gt;Time really does fly as you get older. At the beginning of 2011, I was still in school, living the life of an unhealthy grad student. May rolled around and I graduated. I slacked off for a few months and road tripped across the US to Seattle. It was surprisingly more fun than I imagined a road trip would be, but I'm not going to blog about it here. There are pictures on Facebook and Google+, for those of you that can see them.&lt;/p&gt;

&lt;p&gt;I started work at Google on August 1st. Easy to remember, but I'll probably forget anyway. Life has gone by pretty quickly since then; I've almost been working for half a year! I definitely miss the copious amounts of free time and nap time that I had before, but I guess working makes me use my time more efficiently.&lt;/p&gt;

&lt;p&gt;I definitely feel happier working. I can't quite explain why, but it certainly helps that Google treats its employees very well. I think taking better care of myself has put me in a better mental and physical state. Some parts of grad school were quite stressful at times, as my last post mentioned.&lt;/p&gt;

&lt;p&gt;Unfortunately, my life just isn't that exciting where I have so much I want to say about it. I'm content with not being super exciting. What am I looking forward to in 2012? Hmm, hard to say. Releasing my first big change should be "interesting" to say the least. Since I'm approaching six months of work, I should take interview training so I can visit Purdue some time. Oh, and I guess that &lt;i&gt;minor&lt;/i&gt; detail of potentially buying a condo. More on that later...maybe.&lt;/p&gt;

&lt;p&gt;Oh, and have a new template. Wee.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-7755283194222696071?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/7755283194222696071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=7755283194222696071' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7755283194222696071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7755283194222696071'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2012/01/2011-in-recap.html' title='2011 in recap'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-8639807332219769622</id><published>2011-01-01T20:25:00.001-08:00</published><updated>2011-01-01T20:26:02.532-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>2011: A new year, a new post</title><content type='html'>&lt;p&gt;New years aren't actually that exciting to me. In fact, I may or may not have missed 12am, due to playing video games. This New Year's Day was going to be more interesting, since it was the official deadline for me to decide on whether or not to accept my offer from Google &amp;ndash; the one I apparently didn't write about. I ended up deciding several weeks ago to accept the offer; most people who will read this probably already saw my Facebook status from the day I mailed my offer letter back. The decision didn't end up being easy (hurray life-altering choices), but I ended up making it based on the fact that I didn't progress to a point where I would be comfortable spending the next few years working on a thesis. Stopping at a Master's now makes the most sense, since I'll finish my requirements in May. At any rate, a new phase of life begins this year. I guess that phase is called "growing up." It should be...interesting.&lt;/p&gt;

&lt;p&gt;In other news, my family went on a cruise for winter vacation this year. The respite from cold and snow was great and I think everyone had a good time. In hindsight, I think I really needed a break from the Internet and work. Despite taking a leisurely one class, toward the end of the semester, I think stress and frustration with various things/people were starting to take its toll on my well-being. The best ship entertainment was easily &lt;a href="http://www.secondcity.com/"&gt;Second City&lt;/a&gt;. I didn't see them when they came to Purdue and now I regret it. &lt;a href="http://www.ohwhatanighttribute.com/"&gt;Oh What a Night!&lt;/a&gt; was also a great act &amp;ndash; a tribute to the music of &lt;a href="http://en.wikipedia.org/wiki/The_Four_Seasons_(band)"&gt;The Four Seasons&lt;/a&gt;, interleaved with comedic banter. Eating cheesecake every night was also good entertainment. I made a Google Map to show where we went and put some details on the markers. Unfortunately, I didn't use my camera at all, so I have no pictures.&lt;/p&gt;

&lt;iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;msa=0&amp;amp;msid=207427549656916046580.000498d418f64b4589f29&amp;amp;ll=21.248422,-84.594727&amp;amp;spn=14.179547,18.676758&amp;amp;z=5&amp;amp;output=embed"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;View &lt;a href="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;msa=0&amp;amp;msid=207427549656916046580.000498d418f64b4589f29&amp;amp;ll=21.248422,-84.594727&amp;amp;spn=14.179547,18.676758&amp;amp;z=5&amp;amp;source=embed" style="color:#0000FF;text-align:left"&gt;Christmas 2010 Vacation Cruise&lt;/a&gt; in a larger map&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-8639807332219769622?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/8639807332219769622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=8639807332219769622' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/8639807332219769622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/8639807332219769622'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2011/01/2011-new-year-new-post.html' title='2011: A new year, a new post'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-1580947915233362540</id><published>2010-08-27T21:15:00.004-07:00</published><updated>2010-08-27T21:19:24.685-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='purdue'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>State of Computer Science at Purdue...address</title><content type='html'>&lt;p&gt;My post entitled &lt;a href="http://saiyr.blogspot.com/2007/03/apparently-computer-science-at-purdue.html"&gt;"Apparently computer science at Purdue sucks"&lt;/a&gt; is by far the most popular on this blog. Most of the views seem to come from searching for some combination of "Purdue", "computer science", and "sucks". There's a boatload of negativity in the comments and the post itself is over 3 years old, so I thought I'd give a refresh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; I am no longer an undergrad at Purdue. I'm a grad student now and have experienced the other side of some of the things mentioned in the comments. However, this also means I'm less in touch with what other people are saying about the undergrad CS program. Most of these opinions are my own.&lt;/p&gt;

&lt;p&gt;A few years ago, Professor Mathur took the helm as head of the CS department at Purdue. Let me just say to the naysayers that I believe he has taken our department in a very positive direction and that I would have counted myself very lucky to have some of the things that have been introduced under his watch. To name a few:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;em&gt;Software engineering specialization.&lt;/em&gt; This is one of the first things implemented. Having any specialization at all is a giant step forward. This is/was a bit of a mixed blessing because my experience in CS307 (Software Engineering) was not that enjoyable. Nevertheless, the problem is orthogonal to having specializations.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Five year BS/MS.&lt;/em&gt; I definitely would have stayed for this if it had been implemented before I graduated. Unlike many people, I like class. Having an extra year and getting another degree out of it has no downsides to me.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Track specializations.&lt;/em&gt; This is more or less the next step after the software engineering specialization, from what I can see. The first two years are still the standard core courses (CS180, CS182, CS240, CS250, CS251) plus CS252, dubbed "Systems Programming". From there, it branches out into seven possible tracks. This is much more flexible than before, since people can now get by without taking the "dreaded" compilers. To me, this is unfortunate (because I specialize in programming languages), but I can easily understand the reasoning. This also means that, for example, people who are interested in math-intensive CS can do the Foundations of CS track.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Conversion of CS177 to Python.&lt;/em&gt; This wouldn't have affected me, but this change is huge. They seem to be using &lt;a href="http://computinged.wordpress.com/"&gt;Mark Guzdial's&lt;/a&gt; &lt;a href="http://www.pearsonhighered.com/educator/product/Introduction-to-Computing-and-Programming-in-Python-A-Multimedia-Approach/9780136060239.page"&gt;media computation book&lt;/a&gt;. I definitely think this is a step in the right direction compared to previous iterations of the course (Java, and HTML/Javascript). I would love to TA this class so I wouldn't have to worry about people having horrible indentation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Of course, we're far from a perfect CS department. If we were, people would stop commenting on my blog and I wouldn't have to write this post. Here are some ideas:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;em&gt;Reintroduce CS381 as a core course.&lt;/em&gt; I see some weaknesses with the introduction of tracks in that you can get by without taking CS381 (algorithms). I can understand removing compilers from the core set of classes, but unless CS251 (data structures) is doing substantially more work, I believe this is a big mistake. Sure, it's an elective in these instances, but I don't consider that to be sufficient. Making this class required sacrifices a lot of flexibility, but I find it odd that anybody would be able to get a degree in computer science without an algorithms class.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Introduce an entrepreneurial track.&lt;/em&gt; This may not be reasonable/feasible, but I just thought of it. Perhaps it should be a specialization that goes alongside an existing track, but I think it would be a good idea to foster the minds of business-oriented students. In particular, I think it should really emphasize the blend of CS and business, from web startups to...not web startups. I don't think this quite fits into a management minor, though there may be a bit of overlap.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Implement course outcomes.&lt;/em&gt; I now feel that course standardization is a necessary evil. Engineering has outcomes, which guarantees that any student that passes the class has at least a basic understanding the concepts taught in the class. This would give a more uniform education to all CS students, since professors would need to adhere to the designed curriculum, which therefore guarantees that any CS alum has at least a basic understanding of all of the concepts in all of his/her classes.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Kill off Solaris labs.&lt;/em&gt; Someone I had numerous disagreements with &lt;em&gt;did&lt;/em&gt; make a suggestion that I agree with wholeheartedly, and that is that the G040 Solaris lab sucks and should go away. Dealing with the Solaris terminals has very little benefit to anyone, but it seems they still use it consistently in some classes. Personally, I think the Solaris lab in Lawson that has "real" computers should also be converted to a Linux lab. The Solaris lab has always been a source of idiotic quirks that any CS180 UTA has probably dealt with.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Update hardware.&lt;/em&gt; On a similar note, but not completely related to undergrads, I think we're in dire need of a hardware refresh. The machines we get in TA offices still date back to Pentium 4s. When comparing to what kinds of equipment other universities get, it's just embarrassing. Also, our network shares are tiny, which results in frequent e-mails complaining about partitions filling up. I don't understand this at all, in the day and age that terabyte hard drives can be had for under $100 and quad core computers can be had for less than $400.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Increase flexibility in the new core.&lt;/em&gt; More flexibility in the new core would be a big step forward to people who come in knowing how to program. I won't say I learned absolutely nothing in CS180/CS240, but the amount that I learned was definitely not worth two semesters of work. I had been program MUDs for a substantial amount of time, so I was familiar with C already. I didn't know Java, but I knew C++, so CS180 was not that exciting. Ironically, Professors Dunsmore (CS180) and Brylow (CS240) were among the best I had, but I would be willing to forgo the experience of their instruction in order to take more upper-level classes. I understand that many "experienced" incoming freshmen are overconfident, but an adequate test-out procedure should be enough to filter them out.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Lastly, here are things I will argue vigorously against:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;em&gt;Keeping course curricula up to date with latest fads.&lt;/em&gt; I argued against this in the comments section and will repeat it here. Computer Science to me is not about learning the latest technology (in this case, F#), but learning things that enable you to easily understand the latest technology. Trying to keep up with the latest fads not only pushes lots of pressure to come up with new syllabi, but also has questionable benefit. Putting F# in a curriculum effectively binds people to Windows or forces them to figure out Mono, while OCaml works on multiple platforms.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Teaching technologies rather than foundations.&lt;/em&gt; The other example in the comments was about learning Silverlight. I risk offending people with this part, but oh well. Majors like C&amp;IT are where you go to learn things like this. They are utterly focused on technologies rather than foundations. To put it one way, a C&amp;IT degree is a fish and a CS degree is an instruction manual on how to fish. To put it very bluntly, certain parts of C&amp;IT are what motivated CS majors learn in their spare time. Of course, to some degree this is necessary (when teaching programming).&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Pipe dreaming about infinitely flexible courses.&lt;/em&gt; I'm sorry to say that this is thoroughly unrealistic and puts much more strain on already-stressed TAs on grading objectively. Being able to pick your own projects for classes sounds nice, but I haven't seen this implemented effectively in any core classes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There's one big factor in the equation that I haven't (and won't) address and that's people. How can we make students motivated to learn and faculty motivated to teach? Who knows? Not me. Nevertheless, I think the undergrad CS program has progressed in a positive way. I'm interested in hearing what undergrads that are able to experience the changes have to say.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-1580947915233362540?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/1580947915233362540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=1580947915233362540' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1580947915233362540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1580947915233362540'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2010/08/state-of-computer-science-at.html' title='State of Computer Science at Purdue...address'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-7714687958145245229</id><published>2010-08-15T18:11:00.004-07:00</published><updated>2010-08-15T19:29:49.208-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='grad school'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>A fork in the road</title><content type='html'>&lt;p&gt;I think historically I've posted at the beginning of each summer with goals/plans, etc. Oops. I don't think I had a whole lot to say at the beginning of the summer anyway. Last year was pretty uneventful aside from OOPSLA, which I posted about. I don't think I'll be returning this year, unfortunately. There were only minor details like, oh, I got a summer internship at Google.&lt;/p&gt;

&lt;p&gt;Okay, not so minor. I didn't have much to say on the topic, though, since I didn't know exactly what I'd be working on. I'm on the last week of my internship now and I still can't say what I'm working on. I'll just say that I can't be (much?) happier than the project assignment I have. If you combine this with the blog title, I'm sure you can tell the direction in which this is heading.&lt;/p&gt;

&lt;p&gt;I'm nearing what appears to be a fork in the road that is my life. It "appears" to be a fork because, in reality, neither road is actually completely open. The first path is to stay in grad school until I get my PhD; the second is to leave grad school with an MS and go to work at Google. In order for me to stay in grad school, I have to pass my qualifier. The second part has proven more difficult than anything I've experienced in school so far. Obviously, to work at Google, I would need to get a job offer.&lt;/p&gt;

&lt;p&gt;Staying in grad school has some benefits. Many PhDs work at Google, so the industry option is never eliminated; many compilers/PL people have PhDs, which is still my field of interest; a PhD is basically essentially for teaching. Of course, it's not without cons, either. Actually, I just have one big, &lt;em&gt;big&lt;/em&gt; con right now and that's research. I was always unsure of how well I would adapt to a research environment. The answer so far has been, "not very well." The reasons range from finding many papers to be boring to not enjoying my research work. For the latter, I have nobody to blame but myself. My advisor is always open to other ideas. I just don't have any. This problem will only compound if I stay in grad school, since I'll have to produce a thesis.&lt;/p&gt;

&lt;p&gt;As for Google, let's just say that if working there would be like my internship has been all the time, then it would be great. I don't think I really need to evangelize working at Google. As for leaving grad school for Google, there are definite cons. Starting a job will be the next big shift in lifestyle. In school, my schedule is very relaxed. Working pretty much blocks off most of my day every weekday, which I'm definitely not used to. Even if work is really fun, this has proved to be taxing. In addition, leaving grad school basically eliminates the option of ever getting a PhD. This is mainly problematic since most of the PL people I see at Google have PhDs. Most of these PhDs seem to get their expertise during school. I feel like I have gained no such knowledge so far and that learning this stuff while in school is optimal. I also just hate having options cut off from me, but I can get over that. Eventually.&lt;/p&gt;

&lt;p&gt;So where does that leave me now? If I'm "lucky" then the decision will be made for me. Otherwise I have lots of introspection to do. I think if I can successfully steer my research career in a direction that I enjoy, I may stay in grad school. I'm not optimistic about this, but there's no way I'll feel good about the decision if I don't try.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-7714687958145245229?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/7714687958145245229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=7714687958145245229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7714687958145245229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7714687958145245229'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2010/08/fork-in-road.html' title='A fork in the road'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-3755134450428546762</id><published>2009-10-29T19:29:00.001-07:00</published><updated>2009-10-29T21:00:28.305-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oopsla'/><title type='text'>OOPSLA 2009, Day 5: Thursday</title><content type='html'>&lt;p&gt;Today was nearly all research talks for me. I skipped the keynote by the director of engineering at Facebook, which I guess turned out to be a bad idea, since most people seemed to think it was interesting. The first session was on static analysis and types. I finally got to see the presentation on &lt;a href="http://doop.program-analysis.org/"&gt;Doop&lt;/a&gt;, after reading the paper on it awhile ago. Doop is a pointer analysis tool written in Datalog, which is a subset of Prolog. Since I was interested in pointer analysis for SCJ annotation verification, the Doop paper was one of the few that I read, since it particularly targets Java.&lt;/p&gt;

&lt;p&gt;I opted out of the second morning session and spent the time between the Thorn demo and the student volunteer room instead. The Thorn demo was amusingly, heavily dominated by Purdue representatives (there was a demo yesterday that I suppose satisfied most people). It was nice to see example code. Thorn seems to have a ridiculously large amount of operators at this point, and I made remark about comparing its operator count to Perl's.&lt;/p&gt;

&lt;p&gt;The first afternoon session was on memory. The first two presentations were rather difficult to understand, partly due to language barrier. The last paper was on object graph versioning, which is the paper that I'll be presenting at the Purdue PL seminar. The system is basically object version control. It sounds like they store each changed variable in a list when a snapshot is requested, which means constant time for most operations, but logarithmic time for snapshot retrieval. David Ungar said implementing in this into a debugger would be of great use, which reminded me of historical debugging, which will ship in Visual Studio 2010. I think having this for other languages would be great, but not at all relevant to me if implemented in Smalltalk, as they did for the initial system. A Java implementation would be ideal, but I don't actually ever use JDB (I use Eclipse for most of my work, so I use whatever Eclipse uses &amp;mdash; don't think it's JDB).&lt;/p&gt;

&lt;p&gt;The last research session was on language implementation. I didn't find any of the three terribly exciting, but it was cool to see Bjarne Stroustrup do a presentation. The third presentation on error recovery in parsing was semi-interesting, but I'm not familiar with &lt;acronym title="Scannerless Generalized Left-to-Right Right-most derivation"&gt;SGLR&lt;/acronym&gt; parsers.&lt;/p&gt;

&lt;p&gt;There was an ice cream social at the end to celebrate the upcoming change from OOPSLA to SPLASH. Or at least, the overall title will become SPLASH, which is Systems, Programming, Languages, and Applications: Software for Humanity. What a crazy title. Apparently OOPSLA has shifted away quite a bit from the OO, which is why the name changed. The research track remains as OOPSLA, but I guess to satisfy the other events hosted under OOPSLA, they changed the name.&lt;/p&gt;

&lt;p&gt;It's been a fun week, albeit ridiculously tiring. I'm definitely ready to leave so I can sleep more, but I suspect things will get somewhat mundane again. After all, corn fields can't compete with Mickey Mouse. I didn't really meet anyone new, which is unfortunate, since OOPSLA is a great opportunity for that. The large Purdue presence ended up clustered together most of the time, making the most ridiculous comments about everything, as well as laughing at anything and everything, so I guess people may have thought of us as a clique. I'm also not very good at picking people's brains on their research topics, so I find it hard to approach anyone. I should probably read more papers to expand my horizon a bit more, since most of my computer knowledge seems to be industrial (and not related to programming languages), rather than academic.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-3755134450428546762?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/3755134450428546762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=3755134450428546762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/3755134450428546762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/3755134450428546762'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2009/10/oopsla-2009-day-5-thursday.html' title='OOPSLA 2009, Day 5: Thursday'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-5127800295929329093</id><published>2009-10-28T20:59:00.001-07:00</published><updated>2009-10-28T21:14:12.819-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oopsla'/><title type='text'>OOPSLA 2009, Day 4: Wednesday</title><content type='html'>&lt;p&gt;Today's session began with a keynote from Jeannette Wing. It was a kind of pep talk to encourage collaboration with other fields, as well as high-risk, high-yield research topics. It was moderately interesting to hear things about NSF, since she's currently the assistant director of the &lt;acronym title="Computer and Information Science and Engineering"&gt;CISE&lt;/acronym&gt; directorate, but otherwise, I'm not entirely affected by speeches that are calls to arms and whatnot. The presentation itself wasn't all that bad, though someone commented to me that the higher level position you are, the more vague your answers get. Totally amusing, yet totally true.&lt;/p&gt;

&lt;p&gt;Following the keynote was the morning research track, which focused on reliability and monitoring. None of the papers really stood out to me, so I won't go into it, but you can see the research track papers &lt;a href="http://www.oopsla.org/oopsla2009/program/research-program"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After lunch was another invited talk by Gerard Holzmann, who discussed the use of formal methods in software development (particularly in spacecraft, where correct software is obviously vital). For some reason, all of the larger rooms have their lights dimmed, so I was dozing off, but the basic idea was that after the initial setup, formal verification software is easy to use and helps a lot, but people are scared to use it for some reason, when they shouldn't be. When asked about the tradeoff between testing and formal methods for non-safety-critical software (such as GNOME desktop), I don't think he gave a very straight answer. He of course knows that the answer defaults to testing, but as to whether or not formal methods are truly beneficial and worth the time to understand, that was left unanswered.&lt;/p&gt;

&lt;p&gt;The research track in the afternoon was on software tools and libraries. The sound of that to me just doesn't sound particularly researchy, but I was one of the volunteers assigned to it, so it didn't really matter what I thought.&lt;/p&gt;

&lt;p&gt;The first talk was on &lt;a href="http://eclipse.org/imp/"&gt;IMP&lt;/a&gt;, a project from IBM to greatly simplify IDE development. Extending Eclipse is supposed to be comparatively complex, which is why the project was born. Essentially, you must implement a lexer/parser at minimum, and then add IDE services in at will. I know little about either project, but it sounds somewhat like Visual Studio Shell, which was released with Visual Studio 2008. It was an interesting talk, but not really from a research perspective.&lt;/p&gt;

&lt;p&gt;The second talk was about bridging the gap between Java and C debuggers in order to debug &lt;acronym title="Java Native Interface"&gt;JNI&lt;/acronym&gt; code, which essentially provides a unified stack in order to get a full stack trace when debugging problems that occur in JNI code. The content was mildly interesting, but I don't exactly deal with JNI, so it wasn't all that applicable to me. On top of that, the presenter was a little overbearing, and I'm certainly not the only one who thought the same.&lt;/p&gt;

&lt;p&gt;The last presentation was presenting C#'s task parallel library. Even if my research is mostly in Java and I otherwise mostly try to use Python, I still consider C# to be a good language (and it's unfortunate that most researchers opt for the JVM). I never really read into the parallelism that is shipping with C# 4.0, so it was interesting, but again, it didn't feel very research-like to me. Seeing Parallel.For and futures in C# is nice, but I can't imagine it being very complex, conceptually. Rather, it was somewhat like Sunday's tutorial, where they were implementing already-known techniques in a pure OOP language.&lt;/p&gt;

&lt;p&gt;This evening was the big, Hawaiian OOPSLA dinner. Unfortunately, I think Disney got their ethnicities mixed, because about half of the food was Chinese and the other half was American. Oops. For the curious: pork dumplings, crab rangoon, fried rice, vegetable stir fry, pulled pork, lemon chicken. Yeah, what part of that is from Hawaii? Apparently there's dancing at every OOPSLA, which was a pretty amusing thing to see. Other than that, the evening wasn't all that exciting. Since it was difficult to find a table, all the Purdue people ended up at the same tiny table with Tyler, from Iowa State, whom I met at the summer school. Not being a social butterfly and all, I feel awkward just walking up to strangers to talk to them, so I guess I missed out on a good opportunity. In fact, I haven't really met many new people at all at OOPSLA, just talked to some Purdue people more than I had at campus and meeting several of the summer school attendees that made it to OOPSLA.&lt;/p&gt;

&lt;p&gt;Takeaways: from the research program, not much. I've had more interesting days. The formal methods talk leaves questions opened to be answered, but I have no real desire to enter that field, so I guess someone else will have to answer them. Though things like model checking are fairly interesting, I am certainly not one who indulges in formal methods and verification.&lt;/p&gt;

&lt;p&gt;Tomorrow is the last day. It's been a tiring, but overall fun experience.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-5127800295929329093?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/5127800295929329093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=5127800295929329093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5127800295929329093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5127800295929329093'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2009/10/oopsla-2009-day-4-wednesday.html' title='OOPSLA 2009, Day 4: Wednesday'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-7963956704488481883</id><published>2009-10-27T20:59:00.001-07:00</published><updated>2009-10-28T11:28:31.263-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oopsla'/><title type='text'>OOPSLA 2009, Day 3: Tuesday</title><content type='html'>&lt;p&gt;Tuesday is when the research track began. The morning started off with a keynote from Barbara Liskov, this year's winner of the ACM Turing Award. I think it was quite an interesting talk, since I don't often hear historical perspective on the earlier days of computing. She gave the same speech as the one when she accepted the award; essentially how she came up with the ideas that she did that led to her impact on our field, and subsequently a Turing award. I skimped on the morning research papers, since it didn't look entirely interesting to me, in favor of getting more work done.&lt;/p&gt;

&lt;p&gt;Tuesday's volunteer duties consisted of working at an info booth for 2 hours. I think in most cases, the info booth is just for people who don't feel like pulling out their programs to find where things are, or can't look behind them to find registration/the bathroom. The last half hour overlapped with the Onward! keynote speaker, so I skipped it as well, after seeing slides that didn't look too exciting and people leaving early. Turns out, it was probably a good choice.&lt;/p&gt;

&lt;p&gt;The afternoon research track was on concurrency. I highlight two of the papers:&lt;/p&gt;

&lt;p&gt;Grace, a safe, multi-threaded programming system for C/C++ was an excellent presentation, with a good chunk of humor that all people knowledgeable of concurrency know about. The idea was something like spawning processes to perform "fork-join" parallel computations, using mmap to share computations. Interestingly, they actually get initially better performance from spawning processes instead of threads. The Linux scheduler doesn't migrate threads to separate cores on a processor for some amount of time, while processes are migrated instantly, taking advantage of available cores much more quickly. The reason for this is related to caching/processor state, from what I understand. Since threads are part of a larger process, this typically means that they share data with other parts of the program. Processes, on the other hand, are typically isolated from each other, which means that immediately dumping it to another core doesn't affect cache performance.&lt;/p&gt;

&lt;p&gt;The other highlighted presentation was on Thorn. Thorn is a collaboration, mainly between Purdue and IBM, to design a robust, concurrent scripting language. Unfortunately, the presentation was more about robustness than concurrency, even though it was in the concurrency track, but it was nice to see slides on the language, rather than guessing through the "documentation" that I saw in Thorn as an undergrad.&lt;/p&gt;

&lt;p&gt;I think today's lesson is that computing history, unlike national history, is actually interesting. Hearing Barbara's perspective on things was very cool, since I think it's the first person who I've actually seen present their view on computing history, while actually having lived in and participated in that era. Most historical perspectives I hear seem to be peers that just know a lot more about history than I do.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-7963956704488481883?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/7963956704488481883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=7963956704488481883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7963956704488481883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7963956704488481883'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2009/10/oopsla-2009-day-3-tuesday.html' title='OOPSLA 2009, Day 3: Tuesday'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-1535828664798886476</id><published>2009-10-26T20:59:00.001-07:00</published><updated>2009-10-28T11:31:57.586-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oopsla'/><title type='text'>OOPSLA 2009, Day 2: Monday</title><content type='html'>&lt;p&gt;On Monday, I spent most of the morning trying to get some work done, in order to not completely screw myself over upon return. Since my job that morning was to be a "floater", I couldn't do anything anyway (a floater is someone who just sits around unless the volunteer captains need them to do something). I missed my advisor's keynote at the Dynamic Languages Symposium (DLS) as a result, but I'm pretty sure I've heard the material many times before.&lt;/p&gt;

&lt;p&gt;I was able to attend the afternoon session of DLS, which had some interesting talks. A paper on type reconstruction of dynamic languages looked like an idea that had briefly crossed my mind awhile ago, but it was fully explored, so it was interesting to hear about it. There was also a talk on running a VM on a VM (mind blowing, right?) to take advantage of the host VMs JIT, in order to eliminate the need to write a JIT on the guest VM. I find [nearly] all things JIT exciting, so it was a good talk, even if their performance benchmarks were extremely slow.&lt;/p&gt;

&lt;p&gt;The Ruby Intermediate Language was presented as an easy-to-analyze intermediate form of Ruby. It was mildly interesting, but personally, I don't find Ruby's hard-to-parse intricacies very interesting, as I ended up ditching Ruby for Python a few years ago. RIL basically eliminates the hard-to-parse syntax from Ruby, converting them to their easier-to-parse equivalents, with the goal of making analysis tools easier to write.&lt;/p&gt;

&lt;p&gt;There was a complaint at the end where someone questioned the necessity of RIL instead of just providing a standalone parser (which RIL may have, since none existed at the inception of RIL), which I tend to agree with &amp;mdash; even though I think source transformations that simplify the AST are common, I don't think they're usually as game-changing as the ones presented in RIL. For example, the Java compiler collapses concatenation of string literals down to one literal, and it's completely transparent (and irreversible, as far as I can tell) to compiler plugins. However, this isn't the same as eliminating the ambiguities in Ruby that make life "pleasant" or "natural" for Ruby developers. It would be equivalent to a "JIL" that converted Java for-each loops into the ugly for-loop equivalents, for example, only Ruby offers many more conveniences than Java.&lt;/p&gt;

&lt;p&gt;The last talk of the day was about object heaps on manycore (56) hardware. David Ungar from IBM presented experimental results using a Smalltalk VM. It's always interesting to hear about VMs and concurrency (and this is both!), since the topics are often at the threshold of my knowledge. However, this presentation was less "controversial" than the RIL paper, so I don't have much to say about it, aside from feel free to read all of the mentioned papers, if they sound interesting.&lt;/p&gt;

&lt;p&gt;An interesting day overall. After all, who doesn't like dynamic languages?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-1535828664798886476?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/1535828664798886476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=1535828664798886476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1535828664798886476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1535828664798886476'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2009/10/oopsla-2009-day-2-monday.html' title='OOPSLA 2009, Day 2: Monday'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-1366900385083633491</id><published>2009-10-25T20:59:00.004-07:00</published><updated>2009-10-28T11:30:03.277-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oopsla'/><title type='text'>OOPSLA 2009, Day 1: Sunday</title><content type='html'>&lt;p&gt;Sunday's activities for me consisted of going to the &lt;acronym title="Virtual Machines and Intermediate Languages"&gt;VMIL&lt;/acronym&gt; workshop, which was quite interesting, and a tutorial on "realizing the benefits of functional programming in object oriented code." I was only able attend the morning session of VMIL, which was basically their invited talks on the &lt;a href="http://www.cs.iastate.edu/~design/vmil/2009/"&gt;VMIL website&lt;/a&gt;. They were all decent talks. It was especially interesting to hear about Maxine, which I had seen briefly mentioned on reddit some time ago.&lt;/p&gt;

&lt;p&gt;Unfortunately, though I was looking forward the tutorial (which I was obligated to attend as the student volunteer on duty), it turned out to be somewhat disappointing. The concepts were not new to me, so I was probably not the target audience. C# actually has a Func type that corresponds to the Java version presented in the tutorial, and I'd seen currying in C# from previous investigations. I hadn't seen Java-style continuations before, but after lectures by Olivier Danvy on continuations this summer, the code was not too surprising. Nonetheless, the code was still interesting to see, as I am always fascinated by how other people program.&lt;/p&gt;

&lt;p&gt;I think the most disappointing part was how little discussion there was on the benefits of shoving functional-style code (which isn't exactly pretty, in Java) into an OOPL, and deeper case studies into performance/safety benefits, etc. There was the obvious discussion about referential transparency and so on, but I'm looking for more than just some buzzwords.&lt;/p&gt;

&lt;p&gt;The presenter was a little bit disorganized and lacking in presenter skills (tangential expositions, extremely small writing), but we all have our faults, and I'm sure he can improve in time. It is clear that he likes the subject, but not immediately clear that he likes talking about it. I am, of course, not being literal, since if he didn't like talking about it, he obviously wouldn't have volunteered to do the tutorial.&lt;/p&gt;

&lt;p&gt;Overall, I was satisfied with the first day, since VMIL was nice, and the tutorial wasn't a total waste.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-1366900385083633491?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/1366900385083633491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=1366900385083633491' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1366900385083633491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1366900385083633491'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2009/10/oopsla-2009-day-1-sunday.html' title='OOPSLA 2009, Day 1: Sunday'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-1095188682122781256</id><published>2009-10-25T20:59:00.000-07:00</published><updated>2009-10-28T11:13:36.609-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oopsla'/><category scheme='http://www.blogger.com/atom/ns#' term='grad school'/><title type='text'>My first conference: OOPSLA 2009</title><content type='html'>&lt;p&gt;As my professor graciously offered expense coverage to attend &lt;acronym title="Object-Oriented Programming, Systems, Languages &amp; Applications"&gt;OOPSLA&lt;/acronym&gt;, several of my peers and I made it down as student volunteers. This is my first conference experience, hosted at Disney World's Contemporary World Resort. We arrived late Saturday night, and the program began the next morning with a joyfully early meeting at 7. So far it's been a good experience, but it's also been exhausting to continually wake up "early" (regular time for you working folks, I suppose). I ended up sleeping at 9:30 on Sunday, since I was so tired. I'm pretty sure I haven't done that in very many years. Since this post has gotten quite long, I'll be backposting a separate post for each day.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-1095188682122781256?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/1095188682122781256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=1095188682122781256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1095188682122781256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1095188682122781256'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2009/10/my-first-conference-oopsla-2009.html' title='My first conference: OOPSLA 2009'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-2489275748525187159</id><published>2009-08-09T21:20:00.003-07:00</published><updated>2009-08-20T13:35:35.245-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grad school'/><title type='text'>A milestone in graduate life</title><content type='html'>&lt;p&gt;Not much content here. Just documenting the fact that I got my first paper accepted at a conference last week. Not a super prestigious conference or awesome paper, but happy all the same, especially since it's my first attempt. I may get to go to Madrid as a result, since my partner has an expired visa.&lt;/p&gt;

&lt;p&gt;While I'm here, I got back a little over a week ago from my first grad summer school, which is more like a conference than undergrad summer school &amp;ndash; seems I have to explain this to everyone. It was pretty fun, aside from the terrible 100+ degree weather with no air conditioning in the dorms. Fortunately, it only lasted a few days. Lots of cool people there and some good lectures, though some were a bit over my head. I got accepted as a student volunteer for OOPSLA too, so I may be going to that (in Disney World!), and I'm flying down to Orlando for a meeting with people at UCF as well.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-2489275748525187159?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/2489275748525187159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=2489275748525187159' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2489275748525187159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2489275748525187159'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2009/08/milestone-in-graduate-life.html' title='A milestone in graduate life'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-8200531873787856097</id><published>2009-05-09T15:10:00.002-07:00</published><updated>2009-05-28T22:04:07.870-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='grad school'/><title type='text'>More time, more problems</title><content type='html'>&lt;p&gt;It's that time of year again; summer has just begun, so it's time to make a list of things that might be interesting to do so I don't get bored out of my mind (mostly a list so I don't forget things). My first year as a PhD student has gone by somewhat uneventfully. I think I've passed my qualifiers, but this semester's batch has yet to be seen. I've been getting this weird, nostalgic feeling with more friends graduating and leaving Purdue. It's like those sports movies when the coach at the end is being all emo when he's shutting off the stadium lights. Awesome, right?&lt;/p&gt;

&lt;p&gt;The only definitive thing I'll be doing this summer so far is research. Not something terribly interesting at the moment, but I'll probably be getting paid as a summer RA (that's research, not resident). This probably means I'll be working towards a workshop paper, but who knows. Hopefully my partner will be around, because the stuff we're doing now is a drag. I'll be going to a week-long summer school in Oregon, as well. The topic is virtual machine/compiler implementation, so I'm looking forward to it.&lt;/p&gt;

&lt;p&gt;Summer is when I get all of my recreational reading done. By recreational reading, I mean anything not school related, be it fiction or technical. I finished the &lt;em&gt;Sword of Truth&lt;/em&gt; series last summer, and it was great, aside from the poor print quality of the books I got. Possible options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;A Song of Ice and Fire&lt;/em&gt; series by George R. R. Martin. Looks to be shorter than the &lt;em&gt;Wheel of Time&lt;/em&gt; series. Plus, I already read the first WoT book, and would rather try something else before returning to it. I intend to read at least the first book in this series.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Wheel of Time&lt;/em&gt; series by Robert Jordan. Probably won't get around to these, but I don't have much else on my list of fantasy fiction.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Real World Haskell&lt;/em&gt;. Enter nerd books. I've read a few chapters into it already, but it's a big book. It's interesting so far, but I certainly haven't reached the part where I would call my Haskell knowledge "real world."&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Gödel, Escher, Bach: an Eternal Golden Braid&lt;/em&gt;. I bought this book awhile ago and never got past the preface. Maybe I can get past it this summer.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I always want to do some recreational programming over the summer, but I end up getting lazy. Nevertheless, a possible list of things to work on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mercurial. Specifically, hgsubversion. I originally applied to do this for Google's Summer of Code, but got turned down. Still, this project is interesting to me, since many people have no interest in learning Mercurial, leaving us stuck with Subversion. Progress on this would let me avoid Subversion. I've already submitted some minor patches during the school year, but I'd like to contribute something significant if I could.&lt;/li&gt;
&lt;li&gt;Luke's &lt;a href="http://bitbucket.org/LukeHoersten/booklist/overview/"&gt;BookLi.st&lt;/a&gt; project. A fairly interesting Django application. Not sure what I would do; API functionality would be an idea to implement, but probably wouldn't be a very large project.&lt;/li&gt;
&lt;li&gt;Personal website in Django. This is obligatory; I think I post this every summer. I always dream up designs in my head, but am not graphically-talented enough to really materialize them. I'd still like to get one up, someday. Maybe it would motivate me to blog more, somehow.&lt;/li&gt;
&lt;li&gt;Miscellaneous billion-dollar web startup idea. Yeah.&lt;/li&gt;
&lt;li&gt;Game programming. I've grown somewhat weary of the idea of game programming, but will nevertheless be revisiting it with a few others. Some of the others have experience in this area, so it may be less tedious. I wish I knew graphics people.&lt;/li&gt;
&lt;li&gt;IRC client. Kind of a dead horse, but I'm not really satisfied with any Windows IRC clients. This would end up being a cross-platform (Python) engine with a Windows-only (WPF) GUI built on top of it. Yeah, I could easily use a cross-platform toolkit. No, I won't. This also adds the limitation that the engine has to run on IronPython as well as CPython, which means Twisted is out. Could be interesting if this got anywhere. Big if.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If I had more things on the list, I guess I've already forgotten them. Knowing me, I'm forgetting something big. Hopefully I'll get things done this summer (I say this every summer, don't I?) and have more to write about. It's kind of sad that the few people from Purdue CS I knew blogged have all stopped, myself included. I guess we've relegated our ideas to 140-character messages now.&lt;/p&gt;

&lt;p&gt;Side note: If anyone wants to play Civilization IV, I'll be participating in a potentially slow-paced multiplayer game with a lot of newbies in it. If anyone is interested...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-8200531873787856097?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/8200531873787856097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=8200531873787856097' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/8200531873787856097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/8200531873787856097'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2009/05/more-time-more-problems.html' title='More time, more problems'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-9055923565788837137</id><published>2008-11-13T01:48:00.001-08:00</published><updated>2008-11-13T01:50:19.807-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><title type='text'>Random book meme thing from the Django planet</title><content type='html'>&lt;p&gt;"A syntax error occurs when the string of input tokens is not a sentence in the language." From &lt;em&gt;Modern Compiler Implementation in Java&lt;/em&gt;, Appel.

&lt;p&gt;I've spent a pretty frustrating 24 hours+ (sleep included) trying to grade a ridiculous exam, so I felt like doing something silly. From &lt;a href="http://www.eflorenzano.com/blog/post/book-meme/"&gt;Eric Florenzo's blog&lt;/a&gt; (et al):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Grab the nearest book.&lt;/li&gt;
&lt;li&gt;Open it to page 56.&lt;/li&gt;
&lt;li&gt;Find the fifth sentence.&lt;/li&gt;
&lt;li&gt;Post the text of the sentence in your journal along with these instructions.&lt;/li&gt;
&lt;li&gt;Don't dig for your favorite book, the cool book, or the intellectual one: pick the CLOSEST.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My quote was dumb. Too bad that book was the closest, instead of the Dragon book (or the only non-textbook in vicinity, &lt;em&gt;Chainfire&lt;/em&gt; by Terry Goodkind)...I think it's time to rearrange my shelf.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-9055923565788837137?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/9055923565788837137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=9055923565788837137' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/9055923565788837137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/9055923565788837137'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2008/11/random-book-meme-thing-from-django_13.html' title='Random book meme thing from the Django planet'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-2411986334957899739</id><published>2008-09-24T23:57:00.005-07:00</published><updated>2008-09-25T00:40:34.945-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><title type='text'>Pittsburgh takes a dump on education</title><content type='html'>&lt;p&gt;It's been awhile, I can't sleep, and even though I posted this on Facebook, I think it merits repetition, even if it's late-night, drowsy, nonsensical repetition.&lt;/p&gt;

&lt;p&gt;A post appeared on Slashdot today titled, "&lt;a href="http://idle.slashdot.org/article.pl?sid=08/09/23/1528259&amp;from=rss"&gt;Students Are Always Half Right In Pittsburgh&lt;/a&gt;. A curious title, but what's truly astounding is what the article is about. Apparently, Pittsburgh public schools are, in a no-child-left-behind fashion, are going to be limiting the lower bound on grades to 50%. Seriously.&lt;/p&gt;

&lt;p&gt;The reason is relatively obvious; the Post-Gazette article quotes a spokesperson saying, "We want to create situations where students can recover and not give up." Quite a noble reason, I suppose. Yet, the consequences seem to be alarming. Wait, no they aren't, because "it's not grade inflation." Guess that settles that. Or not. Slashdot commenter Jason Pollock &lt;a href="http://idle.slashdot.org/comments.pl?sid=973115&amp;cid=25131213"&gt;explains&lt;/a&gt; just how bad this system actually is. Essentially, you can easily get a passing grade, with very, very little effort. The example is somewhat incorrect, since grades are done differently than simple overall percentages, but the effect is the same.&lt;/p&gt;

&lt;p&gt;I don't know how this managed to come about, given the fairly obvious ethical concerns, never mind the fact that you only need a 20% in each grading period to pass a class. It scares me that so many high level officials in the Pittsburgh area seem to agree with institution of this policy. The solution to the goal thoroughly destroys the essence of a proper education. Incentive to actually learn material is diminished, when students are always "half right" anyway. There aren't many ideas that I can think of that would be less apt to striving for "Excellence for All."&lt;/p&gt;

&lt;p&gt;It's not like trying to help students boost their grades is a new subject. Giving free points for no work is simply not the correct answer. One district made students redo homeworks until it was A or B material. While I think this could be a good idea, to some extent, it sounded like they actually were given an A or B in the end. While it's great that they learn the material, grades don't mean much if everyone gets an A or B. The basic concept, however, I agree with:  Give students opportunities to make up bad scores, rather than just giving them away for free. Giving remedial homeworks, allowing a redo of homeworks for added partial credit, or some forms of extra credit are all better, logical, &lt;em&gt;ethical&lt;/em&gt; alternatives. I just hope that this decision is contained, if not reversed.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-2411986334957899739?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/2411986334957899739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=2411986334957899739' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2411986334957899739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2411986334957899739'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2008/09/pittsburgh-takes-dump-on-education.html' title='Pittsburgh takes a dump on education'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-1580305526371573765</id><published>2008-07-19T12:50:00.000-07:00</published><updated>2008-07-19T12:55:39.682-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='entertainment'/><title type='text'>I am really lazy</title><content type='html'>&lt;p&gt;This is not the next post I said I would write. It's more or less an update of my lazy life. I've mostly stopped playing games, but now I apparently still have no motivation to do anything productive. Great. There is really not much happening right now. Two weeks ago, I was on vacation with my family in Glacier National Park. Pictures will come eventually. Maybe.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.drhorrible.com/"&gt;Dr. Horrible's Sing-Along Blog&lt;/a&gt; was "aired" on the Internet this week. Apparently it wasn't as widespread as I thought, since I assumed the people who were on top of their game (I'm looking at you, James) would know about it. It's Joss Whedon's latest creation (Buffy, Firefly, etc. fame), and I found it to be pretty amusing. So, if you liked his shows, you'll probably like this one as well. But you know, watch it anyway. The free viewing ends after tomorrow (or at midnight tonight, it's kind of ambiguous), so you should step on it, if you're interested.&lt;/p&gt;

&lt;p&gt;The female actor, Felicia Day, in Dr. Horrible was new to me, though apparently not new to Joss Whedon fans. I stumbled upon a small web series written by her called &lt;a href="http://www.watchtheguild.com/"&gt;The Guild&lt;/a&gt;, which was also pretty funny. I can relate to it a lot more than I can to superheroes, even though I don't play WoW.&lt;/p&gt;

&lt;p&gt;On a less-fun-more-nerdy note, the newforms-admin branch of Django was merged to trunk last night. This is probably the one good result of me procrastinating so much&amp;mdash;I don't have to convert any code to match the new admin module. I hope I can get motivation to start working with Django (and other projects) again soon, but I still have some other stuff for CS190M to finish up, and that's stealing all the motivation I can get.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-1580305526371573765?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/1580305526371573765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=1580305526371573765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1580305526371573765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1580305526371573765'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2008/07/i-am-really-lazy.html' title='I am really lazy'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-5662926944346438435</id><published>2008-05-28T17:24:00.002-07:00</published><updated>2008-05-28T17:29:53.765-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='grad school'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>The saga continues...</title><content type='html'>&lt;p&gt;Well, it's been almost 3 weeks since commencement; as usual, I've been in summer-time slacking mode.  I'm still doing a bit of work, but most of my time has been allocated to playing games and sleeping.  Hopefully I can come off this habitual productivity death (don't I say this every summer?).  Of course, I have goals, but they're farfetched as always, given my work ethic.&lt;/p&gt;

&lt;p&gt;Last summer was mostly spent looking at Pylons as a Python web framework; Bennett and I started a project that progressed at a reasonable pace until school resumed.  After awhile, I started looking at Django again, so hopefully I can come up with a good project idea that would use it.  Since my last experiments with Django, they've made some great progress in development, as well as the release of a new book, which is a good reference; something I feel that Pylons never really had.&lt;/p&gt;

&lt;p&gt;I have a few project ideas in mind, but they're all personal.  I'm more or less hoping some others will be interested in some sort of group project (and have ideas!); unfortunately, most of my friends are starting "real life" mid-summer at their jobs all over the country, so I don't know how feasible this will be.&lt;/p&gt;

&lt;p&gt;Django aside, I feel like it might be time to learn another language&amp;mdash;Erlang is a possibility, but at this point I'm thinking that JavaScript is a good candidate.  It's in the theme of web development (I guess you could argue that Erlang is too), and isn't something I've touched since middle school.  Undoubtedly JavaScript would be much easier to learn than Erlang, so maybe restricting myself to one language is not a good idea.  Suggestions are welcome.&lt;/p&gt;

&lt;p&gt;Getting away from web development, shaim is still up in the air as to if I'll start working on it again.  An IRC plugin is scheduled for the 0.5 milestone, and since I've made IRC clients before, this would be my area of expertise.  What I really need to do is manage my time (stop playing games), but I don't foresee that occurring&amp;mdash;at least not completely.&lt;/p&gt;

&lt;p&gt;I also get to introduce one of my brothers to C this summer&amp;mdash;as the next family member in line to go into Computer Science, he's one of the programmers for the high school's robotics team.  This will be interesting, given that I've been so used to teaching Java (and hence gotten used to programming in Java, not C).  I was just going to throw K&amp;amp;R at him, but I can't seem to find my copy.&lt;/p&gt;

&lt;p&gt;Researchy type things are still ongoing; the same stuff as this last semester.  Professor Vitek is out of the country for the entire summer, so I'm kind of on my own as far as real-time Java goes (P.S., I got a free Macbook Pro), but I hope to make more progress than I did during the semester, without any class obligations.  I've nearly completed the labs for the new class, currently offered as CS180M, but subject to change.  It will be interesting to see how multicore programming will pan out for freshmen; I would like to see how I would have fared in such a course.  Of course, now something like that would be a cinch (given that I'm writing the labs).&lt;/p&gt;

&lt;p&gt;I'm also apparently under obligation to be flying around again this summer to visit people.  I haven't quite made a schedule for it yet, since I am technically working already, but I guess the unnamed will drown in a cup of sorrow if I don't fly out.&lt;/p&gt;

&lt;p&gt;Next semester should be interesting.  I decided my schedule with Professor Vitek before he left, and it looks like I'll be taking:&lt;/p&gt;

&lt;ol&gt;
    &lt;li&gt;CS580 - Algorithms (Frederickson)&lt;/li&gt;
    &lt;li&gt;CS565 - Programming Languages (Vitek)&lt;/li&gt;
    &lt;li&gt;CS591C - Research Seminar (Various)&lt;/li&gt;
    &lt;li&gt;CS590V - Principles of Programming Languages&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first two have qualifiers, which will probably suck a lot.  As someone who's gotten away with not studying for exams (predominantly), qualifiers will probably destroy the notion of me getting away with laziness.  These next years will be quite an adventure.&lt;/p&gt;

&lt;p&gt;Next time, a blog post at &lt;a href="http://saiyr.blogspot.com/2008/04/indiana-earthquake.html?showComment=1209127620000#c2607822398484231423"&gt;request&lt;/a&gt; of a future Purdue student.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-5662926944346438435?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/5662926944346438435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=5662926944346438435' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5662926944346438435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5662926944346438435'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2008/05/saga-continues.html' title='The saga continues...'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-8848201519578007854</id><published>2008-04-18T04:48:00.003-07:00</published><updated>2008-04-18T04:56:55.266-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><category scheme='http://www.blogger.com/atom/ns#' term='earthquake'/><title type='text'>The Indiana earthquake</title><content type='html'>&lt;p&gt;I've been incredibly busy lately (and still am in the middle of a homework due in less than 12 hours after having worked on it all night), but I guess this is some sort of historical moment, even though it's not CS-related at all.  Around 4:30, Phil and I were doing our Parallel Computing homework when I noticed my leg was shaking.  It came to be no surprise to me that my leg was jerking since it happens on occasion, but I couldn't get it to stop.  Then, as cliche as it sounds, I looked over at my water and it was rippling.  It started seriously vibrating the room after awhile, which was really freaky, since I live on the 10th floor.  About half of our floor noticed it and came out of their rooms, wondering what happened.  Of course, it had to be an earthquake or a bomb.  Bomb didn't seem likely, and sure enough, it was &lt;a href="http://earthquake.usgs.gov/eqcenter/recenteqsww/Quakes/us2008qza6.php"&gt;reported&lt;/a&gt; a few minutes later.  A 5.4 earthquake in the middle of the United States seems absolutely incredible.&lt;/p&gt;

&lt;p&gt;In other news, school has been wreaking havoc on my health.  Phil told me yesterday that Parallel Computing was allegedly the second hardest graduate CS class offered at Purdue, which is insane, yet I wouldn't doubt it at all.  Our professor is a good teacher, but tends to consider things to be much easier than they actually are.  This homework was supposed to be "easy", but I've worked on it over 12 hours so far and am still not finished.  Of course, I still have plenty of work in other things coming up and will be until finals are over.  Sometimes I wonder why I chose to stay in school.  Actually, I guess I never actually posted about that.  I accepted Purdue's offer, so I'll be staying here for my Ph.D.  There's only one other person I know at the moment that's doing it, and I'm surprised that I even know one.&lt;/p&gt;

&lt;p&gt;Back to work, anyhow.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-8848201519578007854?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/8848201519578007854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=8848201519578007854' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/8848201519578007854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/8848201519578007854'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2008/04/indiana-earthquake.html' title='The Indiana earthquake'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-531760711741883077</id><published>2008-02-24T05:52:00.000-08:00</published><updated>2008-02-24T05:53:03.945-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='ragel'/><title type='text'>An odd case of senioritis</title><content type='html'>&lt;p&gt;In high school, I used to wonder how people managed to get &lt;em&gt;senioritis&lt;/em&gt;&amp;mdash;the mythical disease contracted during graduation year with the symptoms of being &lt;em&gt;really, really lazy.&lt;/em&gt; I was actually the opposite way; senior year is probably when I worked the hardest, since I was taking calculus classes at Purdue, as well as AP French and Physics C (for both kinematics and e&amp;amp;m). Now that I'm on my way out of college, however, things appear to have changed. Not only do I procrastinate madly on my homework, which has resulted in all-nighters for both of my parallel computing assignments, I've also picked up a habit of not going to a significant percentage of my numerical methods class. I don't think it will ever become a serious problem, though it makes me feel like a serious slacker.&lt;/p&gt;

&lt;p&gt;Fortunately, this whole slacking business seems to have an upside. Since neither of my classes has a &amp;quot;real&amp;quot; programming component (yet), I've been doing more extra-curricular programming than I thought I would have time for. RITA has made decent progress, and some people use it for monitoring purposes even though it's technically not production ready. The key items that still need attending to include cleaning up the terrible mess I've made out of the code, as well as implementing a few more options. That aside, I was able to code up some other needed features, such as syncing to ResNet's traffic stats on the hour (which can still be tweaked some, I suppose), displaying the traffic graph, and creating a task tray icon with gauges to determine how close you are to the bandwidth limit. The tray icon was probably the most tedious, but it ended up being the most interesting. At first I had static icons set to display at low, medium, and high levels. The granularity of that is highly dissatisfactory and the icons weren't even displaying properly, for some reason, so I ditched that. In the end, I just dynamically drew the icons as necessary. This saved me the trouble of drawing 196 icons and calculating 14 different colors to use; even though the middle area turns to an ugly brown color, I'm still happy that it actually works.&lt;/p&gt;

&lt;p&gt;The other project I've been working on starts with &lt;a href="http://www.cs.queensu.ca/~thurston/ragel/"&gt;Ragel&lt;/a&gt;, which is a state machine compiler. I was interested in seeing how efficient an IRC library parser, which is really quite simple, could be in C#. SmartIrc4Net is one obvious benchmark to compare against; the single regular expression in &lt;a href="http://search.cpan.org/~bingos/Parse-IRC-1.07/lib/Parse/IRC.pm"&gt;Parse::IRC&lt;/a&gt; is another. Ragel is supposed to be really fast, so I wanted to try it out. The problem is that Ragel only supported Java, not C#, so my first task was to implement C# output for Ragel. This didn't turn out to be very hard; instead, it was mostly fixing errors that surfaced because of differences between C and C#, such as type safety rules.&lt;/p&gt;

&lt;p&gt;Implementing a simple parser for IRC is not so hard; the syntax is pretty easy to break down. By &amp;quot;simple&amp;quot; I essentially mean that it's like a single regular expression. I was able to implement it at the end of the week, though I had trouble getting Ragel's scanners to work. Instead of using scanners, I used one of Ragel's cool features, embeddable actions, to mark tokens on transition enters and exits. I finished my first &amp;quot;benchmark&amp;quot; comparison against the giant Parse::IRC regular expression as well, after sticking it into a C# Regex object. The benchmark was simply to parse a few IRC commands a million times; as it turns out, Ragel is about 33% faster than a compiled Regex object in this measurement. It's kind of fun to suddenly start worrying a lot about efficiency, even though parsing is probably a small task compared to, well, what the rest of an IRC client would do. There is still more to be done with the Ragel parser, before I start trying to actually incorporate it into a library, though. More on that later, maybe.&lt;/p&gt;

&lt;p&gt;Along the way, I got kind of annoyed at switching between Vim, a DOS prompt, and Visual Studio. Lucky for me, I discovered custom tools, which are basically processors that take a file and spit out code in a certain language. I implemented a custom tool processor for Ragel yesterday, so now I can use Visual Studio for everything. Using cmd.exe gets pretty annoying, especially when you're used to bash.&lt;/p&gt;

&lt;p&gt;There's still much that could be done&amp;mdash;I haven't done anything with Django this semester, which is kind of sad, but I guess you have to prioritize at some point. Hopefully this motivation sticks around long enough for me to eventually get to more web programming. Even though I've always been more of a desktop/non-web programmer myself, Django is a pretty cool piece (pieces?) of software, and I guess the web is the future and all that jazz.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-531760711741883077?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/531760711741883077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=531760711741883077' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/531760711741883077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/531760711741883077'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2008/02/odd-case-of-senioritis.html' title='An odd case of senioritis'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-7896370127833252559</id><published>2008-02-09T17:10:00.000-08:00</published><updated>2008-02-09T17:11:43.241-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>On C# and properties (continued)</title><content type='html'>&lt;p&gt;Awhile ago, I posted about a problem that I started coming across when I took software engineering with C#'s properties.  Even though it was a great improvement over Java's get/set methods, there are still problems to be had (you can read the article &lt;a href="http://saiyr.blogspot.com/2007/11/on-c-and-properties.html"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Interestingly enough, the release of C# 3.0 has fixed this problem, and in a much better way than I had thought of.  I discovered this while working on &lt;acronym title="ResNet Internet Traffic Analyzer"&gt;RITA&lt;/acronym&gt; in Visual Studio 2008, whose property snippets (prop and propg) were updated.  The syntax of the language remained the same, which is great.  In C# 2.0, you can declare an abstract class to have a property with the following syntax:&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;&lt;p&gt;public int X { get; set; }&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;In C# 3.0, a new feature called "automatic properties" allows you to use this syntax in concrete classes, as well.  The compiler automatically creates the private variable for you, but you don't see it, all access is forced through the property, which solves the problems I mentioned in the previous post.  You can prepend the get and set with access modifiers as well.  For example:&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;public int X { get; protected set; }&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;This is a very clean way of doing things, and I feel rather silly for not thinking of it myself.  It's a pleasant surprise in C# 3.0, since only the main features ever seemed to be touted (LINQ).  It's also backwards compatible, so when I compile RITA to be compatible with .NET 2.0, it works just fine.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-7896370127833252559?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/7896370127833252559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=7896370127833252559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7896370127833252559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7896370127833252559'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2008/02/on-c-and-properties-continued.html' title='On C# and properties (continued)'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-5752858932938781465</id><published>2008-01-27T22:15:00.000-08:00</published><updated>2008-01-27T22:19:35.995-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shaim'/><category scheme='http://www.blogger.com/atom/ns#' term='grad school'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>This week in life</title><content type='html'>&lt;p&gt;Here I am again, with no motivation to think of a real title, due to peer pressure of a certain jerkasaurus rex (jerkasaura regina?).  Thus, I present an update on recent happenings in a disjoint, sloppily written fashion.&lt;/p&gt;

&lt;p&gt;Last Monday, Purdue sent me an offer of support and admission to the Ph.D program in Computer Science.  Exciting, but this is only the beginning of responses.  Hopefully Purdue isn't the last university that responds positively.  They gave me a fairly short notice of a fellowship that I should apply to, which is due on the 31st, so I guess I have to work on that.  Recent weather, apparently reaching double digit negatives, is not positively influencing my opinion of Purdue.  Not it's weather, anyway.&lt;/p&gt;

&lt;p&gt;One of old friends (makes me feel old just saying that) is coming up to Purdue to visit, since he applied to Purdue for grad school, as well.  It could be interesting if we both ended up here, since we used to be best friends before I moved across the States.&lt;/p&gt;

&lt;p&gt;I had a meeting two Mondays ago to discuss the course I'm helping design.  It was interesting, but will probably be quite a bit of work.  I'm still in vacation mode, since I just turned in my first homework on Friday, which will be a problem if it continues for much longer.&lt;/p&gt;

&lt;p&gt;I also met with Professor Vitek, who's supervising my honors research project, to talk about what I would be doing.  I agreed to read some relating to &lt;a href="http://www.rtsj.org"&gt;RTSJ&lt;/a&gt;, which will probably end up being my research project (sorry, Luke).  This will probably be a challenging topic, since James and I didn't really do so well on the RTSJ project we had in our programming languages class.&lt;/p&gt;

&lt;p&gt;I'm also juggling way too many games for my own good, at this point.  In addition to playing Materia Magica again, James has convinced me to start playing &lt;a href="http://freestyle.sierraonline.com"&gt;Freestyle Basketball&lt;/a&gt; again.  Archspace also re-opened as &lt;a href="http://www.magellanwars.com/"&gt;Magellan Wars&lt;/a&gt;, which I used to play a lot.  Hopefully I won't play too much this time, since the playerbase has dwindled dramatically.  I also started a &lt;a href="http://www.travian.com/"&gt;Travian&lt;/a&gt; account today, a game that Phil ahd been telling me back.  I think it looks like a graphical &lt;a href="http://games.swirve.com/utopia/"&gt;Utopia&lt;/a&gt;, which makes it better than Utopia already.  The cherry on top is that &lt;a href="http://mabinogi.nexon.net"&gt;Mabinogi&lt;/a&gt;, my favorite Korean MMO, is opening at the end of this month for closed beta in English.  James and I played the game in Korean, which, as you could imagine, was somewhat limiting, but it could be more fun this time around.  Hopefully we get in.  It's also kind of sad that my biggest paragraph is about computer games.&lt;/p&gt;

&lt;p&gt;Realistically speaking, unless I stop playing games (with your heart, playing games with your heart~), I probably won't have much spare time for recreational programming.  I have no ideas that would involve Django programming, but I have been tossing around ideas for a C# IRC library again for shaim.  Pun intended.  I've looked into other libraries, particularly &lt;a href="http://smartirc4net.meebey.net/jaws/"&gt;SmartIrc4Net&lt;/a&gt;, but I don't know if I really like it.&lt;/p&gt;

&lt;p&gt;I think that accurately summarizes how I haven't been doing much.&lt;/p&gt;

&lt;p&gt;P.S.  Dear Google, please re-evaluate your Blogger shortcuts.  Ctrl-shift-arrow is commonly used to select words, but I can't do it anymore because ctrl-shift changes to preview mode.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-5752858932938781465?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/5752858932938781465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=5752858932938781465' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5752858932938781465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5752858932938781465'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2008/01/this-week-in-life.html' title='This week in life'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-2959266902006196824</id><published>2008-01-08T13:32:00.000-08:00</published><updated>2008-01-08T13:48:34.240-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>The beginning of the end</title><content type='html'>&lt;p&gt;Assuming I don't royally screw up this semester, this is my last semester at Purdue, at least as an undergraduate.  No idea what I'll be doing after graduation yet.  Grad school applications have been sent in, and I guess I should resume job searching this semester.  Unfortunately, I have no idea where I want to work, which is a big issue.&lt;/p&gt;

&lt;p&gt;How did my winter break plans go?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Sleep&lt;/em&gt;.  As per usual, I lost sleep over break rather than gained it.  Gotta take maximum advantage of recreational time.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Study for the Western Civilization I CLEP exam&lt;/em&gt;.  I half-heartedly did this.  I took the exam today at 2 and passed with a bare minimum.  Fortune smiles upon me, for I no longer have the threat of taking 18 credits looming over me.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Read &lt;a href="http://www.greenteapress.com/semaphores/"&gt;The Little Book of Semaphores&lt;/a&gt;&lt;/em&gt;.  I read through a good portion of it.  It turned out to be different from what I expected, being a very example/problem-driven book, but I still read through it like a normal book, rather than trying to figure out most things.  Probably wasn't a good idea, but I think it helped.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Look into more web programming&lt;/em&gt;.  The Django book did come out, and I read/skimmed most of it.  Most of it that had already been written was still the same, but the new sections were good to read about.  I started a project in Django before I got lazy and started MUDding a lot again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This semester, I'm only taking two classes--Numerical Methods and Parallel Computing.  Numerical Methods will kill me, since I don't remember any calculus anymore, but Parallel Computing should be interesting.  I'm not teaching a lab section this semester, so hopefully I'll have free time to do other things.&lt;/p&gt;

&lt;p&gt;And there's my update, now leave me alone.  You know who you are.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-2959266902006196824?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/2959266902006196824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=2959266902006196824' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2959266902006196824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2959266902006196824'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2008/01/beginning-of-end.html' title='The beginning of the end'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-4479801083235745598</id><published>2007-12-14T20:52:00.000-08:00</published><updated>2007-12-14T20:54:59.643-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><title type='text'>Winter break plans</title><content type='html'>&lt;p&gt;I've actually gotten all A's again so far, with only my cryptography final to go.  Quite surprising to me, but I can't really complain.  Unfortunately, I tend to get less productive instead of more productive during break (that's what it's called break, I guess?), even though I have no schoolwork to bog me down.  In any event, my to-do list:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sleep.&lt;/li&gt;
&lt;li&gt;Study for the Western Civilization I CLEP exam.  I need two more gened classes (6 credits), and this exam will satisfy the requirement.  I only need a 50%, so I can't imagine myself studying very hard.  Hope it doesn't come back to bite me.&lt;/li&gt;
&lt;li&gt;Read &lt;a href="http://www.greenteapress.com/semaphores/"&gt;The Little Book of Semaphores&lt;/a&gt;, or at least some of it.  I'll probably be helping design a class on concurrent programming next semester, so I figure it's best to advance my knowledge as best I can so I'm not useless.&lt;/li&gt;
&lt;li&gt;Sleep.&lt;/li&gt;
&lt;li&gt;Look into more web programming.  I got bored this week and started trying to scrape together a new template for a blog; you know things are going bad when I start writing HTML and CSS.  My hope is to do some stuff with &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;, a Python web framework.  If no other ideas come to mind, I may end up replacing my blog with a Django site.  I haven't completely ruled Pylons out yet, since I still subscribe to the mailing lists, but since the Django book was published recently, hopefully it will provide a better source of documentation.  And hopefully the book will be released online during break, or I'll be sad.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I've unfortunately put language-related things behind me for now.  If I'm looking for an industry job, it probably isn't very marketable.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-4479801083235745598?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/4479801083235745598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=4479801083235745598' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/4479801083235745598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/4479801083235745598'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/12/winter-break-plans.html' title='Winter break plans'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-1181714764554729753</id><published>2007-12-14T20:41:00.000-08:00</published><updated>2007-12-14T20:43:53.560-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>The difficulty of Lisp</title><content type='html'>&lt;p&gt;An blog post on the &lt;a href="http://metabang.com/unclogit/?p=211"&gt;difficulty of learning Lisp&lt;/a&gt; recently appeared on Reddit, which argued that Lisp was actually not very hard to learn.  Unfortunately, to be honest, the reasoning totally sucks.&lt;/p&gt;

&lt;blockquote&gt;I think the "Lisp is hard" idea is general bunk. It’s different and looks funny (but, hey, if you can stomach C++, what can’t you take!) but getting started in Lisp is no harder that any other language. In fact, its easier to get started in Lisp than it is in programs that require a separate compilation step.&lt;/blockquote&gt;

&lt;p&gt;Of all of the points to argue why Lisp would be easy, this is certainly not a very good place to start.  A hello world application indicates nothing about the difficulty on learning a language.  Well, almost nothing.  Java's hello world is often cited as indication of how difficult it is for some to learn Java, but I don't think the converse applies.  I do agree with the author, though.  It's going to take a lot of work of some sort to start convincing people otherwise.  Mark Guzdial, a long-time teacher now at Georgia Tech, wrote a post about the best paradigm for &lt;a href="http://www.amazon.com/gp/blog/A3W4CUXPE1WFNF"&gt;teaching programming&lt;/a&gt;, saying:&lt;/p&gt;

&lt;blockquote&gt;Supporters have argued that a functional approach is most like mathematics (and is thus more familiar) and that non-mutable variables lead to more easily maintained software, are easier to understand, and are more likely to be provable.  A paper at ESP by Michael Eisenberg and Mitchel Resnick showed how hard functional programming is for students.  If the students are comparing functional programming to mathematics, it’s not obvious and even if it’s happening, it’s not clear that it’s helping.&lt;/blockquote&gt;

&lt;p&gt;Unfortunately, the article was published in 1987 and isn't even available at ACM's digital library.  Funny enough, the five comments at the time of this writing all agree that Lisp is not hard.  The general consensus seemed to be that Lisp makes other languages hard, that learning Lisp first would make other languages harder.  I find this somewhat difficult to believe, and very subjective at best.  It may certainly have an impact (to a degree) on what language you &lt;em&gt;prefer&lt;/em&gt;, but as to increasing the difficulty of learning, there probably isn't much research in that area.  It's similar but more radical to the debate over whether learning object-oriented programming before procedural programming (Java, C) is better.&lt;/p&gt;

&lt;p&gt;Indeed, some of the resistance to learning Lisp is probably FUD of some sorts.  It's probably also somewhat related to many universities' reluctance to teach a language that isn't used in the industry, which doesn't use Lisp because universities don't teach it, ad infinitum.  However, it's certainly unfair to argue about ease of programming with hello world programs.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-1181714764554729753?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/1181714764554729753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=1181714764554729753' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1181714764554729753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1181714764554729753'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/12/difficulty-of-lisp.html' title='The difficulty of Lisp'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-2564033476707559482</id><published>2007-11-18T22:15:00.000-08:00</published><updated>2007-11-20T22:52:39.607-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><category scheme='http://www.blogger.com/atom/ns#' term='f#'/><title type='text'>My first F# program</title><content type='html'>&lt;p&gt;In previous hopes of getting an interview with the nascent F# team (which I obviously did not get; sad faces all around), I started adding F# blogs to my feed, including a former C# PM who I had the privilege of working with during my internship and ICFP 2006, &lt;a href="http://blogs.msdn.com/lukeh/default.aspx"&gt;Luke Hoban&lt;/a&gt; (not Luke H on my links).  Jomo Fisher, a new developer on the F# team, posted a &lt;a href="http://blogs.msdn.com/jomo_fisher/archive/2007/11/17/tight-code-a-puzzle-in-f.aspx"&gt;small challenge&lt;/a&gt; to "pivot" a list of lists in a small number of lines in any language.  The goal is to be as concise and clean as possible, while beating his solution and a yet-to-be-posted solution, which are 9 and 4 lines of F# respectively.  I came up with my first F# program after awhile (it looks like I just copied someone else's on the comments list, but comments are moderated so they weren't all there), which was kind of fun:&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;&lt;span class="Statement"&gt;let rec&lt;/span&gt; pivot(l: 'a list list) =
    &lt;span class="Statement"&gt;match&lt;/span&gt; List.hd l &lt;span class="Statement"&gt;with&lt;/span&gt;
        | head::tail -&gt; [&lt;span class="Statement"&gt;for&lt;/span&gt; sub &lt;span class="Statement"&gt;in&lt;/span&gt; l -&gt; List.hd sub]::pivot [&lt;span class="Statement"&gt;for&lt;/span&gt; sub &lt;span class="Statement"&gt;in&lt;/span&gt; l -&gt; List.tl sub]
        | [] -&gt; [];;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Possibly due to my amateurism in functional programming or unfamiliarity with F#, these four lines took me quite awhile to figure out (more than an hour).  Of course, reading the code is easy enough; I wonder if functional code exhibits hard-to-write, easy-to-read behavior in more than just this case.  Of course, my solution is not quite the best, since my pattern matching operates on the head of the list.  It's probably better to match the list with &lt;code&gt;[]::_&lt;/code&gt; and &lt;code&gt;_&lt;/code&gt;, which was someone else's solution.&lt;/p&gt;

&lt;p&gt;Imperative code for this in the comments have been predominantly larger than 4 lines, with a C# with LINQ solution being the shortest.  What other tricks can people come up with?  I think the &lt;code&gt;zip&lt;/code&gt; use in Python is interesting.  It accomplishes the problem in one line by unpacking the list of lists and sending it to &lt;code&gt;zip&lt;/code&gt;, a built in function that does transposition.  Of course, &lt;code&gt;zip&lt;/code&gt; is basically the problem objective so it seems kind of like the cheap way out; the use of Python's * operator to unpack the list makes it quite easy to do; F# has &lt;code&gt;List.zip&lt;/code&gt;, but I have no idea if it can unpack the list like Python can.&lt;/p&gt;

&lt;p&gt;In other news, I finally got F# to work with Mono on my Linux computers; turns out all that I needed to do is install some libraries.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-2564033476707559482?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/2564033476707559482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=2564033476707559482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2564033476707559482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2564033476707559482'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/11/in-previous-hopes-of-getting-interview.html' title='My first F# program'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-2174129782484930935</id><published>2007-11-18T21:13:00.000-08:00</published><updated>2007-11-18T21:29:42.121-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>On C# and properties</title><content type='html'>&lt;p&gt;I flew out to Seattle again this weekend for afternoon tea with Microsoft's CLR and C++ teams.  The C++ developer I met was an interesting fellow, having worked on MSVC++ compiler for over 14 years and other C/C++ compilers for even longer.  I've never seen someone so passionate about compilers, especially not for C++, but he seemed to take the challenge of C++ and transform it to pure enjoyment.&lt;/p&gt;

&lt;p&gt;At one point during our discussion over Thai food for lunch, we started talking about characteristics that constituted "high-quality code", as well as topics in programming languages.  Of course, there was no way I could lie my way out and say that C++ is my favorite language&amp;mdash;it's probably among the least favorites&amp;mdash;but my mention of C# led to some discussion about why I liked C#.  I mentioned that C# was basically "Java done right", since Java is pretty clearly a direct predecessor to C#.  Of course, no programming language is perfect, and he probably would have thought I was an opinionated jerk if i had said C# was.&lt;/p&gt;

&lt;p&gt;Instead I decided to bring up something that I'd been thinking about for the past few days, with our software engineering team to blame.  Essentially, I thought that properties should be able to encapsulate private variables properly for maintainers/fellow developers.  Obviously they hide private variables and define the interface for designers of other classes, but for the designers of a given class, encapsulation is "broken."  The maintainers of the code have two ways to access data (directly through the private variable and through the exposed property), which leads to some unintended problems:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Finding references to a variable is separate from finding references to a property.  The case where this is necessary is probably rare, at best.  This is demonstrated by the popular use of properties that are simply one line get/sets, which is no different than setting the private variable directly.  Removing the private path of access would eliminate this problem, which is an irritation to anyone who might use "Find All References" in Visual Studio, as well as any tool that may perform static analysis on C# code.&lt;/li&gt;
&lt;li&gt;If a property does anything besides a one line get/set, private access to the variable means some code that wasn't executed probably should have been.  This was colorfully illustrated in our code in which a property had a multi-page set method (which arguably shouldn't have happened, since properties are supposed to be light).  Any single incorrect access to the private variable would meant lots of code feeling lonely and would have resulted in a rebellion that would probably bring the program down.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is a problem that can probably be solved by simply prefixing the private variable with something (like _ or m_), but I can't say I'm a fan of that solution, and it still appears on IntelliSense.  I tend to make the capitalization of the first letter the only difference (private members being camelCase and public being PascalCase) and steadfastly believe that prefixes are ugly.  Of course, this is probably the only solution without changing C#, so I may have to adopt it in the future, but what fun is not changing C#?&lt;/p&gt;

&lt;p&gt;The solution that I suggested that I hadn't completely thought through was for C# properties to be able to embed variables in them.  C# properties can only have get/sets inside of them, but consider the following code:&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;public DateTime Date
{
    DateTime date;
    get { return date; }
    set { date = value; }
}&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;I think this provides an interesting, additional level of abstraction.  If the &lt;code&gt;date&lt;/code&gt; variable in the &lt;code&gt;Date&lt;/code&gt; property is local to the property, it prevents public access of any kind to it; all access must go through the property.  In a sense, you're almost creating a new class to wrap around the data (you can't actually do this in C# since you can't overload the = operator).  This means all reference searches would have to be through the property, which fixes both problems I listed above.  Although it looks kind of funny, I think it would be a backwards compatible change, since the private variable could theoretically still exist inside or outside the property, depending on the need to access the private variable directly.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-2174129782484930935?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/2174129782484930935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=2174129782484930935' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2174129782484930935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2174129782484930935'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/11/on-c-and-properties.html' title='On C# and properties'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-556961386596760154</id><published>2007-10-30T15:53:00.000-07:00</published><updated>2007-10-30T16:37:45.416-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>A moment's respite</title><content type='html'>&lt;p&gt;Time to take a break from real-time Java.  Having worked on our programming languages assignment for most of my waking hours in the past two days, a lot of stress and frustration has built up, and something needs to come out.  Unfortunately, I don't need to use the bathroom, so I guess I'll be regurgitating what I've been thinking about in the past few days.  This happens to be &lt;strong&gt;how not to engineer software&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Our software engineering class has thus far probably taught me more things that are bad practices rather than good.  Unfortunately, these practices reflect upon just how bad our development process actually is when executed.  Here they are, in no particular order of importance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Using version control without knowing how to use version control&lt;/strong&gt;.  Everyone knows that version control is &lt;em&gt;necessary&lt;/em&gt;, especially for larger projects.  To argue otherwise is essentially arguing with a brick wall&amp;mdash;nobody cares.  Unfortunately, knowing that version control is necessary still gives little incentive on how to use version control &lt;em&gt;proficiently&lt;/em&gt;.  I'm not here to give a lecture on how to be a version control expert, because undoubtedly I'll be wrong about something.  However, it's amazing how some people in Computer Science at the senior level simply don't "get" version control.  Our department steadfastly believes that teaching tools is a waste of time&amp;mdash;such is the job of &lt;acronym title="Computer &amp; Information Technology"&gt;C&amp;IT&lt;/acronym&gt;.  At this point, I'm almost convinced that they're wrong, to some degree.  One teammate assumes that checking out a new repository and copying all of his files over before committing is a good way to fix conflicts.  This is obviously a very bad idea, especially if you have files that are out of date, and it just so happened to be the case.  His solution?  Blame Subversion for everything.  The problem is between the keyboard and chair.  Seriously.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not communicating properly&lt;/strong&gt;.  When an e-mail goes out to your customer, all of the relevant people on your team should receive a copy of that e-mail.  For us, that's everyone on the team.  There's no reason not to, and leaving out people results in very one-sided communication.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not listening&lt;/strong&gt;.  When a teammate has something to say, learn to listen.  Interruptions are not usually helpful.  Neither is waiting until the teammate is done talking, but not listening.  This really shouldn't have to be mentioned, but this is actually a common occurence.  Listen to the other person, and then if he/she is wrong, then explain why.  Interrupting because you're 200% convinced your method is infallible is unacceptably rude and arrogant.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project tracking instead of project leading&lt;/strong&gt;.  A &lt;a href="http://www.scottberkun.com/blog/2007/are-you-a-leader-or-a-tracker/"&gt;recent article&lt;/a&gt; on Reddit summarized the problem nicely.  A team leader is not responsible merely as a gateway to the customer; a leader is ultimately responsible for keeping the team accountable and heading in the right direction.  Can't do that?  Please don't be a team leader.  You may get this fuzzy, warm "leadership" experience to put on your resume, but the result will be that your team will fail.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Allowing feature creep&lt;/strong&gt;.  This seems to be a fairly common problem.  On a deadline as short as ours (one semester), it's &lt;em&gt;vital&lt;/em&gt; to stick to the defined specification.  "I think ______ would be nice" is completely unacceptable.  This will result in a traffic jam and a failure to complete the project on time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not using an issue tracker&lt;/strong&gt;.  Humans are typically not very good at context switching.  Typically, when you find a bug, the best way to deal with it is to file a bug report.  If you decide to fix the bug immediately, unless you were specifically looking for the bug, you're context switching away from what you were previously doing, which can end up being quite a distraction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lack of in-code documentation&lt;/strong&gt;.  This is probably something that virtually all CS majors at Purdue are guilty of.  When we're working alone, there's no reason for us to comment; we're all brilliant geniuses that always retain understanding of what our code does.  Unfortunately, this brilliance doesn't transfer when you work on teams.  In-code documentation is important for quick reference.  In addition, many languages support extracting the documentation out from code into various document formats, which adds even more benefit to code documentation.  This alone should be a good reason to document function headers.  Nobody is asking for an essay, but at the same time, nobody understands what your function does.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All in all, this is a very random assortment of pitfalls I've seen among my software engineering team.  Some of these are more easily corrected than others, but sometimes I wonder if it's even worth it, with so little time left.&lt;/p&gt;

&lt;p&gt;Ah, time.  Where did it go?  This semester feels like it's gone by faster than the rest, perhaps due in part by the post-graduation stress that I'm experiencing.  I'm flying out to Google for an on-site interview on Thursday; Microsoft has invited me to an on-site interview, but I don't know when; grad school applications are still looming over my head.  It was probably a bad idea to take three CS classes this semester, of all semesters.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-556961386596760154?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/556961386596760154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=556961386596760154' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/556961386596760154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/556961386596760154'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/10/moments-respite.html' title='A moment&apos;s respite'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-6446023415859990753</id><published>2007-10-16T08:36:00.000-07:00</published><updated>2007-10-16T08:43:34.212-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Gutsy, Compiz oddity</title><content type='html'>&lt;p&gt;I got tired of Gentoo on my installed laptop, so I dove in for the Gutsy RC instead.  I like the changes from Feisty, but if there's one thing that seriously bugs me, it's the alt-tab/application switcher functionality.  A lot of times I use alt-tab/alt-shift-tab for quick switching, but Compiz seems to like to do all sorts of flash fade, opacity, etc. effects on it, which is rather distracting.  I turned up the brightness to 100% to stop the fading, and it's less distracting, but not by much.&lt;/p&gt;

&lt;p&gt;For some reason, the beta also shipped with alt-shift-tab broken (switch to previous window in the list).  CompizConfig wasn't very helpful in letting me bind it, either, so I looked to gconf-editor to solve my problems.  Funny enough, there was an entry under apps.config.plugins.switcher.allscreens.options named prev_key that was set to alt-shift-tab.  Strange.  There was also a prev_button entry that was set to "Disabled", so I changed that to "&lt;Shift&gt;&lt;Alt&gt;Tab" and it works now.  It's rather odd that both fields exist.  I think prev_key should be the proper name (obviously I'm not alone, since someone set it instead of prev_buttom), since there's a next_key and no next_button.  It's also odd that I couldn't figure out how to set the shortcut in CompizConfig.  Perhaps I'm just stupid.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-6446023415859990753?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/6446023415859990753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=6446023415859990753' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/6446023415859990753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/6446023415859990753'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/10/gutsy-compiz-oddity.html' title='Gutsy, Compiz oddity'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-8768473340347902298</id><published>2007-10-13T14:54:00.000-07:00</published><updated>2007-10-13T16:33:21.476-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='ethics'/><title type='text'>The freedom of speech fiasco</title><content type='html'>&lt;p&gt;A recent turn of events at my &lt;a href="http://www.wl.k12.in.us/"&gt;former high school&lt;/a&gt; have evolved into quite a fiasco as of late.  Apparently a video of "scuffle" (as worded by &lt;a href="http://www.theindychannel.com/education/14312781/detail.html"&gt;Indianapolis TV news&lt;/a&gt;) was posted online, which resulted in the people being in the video being suspended.  Unfriendly words were directed at the school administration through Facebook, which somehow reached the administrators themselves&amp;mdash;this resulted in more suspensions, which caused even more uproar.  Someone reposted the video on Youtube and got suspended as well.  A Facebook group was created by a student at the high school protesting all of the recent decisions made by school officials with respect to freedom of speech; this group seems to have a fair amount of students in it, reaching almost triple digits.  Of course it's incomparable to those "hey guys I want to make a group with a million people in it", but for being the smallest of the four high schools around here, it's a fairly large percentage of high school students involved.&lt;/p&gt;

&lt;p&gt;Apparently this chain of events was made a top story on the local news, and made it to Indy news, so I guess it's no small thing.  Since I'm obviously no longer attending high school, it's difficult to get a crystal clear picture of what's going on, but from the picture painted by the media and my brothers, who &lt;em&gt;are&lt;/em&gt; attending the high school, the situation is just a continual stream of terrible decisions, and not just from school officials.&lt;/p&gt;

&lt;p&gt;The whole thing allegedly started due to a video being posted online.  To whoever did this:  why on Earth did you think this was a good idea?  Are fights cool at school now?  Get kicks out of watching your angry peers assail each other?  That's really cool.  Hilarious.  Grow up.  I don't care what actually happened the video or where it happened; being pedantic about the school code of conduct isn't my goal.  Hell, I'll readily admit that I never read that code.  Neither did most people who graduated with me.  Most of us were smart enough to know that if we simply behaved, then everything would be cool.  Getting feel-goods off of a video like that sounds rather juvenile to me.  A video of a school fight isn't going to be a blockbuster that makes you a millionaire and a high-profile film maker, either.  Maybe you weren't suspended for speech; maybe you were suspended for being stupid.&lt;/p&gt;

&lt;p&gt;Of course, no matter how stupid I think posting the video was, I think suspending the person(s) who did so is just as bad, if not worse.  The school should know better; we're humans and high schoolers are &lt;em&gt;young&lt;/em&gt; humans, typically more prone to error.  If school administrators suspended someone every time they did something stupid, the school would be pretty empty.  Remember that cliche, "Don't shoot me, I'm just the messenger"?  You just shot the messenger.  This isn't Sparta.  Please stop shooting messengers.&lt;/p&gt;

&lt;p&gt;Some students were also suspended for making derogatory comments about school officials, including the vice principal, who was around when I was still in high school.  Oops?  I guess high schoolers don't know much about diplomacy.  The previously linked Indy news article quoted a student, saying:&lt;/p&gt;

&lt;blockquote&gt;I called him an obscene name and he called me into his office and he told me he hated me.&lt;/blockquote&gt;

&lt;p&gt;That's a great story, right there.  Probably one that'll last for generations to come.  Okay, personally, I think that it sounds ridiculous.  I'm not sure it could sound more ridiculous than it does.  I really don't think that a school official would say "I hate you" to a student (followed by a one day suspension), but maybe times have changed.  I guess maybe high schoolers were looking for full disclosure and got it straight on.  Free speech aside, I don't know why high schoolers feel like they shouldn't be held responsible for what they say.  People can get fired for saying stupid things while representing an organization.  Granted, these people are typically people with a fair amount of power and &lt;em&gt;responsibility&lt;/em&gt;, but that's exactly the point.&lt;/p&gt;

&lt;p&gt;But then again, was a full-blown suspension &lt;em&gt;really&lt;/em&gt; necessary?  If there's anything I learned from my years of being a staff on a MUD full of kids, it's that the best way to avoid overreacting is to ignore what people say.  This entire realm of school ethics is apparently a moral gray area (which needs rectification), and the decision made here clearly had an undesirable reaction.  The school should probably be the second avenue of teaching kids how to behave, not the first.  If a parent grounds a child for misbehavior, I kind of doubt that the entire high school would get up in arms about it.  Of course, that means that a child's parents would have to actually care; this is sadly not always the case.&lt;/p&gt;

&lt;p&gt;Both news articles indicate a lack of disclosure from school officials regarding the matter.  Why is that?  Perhaps they've realized that they've gotten themselves into a pickle and have no easy way out.  On the other hand, students have been fairly vocal about it, who seem convinced that they're completely right.  However, maybe the students aren't as sure of themselves as they seem.  The freedom of speech group created on Facebook was made by a freshman at the high school, and it's interesting how the group has progressed.  Or has it?  The group administrator has blatantly deleted posts that he didn't agree with.  Oops.  Sounds like a familiar story to me.  It's even worse, because this is &lt;em&gt;true&lt;/em&gt; censoring.&lt;/p&gt;

&lt;p&gt;A few things probably need to happen in order for this situation to settle down.  First, either the school administration should stop holing up in their offices and start talking to the press.  They should have nothing to hide, apologies not withstanding.  The school needs to make policies that pertain to "free speech" on the Internet.  Whether or not they're &lt;em&gt;good&lt;/em&gt; policies will be tested in time and possibly in court.  Kids need to stop believing that they know what's best.  The previous paragraph is a prime example of a good idea gone wrong.  Sorry, you &lt;em&gt;are&lt;/em&gt; still in high school, and believe it or not, you probably lack the wisdom that your elders have.  I flew under the radar in high school, and I still look back on high school wondering how I was so silly.  And stop posting stupid videos on the Internet.  We have lots of those as it is.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-8768473340347902298?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/8768473340347902298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=8768473340347902298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/8768473340347902298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/8768473340347902298'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/10/freedom-of-speech-fiasco.html' title='The freedom of speech fiasco'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-1288060290304888191</id><published>2007-09-15T21:31:00.000-07:00</published><updated>2007-09-15T21:35:22.582-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silencer'/><title type='text'>A source of happiness</title><content type='html'>&lt;p&gt;Recent developments by Aady and Rick, who were working this weekend on reverse engineering the servers that ran &lt;a href="http://www.mind-control.com/gameDetail.php?gameID=02"&gt;Silencer&lt;/a&gt; resulted in a played game by Rick (who dropped), DarkProdigy, and me.  This game was one of my favorite games years ago, but got shutdown when WON.net shutdown.  Being able to play a game, even if it was hosted by someone on dial-up, has made my weekend.  See &lt;a href="http://community.arsia-mons.com/"&gt;Arsia-Mons forums&lt;/a&gt; for more.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-1288060290304888191?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/1288060290304888191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=1288060290304888191' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1288060290304888191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1288060290304888191'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/09/source-of-happiness.html' title='A source of happiness'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-7109637022106451116</id><published>2007-09-11T21:13:00.000-07:00</published><updated>2007-09-11T22:09:05.533-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ethics'/><category scheme='http://www.blogger.com/atom/ns#' term='advertising'/><category scheme='http://www.blogger.com/atom/ns#' term='feed'/><title type='text'>On advertising and Internets</title><content type='html'>&lt;p&gt;Slashdot had an article titled "&lt;a href="http://slashdot.org/article.pl?sid=07/09/11/157256&amp;from=rss"&gt;The Morality of Web Advertisement Blocking&lt;/a&gt;" posted today.  In essence, it was a followup to another Slashdot article talking about how some websites were &lt;a href="http://whyfirefoxisblocked.com/index1.php"&gt;blocking Firefox&lt;/a&gt; users from visiting their site, due to the seemingly common use of the &lt;a href="http://adblockplus.org/en/"&gt;Adblock Plus&lt;/a&gt; plugin.  The question posed was:

&lt;blockquote&gt;Whereas TiVo users freeload on the relatively fixed broadcasting costs paid by TV networks, users of web ad-blocking technology are actively denying website owners revenue that would otherwise go to pay for the bandwidth costs of serving up those web pages. If the website designer has to pay for bits each time you view their website without viewing their banner ads, are you engaged in theft? Is this right?&lt;/blockquote&gt;

&lt;p&gt;The response was probably all to expected; most people shot down the idea of comparing web advertising to television advertising for one reason or another.  There were a few people who seemed to seriously consider the question, but the majority of the crowd seemed to learn towards the attitude of "I download what I want."  I can't say I entirely agree, but I definitely think the "why is Firefox blocked" website is retarded.  At best, I think most websites that use "myth" or "cult" in a demeaning way tend to be &lt;acronym title="Fear, Uncertainty, and Doubt"&gt;FUD&lt;/acronym&gt;.  I mean really.  The Firefox cult?  We worship the Firefox god, lord of all the Internet.&lt;/p&gt;

&lt;p&gt;Many people seemed to think that advertisers have no business on websites that they visit, since it's their bandwidth, and they should do what they want with it.  In some cases, I think this is a reasonable argument; for example, when viewing sites from a mobile phone, having advertisements seems typical unreasonable.  Do they really have a right to complain if they're on a cable line, or something like it?  I don't really think so.  Ads might "take more bandwidth," but this argument is ridiculous for, say, AdSense ads, which are simply text.&lt;/p&gt;

&lt;p&gt;Others say that advertising online is a flawed business model, since you're requesting all of the information you want, as opposed to TV, where you get what you get.  This seems like kind of a lame reason, but I have no real marketing background.  A lot of big sites seem to advertising (Engadget, for example...and Google) as a source of revenue.  To claim that this isn't a legitimate business model is basically saying that many of these sites shouldn't exist.  Can you imagine what the Internet would be without Google?  They've been around long enough that I can't really remember what the Internet was like back then, except the whole frames, animated GIFs, etc.&lt;/p&gt;

&lt;p&gt;There are other interesting posts, but I'm not really here to rip on people for disliking ads.  Heck, I dislike ads.  Only a weirdo would like ads.  I still don't use an ad blocker, though.  I actually had a conversation with a friend last night about it:&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;Not Me (8:25:56 PM): whoa, an ad in my firefox
Me (8:26:03 PM): ruh roh
Not Me (8:26:06 PM): that was actually fairly startling :O
Me (8:26:54 PM): I don't actually use an adblocker heh
Not Me (8:27:15 PM): que?
Me (8:27:30 PM): I see ads quite often in firefox
Not Me (8:27:52 PM): why no blocker
Me (8:28:00 PM): lazy
Me (8:28:03 PM): I don't really use plugins
Not Me (8:28:33 PM): :D
Not Me (8:28:46 PM): adblock plus updates its own blacklists and everything
Not Me (8:28:52 PM): literally like 3 clicks and you're done forever :I
Me (8:29:01 PM): I know
Not Me (8:29:04 PM): i haven't even thought about it in months
Me (8:29:04 PM): that's the sad part of it all
Not Me (8:29:04 PM): kay
Not Me (8:29:06 PM): lol
Not Me (8:29:16 PM): if i were near you i'd come to your house and do it for you
Not Me (8:29:20 PM): because that's just pathetic :-(
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Yeah, the secret's out.  I'm really, really lazy.  Okay, that wasn't really a secret.  Also, that conversation has practically nothing to do with anything, I just wanted to say that I don't use an ad blocker.  As far as text ads go, I don't really mind them.  I've actually seen interesting AdSense ads (okay, maybe once...maybe).  I don't think anyone has a right to complain about non-intrusive, text-only ads.  You can pretty much ignore them; I can usually just skip right through them, even if they're in the middle of a page.  They don't really take up much bandwidth, and Google seems to be better at relevance than most people.&lt;/p&gt;

&lt;p&gt;The real culprit here, in my opinion, is the evolution of advertising in the past few years.  Starting with those pesky "Warning!  Your computer is broadcasting an Internet IP Address!" ads, things spiraled downhill very quickly (Congratulations.  You've just been selected to win two free Apple iButts).  Then came the flashy, annoying, animated GIFs, which evolved into Flash advertisements, and then Slashdot had a post talking about Java advertisements.  Seriously?  Java?  I should just uninstall it right now.  I hate Java.  If it's used for ads, I hate it even more.  Obviously they're simply trying to get your attention, but really, this could be harmful for site traffic.  My process of visiting a site with flashy advertisements is something like this:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Visit site, probably to read some article.&lt;/li&gt;&lt;li&gt;Start reading arti&amp;mdash;why hello there, annoying advertisement with a flashing background that's enough to send a person into seizures.&lt;/li&gt;&lt;li&gt;Well, I can concentrate on reading, right?  Here we g&amp;mdash;what the hell.&lt;/li&gt;&lt;li&gt;Close tab/window.&lt;/li&gt;&lt;/ol&gt;

&lt;p&gt;If a website wants this kind of traffic, purely for generating revenue, they don't deserve to exist.  Web administrators need to realize that to keep their content readable, they need ads that don't suck.  Yeah, it probably means generating less revenue per view, but at least you stay relevant.  Users don't feel like shooting themselves after visiting your site.  Unfortunately, instead of being reasonable, I guess a handful of webmasters decided to "ban Firefox" instead.  Yeah, right.  Ban Firefox?  What a joke.  The only point you're making is that you're a jerkoff, being completely inconsiderate of people who use Firefox without an ad blocker.  Apparently we're just a statistic, and since they're losing &lt;em&gt;so much money&lt;/em&gt;, they figured it's just best to kill us all.&lt;/p&gt;

&lt;p&gt;So now we've traced the blame from the ad blockers, to the ad-laden website owners.  Of course, it doesn't stop there.  What's with the ad companies producing these wacked up ads that they must know just annoy the crap out of everyone?  Yeah, they're trying to get our attention, but in what feels like the worst ways possible.  Unfortunately, even Google seems to be moving in the direction of video ads.  Sounds totally evil, but I can only hope their implementation is better than it sounds.  If not, I'll just have to quit the Internet.&lt;/p&gt;

&lt;p&gt;But these crazy ads must work on some people&amp;mdash;obviously not tech nerds like us, but believe it or not, "less intelligent" people do exist!  Or maybe it isn't that they're dumb.  Maybe they're just heavily invested into materialism.&lt;/p&gt;

&lt;p&gt;If you've never read &lt;a href="http://en.wikipedia.org/wiki/Feed_%28novel%29"&gt;&lt;em&gt;Feed&lt;/em&gt;&lt;/a&gt; (&lt;a href="http://slashdot.org/article.pl?sid=04/07/27/1614215&amp;tid=214&amp;tid=192"&gt;Slashdot review&lt;/a&gt;), I highly recommend it.  I read this for ENGL106, and it's probably the one thing I really enjoyed doing in that class (thanks to Jennifer Eason for having us read it).  Essentially, to copy Wikipedian vocabulary, it's a dystopian novel about corporations, consumerism, and computer technology.  It's kind of scary how it seems like advertising is heading in that direction.  The premise behind the novel is basically that ads become completely integrated with people's lives.  People get flooded with ads whenever they go places.  I don't want to spoil it too much, but if you have no intention of ever reading the book, the Wikipedia article seems to do a decent summary.  You think ads are bad now?  I bet it'll only get worse.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-7109637022106451116?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/7109637022106451116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=7109637022106451116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7109637022106451116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7109637022106451116'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/09/on-ad-blocking.html' title='On advertising and Internets'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-6525886992120951578</id><published>2007-09-11T14:20:00.000-07:00</published><updated>2007-09-11T13:23:26.856-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><title type='text'>Pythonic programming and the "self" keyword</title><content type='html'>&lt;p&gt;Bruce Eckel recently posted &lt;a href="http://www.artima.com/forums/flat.jsp?forum=106&amp;thread=214112&amp;amp;start=0&amp;msRange=15"&gt;an article&lt;/a&gt; which expressed seeming disappointment in the direction Python 3000 was heading.  Particularly, he seemed to think the grandeur of a four digit version name was too much for what new things Python 3.0 will bring about.  I can't really say that I care about some of his points (the GIL argument is one that's popped up on &lt;a href="http://programming.reddit.com/"&gt;Reddit&lt;/a&gt; several times in the past few days), and obviously I only care to comment on one topic:  the self keyword in Python.  In his original post, he says the following:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;This is something I really hoped to see in Python 3K, but the beloved &lt;strong&gt;self &lt;/strong&gt;seems to be hanging on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;self &lt;/strong&gt;is inappropriate noise in a language that lays claim to clarity and simplicity. No other mainstream OO language requires it everywhere like Python does, and it's a hurdle for people who try to come to Python from those languages. Maybe it's a significant reason that Java programmers seem to be more comfortable with Ruby; Ruby takes care of it for you just like C++ and Java do.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;And posts later in a reply:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Exactly, and it's not the writing but the reading. Python generally makes code that's easier to read, but 'self' is an intrusion.&lt;/p&gt;

&lt;p&gt;And parroting "explicit is better than implicit" is a misuse of that maxim. All languages provide abstractions; Python (generally) produces clear abstractions that tell you what's going on -- these abstractions are explicit in "the right places." But 'self' is something we don't need to see inside classes. You're in a class, so 'self' or 'this' can be implied, just as it is in every other OO language I know of. Ruby, I think, has it right on this one.&lt;/p&gt;&lt;/blockquote&gt;Some of you who have really long memories or have too much spare time on your hands would remember that I actually mentioned this topic in a &lt;a href="http://saiyr.blogspot.com/2007/04/java-as-first-programming-language.html"&gt;blog post&lt;/a&gt; a long time ago.  Obviously, with that mentioned, I disagree on both counts with Bruce's reasoning.&lt;/p&gt;

&lt;p&gt;To begin with, I wonder just how much of a hurdle learning Python is because of a required &lt;em&gt;self &lt;/em&gt;for referencing instance members.  While they may not be required in other languages, they most certainly exist, usually in the form of &lt;em&gt;this &lt;/em&gt;rather than &lt;em&gt;self&lt;/em&gt;.  Is requiring &lt;em&gt;self&lt;/em&gt; really a hurdle?  In terms of using it inside method bodies, I don't think it's a very big deal.  Specifying that a variable belongs to an object makes it more clear as to what's going on, especially in a dynamic language where variable declarations don't exist.  Even Ruby, as mentioned in the thread, uses @ as a scope resolution operator.&lt;/p&gt;

&lt;p&gt;Bruce also argues that the "explicit is better than implicit" maxim is wrongly cited as a reason here, claiming that implicitness improves readability.  I definitely don't agree here, either.  In C++, Java, and C# (and probably more?), classes are well defined with what members they have, so implicitness works fine.  In Python, since you don't really have instance variable declarations, being implicit seems like a bad idea.  If you're maintaining someone else's code, you'd have to make sure all of your local variables weren't actually instance variables, lest ye overwrite them and screw something up.  GvR's &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=214325"&gt;response&lt;/a&gt; also indicates a technical challenge in removing the required &lt;em&gt;self&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Brandon Corfman also responded, saying:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The problem is that the 'self' plague doesn't stop there ... don't forget that self is required as the first parameter of every class method. For example, the following code that forgets to use self as the first parameter of printInfo:&lt;/p&gt;

&lt;pre&gt;class MyClass(object):
    def printInfo(s):
        print s
   
def main():
    m = MyClass()
    m.printInfo('Hello')&lt;/pre&gt;

&lt;p&gt;When running main, you get the following traceback from Python:&lt;/p&gt;

&lt;pre&gt;Traceback (most recent call last):
  File "&lt;stdin&gt;", line 1, in &lt;module&gt;
  File "hello.py", line 7, in main
    m.printString('Hello')
TypeError: printString() takes exactly 1 argument (2 given)&lt;/pre&gt;

&lt;p&gt;Except I am giving one argument! What second one is it talking about? Oh yes, the interpreter is expecting 'self'. Totally confusing and brain-dead requirement. Why does this need to be the first parameter of every class method?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I think explicitly using self as the first argument is a good idea, to some extent.  It's kind of quirky (I'm pretty sure you can name it whatever you want, and it would still work), but having self be in the parameter list shows C programmers (and other, maybe more inexperienced OO programmers) how instance methods basically work.  They aren't some voodoo magic higgity biggity, they really just pass the object as an invisible first argument to the method.  In the above case, m.printInfo() is really just shorthand for MyClass.printInfo(m).  Python's explicit requirement of self as the first argument makes it so that it's clear to people what the difference between instance and static methods are (even though they're different in Python than Java, et al).  The exception message is still kind of confusing until they make the revelation of that m is basically the first argument, but this concept is probably something most programmers who deal with OO should know.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-6525886992120951578?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/6525886992120951578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=6525886992120951578' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/6525886992120951578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/6525886992120951578'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/09/pythonic-programming-and-self-keyword.html' title='Pythonic programming and the &quot;self&quot; keyword'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-5811396338672091030</id><published>2007-08-30T23:36:00.000-07:00</published><updated>2007-08-30T22:41:24.274-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><category scheme='http://www.blogger.com/atom/ns#' term='scheme'/><title type='text'>The Scheming senior</title><content type='html'>&lt;p&gt;Life has been busy once more, since school started.  For some reason, I thought it would be a good idea to take three CS classes (software engineering, programming languages, and cryptography) as well as music theory.  Music theory appears to have homework due every class, which sucks, even though it's pretty easy so far.  In addition, being a senior now, I have to start worrying about what direction I want my life to go in next year.  Of course, being me, I'm still rather indecisive over graduate school versus industry.&lt;/p&gt;

&lt;p&gt;Research, to be honest, is so far basically what I made it out to be&amp;mdash;boring.  It didn't help that I picked a topic that I wasn't particularly interested in, but I'm doing my best to stay interested.  Professor Mathur seems to be very passionate about what he does, which helps my motivation a bit.  Even though it's not that exciting (calling it flat out boring is also an exaggeration), I guess this is a good experience for me to actually have a mentor that's been in the field for years.  Hopefully I can get the motivation to finish this research project and publish a paper at the end of the semester, which would look nice on a resume for grad school.  Weekly meetings should boost my motivation, at least a little bit.&lt;/p&gt;

&lt;p&gt;Classes are kind of "meh" right now.  Software engineering is definitely a lot less exciting than I thought it would be, and kind of wish I had taken something else instead.  The project is some sort of grunt work from HP that has to do with finance.  It definitely sucks compared to the project binder that we saw, which was a game of some sorts.  From what the programming languages book is saying, the class will get more interesting as time goes on, but the current chapters are boring.  Cryptography is pretty interesting; it's probably the most interesting thing right now.  Music theory hasn't gotten past playing scales, so it's not very exciting.  Playing on the keyboards on Friday is kind of fun despite the simplicity, since I haven't played piano in about seven years now.&lt;/p&gt;

&lt;p&gt;Perhaps the most interesting thing that has happened lately (at least to me) is the arrival of my latest shipment from Amazon, consisting of:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0262560992/105-0998813-7654035"&gt;The Little Schemer, 4th ed.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/B000Q9IZ5C/105-0998813-7654035"&gt;Serenity, Collectors Edition&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0131345559/105-0998813-7654035"&gt;The Design of Sites&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;The Design of Sites&lt;/em&gt; is more to get some inspiration for web design, since I clearly suck at it.  I guess this is necessary, since the web is the wave of the future.  Or whatever.  It seems to be very illustrated, but I haven't really looked too carefully at it, yet.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Serenity &lt;/em&gt;came out recently, which I couldn't resist buying, even though I already own the original edition.  &lt;em&gt;Firefly&lt;/em&gt; is one of my favorite series, and extended scenes and more bonus features makes an already awesome science fiction universe even more legen&amp;mdash;wait for it&amp;mdash;&lt;/p&gt;

&lt;p&gt;Last, but certainly not least, I've already gone through two chapters of &lt;em&gt;The Little Schemer&lt;/em&gt;.  The book takes on a very peculiar format, based purely (at least so far) in Q&amp;A format.  They ask questions that you can hopefully answer and give explanations for each answer.  For a fairly advanced programmer like me, this is amusing at first, but tiring in some spots.  I was hoping for a book that I could read cover to cover, but this doesn't seem to be the book.  Not that I'm disappointed with it at all, I just don't feel like reading through levels of recursion that are obvious to me.&lt;/p&gt;

&lt;p&gt;This brings about an interesting pedagogical method; Friedman and Felleisen take an approach that depends on the human ability to recognize patterns.  It seems like if you ask enough questions, the reader should be able to figure out what a certain function does.  I had kind of an advantage of already knowing what some of them did, so playing a game of 20 questions was a bit overkill, but I wonder how this teaching method would apply to a more inexperienced student.&lt;/p&gt;

&lt;p&gt;Actually, I already use this method &lt;em&gt;somewhat&lt;/em&gt; with students.  Whenever a student asks me a question that I deem should be obvious or already known from previous labs/lectures, I bombard them with questions until they figure it out.  Unfortunately, this doesn't always work, possible due to a few reasons:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;The student is lazy&lt;/em&gt;.  This might be a mean thing to say, but I think it's true.  Graduate TAs that run consulting hours complain about students being unable to debug on their own, which I believe should be fairly intuitive.  I've even had someone cry, possibly to get me to write the project instead.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;The student doesn't really understand the language&lt;/em&gt;.  Compared the Scheme, Java is pretty complex, and some students never really properly learn some language constructs (e.g. the static keyword).  This presents a huge problem when you get errors like, "non-static variable referenced in a static context."  This is more of a lack of knowledge than reasoning ability, so this is where I throw my hands in the air and tell them to read the textbook.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;I'm not asking enough questions or I'm asking the wrong questions&lt;/em&gt;.  This is quite possible; unlike the concepts presented so far in this book, so it's not always possible to ask an exhaustive list of questions to make the student reason through exactly what mess he/she has just made.&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Regardless of the potential for failure, I think this could be applied to some specific topics for students to look like.  The static keyword is probably a good target to start with.  It is not as difficult to make an exhaustive list of questions for the students to "pattern match" through for one single concept, but I guess it's too late to use this kind of method when they're working on projects midway through the semester.  Hopefully I can get some spare time to concoct an article for using the static keyword, and get some response from students on how beneficial it was.&lt;/p&gt;

&lt;p&gt;Anyway, this has been a very random grouping of topics and I think I've poured out my heart and soul enough for tonight.&lt;/p&gt;

&lt;p&gt;Dary.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-5811396338672091030?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/5811396338672091030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=5811396338672091030' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5811396338672091030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5811396338672091030'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/08/scheming-senior.html' title='The Scheming senior'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-8053110795440901955</id><published>2007-08-14T09:25:00.001-07:00</published><updated>2007-08-14T09:28:12.757-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='purdue'/><category scheme='http://www.blogger.com/atom/ns#' term='austin'/><title type='text'>The not-as-exciting Austin post</title><content type='html'>&lt;p&gt;Not to insult Austin or anything, but I'm lazy, and most of the work was done for me already.  James posted a fairly comprehensive &lt;a href="http://sixtimesfaster.blogspot.com/2007/08/nice-dream.html"&gt;summary&lt;/a&gt; of what went down in Austin.&lt;/p&gt;

&lt;p&gt;The only thing I have to mention is that I'm noticing a trend when comparing Purdue's campus to others (such as MIT and UTA).  I wonder if it's really just because I've seen Purdue for three years.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-8053110795440901955?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/8053110795440901955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=8053110795440901955' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/8053110795440901955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/8053110795440901955'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/08/not-as-exciting-austin-post.html' title='The not-as-exciting Austin post'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-1866754366427185890</id><published>2007-08-03T21:29:00.000-07:00</published><updated>2007-08-03T22:51:36.834-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='purdue'/><category scheme='http://www.blogger.com/atom/ns#' term='boston'/><title type='text'>The super-exciting Boston post</title><content type='html'>&lt;p&gt;Yeah, so this post took about 5 days more than it should have.  Oh well.&lt;/p&gt;

&lt;p&gt;All was quiet from my end of the Internet this past weekend, since I was at MIT visiting my so-very-dear friend, Julia.  Of course, like the rest of this year, my airport experience was highly unpleasant at best.  I decided to fly US Airways since it was cheap; apparently they were cheap enough that they canceled my flight out on Friday evening without citing a reason, forcing me to fly out at 6:20am on Saturday to be able to spend any significant amount of time in Boston.  My flights were delayed a little bit anyway, and filled with crying babies, further adding to the flight fun.&lt;/p&gt;

&lt;p&gt;After arriving in Boston, we went to a Vietnamese restaurant around Harvard where I had &lt;a href="http://en.wikipedia.org/wiki/Pho"&gt;phở&lt;/a&gt; for the first time, along with some sort of beverage made of &lt;a href="http://en.wikipedia.org/wiki/Jackfruit"&gt;jackfruit&lt;/a&gt;.  Phở is basically a beef noodle soup, though there were some ingredients within that I couldn't identify (and thinking back, would probably rather not); it was pretty good, especially since I hadn't had breakfast, despite being awake since 4am.&lt;/p&gt;

&lt;p&gt;After lunch, it was pouring extremely hard, so we spent rest of the remainder of the day in the comfort of a dorm room.  The dorm is a graduate dorm, and it provides a better environment than any dorm at Purdue ever has (or will); the dorm is replete with computing facilities, conference rooms, as well as apartment-like suites that include kitchens as well as bathrooms, never mind the fact that each room was bigger than a shared double in Hillenbrand.  For dinner, &lt;span class="strike"&gt;I stood by idly and watched Julia cook&lt;/span&gt; we cooked chicken parmigiana, and since I'm alive, clearly it wasn't toxic.  &lt;em&gt;Too&lt;/em&gt; toxic, anyway.&lt;/p&gt;

&lt;p&gt;After waking up at noon on Sunday, we had pancakes, eggs, and sausage (read: fat) for...for lunch, I guess.  We took a mini-tour around MIT's campus, which was interesting; it's pretty different from Purdue's campus, which I would call boring at best (and smelly during select seasons).  To begin, Purdue's campus is fairly confined to a smaller area, unlike MIT (and IU, for that matter); smaller areas aren't very exciting, but I guess it's nicer for walking to class.  MIT's campus is a little more widespread and more "scenic," being that it doesn't reside in a town as tiny as West Lafayette.  MIT also has some fairly interesting architecture, such as their CS building, which is probably the wackiest building I've ever seen in my life (photo shown below; not mine).  More to the point, most of Purdue's buildings are pretty boring (new CS building, anyone?); maybe the architecture is just a novelty that would wear off on me if I saw it every day for four years, though.&lt;/p&gt;

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_NBLmaGdSI4A/RrFAcZgM-8I/AAAAAAAAABo/pFcWAzZHbLg/s1600-h/gehry_mit.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_NBLmaGdSI4A/RrFAcZgM-8I/AAAAAAAAABo/pFcWAzZHbLg/s320/gehry_mit.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5093923510159211458" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MIT seems to have a more interesting history than Purdue does, as well.  Maybe it's because of MIT's incredible nerdism that makes them &lt;a href="http://en.wikipedia.org/wiki/Smoot"&gt;measure bridges in terms of people&lt;/a&gt;, but as far as I know, Purdue feels pretty bland in comparison.  Not that we don't have our own share of of urban legend to spice up our history, but it seems like our student population is confined typical college activities of partying and &lt;span class="strike"&gt;tipping cows&lt;/span&gt; studying hard.  Of course, it's also quite likely that I'm left out of the loop, since I never leave my room.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/MIT_hacks"&gt;MIT hacks&lt;/a&gt; are also a very interesting part of MIT culture.  &lt;a href="http://en.wikipedia.org/wiki/Image:MIT_firetruck_hack_2006.JPG"&gt;Putting fire trucks on top of buildings&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Image:MIT_Flemming_Cannon_Brass_Rat_1.jpg"&gt;putting blown up versions of a class ring on a stolen cannon&lt;/a&gt; seem to be above things that Purdue students (or administrators) could ever manage.  Of course, I'm not exactly an expert of Purdue culture either, so I can't really make too many comparisons, but I think it's safe to say that Purdue is relatively normal; after all, we appear to be a relatively conservative campus.&lt;/p&gt;

&lt;p&gt;Of course MIT has its downsides too, such as living through X years of torture, paying more money for one year than I pay for four years at Purdue, and so on.  Paying so much more might entitle you to better living quarters among other things (being around generally smarter people, getting a job automatically, you know), but the the painted picture of the academic workload seems...well, crazy.&lt;/p&gt;

&lt;p&gt;We walked around Boston for awhile; the weather was much nicer than it is in West Lafayette now.  Even though it was overcast, it wasn't raining, and there was a nice breeze to keep the temperature nice.  In West Lafayette, it's blistering hot, and I start sweating just walking back to my apartment from work.  Lucky for me, I'm not playing tennis anymore, unlike two members of my family, or I'd probably be dead by now.  Anyway, Boston was a pretty nice area; I certainly like it much more than I liked New York City when we visited for spring break (possibly because it was snowing and very wet).  Boston didn't feel as congested as NYC always did (given that it was a Sunday), and I guess it just felt different (in a good sort of way?) walking around Boston; maybe I felt like I had a smaller chance of getting mugged.&lt;/p&gt;

&lt;p&gt;It was kind of weird to see some university residences (MIT Greeks, BU dorms) sitting in the middle of a city, kind of like how &lt;a href="http://www.scu.edu.tw/Eng/"&gt;Soochow University&lt;/a&gt; in Taiwan was right in the middle of a city.  The buildings there were also unlike anything you'd ever see around Purdue, partly because some of them are very old compared to anything you would see in all of Indiana.  I guess someone decided it would be fun to build housing vertically instead of horizontally to prevent people in Boston from getting fat; maybe I should move into one of those houses.&lt;/p&gt;

&lt;p&gt;We ate at a Thai restaurant for dinner (I don't remember any names, I suppose I'm a bad tourist) and I had a yellow curry.  I didn't realize they would just give you "extra" bowls of rice if you needed it, and there was an awful lot of curry sauce for just one bowl of rice, but it was still good.  The rest of the night was spent watching South Park and failed attempts to get me to follow along with &lt;a href="http://www.youtube.com/watch?v=sslnNEmM1XM"&gt;Japanese women doing aerobics&lt;/a&gt; and saying really odd things like, "I was robbed by two men" and, "take anything you want."  I think their smiling faces indicated that they didn't know what they were saying.&lt;/p&gt;

&lt;p&gt;We left for the airport basically right after waking up.  My flight back was also delayed at each leg, and I ended up getting back home about two hours later than I should have.  I don't know if I just pick terrible times to fly or what, since I don't think I've ever encountered this kind of luck before.  At least I wasn't flying Northwest, who appears to be canceling flights like nobody's business, or I'd probably still be in Boston.  Alone.&lt;/p&gt;

&lt;p&gt;So all of this took way too long to think up and write, and I leave for Austin in a few days to visit &lt;a href="http://sixtimesfaster.blogspot.com/"&gt;James&lt;/a&gt;, a lazy bum who hasn't posted on his blog in awhile, all the while thinking he can bug me about my blogging!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-1866754366427185890?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/1866754366427185890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=1866754366427185890' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1866754366427185890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1866754366427185890'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/08/super-exciting-boston-post.html' title='The super-exciting Boston post'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_NBLmaGdSI4A/RrFAcZgM-8I/AAAAAAAAABo/pFcWAzZHbLg/s72-c/gehry_mit.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-918493795941358532</id><published>2007-07-19T09:51:00.000-07:00</published><updated>2007-07-19T10:24:07.229-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='purdue'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>CS180: Debugging</title><content type='html'>&lt;p&gt;One major point that CS180 seems to be lacking teaching students about debugging--understandably so, because it seems like debugging &lt;em&gt;should&lt;/em&gt; be a fairly intuitive process.  However, when it comes down to programming projects, plenty of students come in to get help with the same situation:  They've programmed their entire project, but it doesn't work.  The degree to which their programming is hopeless varies by student, but in general, consulting TAs can get exasperated with bad programming practices and helplessness in regard to fixing bugs, be it at runtime or compile time.&lt;/p&gt;

&lt;p&gt;One hopefully helpful way to attack this problem will be to have a lab about debugging, which will be fairly early in the semester.  What I'm interested in hearing is what people think should be included in a lab like this.  Since the lab is planned to be early on, it's difficult to have students attack complex scenarios and fix bugs in them.  Perhaps the only thing we can teach them is the "development cycle," which seems to be: edit -&gt; compile -&gt; fix compiler errors -&gt; compile -&gt; run -&gt; fix runtime bugs -&gt; etc.  This is pretty natural to students, and I haven't really seen any students who didn't understand that cycle.  The problem really lies in the fact that they have no idea how to fix either type of bug.&lt;/p&gt;

&lt;p&gt;In most cases, Java tends to spit out fairly reasonable error messages, which means students &lt;em&gt;should&lt;/em&gt; be able to figure them out.  Do they even bother to read them before calling a TA over?  Sometimes I don't think they do--perhaps it would be in our best interest to have them sit on it for awhile, first.  I seriously doubt it's difficult to understand what "missing semicolon" means.  Another thing that needs to be pointed out is that &lt;strong&gt;compile time errors need to be fixed from the top, not bottom.&lt;/strong&gt;  Since one error (particularly syntax errors) can cause an explosion of false alarms, fixing from the bottom is often unhelpful and incorrect.  Even though a compiler may spit out 100 errors, that doesn't mean you have 100 errors to fix!&lt;/p&gt;

&lt;p&gt;Teaching students to fix runtime errors is, in my opinion, an order of magnitude more difficult.  Part of it lies in the fact that some students will have the wackiest implementations you'll ever see that really make no sense at all, but also somehow work--most of the time.  JDB is a potentially helpful tool, but this probably isn't something we want to teach this early on (I think it sucks compared to GDB, anyhow).  Other ways of finding errors would be via unit tests, print-and-seek methods, or main methods for testing.  The first has not been taught in CS180 at all (or in any CS class, for that matter), so the second is usually what I tell students to do.  However, they seem to be unable to insert their own prints in strategic location.  This should probably be mentioned in the debugging lab, since it's the easiest to teach.  Writing main methods that do testing for you is probably a good idea as well, but this isn't as applicable until students get into projects with multiple classes.&lt;/p&gt;

&lt;p&gt;The more and more I talk about this topic, the more I see that there might not be a whole lot that could be put into a debugging lab, besides reading.  If the lab is to be early on, then we can only teach them a small amount.  However, maybe it would be good to write a series of articles on more "advanced" topics for later projects?  Good programming habits aren't really taught in CS180 either, for who knows what reason.  For example, &lt;strong&gt;programming in incremental stages&lt;/strong&gt; and testing (at the very least, &lt;em&gt;compiling&lt;/em&gt;) at each stage will help reduce the bug fixing stress students experience if they try to program all of a project before compiling.  Another thing to point out is that having methods be fairly small/contained is a good idea.  It could make finding runtime errors a bit easier, compared to having a main method that's hundreds of lines long.&lt;/p&gt;

&lt;p&gt;I also thought that having some sort of debugging exercises later on via CS192 might be helpful, but I have no responsibility in that part of the course planning (and at this stage, I don't really plan to).  For now, we'll have to assume that we have to teach them everything they need to know about debugging in one very early lab, and put the reset off for individual reading later.  Along that note, someone (Ryan, perhaps) mentioned that having a centralized repository for this kind of documentation would be good--would we have any contributors if this were to be set up?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For the tl;dr (or those too confused by my post that should be edited, but won't be), answer these questions:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What should be in a debugging lab?&lt;/li&gt;
&lt;li&gt;What shouldn't be in a debugging lab but is still well worth knowing?&lt;/li&gt;
&lt;li&gt;Are you willing to write about these things for a central repository?&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-918493795941358532?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/918493795941358532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=918493795941358532' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/918493795941358532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/918493795941358532'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/07/cs180-debugging.html' title='CS180: Debugging'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-7744619217439583029</id><published>2007-07-05T10:15:00.000-07:00</published><updated>2007-07-19T09:52:21.781-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='purdue'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>CS180: Writing easy-to-grade labs</title><content type='html'>&lt;p&gt;Maybe I'm having delusions of grandeur, but I think this should be possible.  I'm currently envisioning a method of writing labs that allows a script to perform automatic grading (yes that's right, I've gone mad) for the ease of the lab TA.  A little adjusting to how comments in the skeleton are done can go a long way.  I'm kind of lazy, so I'll be using my super-trivial code example that I ranted about some time ago, with two TODOs added:&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;&lt;span class="Type"&gt;public&lt;/span&gt; &lt;span class="Type"&gt;boolean&lt;/span&gt; foo() {
    &lt;span class="Type"&gt;boolean&lt;/span&gt; b = bar();
    &lt;span class="Statement"&gt;if&lt;/span&gt; (b == &lt;span class="Constant"&gt;true&lt;/span&gt;) {
        &lt;span class="Comment"&gt;/* TODO 1:  Return true */&lt;/span&gt;
        &lt;span class="Comment"&gt;/* END TODO 1 */&lt;/span&gt;
    }
    &lt;span class="Comment"&gt;/* TODO 2:  Write an else statement that returns false. */&lt;/span&gt;
    &lt;span class="Comment"&gt;/* END TODO 2 */&lt;/span&gt;
}
&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;
&lt;p&gt;Usually the skeleton code will consist of a bunch of blanks you need to fill in, so if we specify and ending line for said blank, then you can tell what the student typed in for the TODO.  This is a pretty simple approach, and allows you to swap out TODO implementations (say, a student's implementation for the solution's), which can be done by a grading script.  This method would also take away the problem of TODOs that don't compile by default, which is an issue for students who can't finish their labs.  You can test one TODO at a time, using the solution for the rest of the program.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt;This doesn't really take away the problem of TODOs that come non-compiling, since students can't test their program until it does.  Duh.  More on this later, maybe.  Suggestions welcome.&lt;/p&gt;
&lt;p&gt;Theoretically, this idea could be extended to make a script generate the skeleton code as well, since it seems trivial to extract the text between the comments and call it a skeleton:&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;&lt;span class="Type"&gt;public&lt;/span&gt; &lt;span class="Type"&gt;boolean&lt;/span&gt; foo() {
    &lt;span class="Type"&gt;boolean&lt;/span&gt; b = bar();
    &lt;span class="Statement"&gt;if&lt;/span&gt; (b == &lt;span class="Constant"&gt;true&lt;/span&gt;) {
        &lt;span class="Comment"&gt;/* TODO 1:  Return true */&lt;/span&gt;
        &lt;span class="Statement"&gt;return&lt;/span&gt; &lt;span class="Constant"&gt;true&lt;/span&gt;;
        &lt;span class="Comment"&gt;/* END TODO 1 */&lt;/span&gt;
    }
    &lt;span class="Comment"&gt;/* TODO 2:  Write an else statement that returns false. */&lt;/span&gt;
    &lt;span class="Statement"&gt;else&lt;/span&gt; {
        &lt;span class="Statement"&gt;return&lt;/span&gt; &lt;span class="Constant"&gt;false&lt;/span&gt;;
    }
    &lt;span class="Comment"&gt;/* END TODO 2 */&lt;/span&gt;
}
&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;
&lt;p&gt;I can imagine creating a directory structure for creating labs (kind of like Rails...except not):&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;solution/
doc/&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;From this, the lab spec would be written inside doc (how this will be done is yet to be decided), and the solution in the solution folder.  Running a script after the solution is finished would:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Extract all of the solution text from the TODOs to create the skeleton in a skeleton folder&lt;/li&gt;
&lt;li&gt;Create a tests/ directory that has a subdirectory for each TODO, where the author can insert Java programs to test that TODO&lt;/li&gt;
&lt;li&gt;Generate the lab spec in HTML format in a www folder&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This entire structure would be mailed out to all of the TAs, while the skeleton and www folders would be what was exposed to the students.  When it came time for grading, you could have a generic script (I hope) that would take a test directory and a solution directory and run tests for each TODO on every student's files, generating text that would be mailed to students.&lt;/p&gt;
&lt;p&gt;While automation would probably speed up grading by a lot, I still think there's room for grading things by hand.  Emphasis on style, such as proper indentation, non-terrible &lt;em&gt;horizontal&lt;/em&gt; whitespace) is much more difficult to automatically grade (if someone wants to write a script to do it, be my guest).  Granting partial credit and giving advice for writing better code also has to be done manually, and I think it would be good if TAs at least spent time on this once every few labs (perhaps this should be designated; every third lab, maybe?).  This process also doesn't help if we create write-from-scratch labs.&lt;/p&gt;
&lt;p&gt;I think I've rambled enough for now; comments welcome, etc.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-7744619217439583029?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/7744619217439583029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=7744619217439583029' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7744619217439583029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7744619217439583029'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/07/cs180-writing-easy-to-grade-labs.html' title='CS180: Writing easy-to-grade labs'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-5934839049035772204</id><published>2007-07-04T20:30:00.000-07:00</published><updated>2007-07-05T08:39:55.553-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='purdue'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>CS180:  Writing and grading labs</title><content type='html'>&lt;p&gt;Part of my summer goals for CS180 include improving the way labs in CS180 are done.  There seemed to be a lack of standard in handling labs over the semesters that I taught, which actually weren't a &lt;em&gt;huge&lt;/em&gt; deal, but I think it's a problem worth addressing.  Different TAs tended to write their lab specs in different formats, which could sometimes be confusing; some TAs also wrote labs that were hard to grade, which ended up being annoying for all of the TAs.  Specifically, the goals I have are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Write a spec writing guide (especially since I may be the only returning lab TA)&lt;/li&gt;
&lt;li&gt;Write a lab spec template and source file template&lt;/li&gt;
&lt;li&gt;Write a few labs based on the specs&lt;/li&gt;
&lt;li&gt;Write a lab "best practices" guideline (slightly unrelated)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, a change that will be made this semester is that the last few labs (or at least some labs) will be written from scratch.  A complaint I heard was that CS240's labs were hard to deal with, since many of them were written from scratch.  This is a silly problem, and students should be learning how to build a program from the ground up.&lt;/p&gt;
&lt;p&gt;Grading is also a worthy problem to address; there is no standard for TAs to grade by, which leads to a natural unfairness in the lab grades.  I think expecting the lab author to also create a grading rubric is reasonable, and should help TAs grade more fairly and more quickly.  If labs are able to be script-graded, I would expect the TA to write a script for it as well.&lt;/p&gt;
&lt;p&gt;Another aspect of grading comes in how the student sees how he or she did, and what went wrong.  Traditionally, when us old people took it, TAs would print out labs and hand them back; I tried this last semester, and it was a bit cumbersome to manage all of the paper (and wasteful, in my opinion).  CS158/9 had its TAs mail students back with comments, which I thought was a better idea, but the way they had us do it kind of sucked.&lt;/p&gt;
&lt;p&gt;For the TAs, I think the improvements for a major part seem to boil down to scripting.  I imagine Python scripts could be handy for writing grading scripts, among other things.  For one, the best way to generate a uniform HTML page for the lab spec is probably to parse some markup that generates the HTML for you, rather than force everyone to hand-edit a bunch of HTML.  Or maybe I'm just deluded.  Python could probably make a lot of things easier, but more on that later.  Hopefully.&lt;/p&gt;
&lt;p&gt;Comments on any of the possible changes are quite welcome, as I'm kind of rambling.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-5934839049035772204?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/5934839049035772204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=5934839049035772204' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5934839049035772204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5934839049035772204'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/07/cs180-writing-and-grading-labs.html' title='CS180:  Writing and grading labs'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-6416964152472000277</id><published>2007-06-28T15:11:00.000-07:00</published><updated>2007-06-28T20:40:22.511-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='purdue'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>CS180: Editors and IDEs?</title><content type='html'>&lt;p&gt;For some reason, we started using &lt;a href="http://www.jedit.org/"&gt;jEdit&lt;/a&gt; as our official editor in CS180, since apparently our students weren't hax0r enough to handle Vim or Emacs (we stopped using Eclipse as well, for some reason that I don't really know).  Looking back over the past few years, I wonder if jEdit is such a good choice.  They tout themselves as a "programmer's text editor," but I think it sucks.  We have 25 [apparently theoretically] identical computers in the CS180 lab, but jEdit does wacky stuff like behave really oddly if num lock is on (or off, one or the other), not syntax highlight properly on some computers, etc.&lt;/p&gt;

&lt;p&gt;I'm hoping that as the next head/lead/whatever TA, I can persuade the course administrators to change the editor, if I want, but I'm not entirely sure what I would suggest using.  The options seem to be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vim&lt;/li&gt;
&lt;li&gt;Emacs&lt;/li&gt;
&lt;li&gt;Pico/Nano&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ IDEA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.netbeans.org/"&gt;NetBeans&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some of these options are laughable (if you ask me, anyway).  Using vim or emacs as a main editor is probably still not a great idea; it would be wise to learn in CS180 anyway, but the warring of the two editors means some students would be learning one and some would learn another, as mandated by the instructing TA.  This is probably a crappy idea, and students should try both on their own, since the &lt;a href="http://usb.purdue.org/"&gt;USB&lt;/a&gt; has tutorials on both.  Pico on lore doesn't have syntax highlighting; I don't really know why we don't use Eclipse (other than I think it can eat poop), IDEA looks interesting (but weaning new programmers on IDEs means they're going to have tons of fun in CS240), and NetBeans?  Yeah...&lt;/p&gt;

&lt;p&gt;I'm open to opinions, though I wonder if anything will ever come of it.  Maybe I'm just posting so I don't feel so lazy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-6416964152472000277?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/6416964152472000277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=6416964152472000277' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/6416964152472000277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/6416964152472000277'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/06/cs180-editors-and-ides.html' title='CS180: Editors and IDEs?'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-7693444336851953429</id><published>2007-06-22T10:02:00.000-07:00</published><updated>2007-06-22T09:15:34.230-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='purdue'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>Interested in teaching CS180?</title><content type='html'>&lt;p&gt;It's high time I started working on stuff I said I would be working on (progress report: completed 0%).  Part of said stuff requires finding enough TAs for CS180 next year.  Anyone interested in teaching little freshies Java?  Leave a comment if you're interested--I know at least a few of you are TAs.  I need three more at least, more to buffer schedule conflicts.&lt;/p&gt;

&lt;p&gt;Interested in helping with CS180 but not so interested in teaching/grading?  CS180 also needs evening consultants (4-6, maybe more), and I currently have none.  Work is usually 3 hours per session.  Check the &lt;a href="http://web.ics.purdue.edu/~cs180/"&gt;now-outdated CS180 website&lt;/a&gt; for example schedule.&lt;/p&gt;

&lt;p&gt;More to come about CS180 later, when I'm not lazy or at work.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-7693444336851953429?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/7693444336851953429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=7693444336851953429' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7693444336851953429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7693444336851953429'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/06/interested-in-teaching-cs180.html' title='Interested in teaching CS180?'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-2882951864653546661</id><published>2007-05-23T10:34:00.000-07:00</published><updated>2007-05-23T09:35:18.138-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>Open source in the mainstream world</title><content type='html'>&lt;p&gt;A Slashdot article was [somewhat] recently (it's summer, I'm lazy) posted referring to a &lt;a href="http://www.wired.com/"&gt;Wired&lt;/a&gt; article (seems increasingly common nowadays), debating whether or not Firefox was becoming bloated due to more users using it and requesting more features (integrated RSS, all that fun stuff).  Everyone's favorite browser (including mine, a Microsoft fanboy!  *gasp*), becoming bloated?!  No way!&lt;/p&gt;

&lt;p&gt;This topic actually came up to some degree in the comments for &lt;a href="http://saiyr.blogspot.com/2007/04/monoculture-in-open-source-software.html"&gt;one of my earlier posts&lt;/a&gt; (which apparently got two diggs, thanks to &lt;a href="http://symbollocks.blogspot.com/"&gt;Dylan&lt;/a&gt;--but apparently I'm not cool or interesting enough).  It seems like a lot of open source projects in the past have [over]emphasized modularity in their application architecture.  The Firefox developers seem to be well aware of this, otherwise this article would have never appeared.&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://slashdot.org/articles/07/05/17/1926209.shtml"&gt;Slashdot article&lt;/a&gt; accused Firefox of heading in the IE direction, i.e. (ha ha) bloated, like all Microsoft products are, according to some.  That's a rather interesting accusation, considering Firefox is the &lt;a href="http://www.xkcd.com/c198.html"&gt;jewel of open source&lt;/a&gt;.  So why is Firefox heading in this direction?&lt;/p&gt;

&lt;p&gt;Shamelessly citing &lt;a href="http://saiyr.blogspot.com/2007/04/monoculture-in-open-source-software.html#comment-4264759472621929679"&gt;my own comment&lt;/a&gt;, I was arguing that "extremely modular architectures" are not acceptable for non-technical users, and because of this, the most popular open source software would have to "bloat up" to really grab the attention of this population (which is who the open source crowd is targeting nowadays, right?).  Interestingly, this implies that software bloat and "normal" customer satisfaction have an &lt;em&gt;inverse&lt;/em&gt; correlation.  I'm sure a large quantity of people, myself not withstanding, want their software to work, work well, and do everything they need--&lt;strong&gt;without having to install plugins!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Microsoft is constantly accused of developing bloated software, and that open source alternatives are so much better, because they aren't bloated.  Can anyone really win this war?  If more users equals more bloat, then there's a bit of a Catch-22 going on, especially for the "elite" users that complain about bloat in the first place.  How can you satisfy more than one group of people?  For example, &lt;a href="http://slashdot.org/comments.pl?sid=235125&amp;cid=19169063"&gt;a&lt;/a&gt; &lt;a href="http://slashdot.org/comments.pl?sid=235125&amp;cid=19169433"&gt;few&lt;/a&gt; comments on the Slashdot article pointed out that things like RSS integration are unnecessary to a browser and are really just bloat, and &lt;a href="http://slashdot.org/comments.pl?sid=235125&amp;cid=19170695"&gt;another&lt;/a&gt; complaining that excessive memory wasn't really limited to just Firefox.&lt;/p&gt;

&lt;p&gt;This seems to be a pretty hard problem (perhaps NP hard? hurr), that I have no immediate solution to--it's more than just a programming problem, that's for sure.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-2882951864653546661?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/2882951864653546661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=2882951864653546661' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2882951864653546661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2882951864653546661'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/05/open-source-in-mainstream-world.html' title='Open source in the mainstream world'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-4649530274794605868</id><published>2007-05-07T15:12:00.000-07:00</published><updated>2007-05-07T15:38:58.554-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shaim'/><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>Summer plans</title><content type='html'>&lt;p&gt;Well, junior year has finally ended as of last Wednesday.  Now I'm just crossing my fingers for good grades.  Anyway, summer has rolled around and now it's time to "be productive."  So what's going on this summer?  In no particular order:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Research&lt;/strong&gt;.  I've gotten involved with two professors over the summer, both somewhat tied to security.  One of them is with &lt;a href="http://cerias.purdue.edu/"&gt;CERIAS&lt;/a&gt;, where I think I'll be working with &lt;a href="http://web.ics.purdue.edu/~bjandrew/blog/"&gt;Bennett&lt;/a&gt;.  The other is with Professor Mathur, which means it's related to software testing (for this project, also related to security).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://shaim.bountysource.com/"&gt;shaim&lt;/a&gt;&lt;/strong&gt;.  I started committing to shaim before school ended, and intend to continue doing so.  For the 0.4 milestone, I'll be getting the event notifications plugin out, and for 0.5, I'll be working on getting IRC to work (making the &lt;em&gt;third&lt;/em&gt; IRC client I've ever made).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CS180 preparation&lt;/strong&gt;.  I have a few things in mind to change to hopefully make CS180 a better experience for the students and the TAs, which I might post about later.  By the way, for Purdue readers, if you're interested in being a TA, let me know.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Purdue CS &lt;a href="http://www.planetplanet.org/"&gt;Planet&lt;/a&gt;&lt;/strong&gt;.  A few of us came up with an idea of setting up something like a Planet except a bit more automated so it's low maintenance.  No idea how far this idea will actually be taken, but I think it would be cool.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There's one more project that I won't mention for now, but between all of these, I think I'll be rather busy, but if I can manage my time well, I think this summer will ultimately be very productive.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-4649530274794605868?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/4649530274794605868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=4649530274794605868' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/4649530274794605868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/4649530274794605868'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/05/summer-plans.html' title='Summer plans'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-8690668394498600315</id><published>2007-05-01T19:47:00.000-07:00</published><updated>2007-05-01T20:07:27.307-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='digg'/><title type='text'>Democracy and Digg.com</title><content type='html'>&lt;p&gt;Digg recently had an incident, which is kind of still ongoing, in which someone posted (according to Wikipedia) "the full decryption code for HD-DVD" and got banned for it.  In response, there's been tons of uprising/rebellion, with the key continually being reposted, etc.  I've never been a very big Digg reader, but now I really have a reason not to read it.  Why do Digg users feel entitled to post whatever the hell they want on the website, regardless of legality?  That's plain ridiculous.&lt;/p&gt;

&lt;p&gt;Some people have started marking today as "the death of Digg," and I sure hope it is.  Not to be offensive to the creators, but if Digg ever does go away, I'm sure all of their whiny users will realize that they probably had more freedom there than on other websites, since it's much more community-driven, from what I understand, than Slashdot.  If one of these rebels tries to start a Digg replacement that lets everyone post legally controversial content, I'm sure they'll enjoy the pleasure of having a lawsuit filed against them.  Please, use common sense.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-8690668394498600315?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/8690668394498600315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=8690668394498600315' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/8690668394498600315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/8690668394498600315'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/05/democracy-and-diggcom.html' title='Democracy and Digg.com'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-6361842173776897349</id><published>2007-04-28T13:35:00.000-07:00</published><updated>2007-04-28T13:53:20.309-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>How to get the wrong people in your computer science program</title><content type='html'>&lt;p&gt;A &lt;a href="http://forums.somethingawful.com/showthread.php?threadid=2448383&amp;perpage=40&amp;pagenumber=1"&gt;humoring&lt;/a&gt; thread came up on the Something Awful forums that I almost forgot about.  The thread is about those schools you see that advertise on television ("Come to ITT Tech!!!  Make some gamez!!!!!"); everyone who has seen those ads on TV probably deduces that they aren't very good at what they do (why else would they be advertising?).  The &lt;a href="http://www.uat.edu/"&gt;University of Advancing Technology&lt;/a&gt; made a highly amusing blunder on their &lt;a href="http://www.uat.edu/life_on_campus/eat.aspx"&gt;website&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Eating is a serious pastime at UAT. Lunchtime is never a quiet, reflective time for college students in general. But at UAT, it's a noisy, rollicking journey down the highway of fun. It's not uncommon to witness students engaged in vigorous Guitar Hero contests, or watching the latest anime on the big-screen. &lt;strong&gt;Or you can eavesdrop on impassioned conversations about the merits of C++ versus Linux.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Enough said, I think.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-6361842173776897349?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/6361842173776897349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=6361842173776897349' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/6361842173776897349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/6361842173776897349'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/04/how-to-get-wrong-people-in-your.html' title='How to get the wrong people in your computer science program'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-5433976480624110966</id><published>2007-04-27T14:20:00.000-07:00</published><updated>2007-04-27T13:19:03.725-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><title type='text'>Monoculture in open source software</title><content type='html'>&lt;p&gt;&lt;a href="http://slashdot.org/"&gt;Slashdot&lt;/a&gt; recently posted a &lt;a href="http://it.slashdot.org/article.pl?sid=07/04/25/0050217"&gt;story&lt;/a&gt; linking to an &lt;a href="http://www.oreillynet.com/onlamp/blog/2007/04/the_virtues_of_monoculture.html"&gt;article&lt;/a&gt; about the "why Microsoft wins the development war so often."  The excerpt from the Slashdot article:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;"Microsoft offers the certainty of no choices. Choice isn't always good, and the open source community sometimes offers far too many ways to skin the same cat, choices that are born more out of pride, ego, or stubbornness than a genuine need for two different paths. I won't point fingers, everyone knows examples... The reality is that there are good, practical reasons that drive people into the arms of the Redmond tool set, and we need to accept that as a fact and learn from it, rather than shake our fists and curse the darkness."&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I'm wondering how true this is for other people.  Joel Spolsky posted an &lt;a href="http://www.joelonsoftware.com/items/2006/11/21.html"&gt;article&lt;/a&gt; last year about choices being headaches (ironically talking about Microsoft!), but referring to GUI interface design, rather than choosing software in general.  Even though Joel is referring to the quirky shutdown menu for Windows Vista, I'd like to think that it also applies to the context of the Slashdot article.  I've noticed some projects fork off of others for no reason, or the ones listed above (pride, etc.); but regardless of the reason, it feels like the open source world has way too many paths to pick from.  And to top it off, sometimes none of those paths are even worthwhile!&lt;/p&gt;

&lt;p&gt;Don't get me wrong, the concept of open source software is good (even the software that's platform dependent on certain proprietary operating systems).  I do think, though, that the whole "diversity" among existing software can be rather annoying.  Quality software doesn't need to be forked (how many Firefox forks are out there, and who bothers to use them?).  Maybe this is one reason why I'm still an avid Windows user; I have less decisions to make, and hurray for that.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-5433976480624110966?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/5433976480624110966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=5433976480624110966' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5433976480624110966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5433976480624110966'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/04/monoculture-in-open-source-software.html' title='Monoculture in open source software'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-2307982177355907108</id><published>2007-04-18T09:25:00.000-07:00</published><updated>2007-04-18T19:18:59.494-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shaim'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>AOL is in your chats, droppin' your packets</title><content type='html'>&lt;p&gt;Since I started using Windows Vista awhile ago, the AIM 5.2 + DeadAIM combination stopped working.  DeadAIM is no longer maintained, and registering my key doesn't actually work.  I started using &lt;a href="http://shaim.bountysource.com/"&gt;shaim&lt;/a&gt; in its place (just recently celebrating 1,000 revisions!), since I have a natural distaste for alien user interfaces, such as GTK on Windows (Gaim), Qt on Windows (Psi--not as related, I know), and whatever Trillian, AIM 6.0, and AIM Lite use.  The reason I stuck with AIM 5.2 for so long was because it wasn't bloated, and it was simple; when AOL started adding in features from DeadAIM, I thought they made it look retarded, so I didn't upgrade.&lt;/p&gt;

&lt;p&gt;In addition to using shaim, I also got commit access to the Subversion repository very recently, which makes this my first open source project.  Unfortunately for all of you non-Windows users, shaim's UI is currently built on &lt;acronym title="Windows Presentation Foundation"&gt;WPF&lt;/acronym&gt;, which means it's native to Windows.  Now this is a &lt;em&gt;good&lt;/em&gt; thing (OS X users, see:  TextMate); however, even though it's currently Windows-native, it's built on C#, and Mono compatibility (for non-UI elements) is very feasible; the UI is modular, and can be rewritten using other toolkits/interfaces.&lt;/p&gt;

&lt;p&gt;But now I'm getting off topic from what I actually want to mention; the UI rant can be saved for later.  Recently, for our last OS project, I set up a Subversion repository to work with my roommate and left him instructions including the repository location, which was a file:// URI.  The next day, he asked if I would be setting up a Subversion repository.  &lt;em&gt;What?&lt;/em&gt;  I kindly informed him that he must have missed the message I sent him the night before, but he was fairly certain that he had read all of his messages.  I sent him another one while he was in class, but apparently that didn't go through either.&lt;/p&gt;

&lt;p&gt;I thought it might be a URL parsing error, since shaim previously had some problems with converting URIs to actual hyperlinks, but it turned out that such was not the case.  I followed the logic all the way to watching &lt;a href="http://www.wireshark.org/"&gt;Wireshark&lt;/a&gt; report the packet being sent out.  Wireshark never reported the message coming back in!  Apparently &lt;strong&gt;AOL servers filter messages that contain file:// hyperlinks.&lt;/strong&gt;  Try it yourself!  Sending file:// in plain text works fine, but shaim automatically parsed all URIs to be hyperlinks.  If you try sending "file://test" hyperlinked to yourself, you'll only see one copy of the message--it never echoes!  This is because AOL's AIM servers simply drop any packets that have hyperlinked file:// URIs.&lt;/p&gt;

&lt;p&gt;Is this really the best course of action?  There isn't any sort of notification that the packet is dropped, which is really user unfriendly.  AIM 6.0 doesn't automatically convert file:// URIs, but if you manually do it (for whatever reason), it still just drops.  It feels like there should be better ways to handle these potentially malicious hyperlinks.  For example, why not offload the processing to the client?  The client could either reject (and send a notice!  How novel!) the incoming message, or it could remove the &lt;code&gt;&amp;lt;a href=...&lt;/code&gt; from the message.  I'm guessing the AIM servers don't have the ability to handle that kind of processing load, but the clients could do it easily.  This makes it plainly obvious to everyone (senders, receivers, &lt;em&gt;developers&lt;/em&gt;) what's going on, rather than just dropping packets left and right and being so secretive about it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-2307982177355907108?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/2307982177355907108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=2307982177355907108' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2307982177355907108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2307982177355907108'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/04/aol-is-in-your-chats-droppin-your.html' title='AOL is in your chats, droppin&apos; your packets'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-2855444757340484812</id><published>2007-04-10T14:13:00.000-07:00</published><updated>2007-04-10T14:47:29.638-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>The perfect programming language</title><content type='html'>&lt;p&gt;This really can't end well, because there really is none that I've discovered thus far.  I'm sure lots of people in any language's band camp would beg to differ, but whatever.  This is clearly going to be a post based purely on opinion, because the definition of what a perfect programming language is, is incredibly subjective.  Personally, I tend to put a lot of emphasis on aesthetics of a language.  Don't get me wrong, features are obviously vital, but often times it boils down to how languages look compared to their cousins (there are times when I'll argue in the feature field, usually about Java and C#).&lt;/p&gt;

&lt;p&gt;I'm not trying to put any specific language in the spotlight, but is it just me, or &lt;strong&gt;do imperative languages look nicer than functional languages?&lt;/strong&gt;  Having grown up on imperative languages, maybe I'm biased; I know there are &lt;a href="http://www.paulgraham.com/"&gt;people&lt;/a&gt; out there that prefer some icky, icky looking languages like Scheme as well, so maybe it all depends on how we're cultured.  Awhile ago, after talking with a friend from IU, I decided I would finally stop being [as] lazy and pick out a functional language to dive into.&lt;/p&gt;

&lt;p&gt;Now, being the person that I am, I like to analyze things to the point of death (read: complain) sometimes, so we spent the night looking at different languages on Wikipedia, after talking about how he didn't "get" imperative languages and I didn't "get" functional languages (even though he actually started on C++).  We looked at languages such as Haskell, Lisp, ML, and OCaml before I decided that I thought functional languages were just ugly.&lt;/p&gt;

&lt;p&gt;I have nothing really specific to complain about either; I think they all just look really alien or messy.  What I'm really wondering is, &lt;strong&gt;do functional languages &lt;em&gt;purposely&lt;/em&gt; try to look as foreign as possible compared to imperative languages?&lt;/strong&gt;  After picking OCaml as the language and going through &lt;a href="http://www.ocaml-tutorial.org/"&gt;some tutorials&lt;/a&gt;, I noticed a lot of concepts that were present in OCaml and various other imperative languages.  It seems like OCaml just [mostly] removes mutability, allows you to pass in functions to functions (which allows &lt;a href="http://en.wikipedia.org/wiki/Currying"&gt;currying&lt;/a&gt;, probably the coolest feature I've seen), and full type inference.  Since OCaml is impure, unlike Haskell, it does allow mutability in records (structs), references, and arrays.&lt;/p&gt;

&lt;p&gt;It seems like a lot of the examples that are given in the OCaml tutorials could be &lt;em&gt;expressed&lt;/em&gt; similarly in C#; however, there are still [obviously] advantages of using OCaml for functional programming.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OCaml is optimized as a functional language.  For example, the CLR has a sub-optimal performance on performing its .tail &lt;acronym title="Microsoft Intermediate Language"&gt;MSIL&lt;/acronym&gt; (now apparently called &lt;acronym title="Common Intermediate Language"&gt;CIL&lt;/acronym&gt;) instruction.  A developer for &lt;a href="http://nemerle.org/"&gt;Nemerle&lt;/a&gt; commented on writing manual tail call optimizations, which eliminated the use of .tail by using a simple jump instruction, but pointed out that mutually recursive methods are still not optimized.&lt;/li&gt;
&lt;li&gt;Currying on C#, while it &lt;a href="http://blogs.msdn.com/sriram/archive/2005/08/07/448722.aspx"&gt;can work&lt;/a&gt;, doesn't work very well.  You have to create your own classes for generating lambdas via anonymous delegates.  The main article shows a type unsafe way to do it, as pointed out in comments; in order to provide type safety, you would have to add a type parameter for each argument to the Curry method, which could get cumbersome (e.g. &lt;code&gt;Curry&amp;lt;K1, T1&gt;&lt;/code&gt;, &lt;code&gt;Curry&amp;lt;K1, T1, T2&gt;&lt;/code&gt;, etc. where &lt;code&gt;K1&lt;/code&gt; is the return type and &lt;code&gt;T1&lt;/code&gt; are argument types).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the other hand, I think C# in the general case brings a lot more to the table, concerning syntax (aside from full type inference, though it seems that C# 3.0 is moving towards type inference).  I definitely like the C-family syntax a lot more (inherited bias); it feels terser than the ML-family syntax.  I also think it's kind of silly how OCaml uses a semi-colon to separate statements, with double semi-colons to end blocks.  Using braces feels more sensible to me, or at least &lt;em&gt;something&lt;/em&gt; to enclose a block.&lt;/p&gt;

&lt;p&gt;Along the same lines, I've never been a big fan of optional parentheses when it comes to calling functions, either.  I first encountered this when learning Ruby and thought, "Cool!"  However, after awhile, I changed my mind.  It feels like optional parentheses are just for lazy people, and doesn't &lt;em&gt;really&lt;/em&gt; increase readability; rather, it encourages laziness where applicable (I guess the space bar is a lot easier to hit than the parentheses' keys).  I've never really gotten why Lisp and Scheme put their parentheses on &lt;em&gt;before&lt;/em&gt; the function name, either.  Of course, I know absolutely nothing about the Lisp family, so I'm sure there's a reason, and I'll get around to learning it.  But really, what's so bad about "fun(arg1, arg2, arg3)"?  In high school and onward, we're taught that functions are represented exactly like that, so I would think that using that representation would make more sense.&lt;/p&gt;

&lt;p&gt;So why can't a language like C# take on the cooler features that are present in OCaml?  Here's a [small] list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Type inference&lt;/strong&gt; - I know C# 3.0 is working towards type inference, as mentioned above; I don't think it will ever reach the point of full type inference, like OCaml.  I had the opportunity to sit in on some language design meetings (and didn't understand much of it), but from what I understand, OCaml accomplishes full type inference by having literally no implicit casting at all, including promotion of numeric data types.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Currying&lt;/strong&gt; - Maybe I think this is just really, really cool; I haven't programmed anything major in OCaml, so I don't know just how valuable currying is (the examples provide some interesting uses, but they're just that--examples).  By looking at Sriram's article, it seems like it would be possible to have the currying functions that he wrote generated on the fly, rather than forcing the user to write it all.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Support for more optimal tail recursion&lt;/strong&gt; - From what I understand, recursion and tail recursion are used very often in functional programming languages.  Thus, providing a better optimization for tail recursion would get some imperative programmers thinking more functionally.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interestingly, the comment about Nemerle brought me to their website.  In their own words:&lt;/p&gt;
&lt;blockquote&gt;Nemerle is a high-level statically-typed programming language for the .NET platform. It offers functional, object-oriented and imperative features. It has a simple C#-like syntax and a powerful meta-programming system.&lt;/blockquote&gt;
&lt;p&gt;It sounds a lot like what I'm looking for, but I wonder if I'll actually like it.  I'll put it on my list of languages to learn/look into; I'm still going to finish going through OCaml tutorials, at least.  Unfortunately, there won't be much of that until school is out.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-2855444757340484812?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/2855444757340484812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=2855444757340484812' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2855444757340484812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2855444757340484812'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/04/perfect-programming-language.html' title='The perfect programming language'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-7609744647933483134</id><published>2007-04-05T16:03:00.000-07:00</published><updated>2007-04-10T13:40:56.208-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='purdue'/><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>Java as a first programming language</title><content type='html'>&lt;p&gt;A thread on the &lt;a href="http://forums.somethingawful.com/"&gt;Something Awful forums&lt;/a&gt; came up recently about a high school, second-year computer science/programming course.  The author was requesting help to convince his teacher to switch said course from using VB6 to C#.  There were a number of suggestions and alternatives given (Java, VB.NET, Python, Scheme), but that's not as relevant to the CS environment at Purdue (thread is &lt;a href="http://forums.somethingawful.com/showthread.php?threadid=2411959&amp;perpage=40&amp;amp;pagenumber=1"&gt;here&lt;/a&gt; if interested).  I got into a couple of discussions about C# and Java, and it brings me back again to imagine what Purdue would be like if we didn't teach Java as a first programming language.&lt;/p&gt;

&lt;p&gt;The issue I brought up was an argument against teaching students how to write &lt;em&gt;procedural&lt;/em&gt; code in a &lt;em&gt;purely&lt;/em&gt; object oriented language.  In particular, someone suggested that teaching procedural code in C# was easy, since you could simply add the &lt;strong&gt;static&lt;/strong&gt; keyword to class methods to write non-object oriented code.  I argued that teaching the static keyword before telling students what it meant was a particularly bad idea.  I've never been a fan of teaching stuff out of order (who is?), but it seems impossible to teach things in order in Java.  This is plainly visible by Java's hello world program:&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;span class="Type"&gt;class&lt;/span&gt; Main {
    &lt;span class="Type"&gt;public&lt;/span&gt; &lt;span class="Type"&gt;static&lt;/span&gt; &lt;span class="Type"&gt;void&lt;/span&gt; main(String[] args) {
        System.out.println(&lt;span class="Constant"&gt;"Hello world!"&lt;/span&gt;);
    }
}
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;This is incredibly ugly, and C# is guilty of the exact same thing.  For beginners, I don't think this is acceptable.  Unfortunately, all compiled languages that I know of are guilty of this to some degree; on the other hand, scripting languages can do hello world programs in one line.  When you introduce this Java program to a student, here is what new programmers tend to think:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What is &lt;strong&gt;public&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;What is &lt;strong&gt;static&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;What is "main"?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The list can continue (what is System, out, println, etc.), but the point is, there are a lot of questions to be answered that &lt;em&gt;can't&lt;/em&gt; be answered without covering material that they aren't ready for.  In particular, I believe the static keyword is a real killer, even for some people who've programmed before (obviously not in depth).  Instead of reiterating everything I said in the thread, I'll just copy and paste like the resourceful (read: lazy) person I am:
&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;I think the static keyword versus other language syntax is slightly different. Why should you have to teach the static keyword first in an object-oriented language? In terms of thinking about objects, static "breaks" the OOP paradigm. One of the C# compiler devs even argues that the static keyword shouldn't exist. Obviously you need some way to differentiate between instance and static methods, but I never really liked to use of the word "static" to do so. Maybe it's just me, but when I hear the word in a general context, I take it to either be in terms of static you see in TVs, or static as in unchanging, the latter of which is due to static/DHCP IPs. Are people really supposed to be able to tell what "static" means, just offhand?&lt;/p&gt;

&lt;p&gt;OOP languages like C# and Java are actually backwards in terms of expressing methods and their arguments. If you were to write OOP code in C, the "instance" methods would be the ones with the extra typing (the first parameter being the object type), and the static methods would simply do the opposite. In Python, declaring methods is the exact same way. All instance methods in Python begin with a "self" whereas static methods simply don't have a self. You can also call instance methods with static syntax, which gives some insight into just how OOP methods are actually defined.&lt;/p&gt;

&lt;p&gt;As far as &lt;em&gt;learning&lt;/em&gt; is concerned, I think Python is better for teaching the difference between static/instance methods (other topics are debatable). I really don't like telling my students, "oh, don't worry about this huge, gigantic header you have to write for your main method--or what a main method actually is. You'll learn that later!" {}, (), [], and &amp;lt;&gt; are introduced in a more appropriate order (though funny enough, I do have students that still don't get the paren), so I don't think it's [as] relevant.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A post from another user probably summarizes very well:&lt;/p&gt;
&lt;blockquote&gt;
introducing students to computer science through languages which introduce syntax issues long before they introduce computer science concepts is a recipe for failure, and I completely agree. Aside from the utter boneheadedness of an "objects early" or "objects first" approach, you're giving students a gigantic chunk of boilerplate code and not explaining what any of it does. Seriously, just think about it: a student is not going to be thinking in object-oriented terms right off the bat, &lt;strong&gt;so how do you explain what this "public class" and "public static void main" business is? The Javaschool answer is "we don't, we just tell them that it's not important and they'll understand it later."&lt;/strong&gt; This is not an acceptable approach.
&lt;/blockquote&gt;
&lt;p&gt;From what I've observed, Java is taught at Purdue (and other schools) for a few reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Java is the &lt;a href="http://www.tiobe.com/tpci.htm"&gt;number one&lt;/a&gt; language used, at the moment&lt;/li&gt;
&lt;li&gt;Java is heavily involved in other courses (for Purdue, often data structures and compilers), and not teaching Java would have a severe impact on the curriculum&lt;/li&gt;
&lt;li&gt;It's a good gateway to other statically typed languages, unlike Python and company, because of syntax similarities&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There was, however, a comment by the same user above, regarding Java in computer science programs:&lt;/p&gt;
&lt;blockquote&gt;
I've been doing a lot of research into computer science education recently (I'm more or less rewriting a computer science curriculum for my college), and &lt;strong&gt;there have been numerous studies which show poor computer science retention rates in Java-based computer science programs (equivalent to ACM CS1 core) that have improved substantially when the course syllabus was switched to a simpler language like Python or Scheme&lt;/strong&gt; which allows students to focus on computer science concepts rather than fighting with language syntax. Pummel them with Java later.
&lt;/blockquote&gt;
&lt;p&gt;While the idea of teaching a language that isn't statically typed bugs me, maybe it's just my upbringing in C.  As far as static methods in classes go, I would certainly agree that Python does a better job of getting the idea across, as said in my quote above.  However, I also think Python offers a lot of freedoms that aren't available in C# and Java (as do most scripting languages), which might increase the difficulty of learning statically typed OOP; nevermind the syntax differences between Python and "C-family" languages.&lt;/p&gt;
&lt;p&gt;On the other hand, Python's enforced proper block indentation also brings something refreshing to the table.  I've seen some extremely bad indention in Java (literally different levels on each line in a block!), and I think Python has taken a good step by enforcing uniform indentation.  Unfortunately, we don't see this in most languages, so this is a nice plus to using Python as a learning language.&lt;/p&gt;
&lt;p&gt;Unfortunately, I'm still not sure teaching Python as a first language is a good idea.  I sure don't like Java (for anything), but then again, I don't know of any languages that I would rather teach students that have advantages that are substantial enough to merit a change in a class syllabus.  I don't think functional languages will ever fly here, regardless of how pretty or ugly they look; the idea of CS180 is to prepare students for CS240, which transitions from Java to C.  I don't think the Pythonic way of doing things will prepare students for C; it may teach you how to program, but as much as it makes no sense, I'm guessing it would just pass along the problem to the CS240 instructors.  And we all know what kind of monster that would awaken.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-7609744647933483134?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/7609744647933483134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=7609744647933483134' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7609744647933483134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7609744647933483134'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/04/java-as-first-programming-language.html' title='Java as a first programming language'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-3093597733088134475</id><published>2007-04-02T11:57:00.000-07:00</published><updated>2007-04-09T21:35:52.281-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='purdue'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>Apparently computer science at Purdue sucks (Part 2)</title><content type='html'>&lt;p&gt;Here's a response to several posts (linked) about Purdue CS from "I'm a 10!":&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://sixtimesfaster.blogspot.com/2007/04/problems-part-1-cs-students.html"&gt;Non-CS CS students&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;I'm sure the statistics agree that the percentage of students that enter without any computer science background and stay is much lower than the percentage of students that enter with prior experience.  I would also argue, however, that part of it is because those students enter CS without knowing what they really want.  I've used this argument a lot, and it might not be true [anymore], but I think a lot of students come into our department because they think they're good with computers; this is patently incorrect reasoning.  I think for people interested in CS, they should try to get into programming before they leave high school to see if it's really for them.  Of course, sometimes it's &lt;em&gt;formally&lt;/em&gt; impossible to do so.&lt;/p&gt;

&lt;p&gt;While I'm one of the fortunate that had AP Computer Science offered at their high school, not everyone does.  One of our CS180 lab instructors came to Purdue with no formal experience, because his school didn't offer it.  This is a commonly cited reason for not having experience, but I don't think I buy this as an excuse.  In most situations, I find it hard to believe that a high school student doesn't have the time for some self-teaching; I also believe that if a student is unable to teach him or herself, it might be a sign; after all, &lt;a href="http://inst.eecs.berkeley.edu/~maratb/readings/NoSilverBullet.html"&gt;software engineering is hard&lt;/a&gt;.  This is not to say that it's impossible, or that people with no experience entering CS at Purdue will fail, as a counter-example is provided above, but I don't think it's making it easier on anyone.  To me, computer science is one of the few areas where you can get some real, practical knowledge before entering college.  I'm fairly ignorant about other fields, so it could be one of many.&lt;/p&gt;

&lt;p&gt;Of course, to shift all of the blame onto the students is probably biased elitism.  I think the curriculum could use an overhaul, but such a task is time-consuming, bureaucratic, and not likely to happen.  There are a lot of issues at hand, and I daresay that it's impossible to solve them all.  Primarily, not all professors that teach classes want to be there.  From what I understand, all professors are supposed to teach at least one class a semester, but not all professors are interested in teaching, much less teaching undergrads.  The same goes for TAs; I've heard of a number of graduate TAs that don't seem to put much effort into their teaching, or their knowledge of the subject is restricted to an inapplicable domain, or some other random problem.  Is it impossible to find grad students that care and actually know something?  I don't think so.  I've come across several good TAs over the years; perhaps they're just a minority.  In all reality, this applies to undergrad TAs as well.  I've seen some TAs who either don't care, don't actually know enough to be very good TAs, or just think that students that ask questions are dumb.  Since I think I'm taking over as lab admin next semester, I sure hope I get a say in who will be on my lab staff.&lt;/p&gt;

&lt;p&gt;Course syllabi also vary significantly from professor to professor.  While I understand that professors have different teaching styles, I don't think it's a very good idea to have such a significant difference.  For example, I took CS251, our data structures class, in the fall, which is off-semester.  The class was a piece of cake and I hardly had to study for it.  The kids who took it in the spring had incredible amounts of work, including building a web server using certain data structures, etc.  While I think it's cool to work on practical projects like that, I think it's unfair to the students who have to do significantly more work for less return.  The objective of the course should be learning about data structures, their run times, and how to implement them.  All of the extra stuff is nice for the very advanced students, but adds incredible stress to everyone else.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://sixtimesfaster.blogspot.com/2007/04/problems-part-2-administration.html"&gt;Administration&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;I can't really comment much on this, since I'm not in the USB and have zero interaction with higher administration, but I'm guessing it's related to my statements above, since the higher administration are a subset of the faculty.  I have no idea what caused a strained relationship between the administration and the USB, but I really fail to see why bygones can't be bygones.  It seems that both the students and the faculty know what's best for the students, which just causes a deadlock in improving our CS curriculum.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://sixtimesfaster.blogspot.com/2007/04/problems-part-3-new-building-in-town.html"&gt;The new building&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;To some degree, I agree that the new building has had a negative impact on the little sociality that our CS department had.  I think the lack of a new undergrad lounge is kind moot point, since it's [kind of] migrated to the small area outside of the advisors' offices as well as the computer labs, where a lot of people seem to do work.  I'm pretty sure the administration knew that the commons wouldn't be occupied by many CS majors, but I guess they didn't have much else to do with that space besides make it look pretty.  Besides, the commons brings girls into our building, what can be so bad about that?!&lt;/p&gt;

&lt;p&gt;My real issue with the new building is the bureaucracy that's been added to the advisors' offices.  There's a secretary outside of that block now, and we have to sign in and out and set up appointments to meet our advisors; I would label this as being very close to the pinnacle of ridiculous.  I don't think the advisors have ever had any trouble doing all of the work they needed with an open-door policy (which closes when stress levels rise), so who thought it would be a good idea to formalize social interaction with our advisors?  I used to visit my advisor very frequently, and now it's reduced to one visit every few months; usually it's just to schedule my next semester.  This sort of alienation between the students and the advisors is the last thing the department needs.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://sixtimesfaster.blogspot.com/2007/04/apathy-entitlement-and-summary-for-now.html"&gt;Apathy and entitlement&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;Apathy, as partly mentioned above, is a big kicker for the students and faculty.  The faculty might not care, but the students often don't have more motivation than to complain on a newsgroup or to their own peers.  The CS feedback panel hosted by the USB on a yearly basis shows little attendance from students that have issues with the way things are done, and sometimes the ones that do show up have very little constructive feedback to give.  Even if there was a larger attendance and more feedback, does the faculty even care?  Does anyone read their course feedback?  I've read mine from teaching a CS158 (C for engineers) lab as well as for MA366 (ODE), but I've never really seen any active caring in CS180 about what sort of feedback TAs get.  Is it like this for all classes/professors?  No, but probably a majority.&lt;/p&gt;

&lt;h4&gt;My own conclusions&lt;/h4&gt;
&lt;p&gt;Despite all of this prose that looks like a bucket full of complaining, I'm actually not as dissatisified with CS as I seem.  I've passed all of my classes and have started learning new stuff lately, which is good.  Education and how to better teach in a CS180 lab are specific areas that I'm interested in, as a TA.  I feel like it's my duty to try and reduce the number of people that drop out of CS because of CS180, but what's the use if they just drop out when they get to CS240?&lt;/p&gt;

&lt;p&gt;I've jumped to conclusions before, but I wonder if other universities have these problems.  It seems like a university with a CS department that genuinely cares about its undergrads would be a utopian department.  Unfortunately, I don't think these universities exist.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-3093597733088134475?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/3093597733088134475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=3093597733088134475' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/3093597733088134475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/3093597733088134475'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/04/apparently-computer-science-at-purdue.html' title='Apparently computer science at Purdue sucks (Part 2)'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-1055419085953879309</id><published>2007-03-25T19:54:00.000-07:00</published><updated>2007-04-09T21:37:15.350-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='interview'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Interviewing at Microsoft</title><content type='html'>&lt;p&gt;I flew out to Seattle on Thursday night for a Friday interview at Microsoft. Of course, the flights both ways had delays because of Chicago, as usual. Anyway, I guess the focus of this topic shouldn't really be air travel, since I already dedicated a post to that. My recruiting contact was nice and put me up in the &lt;a href="http://specialoffers.starwoodhotels.com/westinbellevue/so.aqf?PS=PS_aa_Google_westin_bellevue_020706_NAD_FM"&gt;Westin&lt;/a&gt; in Bellevue, right in Bellevue Square. The room was quite nice, but the kickin' LCD TV they had was inoperable without money. Oh well.&lt;/p&gt;

&lt;p&gt;Anyway, the interview day was interesting. The typical day seems to be:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Arrive at Building 19&lt;/li&gt;&lt;li&gt;Talk to a recruiter&lt;/li&gt;&lt;li&gt;Take some fancy electronic car to your first/next interviewer&lt;/li&gt;&lt;li&gt;Be interviewed&lt;/li&gt;&lt;li&gt;Repeat 3-4 as necessary&lt;/li&gt;&lt;li&gt;Return to Building 19 to talk to your recruiter&lt;/li&gt;&lt;li&gt;Get out&lt;/li&gt;&lt;/ol&gt;

&lt;p&gt;Which was how my day went, with four interviews, sans step 6, since my recruiter was out. The team I interviewed had some fancy title, which I conveniently decided not to remember, but it boiled down to "file systems," where file systems could mean distributed file systems or just native disk file systems, or whatever. It was a relatively new team working on a v1 project, which would be cool. The people I interviewed with were more interested in distributed stuff, which resulted in lots of technical questions about threading. Good thing I'm taking OS this semester, because I didn't know anything about threading beforehand. Now I know just a little bit.&lt;/p&gt;

&lt;p&gt;I don't have much to say about the questions I got, but most of them didn't seem &lt;em&gt;too&lt;/em&gt; difficult (we'll find out when I get rejected). I talked to a M.S. student who was interviewing in the same building who said Amazon's interviews were harder, which I thought was interesting. They certainly don't have a reputation of being harder to land a job with. Then again, I don't really hear much about Amazon hirings.&lt;/p&gt;

&lt;p&gt;As far as this team goes, is it something I'm interested in?  Sure.  I guess.  The prospect on working on a v1 project sounds cool; on the other hand, the project itself doesn't sound as cool, but maybe I'm just not fully informed about the current state of the project.  As far as what I'd gain, experience-wise, I think this would be my biggest motivation in going.  Multi-threaded applications are allegedly the wave of the future, with multi-core processors coming into full bloom, and this team seems to do a lot with threaded applications, which, if I got to deal with, would boost my experience significantly.&lt;/p&gt;

&lt;p&gt;But let's not get ahead of ourselves, I have to get an offer, first.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-1055419085953879309?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/1055419085953879309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=1055419085953879309' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1055419085953879309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/1055419085953879309'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/03/interviewing-at-microsoft.html' title='Interviewing at Microsoft'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-7077287311385159340</id><published>2007-03-25T18:45:00.002-07:00</published><updated>2010-08-27T21:17:19.142-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='purdue'/><category scheme='http://www.blogger.com/atom/ns#' term='computer science'/><title type='text'>Apparently computer science at Purdue sucks</title><content type='html'>&lt;p&gt;Being a CS major at Purdue, I hear a lot of complaints about the way things are done. Often times, they're from people I don't know well, or from people that have made a bad first impression on me; regardless of what I think of them, sometimes they're just unfounded complaints, too. However, worse has come to worst when I hear complaints from what I see as the smartest of the department--usually honors students, but not always. If we're turning off the brightest light bulbs in CS, how are we supposed to retain student interest in CS? Being a junior now, I don't see many people that are very excited in my classes. Unfortunately, this trend has started to appear earlier in the years (our excuse is compilers), even down to the freshmen. One of my former students recently posted a note on Facebook about his beef with Purdue CS:&lt;/p&gt;

&lt;blockquote&gt;So many people are greedy, they are here to get a degree so they can make money, not to learn / change the world for the better / etc... &lt;/blockquote&gt;

&lt;p&gt;This is undeniably a true statement. Though, I would argue that its common in any major; after all, this is America. Essentially, we're forced into this philosophy (or into academia, or being a FSF junkie of some sorts, or whatever), and really this is a whole new discussion.&lt;/p&gt;

&lt;blockquote&gt;Academically repressive, exhausting and depressing.&lt;/blockquote&gt;

&lt;p&gt;This one is harder to really comment on. In recent years, CS240 (C Programming) has had a new professor (to the class, not to teaching) and a new set of TAs teaching the class. It's been getting terrible feedback from students, and I suspect that this statement is really the result of taking CS240. This class was pretty much golden when I took it, since I was under the instruction of &lt;a href="http://www.mscs.mu.edu/~brylow/"&gt;Dr. Brylow&lt;/a&gt; and a capable set of lab instructors, but has since changed. While I can't comment on the teaching style of the new instructors, I can comment that the material has changed from historical teachings for the worse. Unfortunately, some students think this true of all CS classes they take. This is also a story for another day.&lt;/p&gt;

&lt;blockquote&gt;Of all the cs students I have met in my class, none have any love for the craft of programming. They all see it as a chore, and I don't blame them based on how our courses are taught.&lt;/blockquote&gt;

&lt;p&gt;This probably goes back to the "greedy" point. Most people in general seem to lack a real passion for what they do. As far as classes go, I think part of it is related to the lack of practical knowledge that's taught, in addition to excessive amounts of work and occasionally unreasonable constraints on assignments. Unfortunately, the latter is not easily fixed; for example, one constraint that was deemed unreasonable by another student in the class was the ban on using string library functions on assignments. This student is a talented programmer (also a former student of mine), but people who have never programmed before need to learn how to write these functions. Unfortunately, it slows the learning experience for advanced students, and the test-out process for classes is strongly discouraged/not allowed.&lt;/p&gt;

&lt;p&gt;However, I would also say that there are still a group of students in CS that do enjoy programming. I'm more familiar with the upperclassmen, but I'm sure they exist in the freshmen ranks, as well. Difficult to find? Sure. It's not atypical for a CS major to be pretty anti-social.&lt;/p&gt;

&lt;blockquote&gt;TA's dont care. This is mostly because TA's have a bazillion things to grade though, which is more of a university problem of making classes huge. But TA's could make it easier on themselves by not being such strict graders.&lt;/blockquote&gt;

&lt;p&gt;This also seems to be a more recent development, which is somewhat unfortunate. For all of the CS180 TAs (at least this semester), however, I would argue that they put a lot of effort into trying to give the students a good learning experience. This comment probably is also related to CS240, and I can't comment. I've had a great track record of TAs, and most of the ones that I've had are extremely helpful when the situation arises, and are very knowledgeable and interested in doing a good job.&lt;/p&gt;

&lt;p&gt;Though, when it comes down to grading, I might be inclined to disagree. I don't think a TA needs to be relaxed in grading. After all, if a student does something wrong, a TA should point it out to prevent future mistakes (say, for personal enrichment). If he/she ignores mistakes, is the student really garnering a good learning experience? I guess I don't really mean, "take off points for everything," as much as, "point out all visible mistakes to the student." It's still in the grading process, but it doesn't necessarily have to affect the grade. I stand by this firmly, as I see plenty of students who have had TAs that won't do this sort of thing, and write what I believe to be terrible code (where terrible may or may not be hyperbolic). For example:&lt;/p&gt;

&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;&lt;span class="Type"&gt;public&lt;/span&gt; &lt;span class="Type"&gt;boolean&lt;/span&gt; foo() {
    &lt;span class="Type"&gt;boolean&lt;/span&gt; b = bar();
    &lt;span class="Statement"&gt;if&lt;/span&gt; (b == &lt;span class="Constant"&gt;true&lt;/span&gt;) {
        &lt;span class="Statement"&gt;return&lt;/span&gt; &lt;span class="Constant"&gt;true&lt;/span&gt;;
    }
    &lt;span class="Statement"&gt;else&lt;/span&gt; {
        &lt;span class="Statement"&gt;return&lt;/span&gt; &lt;span class="Constant"&gt;false&lt;/span&gt;;
    }
}
&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;

&lt;p&gt;This is a simple piece of code, it's pretty obvious what it does and I see this frequently, and it's not semantically "wrong". It drives me &lt;em&gt;insane&lt;/em&gt;. It isn't that bad, but I believe it's indicative that something weird is being taught in class. I feel like I'd be committing a mortal sin if I didn't tell my students not to do this.&lt;/p&gt;

&lt;blockquote&gt;Most CS students are hardcore gamers, which alienates me somewhat from their
ranks, because that is there primary social activity.&lt;/blockquote&gt;

&lt;p&gt;You can probably find CS students that don't game a lot and don't drink a lot (like me, except my reason for not gaming is time constraints, and believe it or not, laziness), but they really aren't high in numbers; this, I would agree with. However, they can still be found, I think. The CS department does a decent job of hosting events where you can network with other CS majors, but a lot of people don't take advantage of them. I'd say that this would be a better way to meet students, than in a classroom environment. Yes, we are quite often anti-social, but we're CS majors. You can meet other people at clubs that you're interested in, and I'm sure they'll be less socially inept.&lt;/p&gt;

&lt;p&gt;It doesn't help that we're in the middle of a large corn field known as "Indiana," but I think people can find other things to do (movies, card games, whatever). Of course, I'm not an expert in these things, so I can't say much.&lt;/p&gt;&lt;p&gt;Another student (also of mine, what a trend) posted a comment:&lt;/p&gt;

&lt;blockquote&gt;Why don't we make CS fun and actually work on projects that are in interest to us?&lt;/blockquote&gt;

&lt;p&gt;I think the simple answer is, "It's extremely difficult." CS classes [unfortunately] have to cater to a wide variety of students: people who care, people who don't care, people who don't actually know how to code that have somehow survived X semesters where X &gt; 1, etc. Making assignments that interests &lt;em&gt;everyone&lt;/em&gt; is impossible. It's hard to cater to even a majority; how do you calculate what a majority is? Some people are interested in theory. Some in practical material. The debate goes on, and in the end, the instructors decide. In the end, the entry-level classes tend to be very boring for people who have prior experience; this is unavoidable, which sucks, sure. Even if you could test out of these classes, there would be a number of indignant people who failed the test out for X class, because they "knew everything" about said subject. It boils down to intro classes being boring, and advanced classes being, well, less boring. Less difficult? Probably not ever.&lt;/p&gt;

&lt;p&gt;Another student some time ago suggested that CS352, the infamous compilers class, be removed from Purdue. Reasons cited:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Really really hard&lt;/li&gt;&lt;li&gt;Nobody remembered anything&lt;/li&gt;&lt;/ol&gt;

&lt;p&gt;My answer to one is pretty blunt: boo hoo. To the second, I think our department head responded correctly in saying that it's the student's fault. I hardly see how the curriculum is at fault for this. I'm somewhat biased in that I was probably the only person in my class who liked the stuff taught in compilers, but whatever. It was something new, which was refreshing.&lt;/p&gt;

&lt;p&gt;But speaking of this student, complaints about the CS curriculum here can be addressed in a few ways:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Mid-semester reviews&lt;/li&gt;&lt;li&gt;USB feedback panel&lt;/li&gt;&lt;li&gt;Complaining to your advisor&lt;/li&gt;&lt;/ol&gt;

&lt;p&gt;I think the feedback panel is the most valuable, since it's a collection of faculty and sometimes advisors that listen to what you have to say.&lt;/p&gt;

&lt;p&gt;I've wasted too much time on this now, and now I'm going to fail my OS exam since I haven't studied.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-7077287311385159340?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/7077287311385159340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=7077287311385159340' title='27 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7077287311385159340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7077287311385159340'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/03/apparently-computer-science-at-purdue.html' title='Apparently computer science at Purdue sucks'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>27</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-6333130077823691807</id><published>2007-03-18T23:49:00.000-07:00</published><updated>2007-03-25T20:26:06.627-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><title type='text'>I have the worst luck with air travel</title><content type='html'>&lt;p&gt;I just got back from Taiwan, and I swear I have the worst luck ever.&lt;/p&gt;

&lt;p&gt;On March 2, I was supposed to have a second round interview with Microsoft, which means I fly out to Redmond and get intellectually tortured.  When I went to the Indianapolis airport, everything was normal, until my dad left.  Then my flight got delayed incrementally for what?  Oh, &lt;span style="font-style: italic;"&gt;six hours&lt;/span&gt;.  Eventually I just left, because trying to make it to Seattle would have resulted in a bad interview.&lt;/p&gt;

&lt;p&gt;March 9 marked the beginning of my trip in Taiwan.  I made it to O'Hare fine, this time.  I was waiting for my flight to Narita Airport in Tokyo, which had already been delayed 30 minutes by the time I arrived at the gate.  When that time came about, I saw that it had been delayed, oh...just a couple more hours, leaving me with ten minutes to connect to Taipei.  Of course, I missed it, but they had automatically re-booked, so I guess that's kind of cool.  Then there's that &lt;a href="http://saiyr.blogspot.com/2007/03/week-in-taiwan-day-0.html"&gt;whole spiel&lt;/a&gt; where I got stuck in Taoyuan Airport, since nobody came to pick me up.&lt;/p&gt;

&lt;p&gt;March 18 was the end of my trip :smith:.  The flight back to Narita was fine.  The four hour connection time wasn't very cool.  But whatever, I lasted the four hours without sleeping.  When we had all boarded the plane to fly to O'Hare, the captain announced that we were on hold, since they were keeping the runways clear for some emergency landing.  For &lt;span style="font-style: italic;"&gt;two hours&lt;/span&gt;.  Then, right when we thought we were good to go, the captain told us an engine didn't start.  Took them another hour just to fix it, making three hours sitting on an old, uncomfortable jumbo jet.  When we were finally ready, they then announced that due to federal regulations, we couldn't fly all the way to O'Hare, so we'd just go to Seattle instead.  Awesome.  &lt;span style="font-style: italic;"&gt;Then&lt;/span&gt;, while everyone (except me and one other guy) was sleeping, they sneakily changed the target to San Francisco.  They wouldn't let us leave the plane when we landed, either, due to customs/immigration policies.  Fortunately, I was tired enough after having watched Happy Feet (lol) and Casino Royale (again, except with all the good parts cut out) that I slept through most of the stay at SF.&lt;/p&gt;

&lt;p&gt;When we got back to O'Hare, we drove back, crammed into a station wagon, which wasn't quite comfortable on the rear by the time we got home.  It may or may not have contributed to my angry mood.  On the brighter side, they have a really good selection of movies on airplanes now (The Prestige, The Fountain, if you like it), but I'd seen them all before.  Except Happy Feet.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-6333130077823691807?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/6333130077823691807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=6333130077823691807' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/6333130077823691807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/6333130077823691807'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/03/i-have-worst-luck-with-air-travel.html' title='I have the worst luck with air travel'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-104922897097069471</id><published>2007-03-16T06:47:00.000-07:00</published><updated>2007-04-09T21:37:55.966-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='taiwan'/><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='study abroad'/><title type='text'>Week in Taiwan:  Day 6</title><content type='html'>&lt;p&gt;Today was my last day in Taipei with the rest of the students. Breakfast was the usual with an added &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;dragonfruit&lt;/span&gt; at the end, which I guess was interesting. After checking out of the hotel, we left to pick up some students from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Soochow&lt;/span&gt; before heading to &lt;a href="http://eweb.sipa.gov.tw/en/index.jsp"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Hsinchu&lt;/span&gt; Science Park&lt;/a&gt; for the day. On the way, some of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Soochow&lt;/span&gt; students were teaching us [weird] games that I guess they play during long bus rides, including some odd variation of hot hands, and some game where you try &lt;span style="FONT-STYLE: italic"&gt;not&lt;/span&gt; to guess a certain number in a range that narrows by each guess. It was kind of like the first day all over again, because all of the Asian students besides Nelson thought I could speak Mandarin. I ended up pulling out what little I knew for a few minutes and thankfully didn't make myself look [too] retarded.  I also got a present, an Xbox360 pen, from Nelson.  Hurray.&lt;/p&gt;

&lt;p&gt;When we got to the park, we went through some video orientation (which I guess is common at these parks, since the park at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Nankang&lt;/span&gt; also had one) and toured the administrative building. There were a lot of items out to provide examples of what companies at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Hsinchu&lt;/span&gt; did, though I think it was mostly semiconductor business. We also got to tour the museum, which was supposed to be inaugurated tomorrow, so we're the first group to tour the building, which I guess is cool, but there isn't very much in there.&lt;/p&gt;

&lt;p&gt;Lunch was fairly uneventful. We sat about half and half with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Soochow&lt;/span&gt; students who didn't speak very good English (or just didn't want to speak English), with the American representatives being Sherry, Angela, Juliette, Matt C., and myself. There was a fairly large amount of food, and it was interesting to see that the native students couldn't identify everything. One of them, who was allergic to crab, tried a mystery meat, even though someone already had said it was some kind of seafood; I guess they just like a lot of risk, or something. I think the highlight of lunch was Jeff successfully throwing a grape into Jack's mouth&lt;span style="FONT-STYLE: italic"&gt; twice&lt;/span&gt;, while being two table spans apart.&lt;/p&gt;

&lt;p&gt;We visited &lt;a href="http://www.auo.com/auoDEV/?ls=en"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;AUO&lt;/span&gt;&lt;/a&gt; after lunch, one of the largest LCD manufacturers in the world. Their orientation was apparently extremely boring, since half of the &lt;span style="FONT-STYLE: italic"&gt;adults&lt;/span&gt; fell asleep. The demo room was cool; we got to see an LCD TV with some sort of technology that made it so that you could view it at any angle while still retaining the same color. After leaving &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;AUO&lt;/span&gt;, we went on a campus tour via bus, which nobody really paid attention to. When we got back to the administrative building, it was time to leave. I waved, got off the bus, waved some more.&lt;/p&gt;

&lt;p&gt;At this point, the rest of the trip is no longer worth talking about, because the majority of the people around me are not English speakers. I'm currently at my aunt's house, and will be traveling most of tomorrow. Hopefully I'll have Internet again tomorrow night, but there likely won't be anything to post about. Back to the regularly scheduled not posting.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-104922897097069471?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/104922897097069471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=104922897097069471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/104922897097069471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/104922897097069471'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/03/week-in-taiwan-day-6.html' title='Week in Taiwan:  Day 6'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-3845060041404482174</id><published>2007-03-15T02:48:00.000-07:00</published><updated>2007-04-09T21:37:55.968-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='taiwan'/><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='study abroad'/><title type='text'>Week in Taiwan:  Day 5</title><content type='html'>&lt;p&gt;I woke up early again and was unable to fall back asleep, but oh well. I still seem to be more awake than the other students; I'm definitely more awake than the crazy people who went clubbing and didn't get back until 4:00am or whatever. They switched up breakfast on us this morning, which I suppose could be classified as "exciting," but not really. The fried rice was gone and there was fried noodles instead and the guava was gone too, which was disappointing.&lt;/p&gt;

&lt;p&gt;We went to class today at &lt;a href="http://www.scu.edu.tw/Eng/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Soochow&lt;/span&gt; University&lt;/a&gt;, which is a top-ranked, private university in an urban area in Taipei, unlike &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;NCCU&lt;/span&gt;, which was closer to the mountain. I think I liked &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;NCCU's&lt;/span&gt; setting more, unlike most comments I heard from Purdue students, but oh well. Professor Roan also commented that the girls at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Soochow&lt;/span&gt; were more attractive, so maybe that was their driving reason. Unfortunately, they weren't attractive enough (or they were sitting behind me), because I still couldn't stay awake in class. That was especially bad since a) everyone around me noticed and pointed it out rather vocally and b) the professor has known my dad for a long time.&lt;/p&gt;

&lt;p&gt;During intermission in class, I met a student named Nelson (and it took me forever to remember his name). He was an interesting character; he's currently an MBA student at Soochow, but he got his bachelor's in English "and a little bit of Japanese." We talked for a bit and we one-way-exchanged contact information.&lt;/p&gt;

&lt;p&gt;For lunch, we went to a famous beef noodle restaurant with Nelson. I thought the food was really good and fairly "normal," but it seems the same people still didn't like the food, even without the spiciness. We ended up going to McDonald's afterwards and we got some food and ice cream cones, which are only like $0.30 in Taiwan (and apparently $0.15 in mainland China!).&lt;/p&gt;

&lt;p&gt;Post-ice cream, we went to the &lt;a href="http://en.wikipedia.org/wiki/Chiang_Kai-shek_Memorial_Hall"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Chiang&lt;/span&gt; Kai-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Shek&lt;/span&gt; Memorial Hall&lt;/a&gt;. There was a Chinese opera rehearsal going on, so we watched that, which was pretty cool. Afterwards, we went up to the actual hall, where some soldiers in the honor guard were rotating shifts, ritual-style. It was kind of boring and everyone had to stay quiet, but I guess it was still something to see. After that, we got to go backstage on the opera set to see the area and actors, who were changing; some people got to take a picture with an actress that's apparently really famous.&lt;/p&gt;

&lt;p&gt;They decided to be tricky afterwards, and didn't provide any transportation back, so we had to find our way back from the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;MRT&lt;/span&gt;. I'm proud to say that we aren't dead. I took a nap for an hour, even though some people went swimming, because I suddenly felt exhausted when I got in my room.&lt;/p&gt;

&lt;p&gt;Tonight, my group consisted of both &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Matts&lt;/span&gt;, Juliette, and Brad. At first we were aiming to go to a cigar store, since Matt F. and Brad wanted to get some stuff, but what looked like a short walk turned out to be forever and a day, so we stopped when we got to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;MRT&lt;/span&gt; station and split up. Matt and Brad went on to try and find it while the rest of us headed back to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Shilin&lt;/span&gt; night market to find dinner.&lt;/p&gt;

&lt;p&gt;We ended up eating at the first place we saw, which was a hot pot restaurant. Our waiter was friendly and spoke [enough] English, so I think we did okay. The general consensus was that it was the ugliest hot pot ever, but it still tasted good. Matt and Brad joined us midway through; apparently they tried to get a taxi to take them to the cigar store, but simply got a point and primeval grunt, so they didn't end up finding it.&lt;/p&gt;

&lt;p&gt;We saw pretty much everyone that wasn't in the hotel sleeping at the night market that night; I guess we all ran out of stuff to do. Juliette ended up buying a shirt and some magic cold/hot pack things, but that was it. We were out until around 11:00pm before we headed back to the hotel. I'm guessing everyone pretty much went straight to bed afterwards; I know I did.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-3845060041404482174?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/3845060041404482174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=3845060041404482174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/3845060041404482174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/3845060041404482174'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/03/week-in-taiwan-day-5.html' title='Week in Taiwan:  Day 5'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-2879893611353934141</id><published>2007-03-14T09:27:00.000-07:00</published><updated>2007-04-09T21:37:55.970-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='taiwan'/><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='study abroad'/><title type='text'>Week in Taiwan:  Day 4</title><content type='html'>&lt;p&gt;Woke up today at 6:30am from a phone call that I presume was my dad.  Since I didn't pick up until right after it stopped ringing, I guess it'll remain a mystery forever.  Anyway, he came knocking on my door five minutes later, so I couldn't fall back asleep.  Breakfast was the same as yesterday, with breakfast buffet.  Not very exciting.&lt;/p&gt;

&lt;p&gt;The morning class wasn't very exciting either; the professor seemed to know what he was talking about, but his English was broken and hard to pay attention to.  I nearly fell asleep again, but I guess I found enough to keep my mind occupied for two hours.  Lunch was short and small ("normal" sandwiches and some pastry for dessert), and then we went to visit a software park.&lt;/p&gt;

&lt;p&gt;The software park was called &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Nankang&lt;/span&gt; Software Park (I guess &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Nankang&lt;/span&gt; is a district in Taipei); it was a series of buildings in close proximity, but the buildings were very nice.  The interiors and exterior was well-decorated with various types of art, including some sculpture where you could view two faces from one side and two faces from another, or something.&lt;/p&gt;

&lt;p&gt;The company we toured inside was &lt;a href="http://www.yaox.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Yaox&lt;/span&gt;&lt;/a&gt;, a company that worked in 4D and 5D &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;cinematics&lt;/span&gt;.  Apparently 4D is 3D with special effects, and 5D adds a layer of interaction.  We got to watch two 4D videos, which were really cool; last time I watched a stereoscopic video, you could see the red and blue they used to project 3D images, but I guess technology has since changed, since I didn't see any traces of red and blue.  The image quality was really awesome, but I was slightly tired, so my eyes couldn't focus too well.&lt;/p&gt;

&lt;p&gt;There was also some interesting building engineering going on.  The first thing we were told was that the floor tiles, which had floor sockets and A/C vents could actually move around, which allowed a tenant to organize their office however they wanted.  The second was a section that had previously been an outdoors area between two buildings.  Architects basically built a roof over the area and provided a pavilion area, which apparently is used for lots of things, such as demonstrating new cars, having banquets, etc.&lt;/p&gt;

&lt;p&gt;For dinner, a small group of us went to a Korean-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;ish&lt;/span&gt; restaurant; there was me, Juliette, Matt, Tom, and Chris; representing the Taiwanese population we had Osiris, Bella, Kelly, and Candice/Candace.  The food was really good, but I didn't feel so full when we were finished.  The dish we had was lamb and I think I ate about half of it, since Matt and Juliette didn't seem to like the food much.  The highlight at dinner was a perhaps slightly inebriated Tom trying to hit on six Asian girls sitting near us.  They kept ignoring his "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Americanly&lt;/span&gt;" loud attempts to talk to them, until Bella asked them to take a picture with him.  Unfortunately, I don't have a camera, but they actually agreed.  Matt and Chris got shots in too, so we have plenty of pictures of random girls now.&lt;/p&gt;

&lt;p&gt;We also had an argument about the ordering of rock paper scissors.  All [sane] Americans say rock paper scissors in that order, but the Taiwanese students insisted that it should be paper scissors rock, even though in Mandarin it's actually scissors rock paper; they are clearly mistaken and confused.&lt;/p&gt;

&lt;p&gt;After dinner, Osiris took Juliette and subsequently Chris back on his scooter, where we sat for awhile before the girls left.  I talked to Matt for awhile before another girl came (Kathy?) with a friend.  We sat around and looked at some pictures for awhile, until the group left for &lt;a href="http://www.room18.com.tw/"&gt;Room 18&lt;/a&gt;, which is apparently some club run by a popular TV star.  Even though I'm quite the party animal, I didn't feel like going, so I went back up and got back on the Internet.  Dancing and smelling like smoke just ain't my &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;thang&lt;/span&gt;.  I tried (and think successfully) found Osiris on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Facebook&lt;/span&gt;, who said he registered today, so hopefully I didn't get the wrong one.  I figured there wouldn't be many Taiwanese people named Osiris so I took my chances even though I didn't know his last name.&lt;/p&gt;

&lt;p&gt;It's almost midnight again, so time to sleep.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-2879893611353934141?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/2879893611353934141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=2879893611353934141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2879893611353934141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/2879893611353934141'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/03/week-in-taiwan-day-4.html' title='Week in Taiwan:  Day 4'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-6253129816559721296</id><published>2007-03-13T10:14:00.000-07:00</published><updated>2007-04-09T21:37:55.971-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='taiwan'/><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='study abroad'/><title type='text'>Week in Taiwan:  Day 3</title><content type='html'>&lt;p&gt;Thankfully, they provided more time between wake up and leaving to eat breakfast, so I did.  Not thankfully, wake up was still at 7:30.  The buffet was really busy, so I had to walk around for a bit before I found a seat with Matt F.  I ran into kind of an awkward moment, because a waitress tried to take his "I'm sitting here, go away" card while he was up, and I tried to tell her that someone was sitting there in Mandarin.  The awkward part was when she didn't know what the hell I was saying; I died a little on the inside.&lt;/p&gt;

&lt;p&gt;The first class we had was pretty cool.  We had to write papers about consumer behavior in Taiwan (which was 110% made up, in my humble opinion) and the lecture was tailored around stuff we wrote.  We mostly had discussions about inane points that people made that were sometimes blatantly false, but it was still fun, because it was interactive (for them; I just sat there).  It was also different in that in previous lectures, the MBA students from mainland China were asking all of the questions, but the discussions this morning actually fostered many more questions from the undergrads than &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;MBAs&lt;/span&gt;.  We also got to see one of our student guides, Bella, since she was a TA of some sort.&lt;/p&gt;

&lt;p&gt;Lunch was funny today; we ate at the whitest restaurant they could find.  Apparently they heard that some of our crowd couldn't stomach the local food, so we ate at a restaurant called Ken &amp; ______, where the blank is another incredibly Caucasian name that I don't remember.  Patricio ordered &lt;span style="font-style: italic;"&gt;two&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;filet&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;mignons&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;two&lt;/span&gt; orders of fries, and &lt;span style="font-style: italic;"&gt;two&lt;/span&gt; Cokes, and he was so happy.  I think the only people that ordered Asian food were the Asians.&lt;/p&gt;

&lt;p&gt;The afternoon lecture was mundane, but it was one I could understand (and therefore stay awake to), at least; the topic was &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;SMEs&lt;/span&gt; (small- and medium-sized enterprises) in Taiwan, which is kind of interesting, but I guess my mind isn't entrepreneurial enough to care.&lt;/p&gt;

&lt;p&gt;For dinner, we went up the local mountain (apparently they have classes up there!) to a tea shop.  There were some Taiwanese students that rejoined us, which was cool.  I sat at a table with Osiris, Raul, and a guy I'd never met; there were girls that sat at another table.  The shop served us a ton of food and we probably didn't even finish half of it, but it was mostly good food.  Post-dinner, we moved out to "tea tents" for tea, where we consumed vast amounts of tea over a span of probably two hours.  I'm amazed that only one other person had to get up to go to the bathroom; I guess I'm just not man enough.  It was a fun night, and we had some interesting conversation.  We sat with three of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;MBAs&lt;/span&gt;, so there were actually only two non-Asian people at the table.  One of them, who calls himself Maverick, seems to really enjoy talking, but he comes off as being &lt;span style="font-style: italic;"&gt;really, really&lt;/span&gt; smart, so he's fun to listen to, despite his insane accent.&lt;/p&gt;

&lt;p&gt;After we got back from the tea shop, there was a group going back out to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Shilin&lt;/span&gt; market, but I decided against it.  I never buy things and we'd just gone yesterday, so I decided to stay in and buy some Internet time and do some catching up (four fairly lengthy blog posts in one night--give me some props, here), and now that it's almost 1:00am, I should get to bed.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-6253129816559721296?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/6253129816559721296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=6253129816559721296' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/6253129816559721296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/6253129816559721296'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/03/week-in-taiwan-day-3.html' title='Week in Taiwan:  Day 3'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-285333771870568415</id><published>2007-03-12T10:43:00.000-07:00</published><updated>2007-04-09T21:37:55.984-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='taiwan'/><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='study abroad'/><title type='text'>Week in Taiwan:  Day 2</title><content type='html'>&lt;p&gt;Waking up at 6:30am &lt;span style="font-style: italic;"&gt;sucks&lt;/span&gt;.  I haven't had to do this since CHEM115 as a freshman or ever during spring break.  Whatever.  I'm a man.  I can tough it out, or something.  Since we had to be on the bus at 7:30, and I like to shower, I skipped breakfast; I normally don't eat breakfast to begin with.  We took the bus down to &lt;a href="http://iep.nccu.edu.tw/incoming/about/about_university.php"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;CNCCU&lt;/span&gt;&lt;/a&gt; for some opening ceremony, but then my dad and the Dean at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Krannert&lt;/span&gt; got stuck in traffic, so we were waiting for awhile.  After a few short speeches that aren't noteworthy, we went on a tour around the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;CNCCU&lt;/span&gt; building (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;CNCCU&lt;/span&gt; is the School of Commerce at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;NCCU&lt;/span&gt;, if you haven't figured that out), which was pretty cool, though it felt kind of old, like a lot of Taiwan does.&lt;/p&gt;

&lt;p&gt;Unfortunately, in a study abroad program, one must study (and not just a broad).  We had our first of several 2-hour classes to come at 10:00am, with a lecture that went completely over my head.  Since this study abroad program is titled, "Emerging Asian Markets and Economies," and I'm a Computer Science major, I have nothing to do with, well, this entire trip.  I sat through, pretending I was interested, but not learning much at all, since it all just zoomed over my head.  Luckily, I'm not the only person on the engineering side, so I can safely feel like I'm not the only one feeling like an idiot.&lt;/p&gt;

&lt;p&gt;Come lunch time, we had Taiwanese food.  It was funny, because I was the only one at my table that ate a substantial amount, being accustomed to Chinese food.  Everyone else thought everything was disgusting, so I merrily helped myself to whatever I wanted.  I don't really know why they didn't like any of it, since it's relatively normal food (no tongues, brains, or intestines involved!), but I suppose I'm heavily biased, being Asian and all.&lt;/p&gt;

&lt;p&gt;After lunch, we had a lecture that was even more boring, and I half-dozed off several times, so I &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; don't know what happened during this class.  It didn't help that the room we were in all day was pretty much frozen solid, so my brain was in a comatose (read: whiny) state.  Even if I was in Management, the class was taught by a guy with a pretty monotonic voice, and most of the people thought he was boring anyway.&lt;/p&gt;

&lt;p&gt;We went back to the same place as lunch for dinner, and it was pretty much the same story.  I heard Patricio, one of our students from Argentina, totally freaked out when he saw a whole fish being served, with head and tail both still attached.  Other than that, it was pretty uneventful.&lt;/p&gt;

&lt;p&gt;After dinner, we went to the night market in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Shilin&lt;/span&gt;.  We split up into groups, and I ended up with Jeff, my team leader, and Kelly, our Taiwanese friend that made sure we didn't get lost/killed/etc.  Jeff kept trying to bargain down for some dress shirts, but he got turned down pretty instantly every time.  We saw some interesting stuff; we made Jeff try on a velvet coat that looked incredibly snazzy, but I couldn't convince him to buy it.  We tried out some food at Kelly's suggestion, like some breaded spicy chicken, dumplings, and bubble milk tea, all of which were pretty tasty.  On our way back to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;MRT&lt;/span&gt; ("Mass Rapid Transit"/subway system), some cops pulled into the market, so we got a video of all of the unlicensed vendors clearing house, which was pretty amusing.&lt;/p&gt;

&lt;p&gt;After we got back, we found out that the students that were guiding us wouldn't be doing so any longer, since they had class (apparently taking us around was part of a class).  Kind of sad, but oh well.  They were very friendly and considerate, and had much better English than I expected.  Oh well.  Spent more time zoning out to Goo Goo Dolls before going to sleep.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-285333771870568415?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/285333771870568415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=285333771870568415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/285333771870568415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/285333771870568415'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/03/week-in-taiwan-day-2.html' title='Week in Taiwan:  Day 2'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-4999768332105682501</id><published>2007-03-11T08:47:00.000-07:00</published><updated>2007-04-09T21:37:55.986-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='taiwan'/><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='study abroad'/><title type='text'>Week in Taiwan:  Day 1</title><content type='html'>&lt;p&gt;I woke up early today, and it looks like I'll be waking up early every day, which sucks.  Isn't spring break supposed to be time to catch up on sleep?  Oh well.  I had breakfast at the hotel with my dad, one of his old classmates who donated funding for this study abroad program, and the Dean of the School of Management at Purdue.  The meal was pretty nice; I'd never eaten buffet for breakfast before, but they had a tasty assortment of foods.&lt;/p&gt;

&lt;p&gt;After the meal, we went to the &lt;a href="http://www.npm.gov.tw/en/home.htm"&gt;National Palace Museum&lt;/a&gt;, which is supposed to be one of the best museums in the world.  We met up with some of the other study abroad students and our Taiwanese student hosts, but didn't stay at the museum very long (I arrived late).  Unfortunately, I'm not much of a museum person, and it was jam-packed with people, so I can't really say the experience was very notable.&lt;/p&gt;

&lt;p&gt;After we left, our hosts took us to a Japanese restaurant, which was pretty good.  I didn't know what to order (and I never do), so I just let someone order for me, though I have no idea what her name is, or if she even ever said.  It was interesting, though, to see some of the other students from Purdue coming to Taiwan, since some of them were vehemently against trying out foreign foods.&lt;/p&gt;

&lt;p&gt;Post-lunch, we visited some department stores, since we had an assignment to "observe Taiwanese consumer behaviors."  Needless to say, there wasn't that much to observe, but based off of the ones we visited, they're a lot nicer than the average store you see in America.  It's interesting to see that their "mall" isn't actually one giant building.  Instead, it's a network of buildings that go up several (e.g., five) floors.  After visiting the department stores, we went to visit &lt;a href="http://en.wikipedia.org/wiki/Taipei_101"&gt;Taipei 101&lt;/a&gt;, a giant, high tech skyscraper with lots of overly expensive clothing outlets.  It was quite nice inside, but some of us didn't feel like walking around, so we just sat down and talked.&lt;/p&gt;

&lt;p&gt;Our last stop before dinner was at the RT-MART, which is, I suppose, the Taiwanese &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Wal&lt;/span&gt;-Mart.  Here, we "observed" more consumer behaviors before buying a bunch of snacks and eating them all.  Our hosts seemed really interested in finding out of what we thought about their food, which I thought was great, but I'd tasted it before.  The crowd I was with seemed to react well to the snacks as well (there was some Chinese beef jerky, egg tart, that one squid snack).&lt;/p&gt;

&lt;p&gt;For dinner, we went to a Korean restaurant (funny how we haven't had any Chinese food yet...are they hiding something?), where again, I had no idea what to order.  I had another girl order some random stuff for me, which turned out to be some spicy soup with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;kimchi&lt;/span&gt; and some other random stuff.  After I got over the scalding temperature, it was a pretty good meal, but the same people at lunch weren't having a very good time at dinner.&lt;/p&gt;

&lt;p&gt;After dinner, we went back to the hotel, where I zoned out for awhile with Queen playing in the background.  After sufficient time was spent zoning out, I showered and passed out.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-4999768332105682501?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/4999768332105682501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=4999768332105682501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/4999768332105682501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/4999768332105682501'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/03/week-in-taiwan-day-1.html' title='Week in Taiwan:  Day 1'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-5364098963353243869</id><published>2007-03-10T08:20:00.000-08:00</published><updated>2007-04-09T21:37:55.988-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='taiwan'/><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='study abroad'/><title type='text'>Week in Taiwan:  Day 0</title><content type='html'>&lt;p&gt;I'm backlogging up until day 3 with fake timestamps so they appear in order, since I haven't had Internet access.  Onwards...&lt;/p&gt;

&lt;p&gt;Today was a long day, though it was technically quite a bit longer than a day.  I stayed up all night on Friday, since I didn't feel like sleeping for some reason which was quite odd, since I'd been sleeping at 3:00am for the past week or two.  Anyway, my mom drove me to the airport and dropped me off, and I flew out to Chicago without a hitch.  Of course, the day was young.&lt;/p&gt;

&lt;p&gt;After disembarking at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;O'Hare&lt;/span&gt;, I found out my connection to Tokyo was delayed for 30 minutes.  Okay, no big deal.  I sat down and read &lt;span style="font-style: italic;"&gt;Design Patterns&lt;/span&gt; instead, and got a good bit of reading done.  When it came time to board, I saw that the flight had been delayed another 2 hours.  &lt;span style="font-style: italic;"&gt;Well, crap&lt;/span&gt;, I thought to myself.  My connection time to get on the plane to Taipei would be something like ten minutes.  At 2:00pm, I finally got on the plane to Tokyo.  Unfortunately, there's about a 13 hour gap in the story, because aside from meals, I slept all the way there.&lt;/p&gt;

&lt;p&gt;When we were landing, they informed us that they automatically re-booked our flights until an hour later.  &lt;span style="font-style: italic;"&gt;Cool&lt;/span&gt;.  We had to follow a Japanese guy around to get to another terminal and for some reason, every time he said, "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;sankyuu&lt;/span&gt;," I wanted to giggle, because &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;fobby&lt;/span&gt; accents do that to me.  I got on the plane at around 7:30pm Tokyo time, and got to the Taipei airport at like 10:30pm.&lt;/p&gt;

&lt;p&gt;Customs/immigration was pretty boring; I was able to get through without filling out all of the fields on the "disembarkation card."  It only took about five minutes to get my checked baggage, after which I headed out to find my ride.  Of course, I had no idea who was picking me up when I left, which is just a recipe for disaster.  There were tons of people standing around holding signs, and now that I think about it, one of them might have been my hotel.  Of course, I didn't even remember what hotel I was staying in.  &lt;span style="font-style: italic;"&gt;Crap&lt;/span&gt;.  I walked around, hoping I'd see someone I recognized; no dice.&lt;/p&gt;

&lt;p&gt;Eventually, I figured I could get some money and call my dad.  After I got some coins, I tried putting coins in a phone, and it wouldn't even fit.  I figured it was a credit card slot, but I didn't see any coin phones around, which didn't make any &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;freakin&lt;/span&gt;' sense, since the credit cards were disabled.  Eventually I saw a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;WiFi&lt;/span&gt; advertisement and turned on my laptop to see if I could somehow get to my dad via e-mail; fortunately, I stole a connection from a cafe and eventually got to him.  It took him an hour to pick me up and an hour to drive back, finally arriving at the &lt;a href="http://en.wikipedia.org/wiki/Grand_Hotel_%28Taipei_City%29"&gt;Grand Hotel&lt;/a&gt; at 1:00am.  The hotel is pretty awesome, but I was too tired to notice, so I showered and went straight to sleep in preparation for day one, starting at 6:00am.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-5364098963353243869?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/5364098963353243869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=5364098963353243869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5364098963353243869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/5364098963353243869'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/03/week-in-taiwan-day-0.html' title='Week in Taiwan:  Day 0'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2753406156787341079.post-7196959349065131551</id><published>2007-03-09T03:18:00.000-08:00</published><updated>2007-03-25T20:33:08.415-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='miscellany'/><title type='text'>Prelude to the reflections of a programmer</title><content type='html'>&lt;p&gt;It's finally happened.  For the first time, I'm actually making a blog post of my own volition on a blog that isn't required for a class.  But then, I suppose the two are mutually exclusive.  Hm.  Of course, nobody knows who I am, and there are a bajillion bloggers out there, but I'm making this post for posterity.  Right.  So who am I?  Presently, I'm a student at Purdue University, pursuing dual degrees in Computer Science and Mathematics.&lt;/p&gt;

&lt;p&gt;My interest?  Computers.  In general, I'm interested in anything computer-related on the software level; my main interest is programming languages and [sometimes] compilers.  I'm also interested in game programming, and just software engineering topics in general.  Other interests include sleep and music; I lead an exciting life, I know.&lt;/p&gt;

&lt;p&gt;What's the purpose of this site?  Probably just to make a bunch of meaningless posts about miscellaneous topics to record my thoughts and ongoing "events" of my "life."  Enjoy the ride.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2753406156787341079-7196959349065131551?l=saiyr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saiyr.blogspot.com/feeds/7196959349065131551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2753406156787341079&amp;postID=7196959349065131551' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7196959349065131551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2753406156787341079/posts/default/7196959349065131551'/><link rel='alternate' type='text/html' href='http://saiyr.blogspot.com/2007/03/prelude-to-programmers-reflections.html' title='Prelude to the reflections of a programmer'/><author><name>Daniel Tang</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-Jq-4Rq1sUc8/AAAAAAAAAAI/AAAAAAAAAqA/29Ik0RcAQ9Q/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
