Recent blog entries for ClimbNorth

17 Mar 2008 (updated 17 Mar 2008 at 04:55 UTC) »

It's been.. about 4 years now since my last post. I have since graduated school, taken a few jobs, and now I'm freelance developer. I have worked with a handfull of technologies and learned a lot about the real world of software development. In the past few years I have worked on great projects- so many I can't list them all. The most rewarding ones were the ones that seemed so impossible from before I start working on them. Here are some of my 'speed coding' projects that I completed under the gun that worked flawlessly on first implementation- and are still in production today without change (well, last I heard):
Grid App: I was tasked by the CEO of a former company at about 7pm to create a windowing application that manages a set of fields and places them into an area for the web designers to be able to visualize theme easier (they worked exclusively with CSV so the application would write direct to CSV to save the area dimensions). I had not worked with MFC in over a year at that point and had never really worked with many of the controls to the point where I was comfortable. I designed and built the software exactly to the specifications and was completed by the next morning flawlessly. Unfortunately the end of that story was not so fun- the person who tasked me the project was not satisfied (with his own design- because I would have made it differently if I were instructed) and the project was canned (that same day- go figure).
Siteminder Proxy: I created an ISAPI extension that acted as a proxy server for Siteminder authentication- again in record time. From concept to implementation it took about a day and a half. I had heard of and used siteminder before but there are no specs out there for doing what I did- so it was sort of all guess work to get it to work properly. I can't take complete credit for this one because there was some troubleshooting/debugging I had help with.
Mini Language Interpreter: Another project I felt particularly proud of was the implementation of a very silly scripting language used to calculate dimensions of areas in a grid- but in a clever way by creating relations between the other area dimensions. It was not my design, but I made it work- and had implemented it as a drop in replacement DLL for another one that had been in development for weeks. My version was completed in about 2 days- and worked flawlessly where as the original had many bugs and did not correctly implement the logic.
Huge improvements to DirectShow transform filter: This one wasn't speed coding- although it only took a day, it was extremely rewarding to see huge performance gains by doing optimization. The company I was working for had a simple transcoding software built on DirectShow that was grossly shoehorned into their custom programming environment. I took a look around and saw that there was a transform filter that was performing a very simple overlay on frames of video. I decided to take a stab at making it run fast- using intrinsics for simd extension calls, reducing the complexity of the operation that was used, and trimming the area that actually required calculation to the occluded area there were tremendous speed improvements. The first improvement was to measure the affect of rewriting teh application so that it uses optimized structure of the function calls and used faster operators (ex: shift) instead of slow ones (ex: multiply). After this first improvement we saw about 30-40% speed increase! Using pixel packing (pushing all RGBA bytes into register to do single op on all instead of 4 separate ops) using SIMD extensions using intrinsics (intrinsics are C++ functions that do SIMD operations) an additional 70% increase! I then stopped- but after running tests of writing assembly instead of intrinsics- I noticed I probably would have saw another 30% speed increase! The last operation of segmenting the video to only use the filter on the affected areas I did not implement. This part was done by another individual so I am not sure if it was done properly. We did see a small improvement- for an image in the scene that was 1/4 the size of the scene we saw about 20% speed increase. I noticed there are other transcoders that already do this operation much faster but I was very happy with my results from spending some time learning about intrinsics and applying that to a real world problem- speeding up the operations by a huge factor. So the final numbers: Original- 60 seconds, First enhancement- 42 seconds, Second enhancement- 12.6 seconds, Third enhancement- 10.08 seconds. If I had done the assembly version I would have seen 7.06 seconds.

It's been.. almost 2 years since I last posted. I have learned a lot and done a lot since then. Most of which have been projects for school. Currently working on a distributed proxy server of sorts. Short explanation: Make requests to the proxy server. If the requested file can be broken into parts, make sub requests to different number of proxy servers. This project is a part of a study on wireless networks I am doing at New Paltz. By the end of the semester (or possibly this week) I'll have a proof-of-concept command line only version that only requests files one at a time entered manually. By the end of the summer, full GUI proxy server. I was thinking after I have the proof of concept done, might try looking at other open source proxy servers and building on whats already been done. A lot of what I'm doing right now seems to be reinventing the wheel. This whole thing is in C, so I can get a better feel for the machine- memory management, etc. I am taking Computer Architecture right now, thats what inspired me to do this to myself. Thats all for now, hopefully I will post more often, definetely more often than every 2 years.

Just an update because I been ignoring my other projects. I have been porting this water demo to linux that I got from lonerunner (do a google search and you will find his stuff). it's really cool and I hope I can get it to work 100% and then start messing with it. I found that if I wanted to learn opengl, this is a cool way... to look at code that is supposed to be working, and does on another operating system and try to make it work on another. First time I'm trying something like this and I'm finding it very interesting. I feel most times that I am not skilled enough to write my own code that is any good so this is a way to learn more about opengl. Gonna keep this short, just a breif update :-D!

1 Jul 2002 (updated 1 Jul 2002 at 02:12 UTC) »

Hmm... Well I have been codin some simple stuff like I said. Very simple... too little time to have too much fun. Update: I haven't really been working on my friends demo and neither has he really (well he is working on XML parser for the map file which is cool). I have been looking more into OpenGl and made a few simple things like a spinning cube (goal is SHINING spinning cube). I have been messing around with some open source php scripts I found interesting. Webfroot.co.nz made Shoutbox which I put in my friends web page, and modded for my fun. Also played with (forgot the url) b2 blogging scripts also written in php. News blogger that I am gonna start messing with to make my own homepage, which will also have a shoutbox. I spend my time 96% reading, 3% messing around with other peoples stuff, and 1% coding. I notice I was (I think) promoted to apprentice, but I don't feel that I have earned it. Not yet. Another thing I was reading and playing with: Qt. I haven't really decided on Qt yet but I am leaning toward it cuz I want a zaurus, and I would probably want to port my shining spinning cube to that when it's done (I like shining spinning cubes). After I have the shining spinning cube, I am gonna start working on a project my friend gave me and a few people to work on. Well, goals are: 1) have a canvas 2) the canvas must be adjustable in size 3) the canvas is white in color 3) be able to create squares, circles, and triangles on the canvas. 4) these shapes have a black border 5) be able to move the squares, circles, and triangles around the canvas by clicking and dragging. 6) collision detection for all the shapes on the edge of the canvas 7) if a collision is detected, the border of the shape turns red After the cube is done I should be able to do up to step 3 (maybe 4)

hmm.. it's been a while since i last posted here, and I have learned a lot. Lets see, what have I done since! Well not much sad to say. The truth does hurt, but unfortunately school work was the only programming I have accomplished since last post. I have all but abandoned my last projects that are not well coded and were not object oriented, although I am going to cut some of the code out for future projects, because what can I say, I'm lazy. I have been looking curiously at an SDL demo my friend made and when this semester is over (next week) I plan to contribute my own 2 or 3 cents towards a working game demo. Our project (he doesn't like me to say OUR, as I haven't contributed yet) will be a simple role-playing game. His plans of the game are for monsters to be walking around and come attack you. My idea for a first game is more of a Final Fantsy, Dragon Warrior, traditional style of RPG. Easy comparison: he wants Crystalis, I want Final Fantasy 1. I have been having some trouble codeing my homework, but I have a very good understanding of what I want to do. The only problem occurs when I have to write the code. All else I that I have been doing was getting an old DEC Multia to run and toy around with that. I am also interested in creating databases, just because I took a database course this semester. Primary goals for the summer: SDL game demo, play with php, play with DB's.

7 Feb 2002 (updated 7 Feb 2002 at 04:24 UTC) »

Today I signed up for this. I figure it will be a good way to learn and get involved. Thanks to my friend (booyaka) I was directed here. I am very very new to programming. All I know is alittle bit of C++, and some bash shell scripting. to get to the good stuff... I started programming a few games to get some practice. One is a game that you try to guess a number that is generated at random. It was a bit tricky to get the random number but luckily I use Linux and I have man pages and apropos to look up funcions and get a description. Other program (actually bundled with the first one in the same file) is a text adventure. There is no "adventure" part to it yet, but there is a help menu and the ability to walk forward backward turn left, right, and attack. I am gonna just try to emulate other RPG's I've played (exp, rand attack damage, etc.) Well and there is one more lil project that I am gonna "not try" with. In other words, if I don't know how to do it a good way, I'll do it to get it done even if it means writeing 1000 lines of extra code for simple stuff. As I learn more, I won't adapt that program and eventually it will be like a timeline of when I started and how I progressed. That program is gonna be an RPG as well but graphical. Characters representing walls, what you can't see, monsters etc. Move thru. Kinda like the old old version of dungeons of dragons I played on Commodore 64 when I was very young and I MISS IT SO DEARLY! Gotta a "new" version. :p

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!