off by one

Categories: pedro | cs

[Add new subcategory] [Edit] [Delete]

T Piled Higher and Deeper:

So, I've decided to stay on at UCLA and get a PhD.

[Edit me!]

T speed versus throughput:

It occurred to me yesterday that while elevators have higher speed, escalators definitely have a higher throughput. In other words, if you were first in line, the elevator would get you to the ground faster -- but if you were last in line, the escalator would get you to the ground faster.

Imagine a 5 story building and you're on the top floor. There's one standard elevator that holds say, 15 people max and one standard escalator (running all the way to the ground floor). The escalator can hold at least 15 people at a time, probably way more.

You want to get to the ground floor. Assuming there are two even lines for each conveyance and people never change lines, which line would you rather be in?

[Edit me!]

T types of academic research, first in a series:

The Retroactive Umbrella

This is when you look at something new, and you say, "Oh, actually that thing is a member of a whole class of things that either don't exist or nobody's identified yet." Example: identifying the coming expansive P2P revolution after seeing Napster for the first time.

Pros: You get to herald an as-yet nonexistent class of things and hopefully have some influence over their development. You also didn't have to come up with the initial idea -- you just had to identify it as significant.

Cons: You didn't come up with the idea.

Related: developing taxonomies for things that exist but haven't been put into little boxes yet.

[Edit me!]

T [Comments] (3) online grammar checker:

Are you writing a Context-Free Grammar and you want to see if it works? Want to try a few test cases but don't have time to work the derivations by hand? Did you think this kind of technology only existed in the future? You were wrong.

[Edit me!]

[Comments] (1) explaining finite automata -- without sounding CrAzY!:

So, while I'll never be a "theory guy," I have really been enjoying my Automata / Complexity class. I think it's fascinating stuff that not only says a lot about computers, but fundamentally says something about how logic and reality function.

Unfortunately, my fascination with the material isn't something I can easily share with anyone, because... where do you even begin? When I try to explain it, why it's interesting, why it's hard, why it's important, I fail miserably, and usually sound like the guy ranting down on the corner with the hand-lettered sandwich board. "It's like tiny little machines, with arrows! Every thing is a tiny machine on a piece of paper with finite memory! 12 Galaxies!"

How would YOU explain Automata to someone who has no idea what they are or why they matter? Bonus points for explaining the concept of state machines without a pen and paper!

[Edit me!]

[Comments] (2) security ideas:

So I'm in a security class with a bunch of other grad students, and my group needs a project. If you have an idea that you think I should explore and get famous for, please post it here now!

[Edit me!]

T episode iv: a new quarter:

Well, it's time for a new quarter at UCLA. I passed all my classes and did pretty well, so I figured it was time to invest in a sweatshirt. Now people stop me in the grocery store and say things like, "Go Bruins!" which is an unsuspected downside.

This quarter, I'm taking which is a grad-level Computer Security (236) course (sort of a current topics discussion), and the undergraduate breadth requirements Networking (118) and Automata and Complexity (181). I'm also taking the grad topics seminar, CS 201. I really like my schedule so far -- all my classes are back to back on Monday and Wednesday, so that I'm done by 2PM, and then I don't have to come in on Tuesdays or Thursdays except for seminar. Then Fridays I have some discussion sections. I also have friends in every class, which helps make it more enjoyable.

The Security course is cool because it's a grad course and is focused on current stuff; my last job and my history as a sysadmin, etc. helps me feel pretty tapped in to the subject matter. Right now I'm trying to brainstorm on a project for the class. Networking looks pretty straightforward; it helps that I taught a simplified version of the course at North Park. Automata and Complexity will be my most challenging course, I think, because it is more abstract and sometimes I have trouble really getting inside formulas and the like. But I really like the subject material, and so far, the professor is great.

So I think the big challenges will be the Automata stuff in general, followed by the Security project (which should be something new, functional and hopefully interesting), and then the Networking projects, which require some sockets programming in C... I'm going to start working on some practice in that area right now.

[Edit me!]

java not random:

Java util.random not actually random!, from clickolinko.

[Edit me!]

[Comments] (1) update:

Well, hi there. Long time no post.

School is great, but I'm very busy. Apparently I've developed a serious kind of perfectionism since I was last in school full-time, because I've been kicking my own butt trying to absorb and produce as much as possible in the last few weeks. I really want to learn this stuff, and do well.

My schedule is pretty cool -- I'm taking a course in Programming Languages, where we will do projects in OCaml, Java, Scheme, Python, Ruby, and Prolog, and an Intro to AI course which involves Lisp and a bunch of theory stuff. Then I'm in a TA Training Seminar which is great and involves Adam Kaplan of the Leonardsphere. That's pretty cool too. I did a presentation on the card game SET because I think that two things that any geek ought to do at least once in their life is play a few games of SET and write a few simple programs in Lisp. The presentation went OK, but frankly, it is intimidating to be in a classroom packed with full-on brainiacs and my Music degree does put me at a certain academic disadvantage to most of them (and a huge rock and roll advantage, so, when the Battle of the Nerd Bands happens, my team will win! Runner up! At least!)

I'm also in the standard grad student seminar, where we go to presentations and write summaries of them. The shine of being in a community of brilliant people hasn't worn off yet, so I really enjoy that kind of stuff.

I was also in a Complexity and Automata class, but I dropped that because my schedule was just too full, which is great considering what happened this week.

I got behind because of a wedding in Chicago last weekend, which put all my homework off. When I got back, I busted my butt to finish an assignment for Programming Languages, but after spending a few days willingly losing points (2^n per n days late), I finally solved the problem, only to realize that I had been spending all this time solving a related, but not quite the same problem. Oh well. Turn it in and move on, because the next assignment is crazy complicated, or sounds that way, anyway.

[Edit me!]

first day of quarter... not of classes:

Whoops again. Apparently it was the first day of the quarter, not of actual instruction, which starts on Thursday. All right.

So instead I wandered around campus, wandered around the SEAS (School of Engineering / Applied Science) complex, found all my classes, and then went back to the coffee shop I posted from yesterday and worked on some code I've been working on for a new website.

Since I'm using this to reflect on CS topics and my own self-education in general, I did have an interesting experience yesterday, although it is a fairly elementary observation to most experienced programmers who use multiple languages.

Anyway, somehow, in the course of people talking about coding, and which language is better for x or y (x, obviously), or which language is awful (usually Perl) or wonderful (often Python), and in trying to think more abstractly about what programming languages do and why, somehow I had gotten on the path of thinking that different languages are just different ways to approach the same problem and, at least in well-developed general purpose languages the process of coding in those languages is roughly equivalent.

But then I tried to convert a shell script into a python program (but I could as well have been converting to Perl). While it was possible to make it work, it got much more complicated to "say" the same thing in python than in bash. I realize this is not because what the computer does is actually simpler (ignoring different methods of run-time compiling scripts between bash and python) but because of what bash (by necessity as a shell scripting language) hides from the user or provides because of its design (i.e. using mixed types, scoping, easy access to the output of a command, etc.).

I am sure there are a multitude of examples of this kind of thing, but it was enlightening for me because I had never thought concretely about how language design choices very directly affect the suitability of that language for different applications.

[Edit me!]

first day:

Well, I missed the campus tour I was going to go on -- the bus took a lot longer than expected. No big deal... I can go tomorrow, or if it doesn't work out, that's fine.

I have been thinking a lot about school, obviously, and my reasons for going, how likely I am to find success (or enjoyment) in it, what it will mean for the future, and also what my greatest obstacles will be.

First of all, I hope that I haven't taken too many classes at once.

Anyway, the biggest reason I am here is to "fill in the gaps" of knowledge I have because I never formally studied CS, and even in my work/projects I have usually taken an OSPF (Open Shortest Path First... nerd joke) towards completing that activity, rather than actually learning the "right way" to do it. And that brings me to my first self-realization: I'm really good at getting something done, but not necessarily good at learning all the details along the way.

And that ties into another thought -- I am very good at memorizing trivia and factoids -- I do it almost effortlessly. I can read an article about some piece of history or some Andean Butterfly and tell you all about it -- But if I am trying to memorize, let's say, fundamental properties of Boolean algebra, it suddenly becomes very difficult for me, and I don't know why. Specifically, I think I have difficult translating symbolic representations of abstract concepts into mental models that I completely understand. (Learing directly from a math textbook is very difficult for me.) Instead, I'm fairly good at recalling and synthesizing concrete bits of information. Unfortunately, math, logic, programming languages, interactions of command-line switches... are symbolic representations of abstract concepts. I'm not sure if it's an attention span problem or just one area that I'm not particularly "good" at.

And that ties into the next thought, which is that I am one of the kind of people who usually does well enough at things without having to try particularly hard (but not necessarily finding excellence at anything). As my piano teacher said, "Jack of all trades, master of none." I had friends who had to work hard for their grades -- and in the end, regardless of who may have had more or less raw talent -- the friends of mine who had to work hard generally had a better grasp and intuition than people like me who just floated through.

The consequence of this is that I am not very good at confronting a problem when it is truly difficult for me. I look for a way around it rather than a way through it... and in a subject like Computer Science especially, that is absolutely not the point, and thus I can't allow myself to just fall back into that mode of finding success, because it will not help me find the kind of understanding I am here for. I hope that I can find new mental models and ways of learning to leverage the talents I do have against my deficiencies.

Speaking of abstract concepts, it's time for Computation and Automata!

[Edit me!]

grad school begins:

I start grad school at UCLA tomorrow. I'm going to try and use this space as a place to comment on school and Computer Science related issues.

Here goes...

[Edit me!]

[Main]

Unless otherwise noted, all content licensed by Peter A. H. Peterson
under a Creative Commons License.