lnk.to Progress Modest
I keep messing with how the database table should work, and I had a hard time figuring out how to create a new key within a class referring to an object that I am hash-tieing to the lnkto table with Tie::DBI, but the good news is, that I’ve actually gotten started. It is a little frustrating at the moment, but the knowledge that I am building a class that will make writing the actual web site so much easier is good for morale.
Oh, and I have tuned the rewrite rule so that it will be easier to add static HTML and additional cgi files to the site, because only URLs that match \w+ will get redirected:
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^/(\w+)$ /redirect.cgi?key=$1 </IfModule>
So:
http://lnk.to/foo will be handled by redirect.cgi?key=foo
http://lnk.to/foo.html will read foo.html
Back to table concerns …
# DROP TABLE lnk; CREATE TABLE lnk ( -- Unique numeric ID (auto-increment) `id` INT UNSIGNED NOT NULL auto_increment, -- The URL key. Not unique perse, but would be unique per chainId -- Can be null, when we're first creating the Lnk. `key` VARCHAR(16), -- The payload. Definately not null! `url` TEXT NOT NULL, -- "publication date" of an item `pubDate` DATETIME, -- date item added to Lnkto `addDate` DATETIME NOT NULL DEFAULT 'NOW()', -- HTML TITLE tag but should be user-editable `title` VARCHAR(128), -- META description `description` TEXT, -- We'll eventually handle "add from feed" type chains ... -- 'hilite' is an idea where you could hilite a Lnk into your own chain -- ... basically a reference thingus `source` ENUM('feed', 'manual', 'hilite') DEFAULT "manual" NOT NULL, -- Which chain we belong to. For now, only 0 `chainId` INT UNSIGNED DEFAULT 0 NOT NULL, -- Numeric ID of "author" which will ref another table, with author -- name, email, etc. Can be useful for "tipping" and some day crafting -- suggested reading `authId` INT UNSIGNED DEFAULT 0 NOT NULL, -- For classic lnk.to, we like to keep score, which is roughly +1 per -- clickthrough, divided by 2 every night. `score` FLOAT UNSIGNED DEFAULT 1 NOT NULL, UNIQUE ( `id` ) );
It is a work in progress.
Oh, and Firefox “tab sessions” rock, because you can create a “dev” window with a bunch of appropriate tabs in there, and then save that tab set in a session when you go home, and reload it the next day. A great complement to the screen command!
Another note, it may be a very healthy work style to comment on progress here in the morning, and let the hindbrain think about things during the day. I do the dev work “after work” at the office, after 3pm, when my shift formally ends. (Though, I’ll still kick the occasional work ticket when I need a break.)