GLFT_Font: Simple Font Drawing in OpenGL

If everything goes as planned in about 11 weeks I’ll graduate from RIT which means no more depending on RIT email or web space.

The most accessed public resource that I have on an RIT server is GLFT_Font, a very simple C++ library for drawing text with TTF fonts using OpenGL.  Despite it’s age I still get the occasional request for help or thank you letter, I certainly didn’t want to let it fall off the internet altogether in May so I’ve put up a new page about GLFT_Font in the new code section of polimath.

The old page (http://www.cs.rit.edu/~jpt2433/glftfont/) now redirects here.  I do still answer questions about GLFT_Font despite it’s age, and I’m happy to accept any patches or contributions that any users may have.

Popularity: 5%

TODO: design a better todo

A Peek Into My Life

  • pack for upcoming DC trip
  • get haircut
  • exchange book at Barnes & Noble
  • finish reading The Universe in a Single Atom
  • confirm w/ someone that policy seminar will count for minor capstone
  • come up with a better system for organizing all of these things I need to do

I’ve been having discussions lately with quite a few people gathering my thoughts and theirs on what can be done to make an improved todo list application.  One of the tough parts of making a good todo list is that it that everyone’s mind is organized differently and therefore everyone seems to have different ideas of how a todo list should be organized.  Are tasks organized via projects, categories, tags, sub-tasks?  Do tasks have due dates? Can a task be recurring? What about priorities? Is there a need to estimate how long a task will take?

Everyone has their own answers to these questions, and because of this there is probably a new todo app created every day.  If you hadn’t already guessed this post seeks to explore the idea of making one more.

A Crowded Field

I’m well aware that there are a number of popular todo lists that are already available.  I used the extremely simple TaDa List for a while, for a long time I was a fan of the full featured Voo2do even spending a bit of time doing some email tech support for it’s creator.  Seeking better Google integration among other things I recently gave Remember the Milk a try but found it didn’t really match the way I think of todo lists.  I’ve taken a look at various others but they didn’t hold my interest as long as these three.  I suppose in the interest of completeness I should also mention my own efforts to keep organized using Tomboy notes and a personal wiki.

There are tons of todo lists out there that are extremely simple, little more than bulleted lists, occasionally with due dates attached.  There are quite a few that attempt to go in the other direction, offering countless features that are only useful to a select few (such as google maps integration or integrated time tracking).  There are also many out there that save their best features for paying users.

 What Now?

My issue with all of the above is that using a todo list should add value with minimal effort.  A bulleted todo list can easily be replicated on paper, in any text editor, or in Google docs or a personal wiki.  I really think that there is little reason to sign up for and learn to use an additional service to keep track of a bulleted list.  What I want from my todo list are powerful views on data that is easy to enter.  I want to be able to ask my todo list “what can/should I be working on now?” Ultimately this is the fundamental question, the reason we enter priorities, due dates, or can arbitrarily order our lists via fancy drag and drop interfaces.

The entire point of having a todo list is so we can always have a grasp of what is happening in the near future.

The problem then, is if our todo list offers an incomplete view of the near future.  If our todo list only has those tasks that we take the time to painstakingly enter and assign priorities to.  If our todo list only has those items that can easily be categorized and assigned a due date.

Rule 1: A todo list should be extremely easy to add to

A lot of the leading players get this right, requiring the minimal amount of information, and allowing for additional info to be added later.  Also falling under this rule would be making information as easy as possible to add through nice features such as flexible formats for entering due dates.  Making the interface nice and intuitive and allowing for things like emailing of tasks all increase the probability that a user will actually take the time to enter a task.

Rule 2: Not every item has a due date, but usually we have an idea of an approximate period in which we want something done.

Let’s look at my todo list, when is the due date for “pack for DC trip”?  Well my flight leaves around 7am on March 3rd, so perhaps 6am?  No I want to be packed the night before probably, so sometime this weekend would be good (perhaps instead of writing this blog post?)  Even harder would be getting a haircut or finish reading the Dalai Lama’s book.  Work tasks often are due within a week or so, but without a specific due date. When I’m back in classes in a week I’ll have more tasks with very specific due dates.

Nearly all of the existing offerings have two options for due dates, a specific day or no due date at all.  But in reality no due date at all might mean “this week” or “whenever I get a chance.”  In my discussions with people I’ve heard two common rebuttals to my claim that this distinction is important.  ” If something should be done this week, just put in the last day of the week” is a fair compromise, although I feel it unnecessarily overloads the meaning of a due date.  Perhaps “whenever I get a chance” is best left without a due date, but I find it is useful to at least set a general goal of when I’d like to finish a book by, if for no other reason as to keep me on track.

Now it’d certainly be nice if someone would come along and improve their todo list to support the concept of fuzzy dates.  Sadly not enough people read this blog for me to believe this is going to magically happen, so I suppose I’m stuck doing it myself.  My design skills are rusty so that part will probably take me a while (any volunteers are of course welcome).  Comments on what makes a todo list worth using or pointers towards a great todo list that’ll make me doing this pointless are of course welcome.

Continue reading →

Popularity: 15%

New RITDemocrats.com

I’ve spent a bit of time the last couple weeks polishing the new RIT Democrats website.  It’s now up, and I pulled in the old posts which I was putting off but ended up being rather pain free.  I even made a little tiger-donkey logo. (RIT’s mascot is a tiger)

A lot of my political posts will probably be posted there in general for the time being, I’ll probably cross post some things, but if you’re one of the 2-3 people that actually reads this blog for political content, I figured I’d mention it.

Why getting a better website together wasn’t a priority when I was actually in charge of the club is sort of a mystery.  I suppose the revitalized interest in the club due to this being an exciting election year really helped, as did finally having my own server and the original domain name being available again (the club owned it in 2004 but it lapsed and was being domain-squatted).

Popularity: 3%

gambling on capital punishment.. the only winning move is not to play

I was recently asked the question “Would you rather an innocent person be executed or a guilty person freed to kill again?” in a debate on the death penalty.

This seems a common enough question in such debates that I’ll attempt to actually answer it despite the fact that I feel it is a terrible question (among other things it assumes that all murderers plot to kill again, neglecting crimes of passion and human potential for remorse, it also neglects the option of a prison sentence which I will address).

For the sake of argument let’s take a look at the two options provided:

Option A: Put them to death.

  • innocent: The real killer is still free and not being pursued (negative). The state has killed an innocent person, doing the very thing which it is condemning (negative).
  • guilty: the public is safe from this individual (strong positive). The state has killed a person (neutral).

Option B: Free them.

  • innocent: The killer is going to still be free but is still being actively pursued (neutral).
  • guilty: The public is in danger presuming the murderer may kill again. The killer is still being pursued so the person may be caught again. (negative)

The best outcome possible given these options would be A-guilty.   In the other three options the killer is still free.

Let’s assume that no matter what, if free, the killer is going to kill 3 more people. A-innocent is the only option that results in 4 deaths. The first suspect dies at the hands of the state, which regardless of how you feel about the death penalty is a tragedy when the person is innocent. Option A therefore is a high-stakes gamble. It could end the killing, or it could result in the worst possible outcome. Option B leaves the killer on the loose, but both options involve continuing the search. It is possible that after 1-2 of the following killings the killer will be caught, even if it was the person captured the first time. These options are much lower risk.

Personally, the thought of the state killing an innocent person is so repugnant that I would choose B over A. But this is a matter of individual conviction.

As I mentioned however, this is a faulty question as it leaves out the more likely alternative:

Option C: Jail them for life.

  • innocent: they will spend time in jail until they either can prove their innocence or die (negative, but less so than killing them).
  • guilty: the public is safe from this individual. (strong positive)

C-innocent is somewhat worse than B-innocent, as an innocent person is in jail for some amount of time, and probably during this time the real killer will have the opportunity to strike again. C-guilty however is much better than B-guilty as it puts the criminal away.

The ranking of the possible outcomes is:

  • Criminal is captured/punished: A-guilty, C-guilty (the ranking of these depends on your view of the death penalty)
  • Criminal is not captured, nobody is punished unjustly: B-guilty, B-innocent
  • Criminal is not captured, innocent person is jailed: C-innocent
  • Criminal is not captured, an additional life is lost: A-innocent

B-guilty and B-innocent are almost equal as in both cases the search continues and so the guilty will eventually be caught (most likely the person if freed under charges of insufficient evidence will be closely monitored).

Which is the better outcome between A-guilty or C-guilty is determined by one’s view of if the government should use capital punishment at all. Both seem better than a murderer on the loose however.

There are a myriad of other effects outside the immediate scope of the trial, for instance capital punishment of a successful criminal (A-guilty) may be a deterrent. Capital punishment of an innocent criminal (A-innocent) may damage the legitimacy the judicial system in the eyes of the public.

A rational evaluation however does not seem like the law should include an option whereupon the execution of an innocent person would take place. Therefore Option A would be thrown out unless there is a case in which one can say with 100% certainty that the suspect is indeed the culprit. Limited examples to spring to mind, but DNA evidence or even a confession do not constitute 100% as various cases have shown.

Mass murder as seen in genocides and terrorist attacks on civilian targets often has a highly identifiable culprit that does not fear but rather revels in their spotlight. In these cases 100% seems like a fair assessment of their guilt.  Despite the fact that these cases also correspond to the most heinous of crimes, I would encourage people to use this reasoning as a basis for their support of the death penalty in such extreme cases.

Justice must be based in reason and not in passion or indignation at the act committed.

edit: Discussion that ensued leads me to realize I should clarify that I am well aware the game-theory approach taken here is oversimplified, for instance it would be proper instead of choosing a fixed number of subsequent killings to have some sort of probability.  I chose a constant murder rate because the question initially posed assumes one.

Popularity: 4%

C++: I’m not coming back

For a long time my primary language was C++. I know this is uncommon for someone of my age (21) but C was actually the first language that I learned. (Keep in mind although this wasn’t that long ago, it was hard to find good advice online so I bought a book on a language I’d heard was commonly used and spent a couple months digging into C.)

When I went to college I had to learn Java, on my own I got into Perl, Python, and Lisp. I fooled around with PHP, learned to respect Javascript as a real language, and even wrote some Ruby. When it came time to explain what I did to my then-girlfriend it was Python not C++ that I helped her write a small game in.

Despite all of this linguistic infidelity I have faithfully kept up to date on C++, following the draft standard and reading Herb Sutter’s fantastic GotW. But something that’s been coming a long time happened when I read GotW #88: A Candidate For the “Most Important const”.

In this posting he discusses the difference between assigning to a const reference and a non-const reference. Spoiler alert: in the examples he provides it is only legal to assign to a const reference.

I’d actually played around with this “feature” so I was still able to follow along, and then it hit me. I simply don’t care.

I used to think that part of programming was memorizing these syntactic quirks (be sure to put a space between the >’s in a nested template declaration!). As a C++ developer I always kept them in mind but accepted them, surely other languages must have their own. I suppose this is still true, and a handful of others do come to mind.. but what has changed in my way of thinking is that they are a necessary part of a language.

So getting down to what I need to say.. C++, I know when I put you down years ago I said I’d be back - that these other languages were fun but you were the one for me. I just think we’ve grown apart, it’s best we both move along. It’s time I made an honest language out of Python and admitted I’m a Python programmer.

Popularity: 6%