JavaScript base64_encode

This is where all the trouble began. Back on July 19th this year I commented on the base64_encode function over at phpjs.org letting them know about a bug in their function whereby they were encoding as UTF-8 (whatever that means) prior to doing the Base64 encoding, which is a bug. Anyway, I had to patch the code myself for its use in pccipher and after several months no-one at phpjs has fixed up the implementation. So, that makes me mad, and when I’m mad, I fork!

I forked ProgSoc into ProgClub, and now I’m forking phpjs.org into jsphp.co. Both times it was because there was something going on that gave me the shits and I felt as if I could do a better job. So far I’m really pleased with my results. One great thing about forking is that it encourages the other party to lift their game. I wouldn’t be surprised to see phpjs.org improve its features after they see what I’ve done with jsphp.co.

Update: I ended up fixing that base64_encode function. My notes are in the comments.

jsphp.co developments

I’m working on my jsphp.co web-site. I haven’t deployed my latest changes yet, so there’s nothing there on the main web-site just now, except if you head over to checkout the development area which has all my latest changes. Basically over the last couple of days I’ve added support for:

  • Home page
  • Category listing
  • Function listing
    • View function, tests and benchmark with linkable line numbers
    • Edit function, tests and benchmark with summary
    • Test the code using QUnit
    • Benchmark code and compare versions
    • List revisions and view, edit or change the release status
    • List developers including local and upstream contributors
    • Comments on functions or tests (incomplete)
    • Link to features, such as code downloads or the phpjs.org implementation
    • Administer the function
  • Contributor listing
    • Lists local contributors
    • Lists upstream contributors
  • Licensing info
  • Downloads
  • Links to other web-sites
  • Contact information
  • System administration
    • Manage categories
    • Manage functions
    • Manage users
    • Manage upstream developers
    • View errors

There’s still a little bit to do. Basically I need to review the entire code base for HTML injection and XSS vulnerabilities, I need to fix up the commenting subsystem to allow for editing and creation of comments, I need to protect from some changes (e.g. only administrators can release a function version), many of the forms need better/reviewed workflow for errors and omissions, there needs to be a facility for adding and removing upstream developers, and that’s about it. Once I’ve got those planned changes done I’ll release the latest version of the site and begin the process of importing the phpjs.org code base.

Programmers’ Club

Due to my blatant SEO hacking ProgClub has finally made it to page 3 of search results for programmers’ club. Go team! :)

ProgClub aspires to be *the* Programmers’ Club. So first we get page 3, then we get page 1, then we get first result. Sound like a good plan?

You can help by blogging about ProgClub or linking to our Programmers’ Club page from your blog or your web-site. The text of your link should be “Programmers’ Club”, and you should link to the http://www.progclub.org/wiki/Programmers’_Club page.

p.s. We’re on page 2 for good programmers’ club and we’re on page 2 for the programmers’ club (page 1 in Australia: the programmers’ club).

p.p.s. I posted some more information on how I went about the SEO process.

p.p.p.s. I followed up with some more commentary about the best way to link to ProgClub.

What sort of a friend are you?

I started cataloguing my links, and I have a blogs section. This created a problem: how do I list people here? Do I do it chronologically? Alphabetically? What? I decided to list people based on how well I knew them, and how close a friend they were. I guess that sucks if you’re down the bottom of the list, and I’m very sorry about this, but *someone* had to be on the bottom of the list. I don’t want people to feel unloved, so I’ve set up some ranking guidelines, and they are like this:

  • If I’ve slept with you, then, ranked on how recently I’ve slept with you, then alphabetically by username. No-one is in this category, yet.
  • If I’ve lived with you, then, ranked on how recently I’ve lived with you, then alphabetically by username. No-one is in this category, yet.
  • If I’ve been to your wedding, or your buck’s party, then alphabetically by username.
  • If we’ve been on holiday together, then alphabetically by username.
  • If I’ve been to your birthday party, then alphabetically by username.
  • If we’ve drunk beer together, then, ranked on how much beer we have drunk together.
  • If I’ve met you in person, then, ranked on how many times I’ve met you in person.
  • If you are a ProgClub member, then alphabetically by username.
  • If you’ve helped me, then ranked according to how much you’ve helped me.
  • If I’ve worked with you, then alphabetically by username.
  • Otherwise, alphabetically by username.

Of course, if I don’t really like you, I will chose a username of yours that is ranked lowest, alphabetically. :)

p.s. If you’re on my blog roll, I am your friend!

Advice From An Old Programmer

Just recently I read Zed Shaw’s Advice From An Old Programmer, and in it he says:

I’ve been programming for a very long time. So long that it’s incredibly boring to me.

That’s been in the back of my mind for a few days, and something I’ve been thinking about as I hope for people to join ProgClub. It seems to me that the longer you program the less you are interested in programming. But, it takes time to be a good programmer, so the better you get, the less interested you become. ProgClub wants first and foremost people who are *interested* in programming, and secondly it wants people who are *good* at programming. Though it doesn’t seem like there are going to be that many good programmers out there who are going to have the time or the interest for ProgClub. Which means that ProgClub’s best bet is probably to encourage participation from enthusiastic beginners.