<?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>Hawkins IT Group Inc.</title>
	<atom:link href="http://www.hawkinsitgroup.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.hawkinsitgroup.com</link>
	<description></description>
	<lastBuildDate>Mon, 05 Dec 2011 23:01:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>MongoDB .NET Tutorial &#8211; Iterating a MongoDB Cursor</title>
		<link>http://www.hawkinsitgroup.com/mongodb-net-tutorial-iterating-a-cursor?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mongodb-net-tutorial-iterating-a-cursor</link>
		<comments>http://www.hawkinsitgroup.com/mongodb-net-tutorial-iterating-a-cursor#comments</comments>
		<pubDate>Mon, 05 Dec 2011 22:30:21 +0000</pubDate>
		<dc:creator>chawkins</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.hawkinsitgroup.com/?p=642</guid>
		<description><![CDATA[Iterating a MongoDB Cursor in .NET A Cursor of What? In a typical MongoDB driven .NET application, we are not going to be using a cursor like we would if this were a sql database. We don&#8217;t want rows and we don&#8217;t want to read lines. We want objects. We&#8217;re greedy like that&#8230; and it&#160;<a href="http://www.hawkinsitgroup.com/mongodb-net-tutorial-iterating-a-cursor" class="read-more">Continue Reading</a>]]></description>
			<content:encoded><![CDATA[<h1 style="text-align: right;"><span style="font-size: x-large;">Iterating a MongoDB Cursor in .NET</span></h1>
<h2>A Cursor of What?</h2>
<p>In a typical MongoDB driven .NET application, we are not going to be using a cursor like we would if this were a sql database. We don&#8217;t want rows and we don&#8217;t want to read lines. We want objects. We&#8217;re greedy like that&#8230; and it will save us a lot of time. </p>
<p>First a <a href="http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-MongoCursor%3CTDocument%3Eclass" target="_blank">reference to the documentation</a>. If you want more detail, this is where you need to go.</p>
<p>To get a cursor of objects, you need to have saved (serialized) some objects previously. See our first <a href="http://www.hawkinsitgroup.com/vb-net-mongodb-howto-example" title="A First Tutorial on VB .NET and MongoDB" target="_blank">MongoDB .NET tutorial</a> for an example of how to do this. Picking up where that left off, let&#8217;s say we have some instances of our Car class saved in MongoDB. </p>
<h2>MongoDB Cursor of Cars</h2>
<p>Of course we need a connection to the database and we need a reference to the CarCollection, something like this:<br />
<code><br />
server = MongoServer.Create("mongodb://localhost")<br />
db = server("dbMyDatabaseName")<br />
cars = db("CarCollection")</code></p>
<p>Now we can build a query and get a cursor. First let&#8217;s do it in two steps for clarity.<br />
<code><br />
dim qry = Query.EQ("fast", True)<br />
dim mcCars = cars.FindAs(Of Car)(qry)<br />
</code></p>
<p>At this point the query has not executed. It will lie in wait until we actually enumerate the cursor (mcCars).</p>
<p>For Each c as Car in mcCars<br />
&nbsp;&nbsp;&nbsp;Console.WriteLine(&#8220;Found fast car named: &#8221; &#038; c.name)<br />
Next </p>
<p>The object conversion was implicit in the drivers behavior. We asked for cars where the &#8220;fast&#8221; property in our class definition was set to True, and we got a strongly typed collection of Cars in our cursor. </p>
<p>For convenience, a shorter way to ask is:<br />
<code>dim mcCars = cars.FindAs(Of Car)(Query.EQ("fast", True))</code></p>
<h2>Ordering</h2>
<p>Now that we know how to obtain a cursor, what are some options for tweaking it? We can do pretty much anything that SQL can do. </p>
<blockquote><p>Bear in mind we are working with objects, not numbers and strings. So when you query this way there is no exact parallel for SUM, GROUP BY, etc. That&#8217;s a topic for another day. </p></blockquote>
<p>Instead of ordering results in the query, we can do it by setting properties on the cursor. For example, if we want all Cars in the collection, ordered alphabetically by name:<br />
<code><br />
dim mcCars = cars.FindAllAs(Of Car)()<br />
mcCars.SetSortOrder(MongoDB.SortBy("name"))<br />
</code></p>
<p>We can add other options too:<br />
<code><br />
mcCars.Limit(100) ' get only the first 100 results<br />
mcCars.SetFlags(NoTimeout) ' never timeout<br />
mcCars.Skip(10)  ' skip the first 10 results<br />
</code></p>
<blockquote><p>TIP: Be careful with the NoTimeout option. I needed it for a long running operation that takes many hours to iterate over a cursor, so I had no choice. The thing to know is that your cursor will timeout by within 15 minutes (the default in version 1.3 of the official MongoDB .NET driver) from the time you being iterating. If you set the NoTimeout flag, it will never timeout and if your application dies the server will not release the cursor until the database restarts. You can easily build up a large pile of wasted resources this way if you&#8217;re not careful.</p></blockquote>
<p>Or get the result count:<br />
<code>Console.WriteLine("Found " &#038; mcCars.Count &#038; " cars.")<br />
</code></p>
<p>That&#8217;s basically it. Lot&#8217;s of advanced options can be found in the driver documentation.<br />
<strong>Next up: More Queries.</strong>  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawkinsitgroup.com/mongodb-net-tutorial-iterating-a-cursor/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A First Tutorial on VB .NET and MongoDB &#8211; Connect, Insert, Query</title>
		<link>http://www.hawkinsitgroup.com/net-mongodb-tutorial-example-connect-insert-query?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=net-mongodb-tutorial-example-connect-insert-query</link>
		<comments>http://www.hawkinsitgroup.com/net-mongodb-tutorial-example-connect-insert-query#comments</comments>
		<pubDate>Tue, 29 Nov 2011 15:27:03 +0000</pubDate>
		<dc:creator>chawkins</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[vb.net]]></category>

		<guid isPermaLink="false">http://www.hawkinsitgroup.com/?p=584</guid>
		<description><![CDATA[5 Minute Quickstart Tutorial and cheat sheet of examples for connecting / reading / writing to MongoDB from VB .NET. Get the MongoDB .Net Driver http://github.com/mongodb/mongo-csharp-driver/downloads First install the latest driver for your platform. Create a .Net Project and Add the Reference to Visual Studio In Visual Studio, click Project, Add Reference, and then select&#160;<a href="http://www.hawkinsitgroup.com/net-mongodb-tutorial-example-connect-insert-query" class="read-more">Continue Reading</a>]]></description>
			<content:encoded><![CDATA[<h1 style="text-align: right;"><span style="font-size: x-large;">5 Minute Quickstart Tutorial and cheat sheet of examples for connecting / reading / writing to MongoDB from VB .NET.</span></h1>
<h2>Get the MongoDB .Net Driver</h2>
<p><a href="http://github.com/mongodb/mongo-csharp-driver/downloads" target="_blank">http://github.com/mongodb/mongo-csharp-driver/downloads</a><br />
First install the latest driver for your platform.</p>
<h2>Create a .Net Project and Add the Reference to Visual Studio</h2>
<p>In Visual Studio, click Project, Add Reference, and then select the .Net tab. You will probably find MongoDB.Driver and MongoDB.Bson near the bottom.  Select them both. If you don&#8217;t see them here you can also browse directly to the dll files installed by the driver installation routine, probably in \Program Files\CSharpDriver 1.3\.</p>
<h2>Connect</h2>
<p>In your vb code file, add the imports (&#8216;Builders&#8217; is needed for queries):<br />
<code>Imports MongoDB.Bson<br />
Imports MongoDB.Driver<br />
Imports MongoDB.Driver.Builders</code></p>
<p>Define some variables that can be used by all of our methods:<br />
<code>Dim server As MongoServer<br />
Dim db As MongoDatabase<br />
Dim cars As MongoCollection</code></p>
<p>Create an actual server connection to localhost when we initialize the program in form.Load or wherever (of course, you need to be running a MongoDB server on localhost. If not, set one up first or substitute another DNS name or IP address for &#8216;localhost&#8217;):</p>
<p><code>server = MongoServer.Create("mongodb://localhost")<br />
db = server("dbMyDatabaseName")<br />
cars = db("CarCollection")</code></p>
<p>Here we are connecting to the server, then a database named dbMyDatabaseName, then inside that to a collection named CarCollection. The act of connecting to a database or collection will cause it to be created if it doesn&#8217;t exist.</p>
<p>&nbsp;</p>
<p><strong>// Begin Quick Explanation</strong></p>
<p><span style="color: #339966;">Skip this if you already know how MongoDB works.<br />
It isn&#8217;t like a relational database where rows of information are stored in tables, which in turn are stored in the database. It works like this:</span></p>
<ul>
<li>The basic unit of data is the name / value pair.</li>
<li>The name is a string and the value can be anything: a string, integer, date, array, etc.</li>
<li>One or more name / value pairs are stored together in a document.</li>
<li>Related documents are stored in a collection.</li>
<li>A database is a group of collections.</li>
</ul>
<p><span style="color: #339966;">Most often, you will probably be storing instances of your classes as documents, which is exceptionally easy to do with MongoDB and the .Net driver. This is great for developers because you can code a lot faster with no need for a3rd party object relational mapper (ORM) or a lot of functions just for translating objects to SQL statements. For example, if I need a database to store information about cars, I would do it like so (exact syntax coming up):</span></p>
<ul>
<li>Create an instance of car</li>
<li>Set some attributes</li>
<li>Save it to MongoDB</li>
</ul>
<p><span style="color: #339966;">Now I will have a &#8220;document&#8221; that contains the attributes of my car object, which I can easily retrieve and change.</span></p>
<p><strong>// End Quick Explanation</strong></p>
<p>Now that we have a database connection and a collection to put things in, we can write some data. Assume we have a simple car class that creates a BSON id whenever a new Car is created.</p>
<p><code>Class Car<br />
Imports MongoDB.Bson<br />
Public Property _id as ObjectID<br />
Public Property name As String = ""<br />
Public Property topSpeed As Integer = 0<br />
Public Property fast As Boolean = False</code></p>
<p>Public Sub New()<br />
&nbsp;&nbsp;&nbsp;_id = new ObjectID()<br />
End Sub</p>
<p>End Class</p>
<p>We can now instantiate a car and save it very easily because <strong>MongoDB and the VB.NET driver will automatically serialize your object</strong>:<br />
<code>dim car1 As New Car<br />
car1.name = "Bob"<br />
car1.topSpeed = 100<br />
car1.fast = True </code></p>
<p>cars.Save(car1)</p>
<blockquote><p>TIP: Normally we don&#8217;t really want to work with &#8220;documents&#8221;, <strong>we want to work with strongly typed objects</strong> (instances of our classes that have been saved to the database). Right in the query syntax we specify that we want an object returned by the query, not a document that we then have to &#8220;translate&#8221; into one of our objects. See the following query!</p></blockquote>
<p>To search for the car by name:<br />
<code>dim somecar = cars.FindOneAs(Of Car)(Query.EQ("name", "Bob"))</code></p>
<p>This query will retrieve the first car named Bob. If there are no cars name Bob, then somecar will be null (Nothing). Remember to check:</p>
<p><code>If not somecar Is Nothing Then<br />
&nbsp;&nbsp;&nbsp;console.Writeline("We found a car")<br />
Else<br />
&nbsp;&nbsp;&nbsp;console.Writeline("Query matched nothing...")<br />
End If<br />
</code></p>
<h2>Update and Save</h2>
<p>Updating is as simple as inserting. Because we retrieved &#8220;Bob&#8221; as an instance of Car, we just make our changes and save. After we retrieve somecar:</p>
<p><code>somecar.topSpeed = 110<br />
cars.Save(somecar)</code></p>
<p>The magic is in the _id property. If the MongoDB driver sees that a field named _id exists and is set, it will automatically update an object with a matching _id (in this case, Bob) instead of creating a new one. Otherwise, it would have no way of knowing if this was a new Car, also named Bob, or an update to the existing Car named Bob.</p>
<blockquote><p>TIP: <strong>If the _id&#8217;s match it is an update.</strong> This is sometimes called an &#8220;Upsert&#8221;, meaning: Update if it exists, Insert if it doesn&#8217;t. This is the default behavior of the &#8220;CollectionName&#8221;.Save function in the official MongoDB .NET driver. It saves you a lot of time.</p></blockquote>
<p>An easy way to explore the database and see your changes is to use the excellent tool <a href="http://www.mongovue.com/" target="_blank">MongoVue</a>. For those who prefer a GUI or haven&#8217;t yet spent any time learning the MongoDB command syntax, it&#8217;s a huge timesaver. We use it in our office every single day.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawkinsitgroup.com/net-mongodb-tutorial-example-connect-insert-query/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MongoDB based Micro-App completed for CA Medical Group</title>
		<link>http://www.hawkinsitgroup.com/mongodb-based-micro-app-completed-for-ca-medical-group?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mongodb-based-micro-app-completed-for-ca-medical-group</link>
		<comments>http://www.hawkinsitgroup.com/mongodb-based-micro-app-completed-for-ca-medical-group#comments</comments>
		<pubDate>Thu, 17 Nov 2011 12:37:43 +0000</pubDate>
		<dc:creator>chawkins</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[micro-applications mongodb vb.net]]></category>

		<guid isPermaLink="false">http://www.hawkinsitgroup.com/?p=575</guid>
		<description><![CDATA[CA Medical needed to get patient records intothe hands of their mobile staff, NOW. MongoDB enables rapid data-driven application development. Since we had four days to get it done we went MongoDB and finished the app in record time. Our partners came to us with a problem. They had a customer with a pile of&#160;<a href="http://www.hawkinsitgroup.com/mongodb-based-micro-app-completed-for-ca-medical-group" class="read-more">Continue Reading</a>]]></description>
			<content:encoded><![CDATA[<h1 style="text-align: right;"><span style="font-size: x-large;">CA Medical needed to get patient records into<br />the hands of their mobile staff, NOW.</span></h1>
<h2>MongoDB enables rapid data-driven application development. Since we had four days to get it done<span style="color: #339966;"> we went MongoDB</span> and finished the app in record time.</h2>
<p>Our partners came to us with a problem. They had a customer with a pile of paper medical records and medical staff in multiple locations who needed real time access. The records had to be digitized and captured in a database along with basic patient information, and we needed a delivery framework to allow doctors with iPads to securely access the data from anywhere.</p>
<p>And only one last requirement&#8230; They needed to go live with this system in four days! Had we been stuck with a SQL back end, this would have been impossible. But with MongoDB and the automatic object serialization built in to the official MongoDB .Net driver we can pull this off on time and on budget.</p>
<p>First we modeled the data in our .Net classes. This was pretty simple as we only needed to represent a person with some basic properties, plus any files associated with them. We built a GUI that would allow us to create instances of our people and set their properties. And then we built the data access / persistence layer by connecting to a MongoDB instance and persisting our instance to the database by calling collectionName.Save(myPerson).</p>
<p>To get that person back, we simply ask:<br />
dim person1 = collectionName.FindOneAs(Of Person)(Query.EQ(&#8220;_id&#8221;, &#8220;SomeID&#8221;))</p>
<p>Or by Social Security number:<br />
dim person1 = collectionName.FindOneAs(Of Person)(Query.EQ(&#8220;ssn&#8221;, &#8220;555-55-5555&#8243;))</p>
<h2>That&#8217;s It</h2>
<p>Sometimes building a data access layer can be time consuming, or hard, or full of those little details that make you crazy and consume vast quantities of development time. But not this time. MongoDB has a .Net driver that automatically serializes an object into a BSON Document. For us that means we can code away and when the time comes to CRUD (Create, Read, Update, Delete), it pretty much just happens without any extra effort on our part.</p>
<h2>Is that a big deal?</h2>
<p>We built this entire project in about the same amount of time we spent on the data access layer of our last project. It was slightly larger, but the huge time savings captured by not having to break your objects into tiny little SQL pieces (or configure a third party ORM to do it) is frankly awesome. It cannot be overstated. An object maps pretty naturally to a document, and all the basic types are supported (strings, integers, lists / arrays, dates, binary, etc).</p>
<p>In our next series of posts we&#8217;ll break down how we built it. Hopefully this will assist any developers out there who are interested in MongoDB but want to see a real life example before taking the plunge and learning a new technology.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawkinsitgroup.com/mongodb-based-micro-app-completed-for-ca-medical-group/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Optimization Completed for www.rudeorstupid.com</title>
		<link>http://www.hawkinsitgroup.com/mysql-optimization-completed-for-www-rudeorstupid-com?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mysql-optimization-completed-for-www-rudeorstupid-com</link>
		<comments>http://www.hawkinsitgroup.com/mysql-optimization-completed-for-www-rudeorstupid-com#comments</comments>
		<pubDate>Fri, 28 Oct 2011 20:40:41 +0000</pubDate>
		<dc:creator>chawkins</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[mysql database-optimization performance]]></category>

		<guid isPermaLink="false">http://www.hawkinsitgroup.com/?p=566</guid>
		<description><![CDATA[Customer: WOW! (and feel free to quote me on that). The site was never this fast. Next time, I&#8217;m just going to call you first. Many data-driven applications and websites could dramatically improve performance by optimizing MySQL. The developers who built ROS.com did a nice job on the php, but the performance of the database&#160;<a href="http://www.hawkinsitgroup.com/mysql-optimization-completed-for-www-rudeorstupid-com" class="read-more">Continue Reading</a>]]></description>
			<content:encoded><![CDATA[<h1 style="text-align: right;"><span style="font-size: x-large;">Customer: WOW! (and feel free to quote me on that). The site was never this fast. Next time, I&#8217;m just going to call you first.</span></h1>
<h2>Many data-driven applications and websites could dramatically improve performance by <span style="color: #339966;">optimizing MySQL.</span></h2>
<p>The developers who built ROS.com did a nice job on the php, but the performance of the database and underlying server was never addressed. A MySQL and PHP upgrade brought the problems into sharp focus and Hawkins IT Group was selected to help. In a few hours we analyzed the performance of the site and the underlying MySQL database and had a list of changes ready.</p>
<ul>
<li>Query cache needed to be turned on</li>
<li>Key buffer needed to be large enough to hold the MyISAM indexes in memory</li>
<li>Innodb buffer needed to be larger to hold the InnoDB clustered indexes in memory</li>
<li>Table cache needed to be much larger</li>
<li>Query Analysis: Indexes added to eliminate joins without indexes</li>
</ul>
<p>And the result was great! Some pages that required multiple queries to load were previously taking over 30 seconds to complete. This is now down to about 2 seconds. Our MySQL database performance is vastly improved and the slow query log&#8211;set to record any queries over 1 second in duration&#8211;is still empty. All queries complete in less than one second.</p>
<h2>Optimization HowTo</h2>
<p><strong>If you need a performance boost out of your MySQL database, start by following these steps:</strong></br><br />
1. Enable the slow query log by adding these lines to your my.cnf file:<br />
log-slow-queries = /var/log/slow-queries.log<br />
long_query_time = 1</p>
<p>2. Acquire and run some basic analysis tools:<br />
My personal favorite is mysqltuner.pl. Google for it, run it, and get some numbers. The key statistics are the ones mentioned above. Research them and make them right for your database by setting the needed variables in my.cnf. </p>
<p>3. Check the slow query log. Pull out some slow queries that seem to recur and run them manually. See if you need to add any indexes. Run the queries again to see if it helped (but disable query caching temporarily so you don&#8217;t get a false result). </p>
<p>4. Try a round of optimizations and restart MySQL. After letting the caches warm up, run the analysis tool again and see if you&#8217;ve made any improvements. </p>
<p>5. Repeat!</p>
<p>This will get you started in the fundamentals of MySQL optimization. If you want professional help, please contact us and we&#8217;ll work with you on the details. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawkinsitgroup.com/mysql-optimization-completed-for-www-rudeorstupid-com/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CLRC Micro-App Nearly Finalized</title>
		<link>http://www.hawkinsitgroup.com/clrc-micro-app-nearly-finalized?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=clrc-micro-app-nearly-finalized</link>
		<comments>http://www.hawkinsitgroup.com/clrc-micro-app-nearly-finalized#comments</comments>
		<pubDate>Fri, 30 Sep 2011 16:49:57 +0000</pubDate>
		<dc:creator>chawkins</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[micro-applications mysql vb.net]]></category>

		<guid isPermaLink="false">http://www.hawkinsitgroup.com/?p=562</guid>
		<description><![CDATA[Final round of in vivo testing underway! CLRC needed an application to track all the customized information they need to store for their member libraries. After a bit of development, we provided our first draft of the CLRC Database for testing. Now in round 3 of customizations, we&#8217;ve been upgraded to live usage at the&#160;<a href="http://www.hawkinsitgroup.com/clrc-micro-app-nearly-finalized" class="read-more">Continue Reading</a>]]></description>
			<content:encoded><![CDATA[<p><strong>Final round of in vivo testing underway!</strong></p>
<p><img class="alignnone" title="CLRC Database screenshot" src="http://www.hawkinsitgroup.com/images/clrc_db_600.png" alt="CLRC Database screenshot" width="600" height="431" /><br />
CLRC needed an application to track all the customized information they need to store for their member libraries. After a bit of development, we provided our first draft of the <strong>CLRC Database</strong> for testing. Now in round 3 of customizations, we&#8217;ve been upgraded to live usage at the customer site. Hopefully this is our last round of changes and CLRC can begin enjoying the fruits of their vision for better library council contact management. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawkinsitgroup.com/clrc-micro-app-nearly-finalized/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automatic Image Matching status</title>
		<link>http://www.hawkinsitgroup.com/automatic-image-matching-status?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=automatic-image-matching-status</link>
		<comments>http://www.hawkinsitgroup.com/automatic-image-matching-status#comments</comments>
		<pubDate>Wed, 21 Sep 2011 16:48:24 +0000</pubDate>
		<dc:creator>chawkins</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[digital preservation]]></category>
		<category><![CDATA[image matching]]></category>

		<guid isPermaLink="false">http://www.hawkinsitgroup.com/?p=558</guid>
		<description><![CDATA[We&#8217;re developing AIM more slowly than we&#8217;d hoped. Too many other projects are taking up our free development time and this is one of the projects that is suffering the most. In order to keep costs down, we excluded this work from our last grant proposal and offered instead to work on it as time&#160;<a href="http://www.hawkinsitgroup.com/automatic-image-matching-status" class="read-more">Continue Reading</a>]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re developing AIM more slowly than we&#8217;d hoped. Too many other projects are taking up our free development time and this is one of the projects that is suffering the most. In order to keep costs down, we excluded this work from our last grant proposal and offered instead to work on it as time permits. We&#8217;d then sell subscriptions to it in order to recoup our development costs. Nothing has changed except that paying projects are always at the front of the line, and the line keeps getting longer. We&#8217;ll post an updated timeline as we have one, but for now we anticipate completion near year end 2011. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.hawkinsitgroup.com/automatic-image-matching-status/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

