GitHub Social Coding

Hey everyone, I just pushed 30 of my projects to GitHub. I realized that all the projects were scattered across my blog and there was no central repository. So I took time to organize them, write documentation, and uploaded them to GitHub.

I did all of these projects for fun and to learn better programming. You can't become a great programmer if you don't program a lot. The more you program, the more language idioms and constructs you'll learn. You'll learn common patterns that occur frequently in programming and it will greatly improve your problem solving skills.

These were all relatively small projects and I think I am ready to move to the next level. I have several larger ideas in mind that need to be turned into code. I will post the updates to catonmat.

If you find any of my projects interesting, clone and start hacking. You can also follow my profile at github. :-)

Here they all are. Enjoy!

1. Busy Beaver

Busy beaver is a computer science problem to finding the smallest Turing Machine that outputs the most data and eventually halts. This project is an implementation of a Turing Machine in Python and C++ that runs the busy beavers. It also comes with Turing Machine's tape visualization tool written in Perl.

2. Feedburner Graph Generator

Current Feedburner statistics graphs do not look nice. I wrote this Perl program to generate the nice graphs they had in 2008.

3. CodingHorror Keyword Analyzer

This is a Perl program that parses public statcounter data for codinghorror.com blog and stores the search keywords in an SQLite database.

4. Adns

This is a tiny Python module that does asynchronous DNS resolution with adns library. My benchmarks were 20,000 resolutions per minute on a 512kbit/s connection.

5. Winamp Music Reporter Plugin

This is a Winamp plugin that reports to digitalpoint forums the tracks you are listening to. Written in C and uses Winamp SDK. The code can be modified to make it report to Facebook or Twitter, or anywhere you wish.

6. Bithacks.h

Bithacks.h is a C header file that implements various bit operations.

7. Set Operations in Unix Shell

This is an implementation of 14 set operations by using only Unix utilities such as sort, uniq, diff, comm, cat, head, tail, awk, and others.

8. Hacker Top

Hacker top is a Unix top-like program written in Python for monitoring Hacker News from the console.

9. Reddit Top

Reddit top is a Unix top-like program written in Python for monitoring Reddit from the console.

10. GNU Awk YouTube Downloader

This is a program written in GNU Awk that downloads YouTube videos. It works well but please don't take it too seriously. It's a proof of concept code, written to see what can be done with GNU Awk's networking interface.

11. VBScript YouTube Downloader

This is a program written in VBScript that downloads YouTube videos. I wrote it because when I was a child, I did a lot of programming in Visual Basic and I wanted to remember what it was like.

12. Perl One-Liner YouTube Downloader

This is a Perl one-liner that downloads YouTube videos. I wrote it because I love Perl golf.

13. YouTube Video Uploader

This is a YouTube video uploader that works without any APIs. It just simulates what a browser would do and takes all the steps to post the video and set the video info. Written in Perl.

14. Plurk Translation Tool

This is a GreaseMonkey script that translates Plurks to English.

Plurk is like Twitter but more fun and organized. Come be my friend on Plurk, my profile name is pkrumins. Written in JavaScript.

15. Command Line Plurker

Plurk from your command line. Written in Perl.

16. Find Plurks on Google

This program searches for plurks that were indexed by Google. It outputs URLs to indexed pages. It's written in Python and uses my xgoogle library.

17. Delete Plurks

This is a GreaseMonkey script that adds a "delete" button on individual plurk pages. This way you can delete your or other people plurks (if it's your thread) directly from the plurk page. Written in JavaScript.

18. Xgoogle

A Python library to Google services - Google Search, Google Sets, Google Translate and Sponsored Links.

19. Reddit Media

The old Reddit Media website that I created in 2007. No longer maintained. It was written in Perl.

20. Reddit River

The old Reddit River website for mobile devices. No longer maintained. It was written in Python.

21. Digpicz

This is the digpicz.com website that I created back in 2007. It got massive attention back then because Digg didn't have picture section then. It was written in Perl.

22. Picurls

Picurls.com is a picture aggregator much like popurls.com but for pics. Currently down for maintenance, will be soon up again. Written in PHP.

23. Bash Vi Editing Mode Cheat Sheet

Bash has two input modes - emacs and vi. This is vi input/editing mode keyboard shortcut cheat sheet.

24. Bash Emacs Editing Mode Cheat Sheet

Bash has two input modes - emacs and vi. This is emacs input/editing mode keyboard shortcut cheat sheet.

25. Bash History Cheat Sheet

This is the bash history cheat sheet. It summarizes everything there is to know about working efficiently with command line history in bash.

26. Screen Cheat Sheet

This is the screen terminal emulator cheat sheet. It lists the default keyboard shortcuts for working with screen.

27. Perl Special Variable Cheat Sheet

This is Perl predefined variable cheat sheet. It lists all the variables from `perldoc perlvar` with a concise description and some example usages. I created it when I was mastering Perl. I enjoy Perl golf and I wanted to know all of the variables.

28. Perl pack/unpack and printf/sprintf Cheat Sheet

This is Perl pack/unpack/printf/sprintf cheat sheet. The pack/unpack cheat sheet is on page one, and it lists the pack/unpack template parameters and what they do. The printf/sprintf cheat sheet is on page two, and it lists the printf/sprintf format specifiers and format attributes.

I created this when I was mastering what could be done with pack/unpack. I added printf/sprintf as I could never remember all the format specifiers.

29. Awk Cheat Sheet

AWK programming language cheat sheet.

30. Sed Cheat Sheet

This is sed cheat sheet. Sed is the Unix stream editor. If you don't know it, you don't know Unix.

31. Ed Cheat Sheet

This is ed cheat sheet. Ed is The Unix Text Editor.

One day when I was learning sed, I got interested if it originated from ed, which got me interested in ed itself. I find that cheat sheets are a great way to learn new topics and therefore I created this cheat sheet.

32. The New catonmat.net Website

I just started pushing code to the new catonmat.net repository. It's going to be a state of the art personal website from now on.

I have around 100 ideas for it, and the next big article series on catonmat is going to be "Designing the new catonmat.net together with me." You should subscribe to my blog here if you are interested!

If you have any questions, don't hesitate to ask in the comments!

Comments

kangu Permalink
December 08, 2009, 12:36

Impressive Work!
Thanks for all the efforts. It helps a lot!

December 08, 2009, 12:46

Pretty cool!

Looking forward to fork a few.

December 08, 2009, 13:42

Your blog subscription email is one of those always carrying new staff to learn, please keep posting and sending :) Thanks friend

James Permalink
December 08, 2009, 15:08

You need to write something large. Small things don't really teach you anything. Write something large, hard, something that will need to be maintained, deployed for real.

I heard a term "used in anger" that I now use a lot. I don't get the feeling anything you have posted here has ever been used in anger.

Ricky Permalink
December 08, 2009, 15:08

Hi! Just FYI... The link under the Bash History Cheat Sheet points to the Bash Emacs Editing Mode Cheat Sheet

December 08, 2009, 15:27

@James : I have to disagree. Small things can teach you a lot. So can big things. They're apples and oranges.

December 08, 2009, 15:27

You need to write something large. Small things don’t really teach you anything. Write something large, hard, something that will need to be maintained, deployed for real.

There is no benefit in writing something "Large".

What you really want is to write something flexible, and usable, and modular, and package it in such a way that people depend on it for future projects like we currently depend on many many many libraries in Linux.

Rewriting lots of your githubbed stuff to CPAN Modules would be beneficial for this, as well as writing comprehensive test suites for those modules and uploading them to CPAN. This gives you the responsibility of code maintenance, as people will report bugs they find, expect them to be fixed. People will submit patches. CPAN Tests will also fail (not might, *WILL*, I'm certian of it, its a constant battle to make them go away ), and you might decide to try gaming Kwalitee. And your code becomes useful on many more platforms to many more people as a result.

December 08, 2009, 15:45

James, I will start working on larger ideas soon. I didn't tell that in the original article but I have quite a lot of them. I just updated the article to reflect my thoughts on my future work on larger projects. This will take me to the next level.

December 08, 2009, 15:46

Ricky, thanks, I fixed this bug.

December 08, 2009, 15:51

I wish there were some cool DNS protocol hack for ADNS, but it turned out to be gethostbyname()

December 09, 2009, 17:50

thanks for posting this for two reasons:

1) it's interesting to see what you've been doing
2) i've been trying to remember your URL/name/site for weeks to find your math video lecture reviews :)

Abhijith Permalink
December 12, 2009, 07:31

Wow! Great work! Do you sleep at all? :)

June 29, 2010, 21:18

@Peter how can you say that this project didn't take any effort at all? this projects are so great!

December 12, 2009, 10:23

Abhijith, sure I do. These projects didn't take any effort at all.

Leave a new comment

(why do I need your e-mail?)

(Your twitter name, if you have one. (I'm @pkrumins, btw.))

Type the word "computer_184": (just to make sure you're a human)

Please preview the comment before submitting to make sure it's OK.

Advertisements