Monday, October 31, 2005

Happy Halloween

Pumpkins carved by my sister and her boyfriend.

Lots of homework! But what's new about that?

Thursday, October 27, 2005

Still At It

I acutally had a pretty good time memorizing theorems, definitions and proofs for my analysis exam today. Though I really won't say how I think I did. Last time I thought the exam went well, and in reality it went quite horribly. Let's just hope that things went better today.

I am finding that really I need to find the courage and stamina to keep at this school thing. Sometimes I feel that my stumbling block is a lack of confidence that I can actually do this stuff.

I finished an optimization lab today. Thank the heavens above for the super smart people that think that stuff up and put it in libraries so that the rest of us can use it. There is something spectacular to be said for speed of an algorithm, but at the same time it usually makes it MUCH harder to read and debug.

The hours are long, and the problems are often frustrating. However, when a solution is found the joy is quite sweet. Time for bed. Thursdays are work days, work as in job work. I haven't been in the office for a week. Things will be interesting for sure.

Saturday, October 22, 2005

Mr. Rogers Quote II

Here's a great one from Fred Rogers:

There's the good guy and the bad guy in all of us, but knowing that doesn't ever need to overwhelm us. Whatever we adults can do to help ourselves -- and anybody else -- discover that that's true can really make a difference in this life.

You can write the analysis yourself. But I do think there is truth in the thought.

A really quick update
There's an analysis test on the horizon this week, along with a pretty grizzly optimization lab due Wednesday. School is tuff, but I am grateful for the opportunity to attend. I just pray that I will learn all I need to, in order that I perform well.

Sunday, October 16, 2005

A Meager Update

An entire week, this is perhaps the longest I have gone without writing a blog entry since the beginning. It isn't for lack of things to say, but really for the lack of this precious commodity called time. Last week was pretty standard. Class, followed by lots of studying, I feel for the first time since school started this semester that am almost on top of my classes. I am not sure where it was that I fell behind, but it felt that after Labor Day I was constantly working on something. As my classmates called it, we were putting out the most urgent fire, and then moving to the next. Hopefully, with some additional effort, I will be able to not only put out the fires, but stay a little bit ahead.

As I am really not feeling much like writing sentences, I think I will use a list to summarize my week.

  • Finished two math assignments, and successfully completed a problem on the board in front of class.

  • Finished an assignment in Models of Computation, and studied hard for a test that I took on Thursday.

  • Completed an assignment in my Programming Languages class dealing with lazy evaluation in programming languages.

  • Managed to get into work for the first time in a week on Friday, they seemed understanding, but I am worried that I am letting them down.

  • Learned that one of my aunt's has been showing my flickr photo stream to people, and found a group interested in having me put on a show in a local library this coming January. (Yes this is exciting, but I can't think a lot about it now.)

  • Started to think about class registration for Spring, it looks to be a fun challenge.

  • Figured that if I work as diligently at school for the rest of the semester as I have in the past couple of weeks, that I will actually finish the semester ok.

  • Had a pretty lazy weekend, but felt that I deserved it.

That sums it up. There are a lot of details that I haven't fleshed out, but you probably get the general idea. I'll try to write more when I have time.

Sunday, October 09, 2005

BNF for Ruby

BNF stands for Backus-Naur Form, and is a very convenient way to describe a programming language. At a glance one can quickly see what the language does, and what its interpreter or compiler expects the grammar to be like.

I got tired of working on homework, and have been hearing a lot about the programming language Ruby, and a variant called Ruby on Rails lately. I decided that I would spare myself a few minutes and learn a little bit about the language. Looking for a nice technical description, I first found this user guide. While it was an interesting, quick read, I wished for a more simple way to be able to see what it was that the language represented, besides the claim of being a great interpreted object oriented language. On the whole, the guide was nice, but I really wanted to see the language described in terms of BNF. And for some odd reason, I kept expecting to find the language described in BNF terms.

At any rate I decided to do a google for Ruby BNF and came up with this great synopsis in "pseudo BNF" form. Even from the actual Ruby people. I was so pleased. I guess that the stuff I am learning in school isn't as out-dated as I had thought. It is cool to be able to put classroom learning to real world practice.

The take home message of the night is that BNF really is a great way to convey a lot of information about a language to another computer scientist in a concise and compact way. If you do much in languages, it is certainly worth learning.

Friday, October 07, 2005

Happy Hex

30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30
30 30 30 30 30 30 30 30
30 30 30 30 e0 b7 ff bf
b8 62 aa 74 37 bd f8 b7
ff bf 68 e9 8f 04 08 c3

It took a while to figure out what when where and how, but in the end it is actually pretty darn cool. I am feeling like quite the haxxor, even if the exploits we were using for this assignment were en vogue circa 1987. All of this low level work is paying off in that I am coming away with a really solid understanding of how code works at the machine level. Assembly has its frightening moments, but with some time and patience it too can be deciphered. I guess the next step in that vein would be to learn more about how the assembly gets turned into machine code, but that sounds a bit too frightening for the time being.

On the homework plate for the weekend, is preparing for a test in my Models of Computation class Thursday. Of course there will be an Analysis assignment, and it wouldn't be just to forget the Programming Languages assignment. One day at a time. That's how it has to be done right now, but at least it is getting done.

Sunday, October 02, 2005

Progress is Good

How about a real entry? In the past few weeks, the thought of sitting down to write something significant just seemed like it would take up too much precious time. As a result, you have been treated to some photos, screenshots and the occasional brief rant about how I am finding school to be quite challenging this semester. I thought that I would sit down, and see what I could come up with in 25 minutes.

School is fascinating. Really, it is. Slowly, but perhaps faster than I am prepared to accept, my classes are delving deeper into the particulars of how a computer does the fascinating things that we expect it to do. Topics that were covered in brief last semester are re-appearing but this time in more detail. It is fascinating to learn about, but makes for some long and challenging course work. The details of a disassembled program don't just pop out to the untrained eye, at first every advance must be meticulously won. Each of my three computer science classes plays to a different level of abstraction, but in interesting ways they are all related.

In programming languages, we are working through design decisions that one must face when creating a new language. Questions such as, what language will we implement our new language with and why? What features should our language support? What will the grammar for our language be? What are the various tradeoffs that we make, or problems that we cause when we choose to implement a given feature in a certain way? Yes, I understand that the sample questions that I just gave are quite vague, but with the hope of keeping all of my readers happy, I thought it better to keep it on a higher level.

In my systems class, we have slowly been peeling back the abstractions. Thinking about bits, and processor instructions has taken up most of the last five weeks. Our current study is focusing on the run-time stack. This class makes me feel most like a hacker, as much of what we have done involves 'tricky' ways to implement functions, figuring out what disassembled code from binary does, and at this moment how to execute buffer overflow attacks on a test server.

Models of computation is by far my most abstract class this semester, but because of my reading this summer, I think that I can see where it is going. DFA's, and NFA's, regular languages, regular expressions, and mathematical proofs have taken up the time in this class. As painful as it is, every computer scientist needs to have some exposure to the mathematical underpinnings of the field. I know that a few of my work associates would really argue with me about that claim, but isn't there something to be gained by knowing exactly what kinds of problems we can't solve? Not to mention why?

My last class, Introduction to Analysis, is helping me to understand why it is that mathematicians never take anything from granted. Every operation, every set, every theory must be carefully constructed, and proved. I am finding that up to this point in the semester I haven't given this class the attention that it properly deserves. These basic proofs that we are working on may be somewhat trivial to the experienced mathematician, but to the undergraduate seeing this for the first time, it is something to study seriously, and even fight with at times. It is really cool in the end when you understand it, but the journey isn't always pleasant.

At school we joke that there is never the time to dedicate to study as we would really like to, we say that it feels like we are constantly putting out fires. There always something on the immediate horizon that must be done. Getting far enough ahead to give each topic its due time is a real challenge. I had to remind myself this weekend that this schedule is of my doing, and that this major is something that I love. I really do enjoy it. At this point, the price may be making sacrifices so that the classes get the study time they need.

Each day I learn something new, this must be progress. Progress is good.