Follow me on Twitter for my latest adventures!
This is an old post. Most of the things written here are no longer true or I don't care about them. I left it unedited for historic purposes, so I can return after 10 years and see what I was up to back when I wrote it.
Welcome to my blog, dear reader.
I feel great that I have finally launched this blog because it was my dream to launch it two years ago when I bought this domain catonmat.net. Hackers love cats, don't they? lolcatz. ;)
So why did I start this blog and what am I going to write here?
First of all let me introduce myself a little (more information about me on about page).
My name is Peteris Krumins (pronounced as Peter-is Kroo-mins) which directly translates to English as Peter Bush. (Hi, George!)
I am 22 years and I am finishing my Physics degree the next year. There is a good reason why I did not choose Computer science as my major. By the time I finished high school I already had great work work experience as a programmer, linux sysadmin and a white hat (computer security). After I get a B.Sc. in physics I am going for a M.Sc. degree in Computer Science, hopefully at MIT. I find Computer Science M.Sc. programme much more challenging than B.Sc programme and consider it worth spending time on. I am applying to MIT this autumn. MIT has been my dream for a few years now since I found MIT's OCW video lectures and saw how cool they are. (Little self promotion: I loved the video lectures so much that I started a free video lecture blog and free science video clip website which have become pretty popular).
So I have really good understanding of programming and have found two great approaches to software development. These approaches seem to be pretty well known and someone might say that they are wrong but I am going to show that they are not wrong and are efficient.
One of them I call "the hacker's approach" which basically means you just create cool stuff quickly that works by using anything you have available. And if something doesn't work you just get it working asap without getting into much details why it didn't work. Might sound pretty lame but I am going to demonstrate in some of my posts that you can quickly create cool tools and software with little effort.
The other approach is what the title of this blog says "good coders code, great reuse". This approach is similar to "the hacker's approach" but it does not require that you create your software quickly and dirty. It just means you reuse existing libraries and spend little effort writing stuff that has already been written. Software reuse so to say. There are so many libraries and code available on sourceforge, code.google, freshmeat and many other sites that most of all the solutions to problems are there.
By using these two approaches I will create some great free software and will try to monetize it so I can make enough money for MIT :)
I have been reading about Internet Marketing for the last year so I will definitely do a few software project from A-Z to learn more about software marketing and to teach you how it can be done. I will create open source software and document each step on this blog - what I learned, how I did it, how it worked and how I marketed it.
Also I have this list of 50 or so cool software ideas I have thought of during the last 3 years while studying physics which I have not coded myself but will theorize on how to implement and actually implement some of them, and write about what alternatives we have for them at the moment. For example, English is not my native language so I sometimes struggle getting grammar right. When in doubt, I usually query Google with the grammar form in question to find which form would return more hits. The one with the most hits probably has higher change of being correct. So I have an idea of writing a tool which checks grammar or expressions in any language based on how many hits Google returns. Or another example, there is this viemu software which emulates vi key bindings in Visual Studio, how hard would it be embedding vim in Visual Studio? I don't think it's that hard, probably some days of hacking to understand Visual Studio SDK and you get a fully fledged vim in Visual Studio. You get the idea.
Some of my posts will be how to do things with the wrong tools. A topic which I really love myself. Could be considered a hacker's approach because a real hacker would need to figure something out to accomplish the job if he did not have the right tools. The usual scenario for doing something with a wrong tool is choosing some tool and setting a goal to do something with it. For example, I was recently learning AWK programming language for fun and after a few hours of hacking I decided to watch a YouTube video just for relaxation. I love watching YouTube videos. Reasonably, I would like to download some of my favorite videos so I could view them on my laptop or phone. I thought wouldn't it be great if I could could download the videos with AWK? A quick Google search for awk + networking brought up results with GNU implementation of AWK - GAWK. And this implementation has networking support. So after a few tens of minutes I found a way to download my favorite YouTube videos with AWK. Pretty neat, huh? :) (I already wrote this tool, here is the post - downloading youtube videos with gawk)
Alright, I mentioned I had worked as whitehat. Really cool job to hack and to get paid for it. During my practice I found that many boxes were "secured" through obscurity. For example, having an internal web server (for outside access) forwarded on port like 31234. Surely, this is no security. So I came with this idea of hacking through obscurity. I just had to name regular hacking in an interesting way. I will write about it. It's similar to the idea of doing things with wrong tools. Here is an example, suppose you hacked a box and wanted to make sure your rootkit never got deleted. One step would be to put the script which installs the rootkit in the rc scripts but that's easily detectable because it's the first place to look for things like that. What about putting the script in less known places like bash shell's variable (PROMPT_COMMAND) which contents get eval'ed before each command? I call this hacking through obscurity. This is, of course, also easily detectable but you learn something cool not many other people know. Kinda cool. Heh. Heh :)
And one of the final things I am going to post are programming cheat-sheets. I love cheat-sheets. I have at least 30 on my desk from which I have made 15 myself. Stuff like Perl's predefined variables, C and C++ operator precedence and associativity tables and many others. (Here is the first post abou cheat sheets - awk cheat sheet)
I LOVE GOOGLE. I LOVE GOOGLE. I LOVE GOOGLE. I LOVE GOOGLE.
Yes, I love Google! Google is everything for me. I love how smart they are, I love their products, I love their technology, I love that I can make money from them, I love that I can advertise with them, I love their tech-talk videos, I love their geek jokes, I love that they are the best company to work for, and I love absolutely everything about them!
Thanks for reading the first post! Don't forget to make first comment! :)