<?xml version="1.0"?>
<rss version="2.0">
   <channel>
      <title>Cognifty</title>
      <link>http://cognifty.com/</link>
	  <ttl>240</ttl>
      <description>Next generation PHP framework</description>
      <language>en-us</language>
      <pubDate>Wed, 10 Mar 2010 04:00:00 -0500</pubDate>
      <lastBuildDate>Wed, 10 Mar 2010 00:00:00 -0500</lastBuildDate>
      <generator>Cognifty 20</generator>
	  
      <item>
			<title>Irc support for cognifty and niftyserver #niftyserver</title>
			<link>http://cognifty.com/blog.entry/id=18/Irc_support_for_cognifty_and_niftyserver_niftyserver</link>
			<category>BlogNifty</category>
			<description>

If you want to chat about niftyserver vhost control panel, nifty CMS, or Cognifty framework hop into #niftyserver on irc.freenode.net 

</description>
			<pubDate>Tue, 10 Nov 2009 11:31:15 -0500</pubDate>
			<guid>http://cognifty.com/blog.entry/id=18/Irc_support_for_cognifty_and_niftyserver_niftyserver</guid>
      </item>
	  
      <item>
			<title>Wordpress Compatibility Layer</title>
			<link>http://cognifty.com/blog.entry/id=17/Wordpress_Compatibility_Layer.html</link>
			<category>BlogNifty</category>
			<description>

I've started working on a Wordpress compatibility layer to allow for any  wordpress theme or template to be applied to Nifty CMS.



You can checkout the code here: http://github.com/markkimsal/wp_compat



Screenshot is here: http://wiki.github.com/markkimsal/wp_compat 

</description>
			<pubDate>Fri, 06 Nov 2009 13:50:11 -0500</pubDate>
			<guid>http://cognifty.com/blog.entry/id=17/Wordpress_Compatibility_Layer.html</guid>
      </item>
	  
      <item>
			<title>Cognifty 19: Phing is the module installer</title>
			<link>http://cognifty.com/blog.entry/id=16/cognifty_19_phing_is_module_installer.html</link>
			<category>BlogNifty</category>
			<description>

A few weeks ago I posted about how I thought phing should be used as more of a run-time work-horse than a compile time only tool.



Release 19 of Cognifty uses Phing as the basis for its module installer.  Module authors write a standard &quot;install.xml&quot;,  and the current versions determine which target gets called.



For new installations, target &quot;install&quot; is called.

&lt;target name=&quot;install&quot;&gt;
    &lt;phingcall target=&quot;Copyfiles&quot;/&gt;
    &lt;phingcall target=&quot;CopyIcons&quot;/&gt;
&lt;/target&gt;


 For upgrades, two types of targets are searched for.  One is the specific version upgrade 

&lt;target name=&quot;upgrade_2_to_3&quot;&gt;
    &lt;phingcall target=&quot;Copyfiles&quot;/&gt;
&lt;/target&gt;


Or, for more generic upgrades, targets which upgrade any version to the latest can be specified like so: 

&lt;target name=&quot;upgrade_any_to_6&quot;&gt;
    &lt;phingcall target=&quot;createtables&quot;/&gt;
&lt;/target&gt;


The in</description>
			<pubDate>Sat, 15 Aug 2009 15:19:31 -0400</pubDate>
			<guid>http://cognifty.com/blog.entry/id=16/cognifty_19_phing_is_module_installer.html</guid>
      </item>
	  
      <item>
			<title>Phing as a Module Installer</title>
			<link>http://cognifty.com/blog.entry/id=15/phing_as_a_module_installer.html</link>
			<category>BlogNifty</category>
			<description>
<p>
For the next Cognifty release I'm working on a Phing based installer.  
</p>

<p>
Phing is good at doing all those rote tasks like copying, unzipping, and replacing values in a configuration script, so  why hasn't anybody done this before? 
</p>
</description>
			<pubDate>Thu, 09 Jul 2009 18:14:34 -0400</pubDate>
			<guid>http://cognifty.com/blog.entry/id=15/phing_as_a_module_installer.html</guid>
      </item>
	  
      <item>
			<title>PHP as a WebDAV server</title>
			<link>http://cognifty.com/blog.entry/id=14/php_as_a_webdav_server.html</link>
			<category>BlogNifty</category>
			<description>
<p>
The remote webdav module  shows you a virtual filesystem to allow an admin to change some configuration options, change the template HTML  or even install local modules. 
</p>
</description>
			<pubDate>Tue, 21 Apr 2009 14:01:56 -0400</pubDate>
			<guid>http://cognifty.com/blog.entry/id=14/php_as_a_webdav_server.html</guid>
      </item>
	  
      <item>
			<title>Cognifty 18: Custom Content</title>
			<link>http://cognifty.com/blog.entry/id=13/Cognifty_18:_Custom_Content</link>
			<category>BlogNifty</category>
			<description>
<p>
Release 18 is the latest version of Cognifty. The new big feature is custom content publishers. You can create your own types of content based off of the main file upload tool or text tool. You can write your own plug-in to handle the publishing and do any sort of compiling, checking, or linking required before the content goes out to the site. 
</p>
</description>
			<pubDate>Wed, 15 Apr 2009 15:51:58 -0400</pubDate>
			<guid>http://cognifty.com/blog.entry/id=13/Cognifty_18:_Custom_Content</guid>
      </item>
	  
      <item>
			<title>Cognifty 17: Identicons and DB Backups</title>
			<link>http://cognifty.com/blog.entry/id=12/cognifty_17_identicons_and_db_backups.html</link>
			<category>BlogNifty</category>
			<description>
<p>
Released last week, Cognifty 17 brings a new <em class="u">identicon</em> library as well as a simple way  to backup your database.
</p>

<p>
Identicons are a nice way to visually identify something.  Most of the time, people  confine their use to blog posters who don't have a specific avatar image.  Assuming that the poster's IP or e-mail address are unique, the identicon is a visual representation of  that piece of data. 
</p>
</description>
			<pubDate>Thu, 22 Jan 2009 13:17:13 -0500</pubDate>
			<guid>http://cognifty.com/blog.entry/id=12/cognifty_17_identicons_and_db_backups.html</guid>
      </item>
	  
      <item>
			<title>Cognifty 16: Sharing Modes and API Agents</title>
			<link>http://cognifty.com/blog.entry/id=11/cognifty_16_sharing_modes_and_api_agents.html</link>
			<category>BlogNifty</category>
			<description>

I didn't blog about release 15 specifically, so I'll combine the new features from 15 and 16 into  one post.


Release 15



Cognifty release 15 brings a new concept of &quot;Sharing Modes&quot; to the table.  A sharing mode  is a default implementation of row level security.  



Traditionally, many PHP applications completely lack any concept of groups or roles. This was one of the major road blocks which kept me from adopting applications  like &quot;DotProject&quot;.  In DotProject, if you wanted a user to be able to view   tickets, for example, this user would then be able to view all tickets in the system,  regardless of which group a certain user belonged to.  If you were to expose parts of  DotProject to your external clients, they would be able to see all tickets submitted  from all of your clients.



In a system such as this, we can see that there is some level of security, the ability  - or ROLE - to view tickets can be restricted to certain users.  But each record of dat</description>
			<pubDate>Wed, 01 Oct 2008 14:24:04 -0400</pubDate>
			<guid>http://cognifty.com/blog.entry/id=11/cognifty_16_sharing_modes_and_api_agents.html</guid>
      </item>
	  
      <item>
			<title>Cognifty 0014, nanoweb, and embedding PHP</title>
			<link>http://cognifty.com/blog.entry/id=10/latest_release_nanoweb_and_embedding_php.html</link>
			<category>BlogNifty</category>
			<description>
<p>
In honor of this release's compatibility with nanoweb and the new SQLite PDO driver, I've  written the first part of an article dealing with how to write your own virtual host  control panel, or other embedded PHP servers.
</p>

<p>
You can build a PHP-CGI binary for 1 platform, compile in  PDO and SQLite (since sqlite is just a C client library and not a server), and ship it  with nanoweb.  Now you have a full Web application stack in only about 14 Mb (depending  on what you throw into the php-cgi and how much you compile statically). 
</p>
</description>
			<pubDate>Mon, 28 Jul 2008 10:56:40 -0400</pubDate>
			<guid>http://cognifty.com/blog.entry/id=10/latest_release_nanoweb_and_embedding_php.html</guid>
      </item>
	  
      <item>
			<title>Live Cheatsheet Brings Tutorials to Life</title>
			<link>http://cognifty.com/blog.entry/id=9/live_cheatsheet_brings_tutorials_to_life.html</link>
			<category>BlogNifty</category>
			<description>
<p>
I've just added a new &quot;live cheat sheet&quot; to the <a href="http://cognifty.com/index.php/tutorial/" class="urlextern" title="http://cognifty.com/index.php/tutorial/">http://cognifty.com/index.php/tutorial/</a> section.  I've seen some other  projects which have these so-called &quot;cheat sheets&quot;, but the cheat sheet is simply a huge PDF.  These PDFs usually show a graphical representation of the software system as  a set colored blocks and arrows with tiny variables written inside the blocks.  These  variables are supposed to help you remember which functions are available at which points  in the system. 
</p>
</description>
			<pubDate>Thu, 10 Jul 2008 09:51:47 -0400</pubDate>
			<guid>http://cognifty.com/blog.entry/id=9/live_cheatsheet_brings_tutorials_to_life.html</guid>
      </item>
	  
      <item>
			<title>Is Your MVC MIA When it Comes to 404s?</title>
			<link>http://cognifty.com/blog.entry/id=8/is_your_mvc_mia_when_it_comes_to_404s.html</link>
			<category>BlogNifty</category>
			<description>
<p>
How can we capture 404 errors in MVC frameworks? Apache always finds the index.php file  that kicks off the MVC application. So, should a missing controller constitute an error at all?  Is sending a 404 the &quot;right&quot; thing to do? 
</p>
</description>
			<pubDate>Mon, 07 Jul 2008 18:35:37 -0400</pubDate>
			<guid>http://cognifty.com/blog.entry/id=8/is_your_mvc_mia_when_it_comes_to_404s.html</guid>
      </item>
	  
      <item>
			<title>Addslashes(): don't call it a comeback</title>
			<link>http://cognifty.com/blog.entry/id=6/addslashes_dont_call_it_a_comeback.html</link>
			<category>BlogNifty</category>
			<description>
<p>
I've seen a lot of people talking about mysql_real_escape_string() vs addslashes()  vs addcslashes().  There seems to be a lot of real confusion about what these  functions do (even with the php.net manual around), especially when it comes to   character sets.  I feel that some people are being <em class="u">scared</em> into using some escaping  methods with which they are not very familiar.   So, I've decided to lay it all out in a few charts so there is no confusion  about what each function does and how each can help protect against SQL injection attacks.
</p>
</description>
			<pubDate>Thu, 12 Jun 2008 11:25:18 -0400</pubDate>
			<guid>http://cognifty.com/blog.entry/id=6/addslashes_dont_call_it_a_comeback.html</guid>
      </item>
	  
      <item>
			<title>Paging Dr. Active Record</title>
			<link>http://cognifty.com/blog.entry/id=5/paging_doctor_active_record.html</link>
			<category>BlogNifty</category>
			<description><p>
Release 10 of Cognifty has a nice little database feature that I haven't noticed in  other libraries.  
I'm not saying they don't have them, but they don't really  announce useful tools to developers, just the same old stuff about OOP and some  directory structure loosely based on LogiCreate.
</p>

<p>
The feature about which I'm talking is the getUnlimitedCount() method.  When working with  data items, or active records, or SQL abstraction, or whatever you want to call it, the  getUnlimitedCount method runs the query it would normally run, but it selects the  total number of records without including the LIMIT or ORDER BY clauses.
</p></description>
			<pubDate>Wed, 21 May 2008 10:43:49 -0400</pubDate>
			<guid>http://cognifty.com/blog.entry/id=5/paging_doctor_active_record.html</guid>
      </item>
	  
      <item>
			<title>Filtering Spam as a Web Service</title>
			<link>http://cognifty.com/blog.entry/id=4/Filtering_Spam_as_a_Web_Service</link>
			<category>BlogNifty</category>
			<description>
<p>
Capturing spam as a Web service is becoming increasingly popular.
Services like Akismet, Akisment, Mollum, Defensio, can scan the content 
from your site's visitors, but what about the <i>behavior</i>?
</p>
</description>
			<pubDate>Mon, 28 Apr 2008 12:34:00 -0400</pubDate>
			<guid>http://cognifty.com/blog.entry/id=4/Filtering_Spam_as_a_Web_Service</guid>
      </item>
	  
      <item>
			<title>Blob Streaming in PHP</title>
			<link>http://cognifty.com/blog.entry/id=3/Blob_Streaming_in_PHP</link>
			<category>BlogNifty</category>
			<description><p>
There is one huge disadvantage to storing large files in a database when it comes to PHP, and that 
disadvantage is PHP itself, specifically the MySQL driver.  When PHP requests data from MySQL, the 
result set, if large enough, will get paged to disk on by the server.  When the MySQL client library 
in PHP gets the result, it keeps a copy of the data, and then <i>copies</i> the values into the Zend 
Engine so PHP can access it.  This can lead to 3 times the amount of data, slowing down a PHP process 
that is reading BLOBs from the database.
</p></description>
			<pubDate>Wed, 16 Apr 2008 19:15:15 -0400</pubDate>
			<guid>http://cognifty.com/blog.entry/id=3/Blob_Streaming_in_PHP</guid>
      </item>
	  
      <item>
			<title>Why people still use PHP4</title>
			<link>http://cognifty.com/blog.entry/id=2/Why_people_still_use_PHP4</link>
			<category>BlogNifty</category>
			<description><p>
Everybody thinks PHP5 is so great, I hear it all the time.  People say, "We should use PHP5, 
it's so great", "It has much better support for OOP", "You can do so much more with 5 than with 4",
 etc. etc.  You get my point.
</p>


<p>
The problem is, every new feature of PHP5 has some crippling bug that causes it to be unusable, 
or at least not usable in a way that makes your code better or easier to understand.
</p>
</description>
			<pubDate>Tue, 05 Feb 2008 19:36:17 -0500</pubDate>
			<guid>http://cognifty.com/blog.entry/id=2/Why_people_still_use_PHP4</guid>
      </item>
	  
      <item>
			<title>Release 8</title>
			<link>http://cognifty.com/blog.entry/id=1/Release_8</link>
			<category>BlogNifty</category>
			<description><p>
I'm just about ready to release version 8.  There's been a lot of visual enhancements
to the admin screens.  New jQuery tabs have been added to a lot of the content screens, 
and a graphic check mark has replaced the basic "yes/no" values in the "is published" columns.
</p></description>
			<pubDate>Mon, 04 Feb 2008 11:57:25 -0500</pubDate>
			<guid>http://cognifty.com/blog.entry/id=1/Release_8</guid>
      </item>
	  
   </channel>
</rss>