<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>Code Field</title>
	<atom:link href="http://digitfield-design.com/code/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://digitfield-design.com/code</link>
	<description>Just another WordPress weblog</description>
	<pubDate>Wed, 21 Jan 2009 02:39:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>Getting Started with Kohana (imported from lee.hambley.name)</title>
		<link>http://digitfield-design.com/code/?p=22</link>
		<comments>http://digitfield-design.com/code/?p=22#comments</comments>
		<pubDate>Wed, 21 Jan 2009 02:39:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://digitfield-design.com/code/?p=22</guid>
		<description><![CDATA[Kohana Tutorial, source : http://lee.hambley.name/kohana-tutorial
Getting Started with Kohana
Welcome to my tutorial entitled “Getting started with Kohana”, as a Kohana 1.x veteran, and a former Code Igniter user it’s often difficult to know what users need to know when they’re new to a framework. I’ve done my best, but I can’t coem up with all things [...]]]></description>
			<content:encoded><![CDATA[<p>Kohana Tutorial, source : <a href="http://lee.hambley.name/kohana-tutorial">http://lee.hambley.name/kohana-tutorial</a><br />
Getting Started with Kohana</p>
<p>Welcome to my tutorial entitled “Getting started with Kohana”, as a Kohana 1.x veteran, and a former Code Igniter user it’s often difficult to know what users need to know when they’re new to a framework. I’ve done my best, but I can’t coem up with all things to all people in the first sitting, comments, suggestions, aberrations and more welcome in my inbox.</p>
<p>With my first forray into Kohana 2.1 fresh in my mind - I have opted to start out writing a simple tutorial; note - I say writing, I can’t abide video tutorials… I’m a data skimmer, and it’s hard to skim a video; unless of course they’re bookmarked like the videos on TED are, which I understand we can’t do on the Kohana site</p>
<p>For this particular project, I am using the inexpensive and reliable www.hosted-projects.com service, costing a mere $7 a month, and he does daily backups… and offers a pain free set up. A free alternative, if you are so inclined is Assembla, thanks to easylancer for that tip. I won’t however be covering how to use Subversion, at least not in this tutorial/how-to.<br />
Getting Kohana</p>
<p>There are two ways to grab Kohana, the easiest is to use the release package that they provide; there’s a setback though, Kohana is a moving target, bugs are being discovered and fixed (quickly!) all the time, and while you should try to develop on a stable platform (by using the release version) - it is often advantageous to use the subversion, version.<br />
Using The Release Version</p>
<p>To grab the release version it’s easy, just go here, and assemble the package you want, with all the languages you fancy (I happen to use English (UK)) but you can grab whichever you prefer.</p>
<p>You should unpack this archive, and move it to your working directory (that is, in my case ~/Sites/Example/). Assuming that your directory is now laid out as such, you should - if we’re using subversion - add the resources to svn and then continue.</p>
<p># ls ~/Sites/Example/<br />
drwxr-xr-x  13 leehambley  leehambley   442 10 Mar 14:58 application<br />
-rw-r&#8211;r&#8211;@  1 leehambley  leehambley  3970 10 Mar 14:54 index.php<br />
drwxr-xr-x   5 leehambley  leehambley   170 10 Mar 16:26 modules<br />
drwxr-xr-x  12 leehambley  leehambley   408 10 Mar 14:52 system</p>
<p>If that’s the case (the values listed will vary considerably depending on your time/date/users/groups/system/preferences) - the only important thing is that</p>
<p>index.php</p>
<p>,</p>
<p>modules</p>
<p>,</p>
<p>system</p>
<p>and application are all present</p>
<p># svn add system<br />
# svn add modules<br />
# svn add application<br />
# svn add index.php<br />
# svn commit -M &#8220;I&#8217;m adding the first fer files to svn&#8221;</p>
<p>Using the SVN (Subversion) Version (svn:externals)</p>
<p>You can also, if you are using Subversion, check it out from the repository, and benefit from bug fixes, tweaks, and cutting edge changes; this usually isn’t a good idea on a production system though; so I shan’t go into it here.<br />
Understanding MVC</p>
<p>Unless you’ve been living under a rock for the last 18 months or so, it’s pretty unlikely as a web developer you haven’t heard someone throw the term MVC round, so what does it mean; what doesn’t it mean… and why do we care?</p>
<p>Firstly, it may help to explain what MVC really means - it stands for “Model View Controller” - which is just a way of structuring an application.</p>
<p>I’ve outlined a little about Models, Views and Controllers below - I’ve also just linked the wikipedia page - because it really does a better job of explaining than I can be bothered duplicating here <img src='http://digitfield-design.com/code/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>To quote Wikipedia, if you don’t fancy the reading - it sums up MVC as such:<br />
Models</p>
<p>In essence, “models model data” to the common developer, that means a data source of some description - most commonly a database, and Kohana makes it really easy to use Database models, because of a few handy objects that you get built in, such as ORM and the DB layer; but there’s no reason a model can’t represent a flat file, or a web-service.</p>
<p>Controllers typically represent a table in a database<br />
Views</p>
<p>Views, as far as Kohana is concerned, are (x)HTML files, that are used to draw a user interface - there’s nothing magical about them; you can include views within views - to have common headers and footers or other elements, and views, just like regular (x)HTML files can contain all the usual tags and constructs - however they also usually include some PHP tags (often using the alternative php syntax for ease-on-the-eyes)<br />
Controllers</p>
<p>The controllers, as wikipedia explains - are what ties the Models and Views together - controllers and the methods contained within form the url structure of a typical MVC framework, and this is just as true in Kohana.</p>
<p>Controllers, typically represent one area of a system - typical controller names (I’m sure you can figure out what they do) include users, messages,products, etc.</p>
<p>A controller typically contains at least 4 methods, these represent CRUD allowing you to interact with your models in all the ways that make sense.</p>
<p>Controllers, in reality often offer many more functions, for example it’s not unusual to see a users controller with the following methods:</p>
<p>Class Users_Controller extends Controller<br />
{<br />
// Example URL might be:<br />
// http://www.example.com/users/login<br />
public function login()<br />
{<br />
// draw and process a login form<br />
}</p>
<p>// users/register<br />
// http://www.example.com/users/register<br />
public function register()<br />
{<br />
// draw and process a registration form<br />
}</p>
<p>// users/forgotten_password<br />
// http://www.example.com/users/forgotten_password<br />
public function forgotten_password()<br />
{<br />
// draw and process a forgotten password form<br />
}</p>
<p>// users/create<br />
// http://www.example.com/users/create<br />
# public function create()<br />
# {<br />
#     // In reality, this method would likely be called<br />
#     // Register - and we already have a register method <img src='http://digitfield-design.com/code/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
# }</p>
<p>// users/read<br />
// http://www.example.com/users/read/leehambley<br />
public function read($username)<br />
{<br />
// Read the user from the `data source` using the value passed in $username<br />
}</p>
<p>// users/update<br />
// http://www.example.com/users/update<br />
public function update()<br />
{<br />
// This function would likely expect post variables<br />
// to actually update a user, otherwise you&#8217;d expect<br />
// when retrieved with GET, that it would draw the<br />
// profile update form.<br />
}</p>
<p>// users/delete<br />
// http://www.example.com/users/delete<br />
public function delete()<br />
{<br />
// Again, this method is likely to expect post<br />
// variables - it should delete a user, and everyhing<br />
// associated with one &#8212; or whatever your app expects!<br />
}<br />
}</p>
<p>In actuality, you’d probably rename a lot of the methods for the standard CRUD operations - read would likely become view for example, but it’s the principles that count.</p>
<p>I’m going to leave MVC alone for now, with a little reading of wikipedia, and looking at some Kohana examples (the modules, are ideal to look at, they’re little self contained bundles of Models, Views and Controllers (and configuration files, amongst other things))<br />
Understanding Application / Modules / System Directories</p>
<p>As you probably gathered when you unpacked the downloaded archive, there are Application, System and Modules directories - I’ll start with the system directory, as it’s the most important - and the others inherit it’s arrangement and purpose - I’ll then explain how this can be wrestled to your benefit to make cleaner code.<br />
System</p>
<p>The system directory is arranged into a series of folders, their names should be pretty self explanatory - so I won’t bore you with running down all the obvious ones; the exceptions here are vendor, i18n and l10n.</p>
<p>Vendor is intended to contain any 3rd party apps that may be bundled with Kohana, in my case that’s SwiftMailer and HTML Purifier.</p>
<p>l10n and i18n are shortcuts, you can read more about them on the wikipedia page for internationalisation and localisation</p>
<p>The rest of the folders here are the first port of call for any requests that go through - they are the basis of everything, the configuration files here are the defaults, controllers and views here are the defaults; and are available throughout the system.<br />
Application</p>
<p>Application is your main place of working, you should be adding new controllers, views and models here. There are a number of tutorials online on the Kohana website that can help you look at developing in this way, and that’s great because it means you can copy a file from the system directory, into the same place in application and it will override the defaults; if you do it this way, then you can always just remove your custom file, and let Kohana default back to the originals.<br />
Modules</p>
<p>Modules are a fantastic concept, it’s basically a mini application directory inside the modules directory, for example modules/ny_module. They’re loaded only if they appear in config/config.php, and are complete stand-alone mini-apps, they’re designed to be pluggable, portable little applications - there really isn’t more to say on them; just take a look at any of the standard modules. The auth module is as good an example as any, since it relates to users, it sort-of touches on the whole user idea that I’ve already tried to familiarise yourself with.<br />
How URLS Work In Kohana</p>
<p>We touched briefly, earlier on the concept of URLS in Kohana, and explained that there are constructed from the controller name, and the method name in question - it is also constructed from a handful of settings from the configuration directory. I’ve tried to draw out how they’re constructed below:</p>
<p>http://www.example.com/index.php/auth/create.html</p>
<p>[  ]   [             ] [       ] [  ] [    ] [  ]<br />
|            |            |      |    |      \___ config.php: $config['url_suffix']</p>
<p>|            |            |      |    \__________ controller method name</p>
<p>|            |            |      \_______________ controller name</p>
<p>|            |            \______________________ config.php: $config['index_page']</p>
<p>|            \___________________________________ config.php: $config['site_domain']</p>
<p>\________________________________________________ config.php: $config['site_protocol']</p>
<p>Removing index.php</p>
<p>You can read more on removing index.php form your URLs here on the Kohana tutorials site.<br />
Using Your Database With Kohana<br />
MySQL<br />
Using The Auth Module (Requires Forge)</p>
]]></content:encoded>
			<wfw:commentRss>http://digitfield-design.com/code/?feed=rss2&amp;p=22</wfw:commentRss>
		</item>
		<item>
		<title>Practical Kohana Hooks example: PHPIDS (imported from ninjapenguin.co.uk)</title>
		<link>http://digitfield-design.com/code/?p=20</link>
		<comments>http://digitfield-design.com/code/?p=20#comments</comments>
		<pubDate>Wed, 21 Jan 2009 02:09:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://digitfield-design.com/code/?p=20</guid>
		<description><![CDATA[
So further to Dlibs tutorial on hooks,  I thought I would help to demonstrate the power of this with a practical example of their usage: whilst reading this entry on PHPIDS I thought that seemed like a prime candidate for an example and so by following along below you should have a nice example [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-31" title="phpids_logo" src="http://www.ninjapenguin.co.uk/blog/wp-content/uploads/2008/06/phpids_logo.png" alt="PHPIDS Logo" width="69" height="66" /></p>
<p>So further to Dlibs <a title="Learn Kohana tutorial on hooks and events" href="http://learn.kohanaphp.com/2008/06/13/events-and-hooks-in-kohana/">tutorial on hooks</a>,  I thought I would help to demonstrate the power of this with a practical example of their usage: whilst reading <a href="http://phpimpact.wordpress.com/2008/06/22/intrusion-detection-for-php-applications-with-phpids/">this entry</a> on <a href="http://php-ids.org/">PHPIDS</a> I thought that seemed like a prime candidate for an example and so by following along below you should have a nice example of integrating a third party app into Kohana using the hooks/events system!</p>
<p><strong>PHPIDS</strong></p>
<p>From the site..</p>
<blockquote><p>“PHPIDS (PHP-Intrusion Detection System) is a simple to use, well structured, fast and state-of-the-art security layer for your PHP based web application. The IDS neither strips, sanitizes nor filters any malicious input, it simply recognizes when an attacker tries to break your site and reacts in exactly the way you want it to.”</p></blockquote>
<p>So we can simply insert PHPIDS into the Kohana system and have it silently monitor requests to our app/page informing us (if we wish) when it detects any potential attacks.</p>
<p><strong>Third party apps in Kohana</strong></p>
<p>Kohana loves third party applications, so much so that it makes it easy for us to integrate them . .meaning we have to write even less code. Kohana provides us with an area to centrally store any such applications (referred to as vendor apps) within the system folder. This folder can be found at &lt;system_path&gt;/vendor and is where any vendor apps we would like to use in our projects should be placed. If you look within that folder now you will see there are allready a number of such applications used within Kohana which you may or may not be familiar with.</p>
<p>If after reading this tutorial you would like more information on integrating other third party apps then you should definitely take a closer look at the email helper ( system/helpers/email.php ) which is a fantastic example of creating a helper to integrate a vendor app (in this case the Swift email library).</p>
<p><strong>1 - Getting PHPIDS</strong></p>
<p>The first step is to get yourself a copy of PHPIDS <a href="http://php-ids.org/downloads/">from here</a> (the version I am working with is 0.5). After downloading this you can then extract the file into the system/vendor directory so that your vendor dir now contains a phpids folder aswell. Within the download we get three directories (tests, docs and lib) we are onlt really interested in lib although leaving the other two there for reference/testing is no bad idea.</p>
<p>We now have access to our third party app!</p>
<p><strong>2 - Registering our hook</strong></p>
<p>As I mentioned above one part of this tutorial was to demonstrate the power or hooks, allthough as a single feature they are actually very well documented within Kohana, for more information on them see the following pages:</p>
<ul>
<li><a href="http://docs.kohanaphp.com/general/hooks">Kohana hooks documentation</a></li>
<li><a href="http://docs.kohanaphp.com/general/events">Kohana events documentation</a></li>
<li><a href="http://learn.kohanaphp.com/2008/06/13/events-and-hooks-in-kohana/">Learn Kohana Blog on hooks/events</a></li>
</ul>
<p>In essence a hook is just a normal piece of code, nothing special at all. The power comes in when we are allowed to execute this piece of code at a number of pre-determined points through the execution process of the Kohana process (see the events docs), we can therefore deploy (in this case) PHPIDS at avery early point the in the page rendering process (prior to our controllers being executed for example), in many cases this is ideal in terms of security, efficiency, speed etc.</p>
<p>So to register our hook simply copy the config file (system/config/hooks.php) into our application config directory (resulting in application/config/hooks.php). We can then enable hooks by changing the contents of the hooks.php (within our application config dir) to:</p>
<div class="wp_syntax">
<div class="code">
<pre class="php php" style="font-family: monospace;"><span style="color: #000088;">$config</span><span style="color: #009900;">[</span><span>'enable'</span><span style="color: #009900;">]</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">TRUE</span>;</pre>
</div>
</div>
<p>Doing this means Kohana will now scan the application/hooks directory for any files and attempt to include and execute them.</p>
<p><strong>3 - Creating our hook</strong></p>
<p>The final step is creating our hook and configuring PHPIDS. Whilst doing this all code will be fairly PHPIDS specific, I was able to basically follow the included examples (and the examples in the blog posts above) in order to set it up (as I found documentation on their site fairly lacking), the code below represents a simple hook which will get your system running!</p>
<div class="wp_syntax">
<table border="0">
<tbody>
<tr>
<td class="line_numbers">
<pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39</pre>
</td>
<td class="code">
<pre class="php php" style="font-family: monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">defined</span><span style="color: #009900;">(</span><span>'SYSPATH'</span><span style="color: #009900;">)</span> or <span style="color: #990000;">die</span><span style="color: #009900;">(</span><span>'No direct script access.'</span><span style="color: #009900;">)</span>;

<span style="color: #000000; font-weight: bold;">class</span> Phpidsloader
<span style="color: #009900;">{</span>
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #990000;">static</span> <span style="color: #000000; font-weight: bold;">function</span> load<span style="color: #009900;">(</span><span style="color: #009900;">)</span>
   <span style="color: #009900;">{</span>
      <span style="color: #000088;">$path</span> <span style="color: #339933;">=</span> <span style="color: #990000;">get_include_path</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span>;
      <span style="color: #990000;">set_include_path</span><span style="color: #009900;">(</span><span style="color: #000088;">$path</span> <span style="color: #339933;">.</span> <span>':'</span> <span style="color: #339933;">.</span> SYSPATH <span style="color: #339933;">.</span><span>'vendor/phpids/lib'</span><span style="color: #009900;">)</span>;

      <span style="color: #b1b100;">require_once</span> <span>'IDS/Init.php'</span>;

      <span style="color: #666666; font-style: italic;">//Define constants for the ini file (they should be using a dynamic format!)</span>
      <span style="color: #990000;">define</span><span style="color: #009900;">(</span><span>'IDS_FILTER_PATH'</span><span style="color: #339933;">,</span> SYSPATH<span style="color: #339933;">.</span><span>'vendor/phpids/lib/IDS/default_filter.xml'</span><span style="color: #009900;">)</span>;
      <span style="color: #990000;">define</span><span style="color: #009900;">(</span><span>'IDS_TMP_PATH'</span><span style="color: #339933;">,</span> SYSPATH<span style="color: #339933;">.</span><span>'vendor/phpids/lib/IDS/tmp'</span><span style="color: #009900;">)</span>;
      <span style="color: #666666; font-style: italic;">//this file must exist</span>
      <span style="color: #990000;">define</span><span style="color: #009900;">(</span><span>'IDS_LOG_FILE'</span><span style="color: #339933;">,</span> APPPATH<span style="color: #339933;">.</span><span>'logs/phpids_log.txt'</span><span style="color: #009900;">)</span>;
      <span style="color: #990000;">define</span><span style="color: #009900;">(</span><span>'IDS_CACHE_FILE'</span><span style="color: #339933;">,</span> SYSPATH<span style="color: #339933;">.</span><span>'vendor/phpids/lib/IDS/tmp/default_filter.cache'</span><span style="color: #009900;">)</span>;	

      <span style="color: #666666; font-style: italic;">//Run the monitor</span>
      <span style="color: #000088;">$init</span> <span style="color: #339933;">=</span> IDS_Init<span style="color: #339933;">::</span><span style="color: #004000;">init</span><span style="color: #009900;">(</span>SYSPATH<span style="color: #339933;">.</span><span>'vendor/phpids/lib/IDS/Config/Config.ini'</span><span style="color: #009900;">)</span>;
      <span style="color: #000088;">$ids</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> IDS_Monitor<span style="color: #009900;">(</span><span style="color: #000088;">$_REQUEST</span><span style="color: #339933;">,</span> <span style="color: #000088;">$init</span><span style="color: #009900;">)</span>;
      <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$ids</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">run</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span>;

      <span style="color: #b1b100;">if</span> <span style="color: #009900;">(</span><span style="color: #339933;">!</span><span style="color: #000088;">$result</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isEmpty</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
         <span style="color: #b1b100;">require_once</span> <span>'IDS/Log/File.php'</span>;
         <span style="color: #b1b100;">require_once</span> <span>'IDS/Log/Composite.php'</span>;

	 <span style="color: #666666; font-style: italic;">//Log all scores</span>
	 <span style="color: #000088;">$compositeLog</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> IDS_Log_Composite<span style="color: #009900;">(</span><span style="color: #009900;">)</span>;
	 <span style="color: #000088;">$compositeLog</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addLogger</span><span style="color: #009900;">(</span>IDS_Log_File<span style="color: #339933;">::</span><span style="color: #004000;">getInstance</span><span style="color: #009900;">(</span><span style="color: #000088;">$init</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>;
	 <span style="color: #000088;">$compositeLog</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">(</span><span style="color: #000088;">$result</span><span style="color: #009900;">)</span>;
      <span style="color: #009900;">}</span>

      <span style="color: #666666; font-style: italic;">//reset the include path</span>
      <span style="color: #990000;">set_include_path</span><span style="color: #009900;">(</span><span style="color: #000088;">$path</span><span style="color: #009900;">)</span>;
   <span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
Event<span style="color: #339933;">::</span><span style="color: #004000;">add</span><span style="color: #009900;">(</span><span>'system.ready'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span><span>'Phpidsloader'</span><span style="color: #339933;">,</span> <span>'load'</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre>
</td>
</tr>
</tbody>
</table>
</div>
<p>The above is a simplified version of my final hook (which I will show later), but it demonstrates clearly the power or exactly what we are doing here.</p>
<p>The basic workflow is to set up the system in order that PHPIDS will run (so define include paths etc, define config path constants (for the PHPIDS config file)), run the application and finally return the system back to how we left it (as near as possible), so reset include paths etc . .that is all there is to it</p>
<p>You will need to then setup the PHPIDS config file which you will find in system/vendor/phpids/lib/IDS/Config/config.ini, I left the file as it was except for the paths in there which I ammended with the defined constants above (You can probably get away with using my config file below), another little gotcha is that in this case we will need to create the log file within application/logs (called phpids_log.txt) and make it writeable by the server as PHPIDS doesnt seem to automatically create this file</p>
<p><strong>Additional Extras</strong></p>
<p>So there we have an example of integrating a third party app (PHPIDS) into Kohana, the demonstration so far doesnt really do a great deal however so I went forward and added some extra logic into the hook which made use of some of the power of PHPIDS, using the attatched hook below we now</p>
<ul>
<li>Track users actions accross the site, measing their threat level between pages</li>
<li>Enable actions to be taken at pre-defined threat levels (25 sends us a warning email, 50 kicks them off the site etc)</li>
<li>Record all registered warnings in the log file</li>
<li>Use the system to gather forensic evidence on the potential attack</li>
</ul>
<p>I have included my hook, along with the PHPIDS config file so that you can see exctly how I have them set up, as normal any questions or comments please do not hesitate to ask!</p>
<p><a href="http://www.ninjapenguin.co.uk/blog/wp-content/uploads/2008/06/kohana-phpids.zip">Download here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://digitfield-design.com/code/?feed=rss2&amp;p=20</wfw:commentRss>
		</item>
		<item>
		<title>Bonjour Monde</title>
		<link>http://digitfield-design.com/code/?p=18</link>
		<comments>http://digitfield-design.com/code/?p=18#comments</comments>
		<pubDate>Wed, 21 Jan 2009 01:42:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Framework]]></category>

		<category><![CDATA[Kohana]]></category>

		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://digitfield-design.com/code/?p=18</guid>
		<description><![CDATA[Bonjour tout le monde !




Statut
Brouillon


A faire
bonjour(avec une vue (M)VC), relecture


Compatibilité
kohanaphp v2.1.2


Mots-clés

 tutoriel, 	installation, 	configuration 




Le tutoriel suivant vous apprendra à installer et configurer KohanaPHP, et vous permettra de réaliser l&#8217;applicatif le plus basique qui soit, l&#8217;affichage du message “bonjour tout le monde !”.
L&#8217;objectif est de vous permettre de faire fonctionner la machine, rien de plus.



Prérequis [...]]]></description>
			<content:encoded><![CDATA[<h1><a id="bonjour_tout_le_monde" name="bonjour_tout_le_monde">Bonjour tout le monde !</a></h1>
<div class="level1">
<table class="inline" border="0">
<tbody>
<tr>
<th>Statut</th>
<td>Brouillon</td>
</tr>
<tr>
<th>A faire</th>
<td>bonjour(avec une vue (M)VC), relecture</td>
</tr>
<tr>
<th>Compatibilité</th>
<td>kohanaphp v2.1.2</td>
</tr>
<tr>
<th>Mots-clés</th>
<td>
<div class="tags"><span> <a class="wikilink1" title="tag:tutoriel" rel="tag" href="http://www.kohanaphp.ch/fr/tutorials/tag/tutoriel?do=showtag&amp;tag=tutoriel">tutoriel</a>, 	<a class="wikilink1" title="tag:installation" rel="tag" href="http://www.kohanaphp.ch/fr/tutorials/tag/installation?do=showtag&amp;tag=installation">installation</a>, 	<a class="wikilink1" title="tag:configuration" rel="tag" href="http://www.kohanaphp.ch/fr/tutorials/tag/configuration?do=showtag&amp;tag=configuration">configuration</a> </span></div>
</td>
</tr>
</tbody>
</table>
<p>Le tutoriel suivant vous apprendra à installer et configurer KohanaPHP, et vous permettra de réaliser l&#8217;applicatif le plus basique qui soit, l&#8217;affichage du message “bonjour tout le monde !”.</p>
<p>L&#8217;objectif est de vous permettre de faire fonctionner la machine, rien de plus.</p>
<div class="box red">
<div class="xbox">
<div class="box_content">
<p><strong>Prérequis :</strong> Ce tutoriel s&#8217;adresse à des personnes ayant déjà connaissance du langage <acronym title="Hypertext Preprocessor">PHP</acronym> (en particulier de la programmation orientée objet en PHP5). Et disposant (ou sachant installer et configurer) d&#8217;un serveur <a class="urlextern" title="http://www.kohanaphp.ch/fr/docs/installation/requirements" rel="nofollow" href="http://www.kohanaphp.ch/fr/docs/installation/requirements">répondant aux prérequis</a> nécessaire au bon fonctionnement du framework KohanaPHP.</p>
<hr />Même si je vais faire mon possible pour être aussi clair que possible, je n&#8217;ai non plus pas l&#8217;intention de faire des vues d&#8217;écran à chaque clic de souris, donc un minimum de sens pratique et capacité d&#8217;adaptation sera indispensable le but n&#8217;est pas de faire du copier-coller, mais d&#8217;apprendre <img class="middle" src="http://www.kohanaphp.ch/lib/images/smileys/icon_wink.gif" alt=";-)" /></div>
</div>
</div>
</div>
<h3><a id="installer_le_framework" name="installer_le_framework">Installer le framework</a></h3>
<div class="level3">
<p>Le framework kohanaphp est livré sous forme d&#8217;archive que vous pouvez <a class="urlextern" title="http://kohanaphp.com/download.html" rel="nofollow" href="http://kohanaphp.com/download.html">télécharger depuis le site officiel</a>. (accessoirement voici <a class="urlextern" title="http://kohanaphp.com/download.html?modules%5Bauth%5D=Authmodules%5Bforge%5D=Forgemodules%5Bmedia%5D=Mediamodules%5Bkodoc%5D=Kodocvendors%5Bmarkdown%5D=Markdownvendors%5Bswiftmailer%5D=SwiftMailervendors%5Bhtmlpurifier%5D=HTMLPurifierlanguages%5Ben_US%5D=en_USlanguages%5Bde_DE%5D=de_DEformat=zip" rel="nofollow" href="http://kohanaphp.com/download.html?modules%5Bauth%5D=Authmodules%5Bforge%5D=Forgemodules%5Bmedia%5D=Mediamodules%5Bkodoc%5D=Kodocvendors%5Bmarkdown%5D=Markdownvendors%5Bswiftmailer%5D=SwiftMailervendors%5Bhtmlpurifier%5D=HTMLPurifierlanguages%5Ben_US%5D=en_USlanguages%5Bde_DE%5D=de_DEformat=zip">le lien pour télécharger l&#8217;archive</a> identique à celle ayant servit pour l&#8217;écriture de ce tutoriel)</p>
<p>Pour ce tutoriel, nous n&#8217;aurons besoin que du package de base, mais que cela ne vous empêche pas de sélectionner tout les modules, utilitaires tiers (vendor tools) et accessoirement de rajouter un ou deux fichiers de langue, histoire de ne pas avoir à télécharger à nouveau l&#8217;archive à chaque fois que vous voulez récupérer un module ou utilitaire tiers.</p>
<p>Décompressez l&#8217;archive dans un dossier temporaire. Vous obtenez un dossier <code>Kohana_v2.1.2/</code> contenant 3 dossiers (<code>application/</code>,<code>modules/</code>,<code>system/</code>) un fichier <code>index.php</code> ainsi que le fichier <acronym title="HyperText Markup Language">HTML</acronym> de la licence de kohana et son logo.</p>
<p>Chargez le contenu (3 dossiers et les 3 fichiers) sous la racine web de votre serveur. (personnellement, j&#8217;ai gardé le tout dans un sous-dossier <code>Kohana_v2.1.2/</code>).</p>
<p>Et maintenant depuis votre navigateur rendez-vous à l&#8217;adresse pointant sur le fichier <code>index.php</code> (si vous travaillez en local comme moi, et que vous avez chargez le tout dans le même sous-dossier : <a class="urlextern" title="http://localhost/Kohana_v2.1.2/index.php" rel="nofollow" href="http://localhost/Kohana_v2.1.2/index.php">http://localhost/Kohana_v2.1.2/index.php</a>)</p>
<p>Si vous voyez une belle page verte avec un petit texte en anglais; C&#8217;est que l&#8217;installation c&#8217;est bien déroulée. Dans le cas contraire, vérifiez que votre serveur est conforme au prérequis, que vous avez bien tout charger les fichiers sur le serveur et que vous tentez bien d&#8217;accéder à la bonne <acronym title="Uniform Resource Locator">URL</acronym>. (et au besoin passer sur le forum pour demander de l&#8217;aide.)</div>
<h3><a id="premiere_application_avec_kohana" name="premiere_application_avec_kohana">Première application avec kohana</a></h3>
<div class="level3">
<p>Pour commencer, vous devez <strong>créer la structure hiérarchique</strong> des dossiers propres à une application kohana. Au niveau du fichier <code>index.php</code> créez le dossier de notre application, je l&#8217;ai personnellement nommé <code>bonjour/</code>. Et dans ce dossier créer les sous-dossiers <code>config/</code>,<code>controllers/</code>, <code>logs/</code>, <code>view/</code> indispensables. (l&#8217;autre variante étant de copier le dossier <code>application/</code> fourni avec kohana, de le renommer et de supprimer les fichiers qu&#8217;il contient).</p>
<hr />La deuxième étape consiste à <strong>créer et configurer le fichier maître</strong> (ou chargeur). Plutôt que d&#8217;éditer le fichier <code>index.php</code>, je vous propose d&#8217;en créer une copie. Personnellement, j&#8217;ai renommé cette copie <code>bonjour.php</code> afin d&#8217;avoir un nom cohérent avec celui de mon dossier d&#8217;application.</p>
<p>Maintenant ouvrez votre fichier maître (<code>bonjour.php</code> ou le nom que vous avez préféré). Celui-ci défini (ligne 19 et 27 normalement) deux variables <acronym title="Hypertext Preprocessor">PHP</acronym>; $kohana_application, et $kohana_system qui indiquent respectivement la localisation du dossier de votre application et du dossier système de kohana. Il suffit d&#8217;éditer leur valeur pour indiquer les bons emplacements (chemin relatif par rapport au fichier maître, ou en absolu).</p>
<pre class="code =">...
<span class="coMULTI">/**
 * Kohana website application directory. This directory should contain your
 * application configuration, controllers, models, views, and other resources.
 *
 * This path can be absolute or relative to this file.
 */</span>
<span class="re0">$kohana_application</span> = <span class="st0">'bonjour'</span>;

<span class="coMULTI">/**
 * Kohana package files. This directory should contain the core/ directory, and
 * the resources you included in your download of Kohana.
 *
 * This path can be absolute or relative to this file.
 */</span>
<span class="re0">$kohana_system</span> = <span class="st0">'system'</span>;
...</pre>
<hr />La 3e étape est la mise en place de votre <strong>fichier de configuration principal</strong> <code>config.php</code>. Celui-ci doit impérativement être présent et se trouver dans le sous-dossier <code>config/</code> de votre dossier d&#8217;application. Copiez le fichier de configuration de l&#8217;exemple d&#8217;application, <code>application/config/config.php</code> à l&#8217;emplacement correspondant dans votre application (pour moi <code>bonjour/config/config.php</code>). Ouvrez ensuite ce fichier, ce qui va nous intéresser pour l&#8217;instant ce sont les configs présent en début de fichier.</p>
<pre class="code ="><span class="kw2">&lt;?php</span> <a href="http://www.php.net/defined"><span class="kw3">defined</span></a><span class="br0">(</span><span class="st0">'SYSPATH'</span><span class="br0">)</span> or <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">(</span><span class="st0">'No direct script access.'</span><span class="br0">)</span>;
<span class="coMULTI">/**
 * Domain name, with the installation directory. Default: localhost/kohana/
 */</span>
<span class="re0">$config</span><span class="br0">[</span><span class="st0">'site_domain'</span><span class="br0">]</span> = <span class="st0">'localhost/Kohana_v2.1.2/'</span>;</pre>
<p>La première valeur défini le domaine du site, ainsi que le chemin d&#8217;accès si votre fichier maître (chargeur) n&#8217;est pas placé directement à la racine du site. exemple:</p>
<ul>
<li class="level1">
<div class="li">à la racine du site, serveur en ligne: <code><a class="urlextern" title="http://www.exemple.com/" rel="nofollow" href="http://www.exemple.com/">www.exemple.com/</a></code></div>
</li>
<li class="level1">
<div class="li">dans sous-dossier, serveur local: <code>localhost/dossier/sousdossier/</code></div>
</li>
</ul>
<pre class="code ="><span class="coMULTI">/**
 * Default protocol used to access the website. Default: http
 */</span>
<span class="re0">$config</span><span class="br0">[</span><span class="st0">'site_protocol'</span><span class="br0">]</span> = <span class="st0">'http'</span>;</pre>
<p>Permet au besoin de définir si vous travailler sur un site sécurisé le protocole <code>https</code>.</p>
<pre class="code ="><span class="coMULTI">/**
 * Name of the front controller for this application. Default: index.php
 *
 * This can be removed by using URL rewriting.
 */</span>
<span class="re0">$config</span><span class="br0">[</span><span class="st0">'index_page'</span><span class="br0">]</span> = <span class="st0">'bonjour.php'</span>;</pre>
<p>Ici il faut indiquer le nom de votre fichier maître (chargeur). Dans mon cas <code>bonjour.php</code>.</p>
<pre class="code ="><span class="coMULTI">/**
 * Fake file extension that will be added to all generated URLs. Example: .html
 */</span>
<span class="re0">$config</span><span class="br0">[</span><span class="st0">'url_suffix'</span><span class="br0">]</span> = <span class="st0">'.html'</span>;</pre>
<p>Permet de définir un suffixe à ajouter aux URLs générées par le framework. (lorsque présent dans une requête, ce suffixe sera donc ignoré par le framework)</p>
<hr />La 4e étape est de créer au moins un contrôleur. La configuration par défaut du routage, fait que si aucune indication ne lui est fournie, kohana tente de charger un contrôleur appelé Welcome_Controller et d&#8217;exécuter sa méthode index(). Tout ceci est naturellement reconfigurable, mais pour ce petit tutoriel, nous nous contenterons de respecter cette configuration par défaut.</p>
<p>Dans le sous-dossier <code>controllers/</code> de votre application, créez un fichier <code>welcome.php</code>. Celui-ci va définir la classe Welcome_Controller qui doit hériter de la classe Controller de Kohana. Pour la méthode index(), pour l&#8217;instant, nous allons juste faire un petit echo <acronym title="Hypertext Preprocessor">PHP</acronym>.</p>
<pre class="code ="><span class="kw2">&lt;?php</span> <a href="http://www.php.net/defined"><span class="kw3">defined</span></a><span class="br0">(</span><span class="st0">'SYSPATH'</span><span class="br0">)</span> or <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">(</span><span class="st0">'No direct script access.'</span><span class="br0">)</span>;

<span class="kw2">class</span> Welcome_Controller <span class="kw2">extends</span> Controller <span class="br0">{</span>

  <span class="kw2">public</span> <span class="kw2">function</span> index<span class="br0">(</span><span class="br0">)</span>
  <span class="br0">{</span>
    <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">'Bonjour tout le monde !'</span>;
  <span class="br0">}</span>

<span class="br0">}</span></pre>
<p><strong>*rajouter petit exemple Bonjour tout le monde ! mode MVC </strong>*</div>
]]></content:encoded>
			<wfw:commentRss>http://digitfield-design.com/code/?feed=rss2&amp;p=18</wfw:commentRss>
		</item>
		<item>
		<title>Kohana php framework - introduction</title>
		<link>http://digitfield-design.com/code/?p=16</link>
		<comments>http://digitfield-design.com/code/?p=16#comments</comments>
		<pubDate>Tue, 20 Jan 2009 00:01:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Framework]]></category>

		<category><![CDATA[Kohana]]></category>

		<guid isPermaLink="false">http://digitfield-design.com/code/?p=16</guid>
		<description><![CDATA[Index.php - the Boostrap
Ever heard the expression &#8220;Pull yourself up by your bootstraps&#8221; no? Well essentailly it means sort yourself out - take action to improve or change your current situation. Bootstrap files or programs are found all over the place, they help computers and programs sort themselves out when they are first activated. The [...]]]></description>
			<content:encoded><![CDATA[<h2>Index.php - the Boostrap</h2>
<p>Ever heard the expression &#8220;Pull yourself up by your bootstraps&#8221; no? Well essentailly it means sort yourself out - take action to improve or change your current situation. Bootstrap files or programs are found all over the place, they help computers and programs sort themselves out when they are first activated. The index.php file in your ci_tutorial folder, is the CodeIgniter bootstrap. It is the first file to get things done. let&#8217;s have a look at it.</p>
<p>Index.php is quite well commented so forgive me for repeating some of what is already written in the file, the first item we arive at in the index.php file is the error reporting:</p>
<h3>Error Reporting</h3>
<p class="php">error_reporting(E_ALL) - this is a native php function, any php script or program can use this function to set the level of error reporting. This exists so that you can decide what to do when an error is encountered, either display it to the screen (good during development) or try to continue silently (best for production). It&#8217;s current setting E_ALL means that all errors and notices will be reported, this should help with your debugging. Set it to 0 if you want to trun error reporting off.</p>
<p><span>[<a href="http://uk.php.net/error_reporting">error_repoting()</a>]</span></p>
<p class="geek">In order to ensure that errors are actually printed to the screen you can add the php ini directive <a href="http://uk2.php.net/ini_set">ini_set(&#8217;display_errors&#8217;, &#8216;On&#8217;)</a> here.</p>
<h3>$system_folder</h3>
<p>The system folder contains al the Kohana files so your index.php file needs to know where it is. You can leave this variable set to &#8217;system&#8217; becuase we haven&#8217;t altered the default layout.</p>
<h3>$application_folder</h3>
<p>Similarly to the system folder your index.php file needs to know where the application folder is (by default it is inside the system folder) you can leave this setting as it is.</p>
<h3>Set server path</h3>
<p>Kohana perfoms some php magic here to determine the full server path to your Kohana installation. It then uses this path to generate paths to important files. You do not need to edit this section.</p>
<p class="php">The strpos($system_folder, &#8216;/&#8217;) function checks for the position of &#8216;/&#8217; in the $system_folder variable that you set earlier, it retuns a value of FALSE if &#8216;/&#8217; is not found.</p>
<p><span>[<a href="http://uk3.php.net/strpos">strpos()</a>]</span></p>
<p class="geek">String functions are some of the most useful, and commonly used fuctions in php, they can be used to search and edit strings in all sorts of ways, check the php manual for more <a href="http://uk3.php.net/manual/en/ref.strings.php">string functions</a>.</p>
<h3>Define Application Constants</h3>
<p>A constant in php is a varaible that does not change (so it&#8217;s not variable at all) once set a constant is available all over your scripts, they can only store simple data, like a pth to file or a name, but they are ver useful when bootstrapping an application becuase they enable you to create stores of datya that you can later rely on.</p>
<p>Kohana sets constants that hold the file extension you are using (.php), and a number of paths that will be helpfull later.</p>
<p class="php">Kohana are created using the php define() function like this: define(&#8217;MY_CONSTANT&#8217;, &#8217;some simple data here&#8217;);Constants are always all in upper-case.</p>
<p><span>[<a href="http://uk2.php.net/constants">PHP constants</a>]</span></p>
<h3>Load the front controller</h3>
<p>At this stage the index.php file has done all it needs to spark (or perhaps ignite?) CodeIgniter into action, so it now includes the Kohana core file with this statement:</p>
<p class="code">require_once BASEPATH.&#8217;codeigniter/CodeIgniter&#8217;.EXT;</p>
<p>require_once tells php to go and get another file, if it has not already been gotten and include in the current run of things, think of this as including one file in another. Notice that the BASEPATH constant is used to give require_once the full path to the Kohana .php file.</p>
<p style="font-weight: bold;">In a later tutorial I will walk through the CodeIgniter.php file (and others), but I think that is is probably enough for now. The next section deal with <a href="http://glenswinfield.co.uk/tutorial/4.html">editing and creating views</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://digitfield-design.com/code/?feed=rss2&amp;p=16</wfw:commentRss>
		</item>
		<item>
		<title>CodeField Gallery plugin for FrogCMS</title>
		<link>http://digitfield-design.com/code/?p=6</link>
		<comments>http://digitfield-design.com/code/?p=6#comments</comments>
		<pubDate>Sun, 30 Nov 2008 16:02:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Content Management System]]></category>

		<category><![CDATA[FrogCMS]]></category>

		<guid isPermaLink="false">http://codefield.wordpress.com/?p=3</guid>
		<description><![CDATA[We are working on a gallery plugin based on the great BD Gallery plugin from http://frog.bebliuc.ro.
This gallery uses BD gallery backend for album management and offers a smoothgallery option additionally to the default options
Actually we will start a new one from scratch but I played a liitle with BD gallery plugin which is very interesting [...]]]></description>
			<content:encoded><![CDATA[<p>We are working on a gallery plugin based on the great BD Gallery plugin from http://frog.bebliuc.ro.</p>
<p>This gallery uses BD gallery backend for album management and offers a smoothgallery option additionally to the default options</p>
<p>Actually we will start a new one from scratch but I played a liitle with BD gallery plugin which is very interesting in order to become more familiar with FrogCMS plugin approach since we have been using since this week end only.</p>
<h3>Here are the additions we made:</h3>
<ul>
<li>album ($id) became album ($id, $limit)
<ul>
<li>$id - album category $id</li>
<li>$limit - the number of photos to be displayed</li>
</ul>
</li>
</ul>
<ul>
<li>I created a new function named album_random ($id, $limit) which selects random picture from a specific album.</li>
<li>In both functions parameters can be ignored by setting them to -1. I that case photos from all albums will be taken into account.</li>
<li>Finally I added smoothgallery support to the album which enable to show a slideshow of the pictures from the album you like</li>
</ul>
<h3>TODO</h3>
<p>- Enable the selection of several album vs one or all<br />
- Enable category tree<br />
- Upgrade administration panel to control album tree and ajax reorganisation<br />
- Upgrade Photo edition pannel in order to set validity from which the user will receive a message to confirm picture disabling&#8230;for example.<br />
- Update the control panel to add more slide show control from the panel and less from the code</p>
<h3>Requirements</h3>
<ul>
<li>A Frog v0.9.3 working install or superior</li>
<li>A MySQL connection, with or without PDO. SQLite is not supported(yet) .</li>
<li>PHP 5.x.x</li>
<li>Some photos to upload</li>
</ul>
<h3>Installation</h3>
<p>Follow BD gallery instrauctions: http://frog.bebliuc.ro/articles/2008/08/18/bd-gallery.html</p>
<h3>Usage</h3>
<p><span style="text-decoration: underline;">Activate the gallery</span></p>
<ul>
<li>Now, you have the settings all done, but there is no gallery displayed, no? So you have to create or modify a page, and place the following function in it :<br />
<code class="code"> &lt;?php gallery(); ?&gt;</code>That should do the trick</li>
<li>If you want to show only an certain album on a page, place this function in your page&#8217;s content :<br />
<code class="code"> &lt;?php album('1',0); ?&gt;</code>Where <strong>1</strong> is the id of the album shown in the Gallery administration panel.</li>
<li>album(A,B) : affiche les photos d&#8217;un album ou de l&#8217;ensemble des albums
<ul>
<li>A: Identifiant de l&#8217;album (0 pour afficher tous les albums)</li>
<li>B: Nombre d&#8217;images à afficher (0 limite ignorée)</li>
</ul>
</li>
<li>album_random (A,B) affiche de façon aléatoire photos d&#8217;un album ou de l&#8217;ensemble des albums
<ul>
<li>A: Identifiant de l&#8217;album (0 pour afficher tous les albums)</li>
<li>B: Nombre d&#8217;images à afficher (0 limite ignorée)</li>
</ul>
</li>
</ul>
<p><span style="text-decoration: underline;">Activate the smoothgallery</span></p>
<ul>
<li>place the following function in it :<code class="code">&lt;?php</code> gallery_style(); gallery_script_start();<br />
smooth_album(3,0); ?&gt;</li>
<li>smooth_album(A,B)
<ul>
<li>A: Identifiant de l&#8217;album (0 pour afficher tous les albums)</li>
<li>B: Nombre d&#8217;images à afficher (0 limite ignorée)</li>
</ul>
</li>
</ul>
<h3>WARNING</h3>
<ol>
<li>This release does not intend to replace the &#8220;official&#8221; gallery plugin and was build for a personal project.</li>
<li>This version cannot be installed on top of the above since 98% of the code and reference are similar</li>
<li>This release is for
<ol>
<li>Fresh installation of the gallery (or reinstallation after removal)</li>
<li>Upgrade of the gallery by using the enable_upgrade.php script or executing manually the instruction it contains</li>
</ol>
</li>
</ol>
<h3>Demo</h3>
<p>http://www.sensfield-design.com/cms-sample00/?external0.html</p>
<h3>Thanks to</h3>
<p>http://smoothgallery.jondesign.net/download/</p>
<h3>Download</h3>
<p><a class="alignleft" title="Beta version" href="http://digitfield-design.com/code/wp-content/uploads/2008/12/gallery-smooth_alpha.zip">Version beta</a><br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://digitfield-design.com/code/?feed=rss2&amp;p=6</wfw:commentRss>
		</item>
	</channel>
</rss>

