Jordan, did you have a chance to read all my logic and check out the mySQL
tables? You're one of the guys on here I was hoping to get some
constructive criticism from.

But, if at first read everything looks fine to you, that's all I need to
hear. Either way, thanks!


On Fri, Oct 25, 2013 at 1:59 PM, Jordan Michaels <[email protected]>wrote:

> Cool. I don't think it's compatible with OpenBD so be good to have another
> choice out there!
>
> Warm Regards,
> Jordan Michaels
>
>
> On 10/25/2013 11:53 AM, Jason King wrote:
>
>> Yes sir I have. Using similar principles (run redirectScript.cfm in
>> place of 404 error page).
>>
>>
>> On Fri, Oct 25, 2013 at 1:51 PM, Jordan Michaels <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>>     Seen this yet?
>>
>>     
>> https://github.com/boltz/__**CFShorty<https://github.com/boltz/__CFShorty><
>> https://github.com/boltz/**CFShorty <https://github.com/boltz/CFShorty>>
>>
>>
>>     Warm Regards,
>>     Jordan Michaels
>>
>>
>>     On 10/25/2013 10:18 AM, Jason Allen wrote:
>>
>>         Anybody? I'd really like some input from the community if
>> possible.
>>
>>
>>
>>         On Thursday, October 24, 2013 12:52:17 PM UTC-5, Jason Allen
>> wrote:
>>
>>              Hi Guys,
>>
>>              I've been working on a project for quite sometime, and one
>>         of my
>>              core features is essentially finished.  While I haven't
>> stress
>>              tested it it seems to work great. Along the way, I've had
>>         smaller
>>              questions and I've had them resolved through this
>>         community. Now
>>              that it's all working, I want to look back and make sure
>>         I'm doing
>>              things the best way.
>>
>>              I wrote up an outline of how it all works, and I'm hoping
>>         some of
>>              you can take a look and see if anything design flaws jump
>>         out at
>>              you. If I'm going to change anything, now is the time. If I
>>         can't
>>              find any major issues, I'm going to push this out for a
>>         small beta
>>              trial.
>>
>>              Can you guys/gals take a quick read through this? It's pretty
>>              straightforward and self explanatory. s Thanks! Once I get
>> this
>>              finished, I'll be happy to post my source code if anybody
>>         likes this
>>              function.
>>
>>
>>              _*URL Redirects *_
>>
>>              _*Overview*_
>>
>>
>>              The goal with this function is to provide users with a url
>>              shortening service (aka tinyURL and Bit.ly). Users will be
>>         able to
>>              create shortened urls that point to other websites, but the
>>              shortened url's will also be used for other features in the
>> app
>>              meaning the redirect function design needs to inclusive of
>>         the needs
>>              of these other features.
>>
>>              _*How it works*_
>>
>>
>>              When 404 error thrown (resource not found), a function will
>>         strip
>>              down the requested URL to get the subfolder then query that
>>              subfolder against a database. If no match found, throw 404
>>         error.
>>
>>              1) User requests company.com <http://company.com>
>>         <http://company.com>/__**mydemopage
>>
>>
>>
>>              2) /mydemopage is not a real directory so server throws 404
>>         error
>>
>>              3) 404 error script will first run the url parsing script
>>         to strip
>>              out the relevant subfolder 'mydemopage'
>>
>>              4) Script will then query redirect database for
>>         'mydemopage' and if
>>              there is a match, forward user to the URL specified in the
>>         database.
>>              If there is no match, present 404 Error page.
>>
>>
>>
>>              _*Functional Considerations*_
>>
>>
>>              * Along with making specific redirects, users can also use
>>         the site
>>              for other reasons, such as to host images, places
>>         classified ads,
>>              make custom web-pages, etc. These features may also create a
>>              redirect, such as 'details.at/mynewpage
>>         <http://details.at/mynewpage>
>>              <http://details.at/mynewpage>' will point to content
>>         created by the
>>
>>              user.
>>
>>              * Anonymous/non custom url's (shortened url's with randomly
>>              generated subfolders) will be re-used unless the original
>>         creator
>>              specifies otherwise. What this means, is that if someone
>>         submits a
>>              long url that has been used before, they will be given the
>> same
>>              shortened URL as the last user. If the creator doesn't want
>>         their
>>              redirect reused, they must flag the redirect as 'unique'
>>         prior to it
>>              being reused.
>>
>>              *If a redirect is re-used, it can no longer be flagged as
>>         unique,
>>              and is instead flagged as 'locked' and can no longer be
>> edited.
>>
>>              *Redirects can be edited as long as they are assigned to a
>>         specific
>>              user and not locked.
>>
>>
>>
>>              _*Database Structure*_
>>
>>
>>              There are several tables involved; a core table, ownership
>>         table,
>>              hit detail table, and a hit count table.
>>
>>
>>              Table 1) redirects - This is the primary table that
>>         contains the
>>              core data needed for the redirect system. For this
>> application,
>>              most, if not all of this data is needed anytime a forward is
>>              initiated. In the context of this app, there isn't any
>>         performance
>>              advantage to breaking these tables into smaller units,
>>         adding more
>>              uniqueID's, etc.
>>
>>              Table 2) redirectOwners - Since multiple users can all own
>>         a single
>>              redirect, a one-to-many relationship exists, and a seperate
>>         table is
>>              needed.
>>
>>              Table 3) Hits - Everytime a redirect is utilized, a 'hit'
>>         is logged
>>              and details about the hit (referrer, browser, time, etc)
>>         are logged
>>              to this table.
>>
>>              /*location is compiled when the record is created by
>> querying a
>>
>>              table of geographical locations based on IP. If recompiled
>> at a
>>              later date, the IP location information may change and
>>         misrepresent
>>              the original location. This is why I keep the location in
>>         the table
>>              and do not compile it based on IP every single time the hit
>>         details
>>              are viewed. /
>>
>>              /*The referrer host and string are kept seperating so that
>>         visits
>>
>>              can be grouped by host, not just the overall url. For
>>         instance, if a
>>              redirect is posted on 20 different places in facebook,
>>         stats will
>>              show all the hits from facebook, plus each specific hit
>>         from the
>>              various locations on facebook. /
>>
>>
>>              Table 4) hitCounter - To keep an accurate and current count
>>         of hits
>>              to a particular redirect, a table that logs each new hit as
>>         a +1 to
>>              the previous will be used in conjunction with the existing
>>         'hits'
>>              table. This table will simply icrement a starting value of
>>         0 by 1
>>              everytime a hit is registered. This method prevents a hit
>>         count from
>>              ever needing to be compiled by counting records in the hit
>>         detail
>>              table.
>>
>>
>>
>>              *Table - ' redirects'*
>>
>>              /ID/-- int #unique ID
>>              /domain/-- varchar(255) #users can select several domains
>>         as root domain
>>              /subFolder/-- varchar(30) #subfolder
>>              /redirectUrl/-- varchar(5000) #destination URL
>>              /createdDate/-- datetime #date the redirect was created
>>              /duration/-- int(11) #how long the redirect will last.
>>         default is 3
>>              years.
>>              /status /-- bit(1) #active, suspended, etc
>>              /lock/-- bit(1) #redirect url can't be edited/changed.
>> multiple
>>              owners force lock
>>              /unique/-- bit(1) #redirect can't be re-used by others /
>>         prevents
>>              multiple owners
>>              /custom/-- bit(1) #subfolder is custom entry
>>              /extRedirect/-- bit(1) #redirect url is external site
>>              /type/-- smallint(6) #what kind of redirect it is for. simple
>>              redirect, ad, page, etc.
>>
>>
>>
>>              *Table - 'redirectOwners'*
>>
>>              /ownerID/-- int #unique record ID
>>              /ID/-- #ID of redirect
>>              /userID/-- #id of owner
>>              /createdDate/-- datetime #date the redirect was created
>>              /createdIP/-- varchar(15) #ip
>>
>>
>>
>>              *Table - 'hits'*
>>
>>              /hitID/-- int #hit record ID
>>              /ID/-- int #id of redirect
>>              /hitDate/-- datetime #timestamp
>>              /refererHost/-- varchar(255) #referrer host name
>>              /refererString /-- varchar(255) #referrer string
>>         #hostname+string =
>>              referrer
>>              /refererType/-- varchar(255) #browser type
>>              /location/-- varchar(50) #country of origin
>>              /dnsIP/-- varchar(15) #ip
>>
>>
>>
>>              *Table - 'hitCounter'*
>>
>>              /hitCounterID/-- int #hit counter record ID
>>              /ID/-- int #id of redirect
>>              /hitCount/-- int #number of registered hits to a redirect
>>
>>
>>         --
>>         --
>>         online documentation: http://openbd.org/manual/
>>         
>> http://groups.google.com/__**group/openbd?hl=en<http://groups.google.com/__group/openbd?hl=en>
>>
>>         
>> <http://groups.google.com/**group/openbd?hl=en<http://groups.google.com/group/openbd?hl=en>
>> >
>>
>>         ---
>>         You received this message because you are subscribed to the Google
>>         Groups "Open BlueDragon" group.
>>         To unsubscribe from this group and stop receiving emails from
>>         it, send
>>         an email to 
>> openbd+unsubscribe@__googlegro**ups.com<http://googlegroups.com>
>>         
>> <mailto:openbd%2Bunsubscribe@**googlegroups.com<openbd%[email protected]>
>> >.
>>         For more options, visit
>>         
>> https://groups.google.com/__**groups/opt_out<https://groups.google.com/__groups/opt_out>
>>         
>> <https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>> >.
>>
>>
>>
>>     --
>>     --
>>     online documentation: http://openbd.org/manual/
>>     
>> http://groups.google.com/__**group/openbd?hl=en<http://groups.google.com/__group/openbd?hl=en>
>>
>>     
>> <http://groups.google.com/**group/openbd?hl=en<http://groups.google.com/group/openbd?hl=en>
>> >
>>
>>     --- You received this message because you are subscribed to the
>>     Google Groups "Open BlueDragon" group.
>>     To unsubscribe from this group and stop receiving emails from it,
>>     send an email to 
>> openbd+unsubscribe@__googlegro**ups.com<http://googlegroups.com>
>>     
>> <mailto:openbd%2Bunsubscribe@**googlegroups.com<openbd%[email protected]>
>> >.
>>     For more options, visit 
>> https://groups.google.com/__**groups/opt_out<https://groups.google.com/__groups/opt_out>
>>     
>> <https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>> >.
>>
>>
>>
>> --
>> --
>> online documentation: http://openbd.org/manual/
>> http://groups.google.com/**group/openbd?hl=en<http://groups.google.com/group/openbd?hl=en>
>>
>> ---
>> You received this message because you are subscribed to the Google
>> Groups "Open BlueDragon" group.
>> To unsubscribe from this group and stop receiving emails from it, send
>> an email to 
>> openbd+unsubscribe@**googlegroups.com<openbd%[email protected]>
>> .
>> For more options, visit 
>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>> .
>>
>
> --
> --
> online documentation: http://openbd.org/manual/
> http://groups.google.com/**group/openbd?hl=en<http://groups.google.com/group/openbd?hl=en>
>
> --- You received this message because you are subscribed to the Google
> Groups "Open BlueDragon" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to 
> openbd+unsubscribe@**googlegroups.com<openbd%[email protected]>
> .
> For more options, visit 
> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
> .
>

-- 
-- 
online documentation: http://openbd.org/manual/
 http://groups.google.com/group/openbd?hl=en

--- 
You received this message because you are subscribed to the Google Groups "Open 
BlueDragon" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to