Follow me on Twitter for my latest adventures!
Welcome to my blog!
I feel great to have finally launched this blog. I got catonmat.net two years ago but didn't have time to launch it. Finally got to it. How do you like the name? Cat-on-mat. Hackers love cats, don't they?
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 Peter Krumins. 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 experience as a programmer, linux sysadmin and a white hat (computer security). After I get a bsc in physics I am going for a masters degree in Computer Science, hopefully at MIT. I find masters cs degree much more challenging than undergrad and consider it worth spending my time on. I'm applying to MIT this autumn. MIT has been my dream for a few years now ever since I found MIT's OCW video lectures and saw how cool they are. I loved these video lectures so much that I started a free video lecture blog and free science video clip website which have become pretty popular and are making me thousands of dollars through adsense and affiliate sales. (Edit: MIT rejected me.)
I have a really good understanding of programming and I've 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 effective.
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. Once tools get popularity you can get back to improving code quality. Speed is everything.
The other approach is what the title of this blog says "good coders code, great coders 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. There are so many libraries and code available on sourceforge, google code, freshmeat and many other sites that most of all the solutions to problems like hash tables, linked lists, converting images, audio processing 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 researching 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, sometimes I struggle to getting spelling right. When in doubt, I usually query Google with words in question to find which words retur more hits. The one with the most hits probably has a higher change of being correct. So I have an idea of writing a tool that does Google queries, modifies words and returns Google hits count and suggests which one is most likely result.
Or another example, there is this viemu software which emulates vi key bindings in Visual Studio. How hard would it be write a competing software to embed vim in Visual Studio? I don't think it's that hard, probably just a few days of hacking to understand Visual Studio SDK and you get vim in Visual Studio.
You get the idea.
Some of my posts will be about how to do things with the wrong tools. A topic that I really love myself. This could be considered a hacker's approach because a real hacker would need to figure something how to accomplish the job even 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 YouTube videos. I love watching YouTube videos. Sometimes I want to download them so that I can watch them later. I thought, wouldn't it be great if I could download the videos with AWK? A quick Google search for awk + networking brings up results for GNU implementation of AWK - GAWK. This implementation has networking support. After ten minutes I found a way to download my favorite YouTube videos with AWK. Pretty neat, isn't it? (Edit: I just implemented this tool and wrote a post about it - downloading youtube videos with gawk)
On my about page I also mentioned I had worked as a whitehat. That's a really cool job to hack and to get paid for it. As I was hacking, I found that many boxes were secured through obscurity. For example, having an internal web server setup on port like 31234. Surely, this is no security. A quick port scan would find it. As a result I came up with this opposite idea of hacking through obscurity. I'll write more about it. It's similar to the idea of doing things with the wrong tools. Here is an example, suppose you hacked a box and wanted to make sure your rootkit never got deleted. One way would be to put the scripts that install 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 a lesser known places such as bash shell variable PROMPT_COMMAND. The contents contents of this variable get eval'ed before each command. I call this hacking through obscurity. This is, of course, also easily detectable by inspecting .bash_profile or /etc/profile but you'd have to know PROMPT_COMMAND executes after every shell command to find it. It's very obscure. This is what I call hacking through obscurity.
I am going to post programming cheat sheets. I love cheat sheets. I have at least 30 on my desk right now. I've made at least 15 of these myself. Stuff like Perl's predefined variables, C and C++ operator precedence and associativity tables and many others. (Edit: Here's the first post about cheat sheets - awk cheat sheet.)
I LOVE GOOGLE. I LOVE GOOGLE. I LOVE GOOGLE. I LOVE GOOGLE.
Haha, 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 and don't forget to make the first comment! :)