dannyman.toldme.com


Technical

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.)

Share this:

Read More

Next:
Previous:
Categories: Technical