Cass-Hacks overview
Purpose
The purpose of Cass-Hacks is to share with others what I have learned and created over a period of time. I'm a firm believer in not re-inventing the wheel unless absolutely necessary and when necessary, making sure it is definitely so.
Although I have borrowed some from techniques developed and in use by others, very rarely have I been able to 'plug-n-play' and more often than not, had to adapt what I end up using to fit what I am using it for as opposed to trying to shoe-horn what I need to do into what I have available to do it with. In other words, I'm not one of those people with a hammer who go around looking for and thinking everything is nails.
To that end, many of the projects described on this site will show references to elements that are sourced from others as well as an explanation of what is different and as much as possible, the reasons for the differences.
To some extent, all the projects described here, when taken as a whole, could be seen as not so much as a how-to for any specific technique but instead, general examples of how one might create and extend functionality by building on what others have done, as well as any underlying specifications themselves.
Lastly, this site is also in effect a 'test-bed' as all of the projects documented here are in use on this site. Thats not to say that one would want to ordinarily use all of them at the same time but instead, you can see everything documented here working on an actual site with actual content as opposed to what is more often the case, test code implemented in a 'sand-box' that when added to a real site with real content, do not fare as well.
Site Contents
This site contains examples of different techniques used to achieve different results. Over a period of time, all the different techniques used on this site will be detailed in various Projects. In addition, some Projects will be drawn from techniques I have used in various assignments I have had in the past.
Examples of what these Projects might entail are, but not limited to:
- Javascript URL encoding and decoding in a manner 100% byte for byte compatible with PHP.
- A way to pack the use of more than 20 cookies into a single domain. With some ideas originally from Quirksmode
- Font size switching independant of Browser support. With a little help from cssplay.co.uk and inspiration from tjkdesign
- Time based and demand based HTML page cacheing of dynamic content.
- A novel flexible scroller using ideas ignited by an article at Quirksmode
- Thumbnail to full size image viewing without needing a new page.
- A novel thumbnail viewer selectively expanding thumbnails as one performs a mouse over.
- The 'correct' way to insert arbitrary objects parsed from a string into the DOM without using innerHTML. Project instigated by an article on the subject at tjkdesign
- A drop-in Javascript replacement for the HTML title attribute.
- An extension of the Title attribute replacement to support the display of any valid HTML in a tool-tip like pop-up.
- A Javascript class used to provide AJAX functionality.
- A Javascript class used for displaying time critical notifications during AJAX function calls.
- Creating efficient PHP templates.
- A Javascript Javascript/PHP/CSS/HTML code highlighter.
- A Microsoft Windows Vista ® empowered hands-free site interaction and navigation system degrading well in other systems.
- A Javascript search term highlighter.
- A blogging system requiring no database, although making use of one if available.
- A user supplied comments system requiring no database, although making use of one if available.
- A Javascript/CSS browser based chat user interface.
- An explanation of any elements of this site that visitors may like to see documented.
In addition, depending on the popularity of the projects available here, I hope to at some point create a page/section where visitors may suggest/request things they would like to see built. Until such time as something along those lines is made available, everyone should feel free to e-mail the author their requirements, assuming they don't care that their project will end up described and detailed here.
Site navigation, structure
This site is laid out in somewhat of a information redundant manner. For example, there is the Project articles page, which lists all the available projects and then for each project, there is both a Discussions page as well as an Implementation page.
The Project articles page gives a complete listing of all available projects, as does the main site navigation itself, but in addition provides a short description of each project as well.
For each Project, the Discussion and Implementation page may contain similar information but the level of detail in each with regard to their intended purposes will be different.
Please note though that in this case, 'Discussion' is not meant in the same way as user contributed comments but instead, a technical discussion of the project, by the author, outlining various project parameters such as technical background, project requirements, possible solutions, difficulty areas as well as a 'justification' for why the given solution was chosen. At some point, I will add visitor discussion capabilities but I haven't built it yet.
Also, the Discussion section will contain a walkthrough of the implementation so that one may adapt the process itself to any other application without being tied to a given implementation. In other words, you will be able to know what I did and how I did it separately so you can decide if you like what I did, but not how I did it and if that is the case, use the 'what' and disregard the 'how' or, vice versa.
The separation of the Discussion and Implementation sections is done so that those who are unsure if the project will be applicable in their particular usage scenario or not will not have to wade through a lot of implementation detail just to find that out. Accordingly, this site will be much less like a 'How to do it' and more like a 'How to think like the author' or as the case may be, 'How not to think like the author'.
Along the right side of various pages and underneath the Link Legend, there will often be what I call 'Content locators'. Not only do they work in tandem with the header and sub-header elements on the page to identify different sections of the page but will also, from time to time, highlight reference or related material. This will also hopefully help the visitor to extract the most amount of useful information as quickly as possible and find their way around easier.
The author
The author of Cass-Hacks has had a wide and varied professional life. Beginning with an educational background in Nuclear Engineering to expanding on that with Electronic/Electrical engieering. From there, the author has gained experience in a very wide range of engineering environments from working on telecommunications systems, including satelite, to manufacturing automation to networked control systems for high energy physics particle accelerators.
More recently the author has made contributions to the latest MPEG IPMP standards extentions which included not only providing the secure messaging architecture on which the specifications are based but also acting as the IPMP group's Chair and editor of the final specifications. To see a notice of a lecture given on the topic of the work being done in MPEG at the time, take a look at the ITSCJ's lecture notice, with a link to a PDF version of the PowerPoint presentation used. Although the linked to page is in Japanese, the PDF version of the lecture presentation is in English.
In non-MPEG related work, the author has specialized in developping web applications which function and act more like normal computer applications than they do web sites. Although these web applications' user experience is based primarily on the use of AJAX techniques, they all had as one of their base requirements, to function without the use of Javascript as well, although with obviously reduced performance.
An example of a web application created is a system that stores time variant data in a database from which the web application may request sections of the data for simulated real-time display in the client browser. The user may choose beginning and ending time periods and then using an interface similar to VCR controls, 'play' the data back or step through the data record by record or jump around viewing data from disjointed periods etc.
All the web applications developped are based around a single concept, "Information compression". Information compression is not the same as data compression, e.g. ZIP or RAR for textual data or MPEG for video/audio data but instead, ways to include the most amount of information in the least amount of realestate while making access to different levels of information as intuitive as possible. Consider it to be similar to a multi-function Heads-up-display where only the information you need is available while at the same time, more information can be made available as the situation/context requires.
The latest work the author has been involved in has been the development, setting up and operation of a database used to archive network packet information obtained from a 'Darknet'. A darknet is basically all unassigned IP addresses to which 'some' packets are directed. 'Some' is in quotes because due to virusses, adversarial network attacks, Botnets and various scanning techniques, the amount of traffic directed to addresses to which nothing exists is surprisingly high. By way of example, the data collected from various darknet nodes amounts to up to 1 Tera-records in a single month and that is only on a small set of unassigned IP addresses used for developmental testing!
The Author would like it to be known and understood that he is not such a pompous ass as to always write in the third person but that it seems everyone writes their Bio in the third person and not wanting to look like a total idjit, chose to follow suit.
On the shoulders of giants!
I don't mean to say that I am guarenteeing that I ever provide any real useful extension or improvement to someone's previous work but instead, saying that anything that I was lucky enough to get right and make some minor improvement, no matter how slight and, that someone else finds useful, I owe to what I have learned over a period of time from the following major influences on my work.
The following list of sites, for the reasons listed, I feel to be primary references for just about everything I have done and am capable of. I can't recommend these sites more highly as you will also see these referenced often in numerous articles here over time.
- Quirksmode - Personally, I consider Quirksmode, as a reference for all things Javascript to be on the same level, if not slightly above, the W3Schools reference site. W3Schools for how things should work and then Quirksmode for how they actually work in real life. In my opinion, without Quirksmode, you can't code.
- Little Boxes - When I first saw those pages, my jaw just dropped. When I began to see the beauty in the structure, I became hooked. Web pages and applications no longer had to look like they had been carved in stone in replication of a billion other sites out there. The information may not have been updated in the recent past but the knowledge it contains is timeless. I can't imagine you haven't been there yet but if that is the case, you definitely owe it to yourself to check it out, I can guarentee you will enjoy it and find it fascinating!
- Stu Nicholls at cssplay.co.uk - In my opinion, cssplay is to CSS what Quirksmode is to Javascript. Many of the things that Stu has done with CSS seem utterly amazing at times. It is like seeing something done and having no clue as to how it is done and then having it explained by Stu and seeing how, it then seems intuitively obvious. Making the complicated simple is not only a sign of genious but also, something I have a problem of not doing the exact opposite of.
- tjkdesign - Of all the sites I consider references, Thierry's tjkdesign site is by far, the best laid out, functional and feature rich site I have ever seen. The attention to detail is immaculate! I find Thierry's site very easy to navigate and find my way around in. Although I've borrowed some ideas about what functions and features to have on my site from tjkdesigns, although not their implementations, I at least hope I achieved some relative level of ease of use as tjkdesigns has.
- Although no one reference is perfect, W3Schools comes pretty close. I have found some reference information missing, Javascript Object toString() overloading as one small example but as a reference for syntax and semantics there can be no better source for just about any web standard, HTML, CSS and Javascript specifically.
- There can be no list of influencial sites without a mention of PositionIsEverything. Although in one case, following the IE Hack road, I felt lead astray, the discussions and information available there helped bring me back to the straight and narrow easily enough. Although, if the notice still up at PositionIsEverything is anything to go by, it seems some may be a bit longer in the task. A suggestion to Holly and John, script it, run it, all hacks written into an IE style sheet and conditional comments linking it in where needed. Here is a free offer to help by writing some PHP scripts to do it if you want.
- A List Apart - Need I say more? Well, not needing to say more never stopped me from saying more so why start now? Although I've yet to directly adopt anything coded in an A List Apart article, I've definitely adapted what I have learned from them to either similar yet different situations or extensions in the same directions. Not only a valuable asset regarding how-to but more so an excellent source for what-to.
- Someone without whom this site would not have jump started into being, Nakajima Yosuke-Dono. He doesn't yet have a web presence although the web has felt his presence.
And now last, but by no means the least, cssZenGarden - A testement to the elegance, power, beauty, strength and flexibility that can be achieved. The best compliment I can make is, when I die, I want to be buried in Zen Garden. I used to look at that site and feel shame but now, I feel inspiration and, a challenge.
If you will please indulge me, you might figure out a way to figure out that the site preview image for cssZenGarden is around 700k while ALL the other site preview images are only around 3-4k. But considering cssZenGarden, did I really have any other choice and be able to do the site any justice at all?
- I appologize in advance if I haven't mentioned someone whom my poor memory has misplaced. If anyone else feels that they see themselves or their sites in what I have here and would care to remind me so as to be able to include you here, please use the contact form, found on each page, to notify me of the omission and I'll rectify the situation as soon as possible.








