<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jacob Santos &#187; Projects</title>
	<atom:link href="http://jacobsantos.com/category/projects/feed/" rel="self" type="application/rss+xml" />
	<link>http://jacobsantos.com</link>
	<description>Rumblings, rants, essays, stories by Jacob Santos about Web Site Development, Persistent Browser-Based Games, personal journal, and Programming.</description>
	<lastBuildDate>Fri, 03 Feb 2012 01:06:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3-aortic-dissection</generator>
		<item>
		<title>Calibre Improvements</title>
		<link>http://jacobsantos.com/2011/projects/calibre-improvements/</link>
		<comments>http://jacobsantos.com/2011/projects/calibre-improvements/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 03:28:12 +0000</pubDate>
		<dc:creator>Jacob Santos</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://jacobsantos.com/?p=1411</guid>
		<description><![CDATA[<a href="http://jacobsantos.com/2011/projects/calibre-improvements/" title="Calibre Improvements"></a>There are two aspects of Calibre that I would focus on, if I didn&#8217;t have already too many projects on my plate. However, working on Calibre might be a nice break and get me motivated on working on other Python &#8230;<p class="read-more"><a href="http://jacobsantos.com/2011/projects/calibre-improvements/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://jacobsantos.com/2011/projects/calibre-improvements/" title="Calibre Improvements"></a><p>There are two aspects of Calibre that I would focus on, if I didn&#8217;t have already too many projects on my plate. However, working on Calibre might be a nice break and get me motivated on working on other Python projects, like Trac or Projile.</p>
<h3>User Interface</h3>
<p>Given what I&#8217;ve been reading, I&#8217;m thinking of various ways I can rape the GUI layout. What I mean to say, is that while I&#8217;m not an expert yet, I think this might be a good start. I can already see where I&#8217;m confused by the library software, so I can imagine where other people might be having difficulties. Truthfully, I&#8217;m thinking something similar to Picasa 3 and a mix of Kindle.</p>
<ol>
<li><strong>Separating The Components</strong>
<p>Calibre appears to be doing 4 things in the space of one main application.</p>
<ul>
<li><strong>Market Place</strong> &#8211; You can search for books from a list of existing online stores or search online stores for an existing book in your library.</li>
<li><strong>News Retrieval</strong> &#8211; Similar to Google Reader, except for syncing with your phone or converting to e-book format and syncing with a device.</li>
<li><strong>E-Book Sync Service</strong> &#8211; Allows for viewing the collection on a capable device.</li>
<li><strong>Library</strong> &#8211; The main purpose of the software and the majority of the application.</li>
</ul>
<p>I would want to make the separation more clear and <em>remove</em> the icons at the top. I would also default to the library, but <em>hide</em> the other three sections / components listed above where others can get to them when needed.
</li>
<li><strong>Improving the Library</strong>
<p>The main actions of the library is <strong>adding books</strong>, <strong>converting books</strong>, <strong>editing books</strong> and <strong>removing books</strong>. The view is displayed by various predefined, what I&#8217;ll call, directories. The other problem is that while a lot of the functionality is geared towards searching and minimizing the amount of books on display, it doesn&#8217;t work like a computer or at least is missing normal directory hierarchy. At the very least, a normal directory structure needs to be added to manage what people might already had organized their e-book library.
</li>
<li><strong>Removing Books Overload</strong>
<p>The other part is why does the button &#8220;Remove Books&#8221; even exist? The delete button or the right click and &#8220;delete&#8221; option has the convention of being used for this action on every piece of software. In fact, such a right click menu already exists and simply has the same options. I suppose it makes sense, they are trying to make it as simple as possible, but by doing so are complicating the system. Delete should simply work as people expect and you should get out of the way. Much of the functionality could had been wrapped into an overall search and book selection that allows for a simple and single &#8220;delete&#8221; button press or right click and choosing &#8220;delete&#8221; on the menu. No submenu, just &#8220;delete&#8221;. The right click option is there just for formalities, the expectation is that it should never really be used.
</li>
<li><strong>Adding Books Overload</strong>
<p>Same problem with &#8220;Add Books&#8221;. You can simply drag a file or selection of files and drop them into the library and it will add the books. What is &#8220;Add Empty Book&#8221; and why is it needed? I suppose it was something someone wanted at one point, but when am I going to use it? Adding esoteric features to the application doesn&#8217;t help with the ease of use. Why didn&#8217;t the person simply create a txt file, name the file and then simply add it? No matter.</p>
<p>The real problem is that I have no idea if the directories I add will continuously be synced with the application. Meaning, if I add an e-book that I bought from a web site and download it to one of the directories I added to Calibre, will the book show up? Without checking the source and from other hints from the application, I&#8217;m going to guess not. It begs the question, &#8220;Why not?&#8221; I want this to work like Picasa 3, where I&#8217;m not adding books, I&#8217;m adding directories which are synced with the application every so often, so that when I add a picture for Picasa 3, it shows up and is synced online. I want Calibre to work like that.</p>
<p>The way <strong>I would improve the &#8220;Add Books&#8221; functionality</strong> is let you choose which directories you want Calibre to sync. Like Picasa 3, allow you to deselect subdirectories and sync down subdirectories automatically. The assumption would be that filenames or titles that match are the same book removing that feature completely, but allow allowing you to correct the libraries assumption.
</li>
<li><strong>Cataloging Existing Books (Hard Copy)</strong>
<p>I believe the reason for allowing to add empty books and by ISBN is so that you can list and catalog existing books and display it to people. I suppose to allow them to &#8220;check out&#8221; the book from you and keep track. However, I doubt this feature is implemented, yet.</p>
<p>I would improve this by simply allowing you to create a new entry and attempting to download a book picture, if possible. I would check for free ISBN and title book look ups. Since Ebay and other applications do it, it shouldn&#8217;t be impossible.
</li>
<li><strong>Unified Search</strong>
<p>Like Picasa 3, I would put the search on the bottom and automatically select based on criteria. Allowing for managing, hopefully, more easier. Well, technically, the search bar will be at the top and the filtering will be on the bottom.
</li>
<li><strong>Book Display</strong>
<p>I rather like the idea of displaying thumbnails and as the default. I think it is wise to allow for displaying a list, I guess sort of like iTunes. Well, I suppose this would be one preference feature left up to the user. Well, actually, a couple of iTunes features are part of the library. I&#8217;m unsure what is better verses Picasa 3 over iTunes. Regardless, I would want to do some testing verses the two and sort of find what works better.
</li>
<li><strong>Separate Application for Content Server</strong>
<p>Or at least a less visible icon.</p>
<p>I would rather move the content server code outside of Python into a C#.NET application or potentially a D application. I would rather use the .NET framework since it would allow for utilizing the Windows APIs better. I would then write a Linux Daemon in another language, probably D and attempt to do the same for the Mac OS X with either D (preferred) or Objective C. Even if all the Windows Service and *nix daemons do is execute Python to run the code for all of the platforms.</p>
<p>I would also move the &#8220;Connect&#8221; to a device sync functionality or make the content server a &#8220;device&#8221; as well.
</li>
<li><strong>Modifying Books</strong>
<p>There will be a mass edit feature that will be hidden most of the time. I do think that perhaps it will be difficult to use. I&#8217;ll try an icon for mass editing that opens a pane for changing certain details. Editing a book&#8217;s metadata or information will be similar to Picasa 3 where it will be a new view. The directional keys will allow moving between books.</p>
<p>Actually, I&#8217;m starting to think I&#8217;m overthinking this. In some ways, it is just as simple as it needs to be. I&#8217;m just not satisfied until my tongue is so far up its asshole that it is coming snakes.
</li>
</ol>
<p>Maybe a part 2 later. Maybe.</p>

<p><strong>Possibly Related Posts:</strong></p>
<ul>
<li><a href="http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/">DragonU Bug Tracker Dev &#8211; Milestone 1</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragon-mvc/">Dragon MVC</a></li>
<li><a href="http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/">Why I Contributed to WordPress</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragonu-db-component/">DragonU DB Component</a></li>
<li><a href="http://jacobsantos.com/2009/projects/working-on-my-wordpress-plugins/">Working On My WordPress Plugins</a></li>
</ul><br />
]]></content:encoded>
			<wfw:commentRss>http://jacobsantos.com/2011/projects/calibre-improvements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DragonU Bug Tracker Dev &#8211; Milestone 1</title>
		<link>http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/</link>
		<comments>http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 07:18:30 +0000</pubDate>
		<dc:creator>Jacob Santos</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[bug-tracker]]></category>

		<guid isPermaLink="false">http://jacobsantos.com/?p=1278</guid>
		<description><![CDATA[<a href="http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/" title="DragonU Bug Tracker Dev - Milestone 1"></a>Framework I decided to build my own framework using Zend Framework as a base. The basis of which is going to have a mismatch of directories. I might look at Habari, Fuel framework, and Kohana framework to see how they &#8230;<p class="read-more"><a href="http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/" title="DragonU Bug Tracker Dev - Milestone 1"></a><h3>Framework</h3>
<p>I decided to build my own framework using Zend Framework as a base. The basis of which is going to have a mismatch of directories. I might look at Habari, Fuel framework, and Kohana framework to see how they structure their directories and files. At this moment, I&#8217;m going a mix of WordPress and what I remember from CodeIgniter. Not the best choice to be sure. However, I plan on improving the nonsense after I go over certain details and get the base working how I like.</p>
<p>I switched from Fuel, because Zend Framework has more of what I need to get started faster. The only downside is that I need to setup the controllers and functionality. I might instead, create a branch, that uses CodeIgniter 2 for the MVC for rapid prototyping to be sure that the application is how I want it while I build the official framework for which the application is going to be based. I&#8217;ll create this as a branch, if I am going to develop this way. I&#8217;ll have to see how quickly I can get the base up and running.</p>
<p>If I get this working, I&#8217;ll most likely use it for my other projects, but I might attempt to implement the features into FUEL instead.</p>
<h3>Core Application</h3>
<p>The core application, I&#8217;ve decided is going to be based on Zend Framework and I&#8217;m going to make the following changes:</p>
<ol>
<li><strong>Kohana Style Front Controller.</strong> The front controller is going to allow for modules and plugins, which will also have controllers, so most likely, I&#8217;m going to set it up to where it first searches the official Router and if it is not found to look at the directory structure for the controller. I like the way CodeIgniter and its clones allow you to easily add controllers without actually setting up the routing, except for the more advanced purposes. I&#8217;m going to implement a hybrid system between Zend Framework predefined routing and CodeIgniter style routing.</li>
<li><strong>WordPress Style Script and Style Loaders.</strong> I hate having to change the headers and what not and using styles and scripts that aren&#8217;t even used on the page. The code will not be from WordPress, since I&#8217;m going for New-BSD license, but I&#8217;ve already built something similar, and the algorithm is simple, so I won&#8217;t have to worry about this feature taking too long. I am going to attempt to add script collisions to prevent duplicate javascript files from being added.</li>
<li><strong>WordPress Style Filters and Actions.</strong> I&#8217;ve already started code for this and I&#8217;m think I&#8217;m going to go an easier route for implementing the feature. It will be the 3rd rewrite and 5th overall. I&#8217;m looking at probably 4 or 5 hours given how long the other attempts took.</li>
<li><strong>Themes.</strong> I do like the way WordPress does themes, so I&#8217;m going to attempt to implement this. I&#8217;m going to include an API for extending existing themes, setting dependencies, and using the default theme if missing files. The differences from WordPress is that Modules will also define default templates that themes may override. It will be done in such a way to prevent conflicts; the theme module template files will be in a separate directory, &#8216;modules&#8217; and use the name of the module. In this way, a theme does not need to know about all modules, but may provide for those it knows about and popular themes.
<p>It also allows for placing themes and their additions in one place. Users do not need to put module theme files in the module directory, just the directory of the theme they are using. Given the parent-child nature, if they want to support multiple themes, they can put the modified theme file in the default theme (which is a parent of every theme by default) or the parent or child theme.</li>
<li><strong>Modules.</strong> <em>See below section on this.</em>
<p>The goal of the modules is to provide additional features for the Bug Tracker that can be enabled and disabled. Modules may have plugin support, theme support, but most importantly will have separate controllers and models and are basically separate and mini applications for the bug tracker.</li>
<li><strong>Plugins</strong> I want the difference between plugins and modules to be that plugins are mostly filters and actions for existing hooks, with maybe an options page. For this, I&#8217;m going to include an API for setting the options page, if one is needed. I really want to emphasize the purpose of plugins over modules, so that the confusion of when you would implement one verses the other. I have a feeling that eventually one or the other will win out if I don&#8217;t force the issue. Modules will offer Plugins as well, and this may help with the issue of when you would do a Module verses Plugin.
<p>Probably include something similar to WordPress widgets, but I always hated how it was implemented in WordPress, so I&#8217;m going to go for something different.</li>
<li><strong>Hybrid Settings Configuration.</strong> Setting up and configuring the application should never require editing files, unless the initial database configuration file could not be made. The problem is that this often requires using the database to store the settings. I really don&#8217;t like doing that. The base application will attempt to create PHP configuration files for core and module configuration, but will use a database table, if that fails.</li>
<li><strong>Enabling Plugins and Modules</strong> will also have two ways to do so. You could enable modules and plugins by including a file named, &#8220;.enabled&#8221; in the module or plugin directory, but enabled modules and plugins will always be checked in the database. I might also include a third way, which is a separate config file, which loads modules and plugins. I may also attempt to create this similar to configuration.</li>
</ol>
<h3>Extensible Administration and Separate Front-End</h3>
<p>One of the concepts I&#8217;ve thought on was having a default administration for the application that modules and plugins could extend and themes could customize. I figure actually that customization will be very limited. Only the header, navigation placement and footer will be editable, as well as the CSS and Javascript.</p>
<p>The reason for this is that modules and plugins have their own controllers and I don&#8217;t want to force mixing or moving directories. I want modules to be contained applications that all you need to do is drop it into the modules directory and enable it. To this end, the administration of modules has to be combined with the base application administration controllers. It should also give modules complete controller functionality within their scope.</p>
<p>I was actually thinking about including a member profile as a separate system similar to the administration. However, this I don&#8217;t think will be necessary as modules and plugins will be able do this anyway. The separation was given the fact that navigation and theming will be different from the front-end and back-end and therefore will need a system to ensure cohesion.</p>
<h3>Installer</h3>
<p>WordPress has spoiled me, I believe that any application that does make it extremely simple to install, isn&#8217;t worth using. To this end, there will be an basic installer that checks against certain requirements and runs queries for installing the database tables.</p>
<p>In the future, I want to allow downloading plugins, themes and modules during the installer process, as well as configure them. This milestone, I&#8217;m going to simply work on simple database specific configurations, so that the application can be installed. The rest of the configurations will be done in the administration.</p>
<h3>Modules</h3>
<p>I&#8217;ve already discussed some of my plans on this feature, but really, the purpose of modules is to separate several features of the application into components that the administration can enable to extend what the base application can do. I figure if all you want is simply a ticket tracker, that simply install the application and run with it. If you want a support ticket feature, then you&#8217;ll enable the module that implements that feature or any feature you want.</p>
<p>Several planned modules, but not in this milestone:</p>
<ul>
<li>Support Ticket.
<p>Help and support tickets that aren&#8217;t bugs, but would be helpful for future requests and reference. Might be used internally for customers. Will be extremely simple in structure and UI and include public option for allowing anyone to create a support ticket.</li>
<li>Company Projects.
<p>The base application will assume that only one company is using the application and therefore all projects belong to it. Again, this will be a boilerplate module for extending and allowing for this feature. This will really force the base application to allow setting the default controller, overriding defaults, something that is already planned, but in a way to allow for cascading default controllers.</p>
<p>The feature will most likely test the cascading controller in a certain of filter system for setting the priority of controllers. So you could have segments matching against multiple modules. This may require allowing the administrator to set up the priority in case there are conflicts.</p>
<p>So for /{Company}/{Project}/</p>
<p>The company module will add its priority as 1 and the Project priority, which is in the base application will be priority 10. So in theory, you could have another module come along and add region, which would make it, &#8220;/{Region}/{Company}/{Project}/&#8221; and since the Region will also be priority of 1 will notify the administrator of this conflict and force modifying the priority, so Region is always first and Company is always second.
</li>
<li>Repository Activity
<p>There is a difficulty with implementing this feature in PHP. That is, that the implementation will require command line applications and also access to the CLI git, svn, hg, etc on the system for the repositories. Given this requirement, as well as the esoteric feature set in Trac, Redmine, etc. I mean it seriously isn&#8217;t strictly necessary for bug tracking and managing projects. It is &#8220;nice to have&#8221; feature and I plan on using it for statistics of developers.</p>
<p>One element that I&#8217;ll implement when I see how it is done in other bug trackers and project management applications is how to get the application to work with Tortoise SVN and Tortoise GIT ticket features. I&#8217;m going to attempt to add this as part of core, but the ability to close tickets in the repository commit log will have to be part of this module or implemented as a plugin.</li>
</ul>
<h3>Note About Configuration</h3>
<p>The configuration will be file and database based. An attempt will be made to create PHP file configuration, but given any permission issues, the database with caching will be used instead. The purpose is to make the application as easy to modify as possible without having to modify any PHP files. The application is require as little work as possible to setup and configure as possible, but also attempt to be as efficient as possible.</p>
<h3>Planned Features In Later Milestones</h3>
<p>The first milestone is about getting the base framework working to start adding application functionality. Other planned functionality includes automatic upgrading of the application, modules, plugins and themes. </p>
<p>This will quite possibility use the same system as WordPress, but implemented for this web application framework. The library that WordPress uses is freely available and I believe uses a license compatible with this web application. I will need to implement it separately as WordPress had to include work arounds and WordPress specific code to get the installer and upgrader working. The worse case is to use a separate library or libraries for implementing a similar feature. Well, actually, what is cool about these libraries, is that it might allow for using file based configuration even if access is not granted for creating those files, since the main library is creating files using FTP or SSH tunnel.</p>

<p><strong>Possibly Related Posts:</strong></p>
<ul>
<li><a href="http://jacobsantos.com/2011/projects/calibre-improvements/">Calibre Improvements</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragon-mvc/">Dragon MVC</a></li>
<li><a href="http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/">Why I Contributed to WordPress</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragonu-db-component/">DragonU DB Component</a></li>
<li><a href="http://jacobsantos.com/2009/projects/working-on-my-wordpress-plugins/">Working On My WordPress Plugins</a></li>
</ul><br />
]]></content:encoded>
			<wfw:commentRss>http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dragon MVC</title>
		<link>http://jacobsantos.com/2009/projects/dragon-mvc/</link>
		<comments>http://jacobsantos.com/2009/projects/dragon-mvc/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 16:38:49 +0000</pubDate>
		<dc:creator>Jacob Santos</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://jacobsantos.com/?p=1215</guid>
		<description><![CDATA[<a href="http://jacobsantos.com/2009/projects/dragon-mvc/" title="Dragon MVC"></a>I think the motivation factor is to lessen the scope of the project, so that I can get it done and write the documentation and unit tests for the project. If the scope is limited to just the controllers, database &#8230;<p class="read-more"><a href="http://jacobsantos.com/2009/projects/dragon-mvc/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://jacobsantos.com/2009/projects/dragon-mvc/" title="Dragon MVC"></a><p>I think the motivation factor is to lessen the scope of the project, so that I can get it done and write the documentation and unit tests for the project. If the scope is limited to just the controllers, database API, and view abstraction, then I can probably get something out in about 3 weeks time instead of trying to do many things at once. </p>
<p>I&#8217;m going to aim at keeping the components as separated as possible with some connections between the different parts. The view component is going to be the easiest and quickest to complete since it is just going to use PHP templates. I might finish the documentation for the Views first and complete the unit tests as well, so that the project gets off on a good start.</p>
<p>One component that I&#8217;m also going to to include is the plugin API. This will tie in to certain parts of the controllers, views, and DB API. I believe most of the real documentation will go into the database API and how to use that. The controller will also need comprehensive documentation, but just not as much as the database API.</p>
<p>I&#8217;m going to give myself a month and a half to complete the project with basically an hour a day on the weekdays and 2 to 4 hours on the weekend. I&#8217;m going to focus first on the unit tests and try to get as much of the API designed in unit tests as possible. Everything will have phpdoc inline documentation and have all main documentable elements explained. This will carry on to the DocBook documentation, which will try to explain in human terms how to use the library with examples.</p>
<h3>Motivation</h3>
<p>By giving myself sprints, I should put out a plan and be working on the project a little bit every day. By giving myself a little to complete and knowing exactly when I&#8217;m done, I can actually see the light at the end of the tunnel. By giving myself a deadline of a month and a half, I set forth a goal which I plan on completing.</p>
<p>The plan is to have the project functional before the month and a half, but most likely the majority of the planned features for the DB API will not be finished. The DB component will be the biggest part of the MVC and more time will have to be spent completing it. The foundation of the DB API should be fairly quick to complete and will allow for testing.</p>
<h3>Previous Attempt</h3>
<p>The previous attempt, I believe, failed because I was attempting to code it to replace WordPress without realizing that the API just isn&#8217;t going to be able to do that. After I realized that, I had already written the foundation and realized to get it to where it needed to be, I&#8217;ll have to rewrite it. I can still take some of the best parts of that API and apply it to the new API.</p>
<p>Instead, by starting over anyway, this attempt will have the design where I want it from the beginning. I think I&#8217;m still going to take some of the best parts of the WordPress DB feature set, including HyperDB code base. I&#8217;ve been experimenting with different implementations of what is currently in the code, so it is simple to replace the functionality and still allow it to be extensible.</p>
<h3>Database API</h3>
<p>The Database API is going to be Active Record and take what I&#8217;ve learn from CodeIgniter, ORM, Datamapper, CRUD, BREAD, and various other implementations of DB APIs I&#8217;ve done in the past. I&#8217;m going to try to correct the mistakes of other implementations and code the DB API to the best of my ability. This will not mean I won&#8217;t make mistakes on my own. This will be mostly a learning experience and I&#8217;m going to try new things in an attempt to simplify the code and how the code is extended.</p>
<p>My hope is to code the project in such a way to allow for experimenting, but also allow for &#8220;correcting&#8221; shitty code architecture that will creep in with such experimenting. Not all trials will work out the way they should and the API needs to be flexible enough to accommodate that. The other parts of the code base will not be developed in this fashion and the code will not use &#8220;experimental&#8221; code.</p>

<p><strong>Possibly Related Posts:</strong></p>
<ul>
<li><a href="http://jacobsantos.com/2011/projects/calibre-improvements/">Calibre Improvements</a></li>
<li><a href="http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/">DragonU Bug Tracker Dev &#8211; Milestone 1</a></li>
<li><a href="http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/">Why I Contributed to WordPress</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragonu-db-component/">DragonU DB Component</a></li>
<li><a href="http://jacobsantos.com/2009/projects/working-on-my-wordpress-plugins/">Working On My WordPress Plugins</a></li>
</ul><br />
]]></content:encoded>
			<wfw:commentRss>http://jacobsantos.com/2009/projects/dragon-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I Contributed to WordPress</title>
		<link>http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/</link>
		<comments>http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 00:15:54 +0000</pubDate>
		<dc:creator>Jacob Santos</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://jacobsantos.com/?p=1172</guid>
		<description><![CDATA[<a href="http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/" title="Why I Contributed to WordPress"></a>I thought it was interesting when someone made the argument that if plugin authors wanted money, then the developers who contributed the most to the core of what makes WordPress should receive money as well. Well, this might become a &#8230;<p class="read-more"><a href="http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/" title="Why I Contributed to WordPress"></a><p>I thought it was interesting when someone made the argument that if plugin authors wanted money, then the developers who contributed the most to the core of what makes WordPress should receive money as well. Well, this might become a reality when and if the WordPress Foundation is ever created. From examples of other Open Source Foundations, usually what happens is that funds are directed to those who contribute in hopes that they will continue to contribute or get new people to contribute full time.</p>
<p>Until the WordPress Foundation is created, if it will ever be and there aren&#8217;t any suggestions that it will (that I know of, this is hypothetical), then I don&#8217;t think I would even take money even if it was offered. I didn&#8217;t jump into the development of WordPress core and fix bugs, because I thought I could make money from it. I seen a problem and decided to fix it, because it would benefit me, that fact that it also benefited other people was a bonus. The most important factor was that it would benefit me. If any of the work I&#8217;ve done seemed selfless, then you don&#8217;t know me well enough to realize that it was purely selfish reasons.</p>
<p>Not selfish in the way that I desired fame, fortune, or gratitude. Truthfully, I could still care less about that and I think those who seek those things will be sorely disappointed when they find that it doesn&#8217;t work that way. I don&#8217;t believe it should, but contributors have different motivations. People who work on core are not well known. Well, this is a generalization, I suppose that people know who Dion Helse is and several of the other people.</p>
<p>I suppose the problem is that while I&#8217;m not particularly well known, I&#8217;m not obscure either. Lorelle has mentioned my name at a few WordCamps (in relation to writing documentation). I have a feeling that many people were wondering about my name, &#8220;Who is that?&#8221; What I find interesting is that I can go to any given WordCamp and only a few people will know my name. Most know me, not from my work on the core, but for other reasons.</p>
<p>I think that is funny, I set out to create change and I only changed anything by attempting it myself and even that wasn&#8217;t my original goal. Whether or not I changed anything else is debatable. Working on a project can be enjoyable, but expecting fame or money just isn&#8217;t going to happen, unless you put yourself out there doing other things. By the end of next year, hardly anyone is going to know my name.</p>
<p>I suppose that is the cycle, except for the more veteran members.</p>

<p><strong>Possibly Related Posts:</strong></p>
<ul>
<li><a href="http://jacobsantos.com/2011/projects/calibre-improvements/">Calibre Improvements</a></li>
<li><a href="http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/">DragonU Bug Tracker Dev &#8211; Milestone 1</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragon-mvc/">Dragon MVC</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragonu-db-component/">DragonU DB Component</a></li>
<li><a href="http://jacobsantos.com/2009/projects/working-on-my-wordpress-plugins/">Working On My WordPress Plugins</a></li>
</ul><br />
]]></content:encoded>
			<wfw:commentRss>http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DragonU DB Component</title>
		<link>http://jacobsantos.com/2009/projects/dragonu-db-component/</link>
		<comments>http://jacobsantos.com/2009/projects/dragonu-db-component/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 23:00:42 +0000</pubDate>
		<dc:creator>Jacob Santos</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://jacobsantos.com/?p=1159</guid>
		<description><![CDATA[<a href="http://jacobsantos.com/2009/projects/dragonu-db-component/" title="DragonU DB Component"></a>The concept is fairly simple and helps me develop the component a great deal quicker than originally planned. I had originally planned to have a master DB object that handled all of the major features through a fluent interface. The &#8230;<p class="read-more"><a href="http://jacobsantos.com/2009/projects/dragonu-db-component/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://jacobsantos.com/2009/projects/dragonu-db-component/" title="DragonU DB Component"></a><p>The concept is fairly simple and helps me develop the component a great deal quicker than originally planned. I had originally planned to have a master DB object that handled all of the major features through a fluent interface. The point now, is that I want to do that, yes, but I want to simplify the code even more.</p>
<p>The problem before was that the scope was too great for me to develop and because it was massive, I had problem testing and seeing where the end was. I have difficulty programming like that. The way I like to problem is by building something that I can understand in my head. If I can&#8217;t understand how it all works, then I become depressed, because it is a great deal harder to see where you are out, if where you are going is off in the distance and over the horizon.</p>
<p>The solution now is to create the DB component in smaller chunks. In this way, I can improve the chucks over time and add new features by adding new chucks. There will of course, be problems with this solution, in that it will require refactoring in the future that may break backwards compatibility. I think of course, that to do so, will mean to increment the version. So everyone that uses version 1.x.x will always have compatibility with those versions. When new features are added, nothing will be removed that will break older versions.</p>
<p>Well, right now, version 1 hasn&#8217;t been released, so I feel as if I can do whatever I want. Just that I hope to get version 1 out the door sometime in a month or two, but most likely it will probably be sometime early next year.</p>
<h3>DragonU DB Connection</h3>
<p>The DB Connection object will have several parts and may rely on a config later on. The point is that when the config is added, it won&#8217;t require any work to be done to this object it will just rest on top of the DB components, so instead of building the DB connection objects manually as you will have to do when it is finished, you will have a configuration file that you can create the connections and manage them through that.</p>
<p>The purpose of this object is to store the PDO or PDO wrapper for MySQLi and MySQL extensions. The PDO Wrapper object will be developed later, however, the point is to allow PDO, since the API is standard and allows for many DBMS access through it. The PDO wrapper object will be an extra &#8220;feature&#8221; to allow for other extensions to work with the DB functionality.</p>
<p>After the PDO object or PDO wrapper Object is stored and connected, it will store that connection for the reminder of execution. So you can only have one connection per DB Connection object. If you need more than you need to create multiple DB Connection objects. However, the main library code will only use one DB Connection object for processing.</p>
<p>The code for this will be extremely simple. The connection can be created by either passing a PDO or PDO Wrapper object (it has its own method), passing a DSN string which will be used to create either a PDO (if the extension exists for the DB type) or PDO Wrapper object, or Resource or DB object for the ones that are supported. When the DB connection has been completed, the only other process is to pass the PDO object to the code base that will use it.</p>
<h3>DragonU DB Connection Cluster</h3>
<p>This works like the DragonU DB Connection object, but instead of passing the PDO object, it will instead pass itself which will in turn iterate certain calls to all DB connections. It will cycle through SELECT queries for each DB connection object in a dumb load balancing fashion.</p>
<p>The purpose of this container feature, is to use multiple connections for selecting and to keep all of the connections synced by passing queries to each of the connections. It makes more sense to use the DBMS cluster feature for most DBMS, but for some reason the feature in MySQL just plain sucks. Until they get it fixed, it will make a bit more sense to use this sort of emulation for the clustering, unless you have a lot of DB servers.</p>
<p>I could probably extend the feature set in the future, but I don&#8217;t want to get too far into what the DBMS does better. It is just a simple solution to what some DBMS makes more difficult and asinine than it needs to be. This is all it should be.</p>
<h3>DragonU DB Main Component</h3>
<p>This is the object that will manage take the DB Connection or DB Connection Cluster object and what other developers will work off of. It will be more of a factory than do any work and will be set up to allow for fluent interface usage. By keeping the main class stupid, it should be simple to add new features to it by what amounts to just &#8220;opening the door&#8221; to the feature.</p>
<h3>DragonU DB Scheme Component</h3>
<p>I&#8217;m still not exactly sure how I&#8217;m going to implement this. I think the simplest way is to create a loader which handles the inclusion of the scheme and passes the functionality, however, I&#8217;m thinking of another way to do it. Perhaps the simplest way, is to have the CRUD scheme to where it builds based on the SQL for the DBMS and methods. There can also be an abstract class which handles the non-SQL specific code and the Scheme will just need to implement the code to handle the create, retrieve, update, and delete methods. The problem with this, is that it will require modification whenever new methods are added and not all DBMS has the same SQL.</p>
<p>I believe, that by assigning Schemes to CRUD, BREAD, etc that it will simplify the DB SQL for majority of people and work on all of the DBMS that there is a Scheme class. The developers who want to take advantage of the specific SQL features of the DBMS will still be able to use the Scheme component to allow for that as well.</p>
<p>The point is to focus on the API for developers to use and not on the Database specifics. That should be up to the developer of the library to design and setup for the user of said library. So be a bit more clear, the user of the API should never interact with this layer at all and only the layer either directly above the DB or however many layers separates the user of the library from the DB.</p>
<p>Another key feature will be the way to extend the Scheme dynamically. The point of this is to keep from creating a new class to add functionality, but add functionality through external callable that will be managed externally through a plugin specific to the Scheme functionality.</p>
<h3>DragonU DB CRUD Component</h3>
<p>The most basics of DB access is the CRUD pattern. I&#8217;m going to include it for the simple purpose of easing the usage of the DB component. If the developer wants to develop their code using CRUD, then this will allow them to do so. I&#8217;m most interested in seeing how many developers use what pattern. The problem of which is that I&#8217;d need to have many people actually use the DB component to get statistics.</p>
<p>The CRUD component will include more than just <strong>create()</strong>, <strong>retrieve()</strong>, <strong>update()</strong>, and <strong>delete()</strong>. The experiment is to see how people use the fluent interface, so there will be extra methods.</p>
<ul>
<li>The <strong>table()</strong> method to specify which table to use.</li>
<li>A <strong>where()</strong> method to chain the where for updating and deletion.</li>
<li>A <strong>select()</strong> method for chaining or selecting what to retrieve.</li>
<li>A <strong>limit()</strong> method to limit retrieval, updating, and deleting.</li>
</ul>
<p>There will be other methods, which the scheme class will have to support, but shouldn&#8217;t extend to the full SQL language. The bits that are needed are to restrict what is retrieved, what is deleted, and what is updated. Extending it further than that is a waste of time to develop for CRUD.</p>
<h3>DragonU DB BREAD Component</h3>
<p>BREAD is works exactly like CRUD, except you have different and more methods to work off of. The methods are <strong>browse()</strong>, <strong>retrieve()</strong>, <strong>edit()</strong>, <strong>add()</strong>, and <strong>delete()</strong>. There difference from CRUD is that the retrieve is both for one or many, whereas the browse() in BREAD is for many and the retrieve in BREAD is for one and only one. The BREAD edit() works exactly like update() in CRUD. The BREAD add() works exactly like create() in CRUD. The delete() methods are the same for both CRUD and BREAD.</p>
<p>The advantage of BREAD over CRUD is in the retrieval. I suppose is arguable whether two methods is better than one. It will be up to the developer to decide whether to use CRUD or BREAD. As it is mainly up to their preference for either one.</p>
<h3>Other Patterns</h3>
<p>Other patterns will be added as well over time. That is the nice part of the component. I&#8217;m not really tied into implementing it in one way or refactoring to allow for more patterns to be added. It is just faster to focus on a few things to get the initial functionality working and usable in projects, instead of having to wait until the majority of it is finished before using the library.</p>
<h3>Other Functionality</h3>
<p>The functionality covered in this post is just a small part of what most DB component packages offer, so yes, as the DragonU library is developed, more features will be added. It is just better to work off a base that allows it to be done easily and doesn&#8217;t require that it all be done at the same time.</p>

<p><strong>Possibly Related Posts:</strong></p>
<ul>
<li><a href="http://jacobsantos.com/2011/projects/calibre-improvements/">Calibre Improvements</a></li>
<li><a href="http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/">DragonU Bug Tracker Dev &#8211; Milestone 1</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragon-mvc/">Dragon MVC</a></li>
<li><a href="http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/">Why I Contributed to WordPress</a></li>
<li><a href="http://jacobsantos.com/2009/projects/working-on-my-wordpress-plugins/">Working On My WordPress Plugins</a></li>
</ul><br />
]]></content:encoded>
			<wfw:commentRss>http://jacobsantos.com/2009/projects/dragonu-db-component/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working On My WordPress Plugins</title>
		<link>http://jacobsantos.com/2009/projects/working-on-my-wordpress-plugins/</link>
		<comments>http://jacobsantos.com/2009/projects/working-on-my-wordpress-plugins/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 21:47:34 +0000</pubDate>
		<dc:creator>Jacob Santos</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://jacobsantos.com/?p=1116</guid>
		<description><![CDATA[<a href="http://jacobsantos.com/2009/projects/working-on-my-wordpress-plugins/" title="Working On My WordPress Plugins"></a>I&#8217;ve been working on several of my old WordPress plugins for the past couple of days. I&#8217;m also developing a new plugin. Well, I have plans to develop two or three more, but I&#8217;m going to focus on just the &#8230;<p class="read-more"><a href="http://jacobsantos.com/2009/projects/working-on-my-wordpress-plugins/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://jacobsantos.com/2009/projects/working-on-my-wordpress-plugins/" title="Working On My WordPress Plugins"></a><p>I&#8217;ve been working on several of my old WordPress plugins for the past couple of days. I&#8217;m also developing a new plugin. Well, I have plans to develop two or three more, but I&#8217;m going to focus on just the one and the old ones for now.</p>
<ol>
<li><strong>Alternative Mailer</strong>
<p>I developed this plugin to work with Swift Mailer and replace the old (at the time) PHPMailer class. However, it sort of just feel to the wayside and I haven&#8217;t worked on it for a long, long time. I&#8217;m going to go back and add in TLS and SSL support as well as attempt to automatically pull out the attachments and put them in Swift Mailer. This will probably be a couple of days before I complete it.
</li>
<li><strong>Auto Scheduler</strong>
<p>This will auto queue posts after a certain number that is set by the administrator and, or editor roles. After I do this, I might work on a stack, where the first post is moved up the schedule and the recent post is moved to the front. I think the FIFO is what most people will want. I&#8217;m planning on adding it to my web site and I&#8217;m thinking of adding another feature to where it doesn&#8217;t block certain categories or tags.</p>
<p>This plugin should only take about a day (4 hours) to complete. There are only going to be about three or four options. First option will be to enable the plugin (by setting the number per hour, per day, or per week. The next will be the amount of time to offset the posts schedule. So basically, if you have a number per hour, the offset will be for the next three posts within the next hour. So if you set the offset for 10 minutes, then the next 3 posts will be on the hour, 10 minutes after the hour, 20 minutes after the hour and if another comes in, then it will be the next hour on the hour.</p>
<p>So on and so on. If the limit is 3 per week, and there are 12 written in that week, then posts 4-6 on week 2, posts 7-9 on week 3, 10-12 on week 4. If the offset is 2 days, then one will be on Sunday, the next on Tuesday, and the final one on Thursday. I&#8217;m going to also base the weekly on the start of the week. So if the start of the week is Monday, then it will be Monday, Wednesday, Friday.
</li>
</ol>

<p><strong>Possibly Related Posts:</strong></p>
<ul>
<li><a href="http://jacobsantos.com/2011/projects/calibre-improvements/">Calibre Improvements</a></li>
<li><a href="http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/">DragonU Bug Tracker Dev &#8211; Milestone 1</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragon-mvc/">Dragon MVC</a></li>
<li><a href="http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/">Why I Contributed to WordPress</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragonu-db-component/">DragonU DB Component</a></li>
</ul><br />
]]></content:encoded>
			<wfw:commentRss>http://jacobsantos.com/2009/projects/working-on-my-wordpress-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hurray! I&#8217;m Back!</title>
		<link>http://jacobsantos.com/2009/projects/im-back/</link>
		<comments>http://jacobsantos.com/2009/projects/im-back/#comments</comments>
		<pubDate>Wed, 20 May 2009 00:20:46 +0000</pubDate>
		<dc:creator>Jacob Santos</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://jacobsantos.com/?p=1041</guid>
		<description><![CDATA[My web site is currently back up and I have plans for what I'm going to do with this site and a few of my other site and projects. It is a long road ahead, but with the new dedicated server, new skills, and I guess motivation, I'm sure I can pull it off.<p class="read-more"><a href="http://jacobsantos.com/2009/projects/im-back/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://jacobsantos.com/2009/projects/im-back/" title="Hurray! I&#039;m Back!"></a><p>My traffic has basically decreased to about 0, but I&#8217;m planning on writing some more for Planet PHP, so that might pull in some traffic. Also, www.santosj.name is redirecting to jacobsantos.com (no www).</p>
<h3>My Goals</h3>
<ol>
<li><strong>Design my own theme based off of the WP Framework theme.</strong>
<p>Well, I have been wanting to design my own theme for pictures and what not for a while now, the default theme is well, not all that great since everyone is used to it. I want more space for pictures. I want to have a lower area for widgets that will be on every page. I want to design a few plugins so that I can add description and keywords to every page.</p>
<p>Also, I want to display excerpts instead of the full content. I&#8217;ll be using the excerpts functionality more instead, but it grows tiresome to have to scroll as much as people do.
</li>
<li><strong>Bring Absidongames.com and Dragonu.net Back Up</strong>
<p>These sites hardly get any traffic at all, but I&#8217;m going to be working on Dragonu.net soon and I&#8217;ll be using AbsidonGames.com as I develop the game engine and PBBG. The goal is not so much to work on these sites, but to get them to where they no longer suck to look at, so that means rewriting some of the content and creating templates for the sites.
</li>
<li><strong>Backups</strong>
<p>One problem I&#8217;ve always had, was that I never did any backups of any server I was on. Now, luckily I never had a problem where I lost everything. I had all of the files on my system anyway, except for the database scheme, which I regret, because while I have all of my old sites, I&#8217;d have to rebuild the scheme from the code and I&#8217;m not looking forward to that.</p>
<p>Therefore, sometime this week, I&#8217;m going to be backing up certain files (repositories mostly and configuration files) and databases. I&#8217;m debating whether I&#8217;ll want to backup the configuration files, I think I am, since why not, it is just one extra line anyway. As well as the cron jobs. I could rewrite them, but I tend to forget things over time and it is handy to have old configuration files around to look at what I did and how it worked.
</li>
<li><strong>WordPress PHP Extension</strong>
<p>I&#8217;m on Linux now, so I have easier access to strace to see where I screwed up or where the screw ups are. The goal is to get back into development sometime after the development on Battle Machines stabilizes. It takes a while to get the game engine foundation built, before the project(s) really take off, so it is slightly difficult to work on projects, because of the appearance of nothing being done.</p>
<p>Which, awesomely, the PHP extension is already started and the foundation is already built, I just need to tweak and develop based on what is already there. I still want to benchmark the benefits of the extension verses PHP userland WordPress library.</p>
<p>I think what is holding me back is that I want to develop for the next generation of code. It&#8217;d be interesting to build a new API and then just have backwards compatibility. The problem with this, is that such an API is better written in userland first to develop the design defects out.
</li>
<li><strong>Battle Machines</strong>
<p>I guess you could already say I have started development on it. Kind of. The problem is that I&#8217;m using the Yii Framework. Which I&#8217;m not familiar with, so it is slower development, and also I&#8217;m more of a visual kind of person, so I like to see what is happening while I do it and well, I need to do a bit more work before that happens.</p>
<p>I&#8217;m not exactly happy with the directory structure, but I&#8217;m going to wait until I have a working application with Yii Framework before I jump into the code and see about working on ways to work around the directory structure. I hope to develop Battle Machines as an experiment with it and then take what I learn from it and apply it to the game engine development. Well, actually, I&#8217;m probably going to continue development using the Battle Machines code base, until which time I find a better way to develop the game engine code base using Yii Framework.
</li>
<li><strong>Subversion</strong>
<p>I still need to write the post-commit scripts and test them. I also need to setup the cron jobs to upgrade WordPress, as well as the plugins.
</li>
</ol>

<p><strong>Possibly Related Posts:</strong></p>
<ul>
<li><a href="http://jacobsantos.com/2011/projects/calibre-improvements/">Calibre Improvements</a></li>
<li><a href="http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/">DragonU Bug Tracker Dev &#8211; Milestone 1</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragon-mvc/">Dragon MVC</a></li>
<li><a href="http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/">Why I Contributed to WordPress</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragonu-db-component/">DragonU DB Component</a></li>
</ul><br />
]]></content:encoded>
			<wfw:commentRss>http://jacobsantos.com/2009/projects/im-back/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working on Quantum Game Library and moving CorePress to QGL</title>
		<link>http://jacobsantos.com/2009/projects/working-on-quantum-game-library-and-moving-corepress-to-qgl/</link>
		<comments>http://jacobsantos.com/2009/projects/working-on-quantum-game-library-and-moving-corepress-to-qgl/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 01:54:00 +0000</pubDate>
		<dc:creator>Jacob Santos</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.santosj.name/?p=931</guid>
		<description><![CDATA[<a href="http://jacobsantos.com/2009/projects/working-on-quantum-game-library-and-moving-corepress-to-qgl/" title="Working on Quantum Game Library and moving CorePress to QGL"></a>I&#8217;m really, really anxious to get the browser game sites up and running again. It has been too long and I&#8217;m starting to worry that the other developers that have been building it will come and break my legs. I &#8230;<p class="read-more"><a href="http://jacobsantos.com/2009/projects/working-on-quantum-game-library-and-moving-corepress-to-qgl/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://jacobsantos.com/2009/projects/working-on-quantum-game-library-and-moving-corepress-to-qgl/" title="Working on Quantum Game Library and moving CorePress to QGL"></a><p>I&#8217;m really, really anxious to get the browser game sites up and running again. It has been too long and I&#8217;m starting to worry that the other developers that have been building it will come and break my legs. I haven&#8217;t been a really good host for the past 3 months and I need to change that. Well, I&#8217;m going to start with Battle Machines and work my way down the line.</p>
<p>I&#8217;m not going to concern myself with building the game engine at this moment and just focus on the getting the games up and running. I will try to base the game code off of each other. So when I start the next project after Battle Machines, I&#8217;m going to use as much code as possible from Battle Machines to start the next project. I&#8217;m going to continue this and hopefully, by the time I&#8217;m done, I&#8217;ll have a semi-working game engine. Finally, after the games are back up, I&#8217;m going to go back and work off of that code to build a foundation for which to rewrite the finished games and add in features I&#8217;ve hadn&#8217;t had time to develop.</p>
<p>The focus will also be open source and the Quantum Game Library. I envision that I&#8217;ll be rewriting a lot of the code and refactoring. The code I&#8217;ll be rewriting, I&#8217;m going to place in the QGL for later. It will be one of the ways I&#8217;m going to be enforcing reuse between the projects. Getting the game source code out there under AGPLv3 should be a way to enforce changes being sent back to the main project and getting the code out there in other people&#8217;s hands. I just want the source to be as professional as possible before I do that.</p>
<p>I&#8217;m currently doing some cleaning up of the code. The manual is going to be using another engine, so either PhD or some other easy one. I think PhD works great and is very easy to install on both Windows and Linux. So I&#8217;m focusing on that and then I&#8217;ll have to revamp the test case system. I&#8217;m going to switch over to using PHPUnit and working phpUnderControl software support in there. This should make the process very easy and will hopefully be automated through CruiseControl. Should be interesting.</p>
<p>I&#8217;m going to try to get it to where the tests are written in a way that tell me how many components are finished and at what level. Right now the components are that are ready to be moved from CorePress to QGL don&#8217;t have enough test cases written for them. I need to drill that down, but I&#8217;m more than likely going to focus on the DB component and get that working and then focus on the old code and updating the test cases for them.</p>
<p>Ohloh is going to suck at the moment, because it will have a very large dip of code, but I think that is good at the moment, it will improve the statistics. I think I should have a lot of the old code converted over the weekend.</p>
<p>The components that are completed need to have the amount of test cases and quality of test cases improved. I&#8217;m also going to focus on that, but it is easy to lose track of the finish line when you have inline documentation, manual documentation, test cases, and refactoring and component writing. The goal is to focus on the core and DB and current old code to get them ready, so if the library had to be used tomorrow, it would be ready.</p>
<p>I removed the AI code, because really, the code there wasn&#8217;t fully functional. I&#8217;m going to revisit it, but the graphing really needs to be addressed better to enable the path finding algorithms to be better. I&#8217;ll most definitely revisit the AI parts of the library to seriously improve the level of it. It is a lot of work really, so it will have to be after everything else is done.</p>
<p>After the old code is refactored, unit tests rewritten, and manual and inline documentation improved and updated, then I&#8217;m going to focus on some other components I had planned for CorePress. The focus is to keep QGL license as New-BSD as much as possible. Therefore, the focus has shifted from providing an alternative companion from WordPress, to redeveloping the concepts that are in WordPress and applying them to the library in a way that doesn&#8217;t suck. I like the way WordPress does some code, but other parts of the WordPress library are somewhat awful.</p>
<p>That said, only the components that are needed to fulfill the current projects are going to be worked on. This means the Plugin component, the template, news, and commenting. Categories, tags, etc won&#8217;t be addressed until later. I&#8217;m not attempting to recreate a blogging platform, just need some posts and commenting. Also a templating system that is actually quite cool.</p>
<p>That said, not everything will be done over the weekend or even next weekend. It is going to take several weeks to finish everything and get everything where it needs to be. I want to start off with a project done right and not have to go back and complete such details. I want to be able to tell people, &#8220;Look at QGL, that is how the game and the game engine should be done.&#8221; I hope that by providing a good, clean example, others that I develop with will follow suit. Either that, or I won&#8217;t have to field so many questions when other developers start working with QGL.</p>
<p>Also, I&#8217;m not much of a writer when the topic is really boring like when writing technical manuals. It is akin to someone scratching their nails on a blackboard over and over again.</p>

<p><strong>Possibly Related Posts:</strong></p>
<ul>
<li><a href="http://jacobsantos.com/2011/projects/calibre-improvements/">Calibre Improvements</a></li>
<li><a href="http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/">DragonU Bug Tracker Dev &#8211; Milestone 1</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragon-mvc/">Dragon MVC</a></li>
<li><a href="http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/">Why I Contributed to WordPress</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragonu-db-component/">DragonU DB Component</a></li>
</ul><br />
]]></content:encoded>
			<wfw:commentRss>http://jacobsantos.com/2009/projects/working-on-quantum-game-library-and-moving-corepress-to-qgl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CorePress: The Experiment</title>
		<link>http://jacobsantos.com/2009/projects/corepress-the-experiment/</link>
		<comments>http://jacobsantos.com/2009/projects/corepress-the-experiment/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 05:59:52 +0000</pubDate>
		<dc:creator>Jacob Santos</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.santosj.name/?p=889</guid>
		<description><![CDATA[<a href="http://jacobsantos.com/2009/projects/corepress-the-experiment/" title="CorePress: The Experiment"></a>The truth is, I don&#8217;t like the direction that BackPress is going. I think it suffers or is going to suffer from the Blob anti-pattern that a lot of object-oriented WordPress plugins follow. Whether that will ultimately be the case, &#8230;<p class="read-more"><a href="http://jacobsantos.com/2009/projects/corepress-the-experiment/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://jacobsantos.com/2009/projects/corepress-the-experiment/" title="CorePress: The Experiment"></a><p>The truth is, I don&#8217;t like the direction that BackPress is going. I think it suffers or is going to suffer from the <a href="http://en.wikipedia.org/wiki/God_object" rel="nofollow">Blob</a> anti-pattern that a lot of object-oriented WordPress plugins follow. Whether that will ultimately be the case, it is sort of already seen with the Taxonomy BackPress implementation.</p>
<p>The point is, I want to set an example of how it should be done, if the person writing the example had about 10 more years writing objects and coding using object-oriented patterns. I&#8217;m just winging it people! I&#8217;ll fail, it is a given. I do wish to prove what a rough of what it should look like. That said, the developers behind BackPress and bbPress are far more experienced than I am. It is a wonder however why the objects aren&#8217;t better designed. Take the Roles and Capabilities class API, it is well done. The purpose of the objects are well defined and abstracted.</p>
<p>I think the point is of differing opinions and practices of what objects should encompass. I believe that objects should serve a single purpose and everything outside of its scope should be in its own class. You can take this too far and create too many objects which while they are well abstracted would probably better serve as functions.</p>
<p>That can be another problem. On one hand, if you create a God object, then all the user has to do is use that one object, but it also can&#8217;t be used for anything else. It can only be used for its one purpose and you can&#8217;t easily take out the installer portions and use them for other projects. On the other hand, if you create too many objects, you have an unwarranted complexity and without documentation, no one knows how to combine the classes to create a concrete application.</p>
<p>I tend to implement on the latter than the former, whether for better or worse. I&#8217;m not yet into UML, so my coding tends to involve a lot of refactoring. Therefore, I&#8217;m going to try to release version 1.0 as quickly as possible, that way the API is locked and only bug fixes will be applied. In that way, I can see what problems arose with the design of the classes and understand where I went wrong for the version 2.0 refactor release. When I release version 2.0, I&#8217;m not going to worry about backwards compatibility, so that I can get rid of the problem areas that do quite suck.</p>
<p>The principles of the development of CorePress is as follows:</p>
<ol>
<li><strong>Test-Driven Development.</strong>
<p>The API is not going to be released (as final), unless every component has at least 90% code coverage. In this way, many of the known use cases will be covered and edge cases and unknown use cases can easily be covered on top of the current code coverage. It should provide a great deal of additional stability and that is important for a library that no one is going to use except me.</p>
<p>Also, test-driven development techniques will be used to help design the library to be as easy as possible. I think it is better to find problems with the design before most of the class code is written.
</li>
<li><strong>Documentation and Developer Manual.</strong>
<p>Documentation is important for a library, because if the developer doesn&#8217;t know how to use your library, then they most likely won&#8217;t bother to use it. All of the code is going to have inline documentation describing the purpose. There will also be a Developer Manual with sections for each of the components, detailing the use cases and examples of how to use the components. I think with both of the two documentation, the API and manual will go a long way to help those that choose to use the library, when it is ready to be used.
</li>
<li><strong>Licensing</strong>
<p>Well, part of the problem is that either WordPress does the job too well for me to rewrite it or I&#8217;m not skilled enough to write it well enough anyway. Therefore, I am going to be using parts of the WordPress library that will be clearly documented as such and licensed under the GPL. This won&#8217;t stop most of the library from being New-BSD licensed. The important API parts will be New-BSD and hopefully, I can write the security layers to protect the API from hackers without digging my paws into the WordPress code. If I need to, those sections will be independent from the CorePress library.
</li>
</ol>
<p>I plan on releasing 0.1 version at the end of February, so whatever components are complete at that point will be released, with the exception that the DB, Plugin, and HTTP components must be completed. If those components aren&#8217;t complete at that time, then I&#8217;ll have to push the date back. I believe that I&#8217;ll have those three components done before the end of this month, so I&#8217;m not so much worried about it, but completed also includes documentation and I haven&#8217;t started the developers manual yet.</p>
<p>Oh yeah, I&#8217;m going to base the Developers Manual off of the docblocks in the code, so I&#8217;ll just improve on the current inline documentation and add examples and better explanations in some cases.</p>

<p><strong>Possibly Related Posts:</strong></p>
<ul>
<li><a href="http://jacobsantos.com/2011/projects/calibre-improvements/">Calibre Improvements</a></li>
<li><a href="http://jacobsantos.com/2011/projects/dragonu-bug-tracker-dev-milestone-1/">DragonU Bug Tracker Dev &#8211; Milestone 1</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragon-mvc/">Dragon MVC</a></li>
<li><a href="http://jacobsantos.com/2009/projects/why-i-contributed-to-wordpress/">Why I Contributed to WordPress</a></li>
<li><a href="http://jacobsantos.com/2009/projects/dragonu-db-component/">DragonU DB Component</a></li>
</ul><br />
]]></content:encoded>
			<wfw:commentRss>http://jacobsantos.com/2009/projects/corepress-the-experiment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CorePress Repository on Google Code</title>
		<link>http://jacobsantos.com/2009/projects/corepress-repository-on-google-code/</link>
		<comments>http://jacobsantos.com/2009/projects/corepress-repository-on-google-code/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 08:16:24 +0000</pubDate>
		<dc:creator>Jacob Santos</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.santosj.name/?p=883</guid>
		<description><![CDATA[<a href="http://jacobsantos.com/2009/projects/corepress-repository-on-google-code/" title="CorePress Repository on Google Code"></a>The New-BSD WordPress Library I&#8217;m writing is now on Google Code, and I have a name for it, called CorePress. The name is tentative, because it matches too closely with the other -Presses, I want a new name for it, &#8230;<p class="read-more"><a href="http://jacobsantos.com/2009/projects/corepress-repository-on-google-code/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://jacobsantos.com/2009/projects/corepress-repository-on-google-code/" title="CorePress Repository on Google Code"></a><p>The New-BSD WordPress Library I&#8217;m writing is now on Google Code, and I have a name for it, called <a href="http://code.google.com/p/corepress/">CorePress</a>. The name is tentative, because it matches too closely with the other -Presses, I want a new name for it, but that will probably come later. Right now the code name for it is CorePress. If I get enough completed to where I can release 0.5 version, then I&#8217;ll think about changing the name again.</p>
<p>I&#8217;ve been working pretty much about four hours a day on the library, unit tests, and documentation. I think the good news is that if I do the inline documentation correctly, then I can output the phpdoc docblocks in DocBook format and then edit the XML from there. The goal is to provide a detailed guide on how to use the library. I suppose I can also use the unit tests as examples as well, depending on how involved the examples are. I&#8217;ll also need to write a working plugin and theme for the developer guide on how to use the library.</p>
<p>I don&#8217;t suppose I&#8217;ll be finished for another month or two. The DB portions are coming along nicely. However, they are hardly complete. That said, I don&#8217;t suppose I&#8217;ll have everything working in version 0.1. There will be a lot of missing pieces and a lot of patch work as I find what the best way to design the library is. I envision rewriting sections that were poorly thought out. I think it would be good. Something that couldn&#8217;t be done with the official library shouldn&#8217;t really hinder me with the development of the library. The reason is that, for one, the library is alpha, so nothing is tied down as of yet, and two, not that many people use it, well at this point, no one uses it, so I don&#8217;t have to worry about an user base getting upset about API changes.</p>
<p>I have plans for each alpha version leading up to the stable release. This isn&#8217;t an exact milestone per say and subject to change. I think I&#8217;m going to continue develop as much as possible until the end of this month. I may not release 0.1 (I will tag it when I get to that point), but not create a release. Creating a release to me is providing a PHP 5.2 version. The more classes and code I write the longer it will take for each release to backport the library to PHP 5.2.x. It will be good practice at this the end of this month to do so.</p>
<p>It is actually a lot of fun, because I get to play with PHP 5.3, which is still in alpha. I also get to do a lot of experimental classes and put together a fluid interface pattern library. I also get to look at the adapter pattern some more. I&#8217;m going to explore the controller pattern in the library, because there are already so many libraries which do that already.</p>

<p><strong>Possibly Related Posts:</strong></p>
<ul>
<li><a href="http://jacobsantos.com/2012/programming/game-engine-development-and-open-source/">Game Engine Development and Open Source</a></li>
<li><a href="http://jacobsantos.com/2011/programming/plans-for-base-cms/">Plans for Base CMS</a></li>
<li><a href="http://jacobsantos.com/2011/programming/project-plans/">Project Plans</a></li>
<li><a href="http://jacobsantos.com/2011/programming/calibre-improvements-part-2/">Calibre Improvements Part 2</a></li>
<li><a href="http://jacobsantos.com/2011/projects/calibre-improvements/">Calibre Improvements</a></li>
</ul><br />
]]></content:encoded>
			<wfw:commentRss>http://jacobsantos.com/2009/projects/corepress-repository-on-google-code/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

