So I am notorious for failing to keep up with a blog. While I was extremely busy during school, I have no excuse any more.
I will try to do better.
So I am notorious for failing to keep up with a blog. While I was extremely busy during school, I have no excuse any more.
I will try to do better.
I have a confession to make: I have generally terrible posture; terrible to the point where it does harm to my back on occasion. This is a fault that I readily recognize, but also a fault that is hard to work on. When I think about it, I try to correct my posture to the best of my ability. However, this only occurs when I realize how I am sittting or standing. My general pose at my computer is leaned back in my chair, providing no support to my lower back, or leaned forward, resting on my elbow with a curved spine screaming its aches and pains at me.
When I try to correct for this, my back screams just as much: I tend to over-correct. If I just took the time to scoot back in my chair and use it how it was intended, I would be in much less pain at the end of the day. The interesting thing that I noticed yesterday is that when I am generally walking, I still have my characteristic bad posture. I slouch. My years as a runner have made it so my lower body moves in a rather fluid way, so the only suffering my body goes through is my back. When I fix that, I do not over-correct; I move directly into the proper position for my build.
The amazing thing is that when I correct my posture, I feel better about myself. It brightens my self-image perceptibly, though in imperceptible ways. I couldn’t point to what exactly it changes, but it just seems like the world is more in tune with me and I with it. That pays dividends to how the day goes. I think a large part of this is one of the things that J.D. pointed out on Get Rich Slowly today:
To think confidently, act confidently. You’ve heard the phrase “fake it ’til you make it”. Research has shown that faking confidence actually leads to the real thing. If you’re in a situation where you’re not sure what to do, act like you know what to do. Act confident and you will become confident.
A proper posture helps one feel confident due to feeling “right”. It is impossible to feel great if you mistreat your body and that abuse subconsciously harms your self-esteem. Without a healthy self-esteem, there is no drive to treat yourself well; thus forms the downward spiral for posture.
A goal of mine is to slowly correct my posture so that I am treating my body properly within a year. I think the rewards I will reap from this self-investment will come back and pay off many times over. The problem is that I am not quite sure how to go about changing the wiring in my head to say “sit up and stand straight” instead of “slouch and be uncomfortable”. Are there any suggestions for accomplishing this?
20 push-ups. 62 sit-ups. These are my starting points for two very easy fitness programs that I started today. One Hundred Pushups and its sister site Two Hundred Situps are urging people to get in better shape with easy, fast programs designed to stimulate the average person into keeping up with his or her fitness.
The goal of each is simple: complete one hundred pushups (or two hundred situps) consecutively in about 6 weeks. The ease of each program is the hook to get people to try them: the programs only take roughly 30 minutes per week to complete and 6 weeks is not a long time to dedicate to one goal. The go-at-your-own-pace nature also helps to spur people into bettering their health, as the completion of the program involves no competition except the competition against oneself. Of course, both sites also offer a bragging page for those who have successfully completed the program. This is an important part of the social web today and also can give featured bloggers a bit of a push in readership, due to being linked off the heavily-trafficked program sites.
As for myself, I plan to post my progress at the end of each week. This is an effort to push myself to start posting in my blog and also an effort to spur a completion of the program. I have been wanting to lose the 20 pounds I put on when I stopped running in 2003; it’s mildly horrifying what a major disease (mono) can do to a fairly fit teenager. It’s equally horrifying how hard it is to undo the damage done by a life event such as that. The lethargy that every college student seems to feel entitled to is a major barrier in such pursuits. Hopefully this time I will be able to overcome it and push myself to be a better me.
The first week of the programs will look like this for me:

Based on my starting numbers, it looks like I will be starting in the top tier of week one for the push-ups and the top tier of week three for the sit-ups. This will put my completion date for the sit-up program two weeks ahead of my completion for the push-ups! I already think I may extend the sit-ups to my own “Three Hundred Situps” program, which will hopefully put the completion date more in line with the day I finish the push-up program. Doing them concurrently will definitely be beneficial, as I will feel more accomplished at the end of a workout session. The completion time for each session will only be 10 minutes or so as is, so I am not worried about it taking too much time.
My current fitness goals are as such: complete both the One Hundred Pushups and Two Hundred Situps programs, then at the completion of the programs, start a full-body fitness program. This will involve running and strength training. I plan to purchase a bicycle suitable for endurance rides. Currently I am riding a NeXT bicycle purchased when I was 15; it is too small for my adult-size frame and badly needs replaced. Once I purchase the bicycle, I will start training with it. Depending on where I end up in the fall, I also plan to start swimming. The ultimate goal is to compete in a sprint triathlon in the early summer of 2010.
Through this fitness plan, I hope to increase my upper body strength, lose some weight, and decrease my waistline. I also hope to rebuild my cardiovascular and running musculature to the point where I can consistently run 5k races. Just running to completion is the goal; once I attain that, I will maybe move on to improving my speed. A 5k and sprint triathlon are definitely attainable in a little over a year are definitely attainable if I can keep myself motivated. Perhaps I will be able to coax some of my friends into exercising regularly with me.
For an idea of how to start my full-body fitness plan, I looked at J.D. Roth’s Get Fit Slowly fitness blog and how he has a plan in place to move one mile every day starting this month. This is a great example of an easy, simplistic plan to get active. While it doesn’t start as much, just the idea of starting is the important part. I will look at instituting something similar later this month that will be a basis for my program. I am imposing a definite deadline for a draft fitness plan for the end of this month. That gives me a little less than two weeks to look into it.
Does anyone have a plan to start exercising? It really is an art to create a program that you feel you can accomplish, yet still better yourself by completion.
The Official Google Blog has a post detailing the usability tests they put Advanced Search through. It brings to light a few important nuances, such as users many times don’t actually think about the searches they submit. This causes the problem of designing both for thinking users and for non-thinking users. This problem is much like having to design both for power users and non-technical users.
The most important part of their redesign, however, comes from the feature that Dan mentions at the end of the post:
One of the other things we noted in the field study was that people often didn’t understand how the Advanced Search page worked. So we added a “visible query builder” region at the top of the page. As you fill in the blanks, the box at the top of the page fills in with the query that you could type into Google. It was our way of making visible the effects of advanced search operators.
This is extremely important, as it will help users get acquainted with power searches. The syntax of power searches, once learned, can provide an easy way to find exactly what you’re looking for. Knowing how to limit your searches to a certain site or to eliminate search terms can help zero in on what you are looking for. I don’t know how many times I use that feature per day, but it significantly increases my work output when I am looking for how to do something.
The “visible query builder” fulfills two key things. First, it provides a powerful tool for non-technical users to help decrease the time it takes to find what they are looking for. Second, it can teach those users how to use power searches more quickly and easily each time they use the tool. Eventually, it is hoped, they will be able to use power searches without relying on the crutch of the query builder. This seems to be much like the approach of SQL query builders that have been around for a while. Granted, it won’t streamline searching as much as the SQL builders have streamlined that process, but that’s in the nature of the beast. It’s impossible to automate anything that requires user input, after all.
I like to see Google improve their products and make them more usable. It’s also interesting to see the process they go through to improve. This is why they are on top of the search market and if they keep up their current practices, they will stay on top for a while to come.
Being an undergraduate senior, I am in the process of deciding what I want to do with the rest of my life. I have that covered, but getting there is the obstacle I have recently come upon. The realization of what I wanted to do came very unexpectedly. Last September I received an email from my ex-boss and mentor, Barbara Helfer. In this email, she suggested that I watch Dateline, as one of her friends was going to be interviewed on the show. Now, Barb is an incredibly connected woman (she is currently a Director of Software Product Management at Leapfrog, Inc.), so when she spoke, I listened. The friend to whom she was referring was Dr. Randy Pausch, and he was talking about living with pancreatic cancer and about his Last Lecture.
At the time, I hadn’t heard of Randy. I had just begun investigating what graduate schools to which I might be interested in applying and Carnegie Mellon University had caught my eye through the doctoral work of many of their students, like Johnny Chung Lee. Now out of this school with a great reputation and impressive doctoral students came this professor who was nothing short of astounding. Here he was, dying of pancreatic cancer, yet still possessing an amazing energy and ability to inspire. And not only was he a computer scientist, but he created a program at Carnegie Mellon to teach the one thing I’ve wanted to do since I was little: make video games.
Promptly after watching the Dateline special, I searched out the video of Randy’s Last Lecture. I was moved beyond anything that I had thought possible. Randy’s outlook on life was such that it seemed to infect everyone around him with a love of life. If there is one thing that I have always valued, it is a love of life. Beyond that, the ability to inspire others to love life is something that I have always wanted to develop. Here was this man who, by doing nothing but talking about his life, made me want to have a fuller, more satisfying existence. I was intrigued and began to investigate not only him, but Carnegie Mellon as well. It quickly became my dream college and is still the my number one choice of grad school.
In the beginning months of my junior year, around the same time as the Dateline special, I was toying with the idea of graduate school and professorship. I was semi-tutoring a couple people in computer science classes and really enjoying the rewarding feeling of helping another person understand concepts better. After seeing Randy, it was like a light flicked on in my head: I realized that I want to be a professor. I want to help shape the minds of future generations and put my own spin on education. I have always relished learning and hope to impart that loved of learning on my future students.
In addition to spurring me into seeking a Ph.D. and professorship, Randy’s life and lectures also started to help me glean what I want my major contribution to the world to be; my magnum opus, if you will. My idea is based off the Alice project, Carnegie Mellon’s educations system to teach students programming … without them realizing they are learning to program. However, I would like to take this in the direction of game development. Of course, it wouldn’t be quite the same, as you can’t really obfuscate the fact that you are doing game design, but it’s something I would like to look into. Entertainment technology is a huge industry that many young people would like to enter. I wanted to enter that industry from a young age, but never knew where to get started. Starting out is getting easier, due to the proliferation of tools and literature through the Internet. It’s a different world than it was even five years ago, let alone the fifteen years since I dreamed up that life direction. I just want to spur on the imaginations of young people and help them realize their childhood dreams.
Beyond Randy and his dreams, there are several others that, through their actions and personalities, inspire me to forge ahead in my goals. I have already mentioned Barb, my former boss. She is one of the most loving, supportive people I have ever met. Through her highly successful life and her support, I have increased my self-confidence and gained somewhat of a view that I can accomplish whatever I put my mind to. On the other end of the spectrum is one of my undergraduate professors, Dr. David Reed. He keeps me grounded and helps prevent me from getting ahead of myself. The ultimate realist, Dr. Reed makes sure I don’t get too big a head over my achievements. I feel that is an important thing to have, particularly at important junctures in your life. Another inspiration of mine is one of my co-workers, Autumm Caines. She has a rousing interest in academic technology and challenges me to expand my horizons in that field. Through her, I discovered the wonder of Dr. Michael Wesch, a man who has quickly become another muse of mine.
Due to these extraordinary people, I believe I have found my calling in becoming a professor. I think it will be much more satisfying to me personally than going strictly into the private sector. I’m not ruling out the possibility of opening a business — in fact, I still plan to do that at some point — but I think the core of my being would be more satisfied teaching. It’s an interesting time in my life and I can’t wait for it to start.
If I could have met Randy Pausch before he died, I would tell him this: you have inspired me to change my Eeyore ways and become more of a Tigger. Thank you for showing that to me. And thank you to my mentors and sources of inspiration. You truly inspire the best in me.
I have been a Half-Op (HOP) for an IRC channel that belongs to the World of Warcraft server I have played on for a while now. Currently I am using NoNameScript, an extension to the ever-popular mIRC that is the workhorse of Windows IRC clients. Most of the time I’m satisfied with its features and what is easily done with it. However, I curse mIRC Script and bring a plague upon both its houses.
It’s a complete nightmare to script in. Here’s an example of a simple part of a script that is used in a “no swearing” script that completely boggles my mind:
; When you are an op in #Dorvan and anything is said in the channel on @*:text:*:#Dorvan:{ var %swear = these,are,swear,words ; The swear words to look for var %i = $numtok(%swear,44) ; The number of words separated by commas var %u = 2 ; The number violations before kick/ban while (%i) { ; While loop counting the number of words ... snip ... dec %i ; %i-- } ... snip ... }
Now let us start analyzing the significant eccentricities found in mIRC script.
on @*:TEXT:*:#Dorvan:{}
This little brick is one part that I don’t have too many complaints about. Given the nature of the program, this makes a fair amount of sense. It is saying “on receiving text in the channel #Dorvan, where you are a channel operator”, which is pretty self-explanatory. Here’s a breakdown for those a little more inexperienced in programming:
var %swear = these,are,swear,words
The next line is pretty self-explanatory. It just declares a local variable named %swear. I know it should be a global, but the script was made to be distributed, and this is much easier to distribute as it’s all in one block of code.
var %i = $numtok(%swear,44)
The next line takes a little bit of explaining, I think. It sets a variable %i to the number of comma-delimited tokens in %swear. Yes, the 44 is the ASCII code for a comma. Why they can’t just use the string “,” is beyond me, but that is the convention the mIRC developers chose to use. In my opinion, this adversely affects both readability and writeability, unless one is very familiar with ASCII codes.
var %u = 2
A very self-explanatory line, all this does is set the local variable %u to 2.
while (%i) {}
A while loop would not be my first choice for this script; I wanted to use a for loop. However, mIRC script does not contain a for loop. Counter loops are just semantically cleaner for most iterative loops, and logical loops just aren’t as semantically “happy” for me in cases like this. I suppose it works and cuts down on the parsing needed for the scripting engine, but I wish counter loops existed in mIRC script.
dec %iThe last line I included is the command to decrement %i. inc and dec are interesting choices to me for these instructions. What ever happened to the good old ++ and –? Or even Python’s simpler x += 1 and x -= 1? Those choices would make more sense to me than this apparent “I’m going to try and be Lisp without the parenthesis” instruction.
There are many things about mIRC script that I just don’t like. This drove me to find an IRC client that is either written in Python or uses Python as its scripting language. Either would work for me. I like Python because programs just plain work with it. My professor is a big proponent of Python because it is easy to teach beginners, but powerful enough to use for full-fledged programs.
While looking for a Python IRC client, I realized how easy it actually is to create an IRC client in Python. For example, here is some code that will connect to an IRC server, join the channel #testserver, say “Hello, world.”, and then part and quit:
import socket network = 'enter.a.network' port = 6667 irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) irc.connect((network, port)) irc.send('NICK TestPy\r\n') irc.send('USER TestPy TestPy TestPy :Python IRC\r\n') irc.send('JOIN #testchannel\r\n') irc.send('PRIVMSG #testchannel :Hello, world.\r\n') irc.send('PART #testchannel\r\n') irc.send('QUIT\r\n') irc.close()
The ease of doing this got me thinking about writing my own IRC client. Handling the entirety of RFC 1459 is a semi-daunting task though, so I might start implementing and see how it goes.
I’m just wondering if there is a market for this outside of myself. On GNU/Linux, BSD and Mac OS X, a user can choose Konversation, KDE’s graphical IRC client. It supports shell scripts, Ruby, Python, Perl, Java, C++, C#, and Javascript for scripting. That’s quite a formidable list. Quite a formidable development team. Not something that a sane person would consider competing with. I’ve always wanted to start a project that people will use. Maybe one person other than me would use it. That will have to be good enough.
I got to thinking about software installation today. The reason for this is actually quite important to why this post is occurring in the first place. I was updating my system, which runs Gentoo Linux (and Windows XP) as its operating system. For those of you who have not used Gentoo, I will explain the packaging system Gentoo uses.
Gentoo is a so-called “meta distribution” of Linux. This term is used to describe how customizable the operating system is. The entire system is built from source, which means that there is essentially unlimited customization and optimization possible in a Gentoo system. The software that fetches the program source for compilation is called portage — this powerful software is the soul of Gentoo. It’s really quite amazing to use; to install a piece of software, one must only find its package name (made easy by tools like eix, which indexes the entire portage tree to be searched instantly) and enter one command into a console:
emerge [options] [package-name]
The software is then compiled and usable afterward. The first time I used Gentoo, I was amazed at the simplicity of installing software. No longer did I have to surf the Web to find the installer for a program and any dependencies needed. It was all easy-to-find and easy-to-do. It was super-powerful “yum”, which is the tool used to install packages on a number of other Linux distributions.
It wasn’t until later that I realized that this power came at a price.
Portage is amazingly powerful, but in this power resides its weakness. First of all, it takes an incredible amount of manpower to maintain the ebuilds, or packages of software, and each ebuild needs a maintainer. Since these maintainers are people who do this out of the goodness of their hearts, a lot of the time the ebuilds are not up-to-date or installing properly, at least for the lesser-known packages. Now to counter this, Gentoo has the best user community I have ever seen — rarely have I had a problem that has taken more than a quick search at the Gentoo Forums to fix. The second weakness of portage is one that is seen quite often with high-power, constantly-evolving software: it breaks. Often.
When I was updating my system this evening, it returned an error about the Manifest for a package being incorrect. When I was running Fluxbox, I was using a desklet system called aDesklets. One of the dependencies for aDesklets is Fontconfig, a library for font customization. The problem was that aDesklets depends on version 2.3.2-r1, while I have 2.4.2 installed as a dependency for 20+ packages. Since these packages are (well, the same thing, for one thing) meant to accomplish the same function, they occupy the same “slot” in portage. This makes portage try and downgrade Fontconfig to the version needed for aDesklets. The problem arises when the 20+ packages that need the new version of Fontconfig are to be emerged — the dependency isn’t there and portage knows it just downgraded the package; thus the error in the Manifest.
Now, it was a simple fix for me — I’m no longer using aDesklets, so I just unmerged the package and am currently running emerge -uDavN world (ask to verbosely emerge all packages in the “world” file, with the “upgrade”, “deep dependencies”, and “new” use flags) to update the 41 out-of-date packages I have. In a half hour or so, I will have a complete bleeding-edge system.
This whole debacle brought up a thought in my mind: why does software installation have to be so troublesome? Granted, for the most part it’s trouble-free and easy on most systems, but occasionally you have a program that just won’t install. For example, when Battlefield 2 came out, I went out to pick it up on the release date.
While I was readying to leave the store, my friend called me and said, “Hey, you haven’t bought Battlefield yet, right?”
“No,” I replied, “I’m just going to pay for it now.”
“Well, hang on for a minute or two. I’m having problems installing it.”
This friend is the most tech-savvy guy I know — when he has a problem, I listen. It turns out that the DVD-ROM he was using could not read the type of DVD media that EA used to print the games. He fixed the problem by cannibalizing an old 2x DVD-ROM out of what was then our game server.
But why did he have to do this in the first place? Shouldn’t that sort of thing be caught in quality assurance tests? One would think that a publisher as large as EA should be able to release a game that will at least install. (As it turns out, the game wasn’t ready for release in the first place, as a lot of major functionality was broken in the 1.0 version — but that’s another post.) Idealistically, yes, but in reality, it’s virtually impossible to test things on every kind of machine. The fact that my friend had a Sony DVD-ROM that couldn’t read this kind of media is not something that EA checked in their QA tests, apparently. It seems like a strange thing to miss, but it’s there.
With how necessary an activity software installation is, it seems we should know all the problems that could arise in the installation process and have counter-measures for these problems. The sad fact is that we don’t know all the problems and can’t fix some of them. That’s one thing that should be studied — how to improve the user experience by preventing “blockers” in the installation and configuration process. How this might be accomplished, I don’t know — but it’s something I would be interested in studying. After all, aren’t users the most important part of software?