Saturday, June 26, 2010

Neocubes mini review

I can't remember what I did before I carried a Neocube around with me. I must have waited quietly at doctor's offices, staring blankly at the walls or perhaps skimming the ancient magazines. Now, I simply pull my Neocube out of my pocket and begin constructing a polyhedron. If I don't have long to wait, I'll wrap the chain of spheres into a solid tetra- or icosahedron. If the other waiters are glancing at watches and complaining about the wait, I'll attempt a modular dodecahedron or a wireframe truncated icosahedron. I can fight off boredom for hours when I have my Neocube with me.

However, I'm not the only one to enjoy playing with a Neocube. Every person to which I've shown my Neocube, from little kids to my own Grandpa, has been mesmerized. Some people make jewelry, some construct flat shapes, and some just like coiling the chain of magnets, but everybody enjoys playing with them. My extended family liked playing with my Neocube so much that I purchased a big batch for gifts.

Neocube is one of the best pocket-sized time-waster I've ever seen, comparing favorably in wait-time compression with the iPhone and iPod Touch. If you want to have a 'cube of your own (and send me some pocket change), you can buy one from Amazon for only $16 (at last check). Don't miss this deal!

Thursday, June 24, 2010

You. Will. Be. Cancelled!

The words popped up every few sentences, turning the already repetitive lecture into a free-form poem of dullness. The comptroller missed no opportunity to remind students — in broken English — that there would be consequences for missed late payments, including cancellation and late fees. He loved to use the phrase "It's gonna cost ya!" to emphasize that the comptroller's office would be more than happy to take your money.

The USF comptroller's presentation dragged on for an eternal fifteen minutes before the incident. The comptroller asked a simple question about the repercussions of a missed deadline, expecting to answer it a second later. Instead, a student in the balcony shouted "You. Will. Be. Cancelled!" and laughter rippled through the auditorium.

Suddenly, the atmosphere of the lecture changed completely. When the comptroller concluded the answer to his own question with "You might be cancelled," the audience burst into laughter. He immediately recognized his newfound catchphrase and began using it to spice up his presentation. He loosened up, and the students began listening intently to wait for the next catchphrase. When he concluded his presentation with "Don't get cancelled!" the entire audience applauded loudly.

In my opinion, this dynamic lecture was the highlight of the whole orientation.

Sunday, May 30, 2010

Porting OpenInkpot: the Hanlin V3

Ten days ago, I received device that will monopolize my summer: the Hanlin V3. The performance of this e-reader — or rather the lack thereof — is the primary motivation for my project. According to the OpenInkpot community, this device has a slow processor and little memory. My project's goal is to reduce the memory footprint of OpenInkpot in order to improve its performance on devices like the V3. I decided to purchase the V3 to better empathize with the benefactors of my project and to help motivate myself. If I want a faster e-reader OS, I must build one for myself!

I'd like to write about the V3 soon, but I haven't used it enough to make a fair assessment. Thus far, it appears that the device deserves its reputation for sluggishness; however, I won't speculate on the source of the poor performance. I'll write more later.

Monday, May 10, 2010

GSoC project status update

Now that I've finished this semester's final exams, I've started working on my GSoC project: porting OI to uClibc, the featherweight C standard library. I'll post project updates periodically, saying what I'm doing and relaying what I've learned. I promise they won't all be this boring.

The first step of my project is adding my new architecture, Linux based on uClibc, to dpkg, the foundation of the Debian package management system. dpkg plays a part in packaging code, installing applications, and compiling binary packages; it's a very important tool. Before I start modifying dpkg, I plan to learn about dpkg and the relevant build systems; I'm starting by reading the Debian New Maintainer's Guide.

Thursday, May 6, 2010

I'm a GSoC student!

After months of hard work, I was chosen by the OpenInkpot organization to port OI to uClibc. I will be spending my summer reducing the memory OI consumes to allow it to run on e-readers with little memory. If you're curious about the Google Summer of Code, check out the official FAQ.

Friday, April 9, 2010

Port OpenInkpot to uClibc

This GSoC proposal is for OpenInkpot, a Debian-based e-reader OS.

Project proposal

I plan to port OpenInkpot to the lightweight uClibc C library in order to improve its memory usage. Here are some of the other benefits this project could provide.

Possible benefits

  • Increase number of devices on which OI could run
  • Improve performance
  • Decrease compile time
  • Reduce firmware transfer and installation time
  • Simplify porting OI to other architectures

Plan of action

Follow these instructions for porting IPLinux to a new architecture.

  1. Acquire target device (my own e-reader!)
  2. Add new architecture identifiers (uclibc and ucarmel) to dpkg.
  3. Build and package toolchain for new arches.
    • Cross-compile existing packages to new arches with toolchain, starting with most important packages
    • Build and test firmware once the necessary packages (uClibc, dpkg, and BusyBox) have been packaged
    • Test packages on device with chroot
  4. Test complete firmware and allow autobuilders to start porting packages to new arches

Background

Programming experience

I've been programming for about two years. I've primarily used five programming languages: Javascript, PHP, ActionScript 3, Python, and C++. I've finished several small independent programming projects, but two in particular have taught me important lessons.

Last fall, I created an example game for Pygame2, a low-level Python wrapper for SDL. The game ran, but it was worthless as an example because my clumsy graphics abstraction obscured the underlying Pygame2 graphics calls. From this failure, I learned to never lose sight of the purpose of my project. My initial announcement for the flawed example.

Earlier this year, I decided to rewrite my Flash app for drawing snowflake patterns with Javascript and SVG. Once I chose the right data structure, the whole library fell into place. This project taught me that few programs must be complex; with enough thought, you can find a simple solution to many complicated problems. Read more about the SVG snowflake micro-library.

Personal qualities

I'm hard-working
When I am assigned a task, I feel compelled to do it as well as I can. I find it difficult to walk away from an unfinished task.
I'm self-motivated
Events in my life have taught me to work independently and seek out my own answers. When I discover a problem I don't know how to solve, I start looking for a solution. I check any relevant manuals, search for tutorials, look for examples, and — if I still haven't found a solution — ask for help. Finding answers on my own gives me a feeling of satisfaction and accomplishment.
I love programming
Writing code is my favorite hobby, and I will someday make it my profession. I'm not participating in the Google Summer of Code because I really need the money or I want another bullet point for my resume; I'm participating because I want to create software and learn more about software development.

Open-source experience

In addition my recent OI patch, I've spent some time working with Pygame2. While developing an example game with the unstable development version, I found, isolated, and reported several bugs.

GNU/Linux distributions development experience

I've used Ubuntu for about a year, learning much about Linux and Debian. I've become proficient at finding, installing, and upgrading Debian packages. I packaged my first .deb and started my own repository in order to test my fix for Ticket #834. I've compiled my share of source code, and I'm familiar with the GNU build system as both a user and a developer. I've written several bash scripts, and I'm comfortable with the major Unix commands and concepts. I've even spent some time configuring and troubleshooting the GRUB bootloader.

Kernel hacking

Unfortunately, I haven't worked on the Linux kernel yet.

Replace dap-server WWW Interface

Below is my GSoC proposal to OpenDAP, the developer of a scientific data server. You can see the official proposal here.

Have you contributed to any open source projects in the past? If so, which ones?

I've worked two open-source projects other than OpenDAP: Pygame2, a low-level Python SDL wrapper library; and OpenInkpot, a Debian-based e-reader OS. While developing an example game with Pygame2, I found, isolated, and reported several bugs. In preparation for my OpenInkpot GSoC application, I added a feature to OpenInkpot, closing Ticket #834.

What are your other summer plans?

I plan to go on a vacation with my family for a week or two. I'm not taking any college courses, and I have no other commitments.

Where are you going to school?

I've graduated with highest honors from Broward College with an Associate in Arts degree, but I'm still picking up some prerequisite classes before I transfer. I plan to pursue a BS in Computer Science at the Massachusetts Institute of Technology, the University of Florida, or another school — I haven't decided yet.

Have you used any of our software in the past? If so, which?

My first experience with your software was installing Hyrax from source (from this branch.)

What experience do you have that's relevant to your project?

Code

I've been programming for two years. Writing code is my favorite hobby, and one day, it will be my profession. I love to develop software, and I read everything I can to improve my skills.

Examples

Javascript
Javascript snowflake SVG micro-library
JSON Javascript slideshow
C++
I've taken a college course on C++, and I've read Effective C++, but I haven't published any C++ code yet. If a code sample is required, I could send you one of my class projects.
Shell scripting
OpenInkpot patch
Several system utilities for my personal use

Website creation

I've developed more than ten commercial websites from the ground up. I'm proficient in (X)HTML and CSS, and I'm comfortable with SVG. I enjoy creating simple, usable websites.

Examples

Software development

I've been developing software on Ubuntu for about a year. I've compiled several applications from source, and I'm familiar with the GNU build system as both a user and a developer. I'm comfortable using the major Unix commands and chaining them together into useful shell scripts. I've used both SVN and Git to retrieve and commit code. I have all the necessary skills to collaboratively develop software.

Project proposal

I plan to replace the dap-server WWW Interface with a more intuitive data request form.

Plan

  1. Remove WWW Interface from dap-server
  2. Create new BES module for generating data request forms
  3. Design intuitive HTML form for constructing data request URLs
  4. Write server-side form generator
  5. Write Javascript to read user input, construct request URL, and send data request
  6. If I have extra time:

    1. Write server-side data request generator to improve accessibility
    2. Add JSON format to dap-server to simplify Javascript metadata access

Goals

  • More logical, easier-to-use interface
  • Simpler, more readable code due to separation from dap-server
  • Greater accessibility with semantic XHTML form

Execution

  1. BES receives request for data specification form
  2. Request is sent to form-generation module
  3. Module generates data-specific data request form
  4. Form is sent to user
  5. User specifies desired data through form
  6. Javascript constructs data request URL
  7. User clicks on generated link
  8. BES receives data request and sends it to dap-server
  9. dap-server returns requested data

Why not Ajax?

  • Server-side caching
  • Greater speed
  • Fewer HTTP requests
  • Easier to implement