May 17, 2009
Recently I was introduced to a nifty little Java program called Freemind. The purpose of Freemind is to help you map out your thoughts into a form which then allows you to manipulate them freely. Sometimes I have too many ideas in my head to put them all together in a coherent way and a program like Freemind helps me to sort through them all. Basically, I use it as an extension of my memory, and I have been looking for software that does this for quite a while now. Before Freemind all I had was a pencil and paper. This solution is not terrible, but I do almost all of my work on the computer so having a digitized solution is always prefered. Here is a screen shot of Freemind:
Screenshot of the main application
One of the main things I like about Freemind is that once you get the hang of the keyboard shortcuts you can control everything about the program from the keyboard. This is really handy for me since I can just type away and keep adding ideas without having to give too much thought in to the use of the computer itself.
In Freemind a file is called a “Mind Map” and it is basically a single unifiying topic for what you will be organizing your thoughts on. Off of that one supplies “nodes” which have snippets of text in them describing whatever you please. Nodes can, of course, be placed off other nodes and this is how one builds a mind map. The nice thing about Freemind is that these nodes can be moved around quite easily with keyboard shortcuts. This allows one to quickly rearrange ideas.
Finally, Freemind lets you place little graphics next to the nodes which one can use to indicate various things about nodes. For example, I was using Freemind to keep track of bugs in this small program I was writing, and I would use the check mark graphic to indicate when I had solved one and written unit tests for it.
All in all I really like Freemind and it is a great way to put my thoughts together in a coherent way. I hope to find new and interesting uses for it in the future.
February 11, 2009
I have been quite busy lately trying to keep up with my school work, but I decided that I had time for a quick post to the blog.
Recently I have been playing around with the Mozilla Labs project known as Prism.
Prism allows one to easily turn any website into what appears to be a standalone application. The advantage of which is that you can ditch things such as the menu bar and forward and back buttons which typically take up an unnecessary amount of screen space just so you can do something like… edit your WordPress blog.
So far I have only used this for WordPress and for access to my GMail account. It is nice to be able to just click on an icon and load up either WordPress or GMail in a nice and contained format. This is especially nice for GMail since I almost always have that open in a Firefox tab and now I don’t require all of Firefox just to check mail.
For now I had to install it by downloading the tar.bz file and just unpacking it. You don’t need to do any special installing because it can simply run as a normal user. For ease of use I just put the files in a .prism directory under my home directory and sys linked that to a directory which is include in my PATH variable.
Presently when you run prism you just enter the website and prism turns it into an easy to run desktop icon and then from that point on you use the icon.
Use This To Create a "New App"
After doing this one gets a nice desktop icon:
Once you click on the icon the application is run:
Notice the lack of navigation or address bar
It should also be noted that there is a Firefox extension to do this same thing, but I couldn’t get that to work even after playing with it for a good deal of time.
If you would like to download and play with Prism for yourself you can check it out here: http://labs.mozilla.com/projects/prism/ . I should also mention that Prism is still in the testing phases so it might not be too surprising if there were some bugs.
I have many more things I’d like the write about especially my awesome experiences for KDE 4.2, but those will have to wait until my motivation and free time have increased 🙂 .
December 17, 2008
Yes, you read the title correctly, I will be writing about a little game I wrote called “Rocks”. As far as I know, Rocks is the first implementation of one dimentional asteroids. This is indeed a great day in video gaming history. Well, not really, but it is a great day for people who take jokes much further than intended!
So, a bit of background… Rocks started as a joke while a fellow cs student and 2 of our professors were driving back from a conference. I was bored and looking to program something quickly, preferably a game. The idea of one dimensional asteroids was thrown around and I was interested in making it ASCII based. Thus, Rocks was born. Sadly, I didn’t have much time to work on it after that car ride (where my laptop battery died). Since then, the semester has ended and I was able to complete the game. So, behold, a Rocks screen shot (Full Resolution Screenshot):
Rocks has a dependency on the curses libraries, but most Linux systems have that sort of thing installed. I have a downloadable version of Rocks which has been released under the GPLv3. In the tar.gz file you will find a complied version of rocks for x86 Linux and all of the source code with a (very) simple Makefile.
If you happen to play it let me know what you think 🙂 . Rocks gets harder the longer you play and can actually get challenging. So if you think it’s too easy then play for a few more minutes and you will see it get harder!
Rocks Download: rocks.tar.gz
December 11, 2008
I recently had the chance to play with KDE 4.1 and it has impressed me enough that I wish to install it on my Gentoo setup. I would be lying if I said I didn’t like all of the eye candy it has. However, it also feels more snappy than KDE 3.5 which I currently run. Also, I have a strange setup where I forward my entire desktop session over ssh and KDE 4.1 does much better with this than KDE 3.5.
I can’t wait to get it setup on my desktop machine and play around with it some more 🙂 .
December 1, 2008
Many of my friends know of my obsession with glowing gadgets. My computer can glow as well as my keyboard and my mouse throws off a bit of light itself. I’m not sure why I think all this stuff is so neat, but I do 🙂 . Specifically around Christmas time I get to have all my glowing gadgets out. I don’t have anything too crazy. Simply a few USB light up toys that are pretty neat. My external hard drive also has lights in it but they are not working so well and I don’t really use them. Anyway there isn’t much else to say so here are some pictures:
This is my main computer setup
A Cool USB Christmas Tree
Sorry some of the pictures or blurry. I had to rest the camera on a chair but I still had to hold it to the get the right angle. Needless to say… my hands are not that steady so the picture blurs 😦 .
November 30, 2008
Yes… it’s true I think about these things in my free time. It actually happened in the middle of a math class I was taking. We were talking about the Fibonacci sequence and I was thinking that it would be neat to have a recursive implementation on my calculator. Now, I know that the iterative approach is actually faster, but the idea of a true recursive implementation was a fun idea. Now, it may be possible using assembly programming for the calculator, but I don’t really know how to do that.
After a little bit of thinking I decided that programming with the calculator BASIC reminded me a bit of MIPS assembly (I can hear some people groan already). You see the calculator lists can be used as a make shift stack and since all the variables A – Z are global you can simply designate one of those as your “stack pointer”. So I adopted the convention that the S variable is the stack pointer and that the R variable is for returning values. Anything else is fair game. I suppose if I really wanted to put thought into this I would pick some of them as temporary and others for function arguments. However I didn’t want to spend that much time working on this.
The basic idea here is that when you want to call a function (IE another program) at the beginning of your function you simply preserve the state of any variables you wish to change by using the list. I happen to use L5, but you could use any list you wanted. The stack pointer starts at 0 and each time you add to the list to increment the stack pointer by the number of items you added. Then at the end of your function you restore the state of any variables you used and “return” by setting the R variable to be the return value.
Now this has some limitations. First of all the TI-BASIC is quite slow even on my 84+ Silver Edition. The second is that a list can only hold 1000 elements so your stack is essentially size 1000. That being said it is still fun to play around with the idea of recursion or the more broad idea of function calls. For instance I wrote a program to do prime factorization which uses a helper program to tell if a number is prime or not.
Here is the code of the main program FIB which is the recursive Fibonacci number finder:
:"SET STACK PTR
:1 => S
:"GET FIB NUM
Now here is the program which does the real work, FIBR:
:1 => R
:A => L6(S)
:B => L6(S+1)
:T => L6(S+2)
:"Increase stack pointer
:S+3 => S
:A => B
:0 => T
:A-1 => A
:T+R => T
:A-1 => A
:T+R => T
:T => R
:L6(S-3) => A
:L6(S-2) => B
:L6(S-1) => T
:S-3 => S
If you actually went through the trouble of putting this into your calculator you run the program FIB and enter a positive integer. The program will then return the nth fibanocci number. This is a simple program but I think it gets at the idea of recursion. In any case it doesn’t have too practical a purpose it’s just for fun 🙂
November 20, 2008
As pointed out by Wes it has indeed been some time since I posted anything on this blog. About once a week it occurs to me that I would really enjoy writing about this or that, but I just haven’t had the time lately. Part of the reason is how long it actually takes me to get a post up. It typically takes me around 30 to 40 minutes to write something mildly interesting, and then another 10 or 20 to proof read it. It is not as if I couldn’t find that sort of time, but typically I only have it at night, and when I am tried I find it very hard to concentrate on what I am writing 🙂
In any case I want to write about Project Euler today. About a week ago my Professor introduced to to Project Euler. They have a list of computer science and math problems that they ask you to solve, and typically the problem involves you needing to have some sort of mathematical intuition as well as coding skill. One simply makes an account on their site and when you think you have a solution to the problem you submit your answer and the site tells you if you got the right answer or not. So far I have been working on the earlier problems in the list when time permits. For a lot of them I tend to hack together a solution in Python within 5 to 10 minutes. I have heard the later problems get harder, and I await the challenge. Project Euler meets the strange need to write random small computer programs that perform an operation which is “cool” to only a small group of people. I also like the mathematical challenges that some of the problems provide, and it gives me a good test of my problem solving skills, which I think are very important to any computer scientist. The other interesting part to these problems is that Project Euler guarantees that your program should find a solution in under one minute of run time. This adds an extra challenge because you can’t necessarily brute force the answer :).
While writing solutions to these problems I have noticed how much slower Python is than C in certain cases. I have read many different guides to optimizing Python code and applied optimizations everywhere I can, and still the C equivalent to my solutions runs drastically faster. I am not suggesting that C is necessarily a better language or something. Certainly, one expects a compiled language to outperform a scripting language, but since I had never done any formal study before I found this quite interesting. I do enjoy the speed at which I can throw together the solutions in Python, and I’m glad I taught myself Python a year or two ago because I have used it many times since then.
Anyway, I have a lot more to write about, and have been keeping a list. Hopefully over Thanksgiving break I will be able to put in an entry or two. At the very least when this semester ends I will have plenty of time to write blog entries and plan to be more active during that time.