<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.1" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Holm Log</title>
	<link>http://www.holmdesigns.com/wp</link>
	<description>My Technical Learning Journey</description>
	<pubDate>Fri, 25 Jul 2008 02:23:29 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.1</generator>
	<language>en</language>
			<item>
		<title>LiveCycle Data Services and Offline Data Sync Management</title>
		<link>http://www.holmdesigns.com/wp/?p=69</link>
		<comments>http://www.holmdesigns.com/wp/?p=69#comments</comments>
		<pubDate>Fri, 25 Jul 2008 02:23:29 +0000</pubDate>
		<dc:creator>bruce</dc:creator>
		
	<category>General</category>
		<guid isPermaLink="false">http://www.holmdesigns.com/wp/?p=69</guid>
		<description><![CDATA[by Adobe evangelist Ryan Stewart
Adobe LiveCycle Data Services (LCDS) allows keeping/managing data sync&#8217;d between a server and a client that goes offline.
BlazeDS is free open source server product, runs on Java servers for chat type apps
Data Management (DM) and sync are not covered by BlazeDS
Use LiveCycle for DM
Configuring your server &#8220;destinations&#8221;

data-management-config.xml

RTMP or AMF channels used
properties [...]]]></description>
			<content:encoded><![CDATA[<p>by Adobe evangelist Ryan Stewart</p>
<p>Adobe LiveCycle Data Services (LCDS) allows keeping/managing data sync&#8217;d between a server and a client that goes offline.</p>
<p>BlazeDS is free open source server product, runs on Java servers for chat type apps<br />
Data Management (DM) and sync are not covered by BlazeDS<br />
Use LiveCycle for DM<br />
Configuring your server &#8220;destinations&#8221;</p>
<ul>
<li>data-management-config.xml
<ul>
<li>RTMP or AMF channels used</li>
<li>properties specified, id, what to get back</li>
</ul>
</li>
<li>services-config.xml</li>
<ul>
<li>set up how  to send data across AMF, RTMP, etc</li>
<li>set the server host or public server, idle timeout</li>
</ul>
<li>3 parts to a simple online/offline app</li>
<ul>
<li>DAO functions</li>
<li>Assembler functions (send back/forth)</li>
<li>Custom Data Type (for sending complex data)</li>
</ul>
</ul>
<p>At this point Ryan gave a demo of a waypoint data storage handler.</p>
<ul />
]]></content:encoded>
			<wfw:commentRSS>http://www.holmdesigns.com/wp/?feed=rss2&amp;p=69</wfw:commentRSS>
		</item>
		<item>
		<title>Scorpio 8 Preview</title>
		<link>http://www.holmdesigns.com/wp/?p=68</link>
		<comments>http://www.holmdesigns.com/wp/?p=68#comments</comments>
		<pubDate>Tue, 01 May 2007 23:15:49 +0000</pubDate>
		<dc:creator>bruce</dc:creator>
		
	<category>General</category>
		<guid isPermaLink="false">http://www.holmdesigns.com/wp/?p=68</guid>
		<description><![CDATA[Attended the local Adobe RIA User Group Meeting last night to hear an official tour Adobe rep present a preview of Scorpio (ColdFusion 8 ) features and benefits. He broke his presentation down into three areas of focus:

Developer Productivity
Integration
Management and Administration

Developer Productivity Features
CFIMAGE tag - based on full Java image support functionality

Attributes include: border, convert, [...]]]></description>
			<content:encoded><![CDATA[<p>Attended the local Adobe RIA User Group Meeting last night to hear an official tour Adobe rep present a preview of Scorpio (ColdFusion 8 ) features and benefits. He broke his presentation down into three areas of focus:</p>
<ul>
<li>Developer Productivity</li>
<li>Integration</li>
<li>Management and Administration</li>
</ul>
<p><strong>Developer Productivity Features</strong></p>
<p><noscript><cfimage></noscript>CFIMAGE tag - based on full Java image support functionality</p>
<ul>
<li>Attributes include: border, convert, info, read, resize, rotate, scale, etc</li>
<li>50 additional image related functions</li>
<li>images treated as their own object type</li>
</ul>
<p><noscript><cfajaxproxy></noscript>CFAJAXPROXY tag - simplify CFC invocation from AJAX</p>
<ul>
<li>Uses JSON or XML for data consumption</li>
<li>AJAX wizard provided</li>
<li>Yahoo UI fully supported for</li>
<ul>
<li>rich grid, rich tree views</li>
<li>dual select lists, auto-suggest, FCK editor available</li>
</ul>
</ul>
<p><noscript><cfwindow></noscript></p>
<p>CFWINDOW tag - supports HTML and JS</p>
<ul>
<li>provides popup window</li>
<li>can be positioned, typical attributes used</li>
</ul>
<p><noscript><cflayout></noscript>CFLAYOUT tag - includes support for multiple <noscript><cflayoutarea></noscript>CFLAYOUTAREA  tags within</p>
<p>Improved file I/O</p>
<ul>
<li>~14 new functions</li>
<li>much easier read/write to files, less cumbersom</li>
<li><noscript><cfloop file="" index="line"></noscript>CFLOOP file=&#8221;" index=&#8221;line&#8221;</li>
<li>CFLOOP file=&#8221;" index=&#8221;char&#8221; maxchar=150 (as I recall)</li>
</ul>
<p><noscript><cfdocuments></noscript>CFDOCUMENTS tag enhanced</p>
<ul>
<li>supports bookmarks and bookmark hierarchy</li>
<li>support for page count, page number, section page count</li>
</ul>
<p><noscript><cfreport></noscript>CFREPORT tag enhanced</p>
<ul>
<li>support for templates and CSS styling</li>
<li>conditional formatting - reveal sections based on specified conditions</li>
<li>output to HTML or PDF</li>
</ul>
<p>CFC Interfaces</p>
<p>Argument collection - act as default tag organizational structure</p>
<p>Implicite array and struct creation</p>
<ul>
<li>Use more PHP like syntax</li>
<li><noscript><cfset MyArray = ["apple","orange","pear"]></noscript>CFSET myArray = [&#8221;apples&#8221;,&#8221;oranges&#8221;,&#8221;pears&#8221;]</li>
<li><noscript><cfset MyStruct = [fname="Joe" lname="Cool" age=35></noscript> CFSET myStruct = [fname=&#8221;Joe&#8221; lname=&#8221;Cool&#8221; age=35] (as I recall)</li>
</ul>
<p>Full support for JS operators</p>
<ul>
<li>++, &#8211;, ==, !=, etc.</li>
<li>Within <noscript><cfscript></noscript>CFSCRIPT&#8230; >, <, <=, >=, etc</li>
</ul>
<p>CFCs now serialized properly (replicated correctly)</p>
<p><noscript><cfftp></noscript>CFFTP tag now supports SFTP</p>
<p><strong>Integration</strong></p>
<p>.NET assemblies supported - local and remote via .net proxy</p>
<p>MS Exchange - Mail, Calendar, Contact, Task</p>
<p><noscript><cfpresentation> </noscript>CFPRESENTATION tag - on demand presentations</p>
<ul>
<li>content can be PP slides, any SWF supported content, MP3 audio</li>
<li>dynamic content such as graphs and charts</li>
</ul>
<p>Flash Media Server Gateway</p>
<ul>
<li>bi-directional connections - transfer between FM and CF</li>
<li>media and data streamed</li>
<li>allows interactive media player creation</li>
</ul>
<p>PDF manipulation</p>
<ul>
<li>metadata, merge pages, extract pages, encrypt, create thumbnails</li>
<li>flatten PDF for archive and smaller size, protection security</li>
<li>full DDX instruction set supported (very powerful)</li>
</ul>
<p>PDF Form Manipulation</p>
<ul>
<li>pre-populate PDF based forms</li>
<li>extract PDF form data for post-processing and insert into database</li>
<li>new PDF scope synonymous to current FORM scope</li>
<li>JS form validation support</li>
</ul>
<p><strong>Management and Administration</strong></p>
<p>Major improvements</p>
<p>Multiple user based accounts support</p>
<ul>
<li>roles and scope of access definable</li>
<li>access based on sandbox settings</li>
</ul>
<p>Server Monitoring - based on</p>
<ul>
<li>activity, requests, usage details, load</li>
<li>server snapshots possible</li>
<li>save state</li>
<li>FLEX based UI - fully customizable</li>
<li><18% overhead when activated in full detail modes</li>
</ul>
<p>Server Alerts -</p>
<ul>
<li>set based on</li>
<ul>
<li>thresholds based on load, memory, threads, etc</li>
<li>definition of unresponsive server, slow server, etc</li>
<li>amount of JVM memory usage</li>
<li>number of timeouts allowed</li>
</ul>
<li>response</li>
<ul>
<li>send email</li>
<li>run CFC - get more details, kill threads based on age, reject new requests</li>
<li>snapshot or server status included in email</li>
</ul>
<li>API provided for full programmatic access</li>
<li>Alerts thread isolated from other threads and memory for more sure activation</li>
</ul>
]]></content:encoded>
			<wfw:commentRSS>http://www.holmdesigns.com/wp/?feed=rss2&amp;p=68</wfw:commentRSS>
		</item>
		<item>
		<title>Expandable Rows - Ch. 3 Bulletproof Web Design</title>
		<link>http://www.holmdesigns.com/wp/?p=67</link>
		<comments>http://www.holmdesigns.com/wp/?p=67#comments</comments>
		<pubDate>Fri, 22 Dec 2006 23:39:12 +0000</pubDate>
		<dc:creator>bruce</dc:creator>
		
	<category>Books</category>
		<guid isPermaLink="false">http://www.holmdesigns.com/wp/?p=67</guid>
		<description><![CDATA[Chapter 3 in Dan Cederholm&#8217;s book &#8220;Bulletproof Web Design&#8221; discusses how to design a section of the web page that normally is one text row tall (such as a login, search, crumbtrail info, or bulletin notice) and allow for the inevitable occurrence where it needs to be two or more text rows but still not [...]]]></description>
			<content:encoded><![CDATA[<p>Chapter 3 in Dan Cederholm&#8217;s book &#8220;<a href="http://www.amazon.com/Bulletproof-Web-Design-flexibility-protecting/dp/0321346939/sr=8-1/qid=1166750155/ref=pd_bbs_sr_1/002-7270966-5565630?ie=UTF8&#038;s=books">Bulletproof Web Design</a>&#8221; discusses how to design a section of the web page that normally is one text row tall (such as a login, search, crumbtrail info, or bulletin notice) and allow for the inevitable occurrence where it needs to be two or more text rows but still not break the design.  You may have rounded corners or other graphical icons/elements that look great when one row of text is present.  But what happens when your crumbtrail becomes two lines of text or the announcement line becomes two lines instead of one&#8230; does the graphic elements get misplaced? If nested tables are used to layout this section of the page, then it likely will.</p>
<p>Once again CSS is used to design a lean yet flexible and efficient piece of code that accomplishes the same look as the table-based design but using the right technique it is possible to allow for expanding text content. Dan takes an example of a Login / Find line and an announcement line with rounded corners and icons embedded and re-works the code to hardly any code yet it ends up looking nice and achieves the goal of having an expandable text area.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.holmdesigns.com/wp/?feed=rss2&amp;p=67</wfw:commentRSS>
		</item>
		<item>
		<title>Scalable Navigation - Ch. 2 Bulletproof Web Design</title>
		<link>http://www.holmdesigns.com/wp/?p=66</link>
		<comments>http://www.holmdesigns.com/wp/?p=66#comments</comments>
		<pubDate>Fri, 22 Dec 2006 01:16:22 +0000</pubDate>
		<dc:creator>bruce</dc:creator>
		
	<category>Books</category>
		<guid isPermaLink="false">http://www.holmdesigns.com/wp/?p=66</guid>
		<description><![CDATA[Chapter 2 of the book by Dan Cederholm &#8220;Bulletproof Web Design&#8221; is on how to build solid website navigation that is flexible and uses very efficient code yet looks good. Starting with the common way header navigation has been done in the past with tabs made from multiple sets of images, he does a makeover [...]]]></description>
			<content:encoded><![CDATA[<p>Chapter 2 of the book by Dan Cederholm &#8220;<a href="http://www.amazon.com/Bulletproof-Web-Design-flexibility-protecting/dp/0321346939/sr=8-1/qid=1166750155/ref=pd_bbs_sr_1/002-7270966-5565630?ie=UTF8&#038;s=books">Bulletproof Web Design</a>&#8221; is on how to build solid website navigation that is flexible and uses very efficient code yet looks good. Starting with the common way header navigation has been done in the past with tabs made from multiple sets of images, he does a makeover making the tabbed interface look as good or better yet uses a fraction of the code required in the old method.</p>
<p>The tabs still have rollover highlighting along with gradient background and beveled edge yet provides a way for the user to scale the text size and still have the tabs enlarge proportionately and look good. He walks through the technique to implement in CSS and then discusses why it&#8217;s bulletproof. He ends the chapter with examples of other tab styles such as the rounded corner tabs of <a href="http://www.mozilla.org">mozilla.org</a> or the slanted tabs of <a href="http://www.holmdesigns.com/wp/wp-admin/www.simplebits.com/bits/bulletproof_slats.html">www.simplebits.com</a>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.holmdesigns.com/wp/?feed=rss2&amp;p=66</wfw:commentRSS>
		</item>
		<item>
		<title>Flexible Text - Ch.1 of Bulletproof Web Design</title>
		<link>http://www.holmdesigns.com/wp/?p=65</link>
		<comments>http://www.holmdesigns.com/wp/?p=65#comments</comments>
		<pubDate>Fri, 22 Dec 2006 01:04:50 +0000</pubDate>
		<dc:creator>bruce</dc:creator>
		
	<category>Books</category>
		<guid isPermaLink="false">http://www.holmdesigns.com/wp/?p=65</guid>
		<description><![CDATA[Started reading the book &#8220;Bulletproof Web Design&#8221; by Dan Cederholm. This book takes the web standards based approach to web design strategy that will produce attractive, flexible, maintainable, accessible and controllable content. Dan uses XHTML and CSS for his discussions and has the goal of reducing bloated code down to the bare essentials to get [...]]]></description>
			<content:encoded><![CDATA[<p>Started reading the book &#8220;<a href="http://www.amazon.com/Bulletproof-Web-Design-flexibility-protecting/dp/0321346939/sr=8-1/qid=1166750155/ref=pd_bbs_sr_1/002-7270966-5565630?ie=UTF8&#038;s=books">Bulletproof Web Design</a>&#8221; by Dan Cederholm. This book takes the web standards based approach to web design strategy that will produce attractive, flexible, maintainable, accessible and controllable content. Dan uses XHTML and CSS for his discussions and has the goal of reducing bloated code down to the bare essentials to get the job done. He starts each chapter with an example site that is not bulletproof then does a makeover to see how it should be done.</p>
<p>Chapter 1 is about using text in such a way to maximize flexibility. Using CSS to control all aspects of the text he shows how to make the text easy to maintain, accessible to multiple types of devices and screens, and allow the user to control the text size (to increase readability) and weight of the page (by not loading images.)</p>
<p>Starting with an absolute font size using keyword units such as &#8220;small&#8221; applied to the  tag all other font sizing is then made a relative size to it using % changes. He provides work arounds for IE5&#8217;s lack of CSS compatibility in some situations and offers cautions for when using relative % sizes within multi-layered nesting of tags.  Nested tags that have % sizes are additive and can result in unpredictable results in some cases.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.holmdesigns.com/wp/?feed=rss2&amp;p=65</wfw:commentRSS>
		</item>
		<item>
		<title>ColdSpring</title>
		<link>http://www.holmdesigns.com/wp/?p=64</link>
		<comments>http://www.holmdesigns.com/wp/?p=64#comments</comments>
		<pubDate>Fri, 17 Nov 2006 16:37:16 +0000</pubDate>
		<dc:creator>bruce</dc:creator>
		
	<category>Presentations</category>
		<guid isPermaLink="false">http://www.holmdesigns.com/wp/?p=64</guid>
		<description><![CDATA[Barney Boisvert presented on ColdSpring (or &#8220;CS&#8221; henceforth) at last night&#8217;s PDXCFUG meeting. This open source framework technology has been around since 2002 as a framework for Java known as Spring.  It has since been adapted to work with ColdFusion within the past year. It is not a &#8220;port&#8221; but borrows the XML syntax [...]]]></description>
			<content:encoded><![CDATA[<p>Barney Boisvert presented on <a href="http://www.coldspringframework.org">ColdSpring</a> (or &#8220;CS&#8221; henceforth) at last night&#8217;s <a href="http://www.pdxcfug.org">PDXCFUG</a> meeting. This open source framework technology has been around since 2002 as a framework for Java known as Spring.  It has since been adapted to work with ColdFusion within the past year. It is not a &#8220;port&#8221; but borrows the XML syntax from it.</p>
<p>CS is basically a framework for CF Components or CFCs. It focuses on the management of CFC configuration and dependencies so you don&#8217;t have to as much. It uses a pattern called &#8220;inversion-of-control&#8221; or IoC to &#8220;wire&#8221; your CFCs together. IoC is another name for Dependency Injection or DI and accurately describes what CS does. A dependency is when one piece of code depends on another to get it&#8217;s job done. You have some functionality that is needed by several other pieces of code in your application. You create a CFC to implement that functionality. Each time you instantiate the use of that CFC elsewhere in your code, a coupling takes place. The two ends of this &#8220;coupling&#8221; are known as &#8220;collaborators&#8221;.  As your application grows the management of keeping things together or coupled becomes harder. Each of your components using the CFC needs to know how to &#8220;use&#8221;  the CFC, how to create and configure it.  That&#8217;s where CS comes in.  CS allows you to remove the sprinkling of code required to couple to the CFC and manages it for you. Collaborators don&#8217;t need to know how to create or find each other but are simply &#8220;given&#8221; them by CS.</p>
<p>Another way to think of CS is as a generic CFC factory and registry. Registries are object warehouses or a collection of references. Factories are built on top of registries and act as an object source. It encapsulates instantiation of objects and manages singletons (one instantiated bean in memory that is shared by all.)  Think of DI as a &#8220;super factory registry&#8221; (Barney&#8217;s term) or technically a Bean Factory that is XML based and encapsulates the dependency and initialization of beans. Beans all load into memory at the startup of an app so the load time takes longer but then benefits from the fast access during use. The wiring for resolving dependencies is done with either &#8220;constructor&#8221; objects or &#8220;setters&#8221; objects.</p>
<p>In addition, CS introduces the first Aspect-Oriented-Programming (AOP) framework for CFCs. This framework manages &#8220;cross-cutting concerns&#8221; or tasks that permeate the application but are not the responsibility of any one object. Examples include application security, transactions and logging. AOP provides a way to deal with this and allows massive code reuse. Using AOP terms, AOP deals with Aspects (concerns) and offers Advice (a way to deal with the concerns).</p>
<p>The question was raised about CS framework and other frameworks such as Fusebox, Mach-II, and Model-Glue.  The later are primarily frameworks for managing the front-end of applications or web applications in general, whereas CS is a framework for the business logic or backend functionality. THink of CS as a business controller and FB as a frontend controller.</p>
<p>In conclusion, CS is described as complicated to grasp and understand but once you do, the time savings and code reuse it allows will be well worth it. It offers a powerful way to manage the CFCs in your applications more easily.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.holmdesigns.com/wp/?feed=rss2&amp;p=64</wfw:commentRSS>
		</item>
		<item>
		<title>Performancing FF Plugin Editor</title>
		<link>http://www.holmdesigns.com/wp/?p=63</link>
		<comments>http://www.holmdesigns.com/wp/?p=63#comments</comments>
		<pubDate>Wed, 25 Oct 2006 04:16:44 +0000</pubDate>
		<dc:creator>bruce</dc:creator>
		
	<category>Web</category>
		<guid isPermaLink="false">http://www.holmdesigns.com/wp/?p=63</guid>
		<description><![CDATA[Downloaded and installed Firefox 2.0 web browser for the Mac.  This upgrade is great so far, nicer tabs, close tab x button on each tab instead of off to the far right, and other features yet to be discovered.  I also found add-in enhancements such as FireFTP, an ftp client built into the [...]]]></description>
			<content:encoded><![CDATA[<p>Downloaded and installed Firefox 2.0 web browser for the Mac.  This upgrade is great so far, nicer tabs, close tab x button on each tab instead of off to the far right, and other features yet to be discovered.  I also found add-in enhancements such as FireFTP, an ftp client built into the web browser window. But another plugin is a Performancing editor for blog postings.  I use WordPress for my blog needs and this editor is compatible with it and other popular blogging products.  It is a full featured web editor and lets you create accounts for each blog complete with login requirements.  Then you can click to select which blog you want to post to and type what you want.  Click the Publish button when done and it&#8217;s posted on your blog.  Very slick and well done.  Check it out at:  <a href="https://addons.mozilla.org/firefox/1730/">https://addons.mozilla.org</a>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.holmdesigns.com/wp/?feed=rss2&amp;p=63</wfw:commentRSS>
		</item>
		<item>
		<title>Avoiding Broken URIs</title>
		<link>http://www.holmdesigns.com/wp/?p=62</link>
		<comments>http://www.holmdesigns.com/wp/?p=62#comments</comments>
		<pubDate>Wed, 09 Aug 2006 18:35:58 +0000</pubDate>
		<dc:creator>bruce</dc:creator>
		
	<category>Articles</category>
		<guid isPermaLink="false">http://www.holmdesigns.com/wp/?p=62</guid>
		<description><![CDATA[Found some articles that discuss the problem of broken URIs or links.  Everyone experiences this while suring the internet and it&#8217;s discouraging to encounter and can even cause you to give up your goal. The damage to the site&#8217;s reputation is non-trivial.  As the quantity of broken links encountered on a site go [...]]]></description>
			<content:encoded><![CDATA[<p>Found some articles that discuss the problem of broken URIs or links.  Everyone experiences this while suring the internet and it&#8217;s discouraging to encounter and can even cause you to give up your goal. The damage to the site&#8217;s reputation is non-trivial.  As the quantity of broken links encountered on a site go up, the confidence of the user in that company or site goes down.</p>
<p>So how do you prevent or minimize this problem on your website? I found an article on the w3.org web site that addresses this with some useful guidelines. The article &#8220;<a href="http://www.w3.org/Provider/Style/URI.html">Cool URIs don&#8217;t change</a>&#8221; by Tim Berners-Lee first covers the excuses people give for changing their URIs within their website. Some are good and some lame. If interested in them click on the article link and read them, but I wanted to summarize the suggestions for preventing the problem in the first place. I thought they were good.</p>
<p>Tim believes it is the duty of the webmaster to allocate URIs that will be around for many many years.  People embed reference links in their websites, in documents, in their browser bookmark lists, and possibly in an email or letter to a friend. It requires careful planning and commitment to correct so that in a year or two when a redesign comes along or a technology changes, the URIs don&#8217;t break.</p>
<p>First putting the creation date of the document somewhere into the URI path is a good idea. This is a constant and won&#8217;t ever change.</p>
<p>What to leave out of the path:</p>
<ul>
<li>Authors name - it changes when someone else is assigned ownership, people quit, orgs change.</li>
<li>Subject - looks good but frequently ends up changing sooner or later</li>
<li>Status - this changes too, &#8220;drafts&#8221; become &#8220;final&#8221;, &#8220;new&#8221; becomes &#8220;old&#8221;, etc.</li>
<li>Access -  team access may change to public access, members only becomes archived, etc.</li>
<li>File name extension - .html may become .cfm or .php, .cgi or .pl may become .txt or .html</li>
<li>Software mechanisms - &#8220;cgi&#8221;, &#8220;exec&#8221;, etc suggests you won&#8217;t ever change the technology used to display the documents</li>
<li>Disk name - don&#8217;t include it in the URI&#8230;it will change at some point in time</li>
</ul>
<p>An example of a good solid URI: http://www.w3.org/1998/12/01/chairs<br />
a report of the minutes from a W3C chair people meeting.</p>
<p>What about topics and classifications by subject? This is not recommended either. Classifications also tend to change, even spelling of words representing categories can change such as a URI with &#8220;MarkUp&#8221; in it may be changed to &#8220;Markup&#8221; or &#8220;HTML&#8221; and the link breaks. A particular organization method may look excellent and perfect at the time but later doesn&#8217;t fit the ever changing environment. Everyone can interpret an organization differently, so as people in positions change, the view of an organization scheme changes. Adding a date such as a year into the URI can help protect categories because it tends to freeze a snapshot of things at that point in time while changes in the future will use a new URI with a date in it.</p>
<p>It is also a dangerous idea to use special domain names in the URI, such as for a server of documents that contains a subdoman of cgi.domain.com or secure.domain.com, etc.  These too may change at some point.  It is better to use the main domain name and then use redirects and proxying to route the path to separate servers.</p>
<p>Tim also suggests dropping the use of file name extensions completely. If your web server is Apache or IIS you have the option of doing what is call &#8220;Content Negotiation&#8221;. This allows for the server to be told how to deal with URIs that have no extention.  For example, if an image resource is referenced as /pictures/tiger then through content negotiation the web server will find not only the tiger.jpg or tiger.gif but will select the preferred format if more than one exists in the same directory.</p>
<p>I found good documentation on how to configure Apache to do content negotiation if you want to use it. Check out &#8220;<a href="http://httpd.apache.org/docs/2.0/content-negotiation.html">Content Negotiation</a>&#8221; in the Apache online documentation.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.holmdesigns.com/wp/?feed=rss2&amp;p=62</wfw:commentRSS>
		</item>
		<item>
		<title>PHP Output Buffering</title>
		<link>http://www.holmdesigns.com/wp/?p=61</link>
		<comments>http://www.holmdesigns.com/wp/?p=61#comments</comments>
		<pubDate>Tue, 08 Aug 2006 22:48:33 +0000</pubDate>
		<dc:creator>bruce</dc:creator>
		
	<category>Books</category>
		<guid isPermaLink="false">http://www.holmdesigns.com/wp/?p=61</guid>
		<description><![CDATA[Chapter 11 in &#8220;PHP In A Nutshell&#8221; book by Paul Hudson described what output buffering is and how to use it and why.
By default PHP will transfer display information to the client&#8217;s web browser as soon as it&#8217;s ready to be sent. However the display does not occur until the end of the script has [...]]]></description>
			<content:encoded><![CDATA[<p>Chapter 11 in &#8220;PHP In A Nutshell&#8221; book by Paul Hudson described what output buffering is and how to use it and why.</p>
<p>By default PHP will transfer display information to the client&#8217;s web browser as soon as it&#8217;s ready to be sent. However the display does not occur until the end of the script has been reached. But this can  be slow as it waits for all the bits of data to be computed and restricts you on the order that it&#8217;s displayed. With output buffering you can gather chunks or all of the display output and rearrange the chunks if needed or negate displaying them at all based on conditions you choose such as error conditions. It also lets you compress the output before sending it to the client and reduces the amount of data needing to be transferred, however the savings in bandwidth may be negated by the extra CPU time needed to do the compression.</p>
<p>To buffer output, you call the ob_start() function before the output is sent. When the output in this chunk is complete, then you can either call ob_end_flush() which dumps it immediately to the client&#8217;s web browser or call ob_end_clean() which clears the buffer. If you wish to hang on to the buffer contents you can either load it into a string var (explained below) before clearing the buffer or you can open a new buffer with a second ob_start() function call instead of the ob_end_clean. This effectively puts the first buffer contents on hold while a new nested buffer collects the output generated from that point on. Calling the ob_end_flush after some output is generated will flush the output in this nested second buffer into the first output buffer. Or again, calling ob_end_clean would clear the second buffer instead, returning further output collects going into the first output buffer again.</p>
<p>Two other functions, ob_flush and ob_clean do the same things as the ob_end_flush and ob_end_clean functions respectively except the output buffer isn&#8217;t closed.  To read the current output buffer content, use the function ob_get_contents() which returns the buffer as a string. Once the buffer contents are in a string var then you can use it later for display or for writing to a file or based on error or other conditions, decide what to do with it.</p>
<p>Using these functions carefully can result in control over what is output and in what order. One possible use of the output buffering would be to help separate the PHP code used to process a form submission that validates the form input before the display template is generated, allowing the error messages to be collected prior to the page html code is generated.</p>
<p>Another handy function to use is the flush() function which displays the output so far immediately.  This is primarily useful when the end of the script has not been reached and you want to display what has been generated so far in the buffer.  It can also be useful when the output buffering is not being used but the output content being generated is taking a long time to crunch through.</p>
<p>To compress the output buffer contents, pass the parameter ob_gzhandler to ob_start(). This essentially zips the information before it is sent. The last section of the chapter discusses url rewriting, which allows for adding url parameters on all url references and hidden form elements within the output buffer. This is done using the functions output_add_rewrite_var() function.  If you later change your mind and want to undo the added URL and form element additions, then call the function output_reset_rewrite_vars() which removes them.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.holmdesigns.com/wp/?feed=rss2&amp;p=61</wfw:commentRSS>
		</item>
		<item>
		<title>PHP Cookies and Sessions</title>
		<link>http://www.holmdesigns.com/wp/?p=60</link>
		<comments>http://www.holmdesigns.com/wp/?p=60#comments</comments>
		<pubDate>Tue, 08 Aug 2006 21:51:50 +0000</pubDate>
		<dc:creator>bruce</dc:creator>
		
	<category>Books</category>
		<guid isPermaLink="false">http://www.holmdesigns.com/wp/?p=60</guid>
		<description><![CDATA[Going back to Chapter 10 in Paul Hudson&#8217;s book &#8220;PHP In a Nutshell&#8221; he covers cookies and sessions. Cookies are tiny little chunks of information passed from the server to the client&#8217;s web browser and stored on the client&#8217;s computer, which the web browser manages. If you prefer to prevent the user from possibly manipulating [...]]]></description>
			<content:encoded><![CDATA[<p>Going back to Chapter 10 in Paul Hudson&#8217;s book &#8220;PHP In a Nutshell&#8221; he covers cookies and sessions. Cookies are tiny little chunks of information passed from the server to the client&#8217;s web browser and stored on the client&#8217;s computer, which the web browser manages. If you prefer to prevent the user from possibly manipulating the information in the cookies, some prefer storing the information on the server side using session variables. A small cookie is used to store a reference session id for each client which is read each page call to lookup that client&#8217;s session id value, then associated with some server side variables store in memory.</p>
<p>PHP uses the function setcookie() to have the server pass the information to the client&#8217;s browser with the command to save it in a cookie. This function allows you to specify the name of the cookie, the value, and expiration date/time. Additionally you can limit the readability of the cookie to a particular directory within the domain website or to just a particular sub-domain of the domain.  You can also specify if only the secure https server can read this cookie or both http and https servers have access to it.</p>
<p>To use session variables you must first call the function &#8220;session_start()&#8221; which checks for the client-side cookie containing the session id. If none is found then one is created. Since the returned data from this function can only be transferred within the http header, it is therefore important to make this call before any web page body code is read.</p>
<p>Session variables can be written on one page and then read from aother. As long as the session id cookie has not expired or been deleted, that session is &#8220;alive&#8221;. It is possible to remove a set of session data and ending the session. All session vars can be read using the superglobal array $_SESSION.</p>
<p>The last half of the chapter goes over how session handling is done in PHP using flat files referenced using the unique session id handed out when session_start was called. It is possible to do the session handling yourself and in a more secure/safe way, such as using a database to manage the session management. Paul discusses how this is done and what functions need to be written to do this.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.holmdesigns.com/wp/?feed=rss2&amp;p=60</wfw:commentRSS>
		</item>
	</channel>
</rss>

