Code
TI-83 Addition
Aug 1st
I’ve added a section to the site called “TI-83″ which contains just a couple of programs I’ve written for my graphing calculator over the years. A lot of these I wrote when I was in high school to assist me on quizzes and homework for algebra II and pre-calc. I’ve been finding myself relying more and more on my graphing calculator recently to solve complex equations–most recently was the Bernoulli Trials equation for my Discreet Mathematics class. Last session in school I damn near wrote a program that solved systems of equations using the Gauss-Jordan method, but then I realized that my graphing calculator already did this for me, so a program was not needed.
They’re all pretty small, but they might be worth grabbing. You’ll have to use your best judgement on using special math characters since keyboards and HTML don’t have them available for input/display. So for example instead of the square root sign that would normally be in a program or on a graphing calculator, I used “sqrt” and for something like the Greek letter Theta, i used <THETA> or (THETA). So the programs won’t port DIRECTLY into your calculator, you’ll have to use your discretion to make any modifications necessary.
Enjoy! *pushes glasses back up on nose with a single finger*
Templatize Tool
Jul 18th
I recently wrote up a template engine tool called Templatize. It started as a tool for my girlfriend so she could quickly generate HTML pages from CSV rows for use on eBay, but then quickly grew into a more robust template tool.
Basically it takes a set of input data, containing multiple entities (rows), each with multiple properties (columns), formatted from some type of delimited text file. Then it takes in a master template file and spits out multiple “data-injected” versions of that template.
View the full page here.
CTask-Lite on GitHub
Jul 2nd
Alright, I’ve finally put my open-source project website woes to rest. I successfully published the first version of CTask-Lite out on GitHub. It can be found here: http://github.com/cdunlap/ctask-lite
CTask-Lite is an easy to install, configure, theme, and use task management system. It is aimed at tiny teams working on ‘open’ projects. What I mean by open is that they don’t care who sees what (because there is no user/role management capability in it).
The Wiki for CTask-Lite is here: http://wiki.github.com/cdunlap/ctask-lite
Spread the word! Download it, use it, mangle it, hack it, fork it, etc.
Why is open source project hosting annoying and not playing nice with me?
Jul 2nd
I wrote a neat little web-based task system in PHP, jQuery, and SQLite last night and wanted a place to put it so I could give it to the world (and maintain my source code).
I checked out Google code, where I have placed several projects of mine. I successfully created a project, but when I’d try to check in the code, the SVN server wasn’t available. At the same time, I’d try to click the “Source” tab on the project that I just created and I’d get an HTTP 500 from Google (which is incredibly rare). So I marked that project for deletion from Google Code.
Then I went over to Source Forge. Source Forge is having issues. I couldn’t get their site to load at the time that I tried, again, HTTP 500 errors. Though I did get an email from them a few days ago saying they were going to be pushing a new UI to their site soon. The email said the service interruptions were only going to be for a few minutes at the most. Lets just say it was more than a few minutes, so I scrapped that idea.
Then I remembered a guy at work recommended GitHub. I’m really new to Git and so far I don’t like it. I find it more difficult to use than SVN–though it is faster by far. So I get the code put up on GitHub just fine, but now I can’t edit the repository details in the admin area. Every time I try to change the project website or description it responds with “Name is already taken”. Ok, minor annoyance. Ignoring that, I went over to the downloads area to upload my ZIP containing the final v1.0 build of the project. It gets 100% done and then I get a HTTP 500 from GitHub. I try to go back to the project page but now I’m getting a HTTP 500 error anytime I try to do anything with my project. Not all of GitHub… my project page. I seem to be the only one affected by this.
So, I’m a bit frustrated at the moment. I guess I’ll start working on one of my closed-source projects and call it a night.
1 little 2 little 3 little endians… er wait, is it 3 little 2 little 1 little endians?
Jun 22nd
Well, it depends on what encoding you’re using.
Lately I’ve been in “endian-ness” hell on a project I’m working on. Well, not really a “hell”, more of a hurdle that can easily be overcome. A friend of mine recently asked me the difference between the two binary encoding strategies and when I went to explain it to him (via cell phone txt messaging) I quickly realized that I will run up both our bills pretty quickly by doing so. So here’s the quick rundown, and an example as it applies to the project I am working on.
Big Endian means that value is stored “from left to right”. The most significant values (bytes) are stored in memory with the lowest address first. This is probably what many people are familiar with, especially those in the networking field. Here’s an example of data stored as Big Endian:
Take for instance the 2-byte value 1325, equivalent to a short or unsigned short. Stored in Big Endian encoding, the value would look like this in binary: 00000101 00101101. Makes sense right?
Now here is the same 2-byte value, 1325, in Little Endian encoding: 00101101 00000101. The bytes are flipped and thus to make any sense of it, you must read the last set of bits first.
So for simplicity’s sake, Big Endian values are stored like so:
<byte1> <byte2> <byte3> <byte4> ... <byten>
Little Endian values are stored like so:
<byten> ... <byte4> <byte3> <byte2> <byte1>
Network devices use Big Endian, it is considered the network standard, or “network encoding”. Endian-ness varies from CPU to CPU depending on its architecture. Power Macs use Big Endian, network devices use Big Endian. Intel PC’s (and Intel Macs) use Little Endian. What does that mean? Well, it means that if a program running on a Power Mac sends data to a PC, the PC may not understand it correctly without some type of encoding change taking place.
In my situation, I’m reading a series of values off of the network, all coming in via a byte stream. So the client will send the following packet for example:
4 bytes, 2 bytes, 1 byte, … and some others but I won’t get into them
So when I read the first four bytes off the network (which uses Big Endian encoding, remember?) I must flip the entire set of 4 bytes before my Little Endian PC can understand it. Same goes for the next 2 bytes. The single byte obviously doesn’t need to be flipped with anything, it stands alone. So an incoming set of data may look like:
0x1A 0x2B 0x3C 0x4D 0x2A 0x2B 0xAD
Now I must flip each set of values byte by byte (but not invert the entire thing; this is a packet, containing multiple values).
In Little Endian, the same set of data reads:
0x4D 0x3C 0x2B 0x1A 0x2B 0x2A 0xAD
Confused yet? You’ll figure it out. Here’s some reading that should help: http://en.wikipedia.org/wiki/Endianness. It even gets into the origins of the word, which is pretty interesting. Here’s a little tool that may help you understand the pattern: http://dlnova.com/reverseendian.htm