<?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>Netfactory &#187; Software Engineering</title>
	<atom:link href="http://netfactory.dk/category/development/flows/feed/" rel="self" type="application/rss+xml" />
	<link>http://netfactory.dk</link>
	<description>WebDevelopment</description>
	<lastBuildDate>Sun, 23 Jan 2011 15:56:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>The art of the commit (in version management)</title>
		<link>http://netfactory.dk/2009/01/05/the-art-of-the-commit-in-version-management/</link>
		<comments>http://netfactory.dk/2009/01/05/the-art-of-the-commit-in-version-management/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 19:19:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[cvs]]></category>

		<guid isPermaLink="false">http://netfactory.dk/?p=315</guid>
		<description><![CDATA[Most developers (and certainly professional shops) working with software- or webdevelopment has understood the ideas behind sourcecode version management &#8211; no matter if they choose to use cvs, subversion, git or any of the other fine systems available. How developers use these systems, can provide an easy insight into who is the dummy, the average [...]]]></description>
			<content:encoded><![CDATA[<p>Most developers (and certainly professional shops) working with software- or webdevelopment has understood the ideas behind sourcecode version management &#8211; no matter if they choose to use <a  href="http://www.nongnu.org/cvs/">cvs</a>, <a  href="http://subversion.tigris.org/">subversion</a>, <a  href="http://git-scm.com/">git</a> or any of the other fine systems available. How developers use these systems, can provide an easy insight into who is the dummy, the average and the great developer.</p>
<h2>When to commit</h2>
<p>One of the first distinguishing signs is what they commit &#8211; is the version management system used as a backup tool or as a version tracking tool. Some seem to think, you should end the day by committing all your sourcecode (no matter which state it’s in). This is really bad sign. Others commit whenever a new file is finished and thought ready to use &#8211; which is slightly better. Others again commit once &#8211; just before a new release &#8211; and has the commit contain each and every change since last release.</p>
<p>In my world a commit should contain a complete new feature across all the files changed to make the new feature. The commit should preferably only address one change (a new functionality or a changed feature).</p>
<h2>The commit message</h2>
<p>Another way to spot bad habits is in the commit message. Is there a commit message at all? &#8211; if not, it’s a bad sign. Almost as bad are meaningless comments, which may come in all sort of varieties &#8211; “work in progress”, “bugfix”, “update”, “foobar”. I’m sure they make sense to the developer at the time of committing them, but hardly 6 months later, when browsing the logs and wondering why a certain change was made.</p>
<p>A less common bad commit habit is the “book style” &#8211; where the comment either contain a delta of the changed lines (literally or as a description) or the length of the comment is a small story explaining the reason for the change, why it was made the way it was and on and on.</p>
<p>I’d any day prefer seeing a reference to a bug/ feature tracking system (<a  href="http://bugzilla.org/">bugzilla</a>, <a  href="http://trac.edgewall.org/">trac</a> or anything like it), and a brief summary of the change in a 140 characters a less.</p>
]]></content:encoded>
			<wfw:commentRss>http://netfactory.dk/2009/01/05/the-art-of-the-commit-in-version-management/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Tips for developing WebApplications</title>
		<link>http://netfactory.dk/2008/11/28/tips-for-developing-webapplications/</link>
		<comments>http://netfactory.dk/2008/11/28/tips-for-developing-webapplications/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 22:06:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://netfactory.dk/?p=309</guid>
		<description><![CDATA[So it been awhile since I sort of promised some tips on developing web applications fast. This post contains my five generic tips, which may apply to you (but then again &#8211; your mileage may vary). I’ve tried to abstract the advice and not stick to PHP development here, though it’s by far the world [...]]]></description>
			<content:encoded><![CDATA[<p>So it been awhile since I sort of promised some tips on developing web applications fast. This post contains my five generic tips, which may apply to you (but then again &#8211; your mileage may vary). I’ve tried to abstract the advice and not stick to PHP development here, though it’s by far the world I know best.</p>
<h2>1. Spend time on the data model</h2>
<p>Too often a data model is driven by code, not careful thinking, and this often causes problems has the web application develops and expand over time. When developing a site, which needs data stored in a database (as most web applications tend to do), do try to spend some time on the data model &#8211; which tables do you need, what fields should the tables have, are the naming logical and consistent, what constraints and limitations does the data model offer.</p>
<p>It’s often far easier to refactor code and functionality than it is changing the database tables and fields, and it can be a tremendous help while maintaining an application if you clearly understands the data its working with.</p>
<h2>2. Get the basics working first and fast</h2>
<p>It often takes a while to get a complete web application finished. Help motivating yourself by getting the core working first and then add features and frosting once it’s working. By having a working skeleton, I usually find it much easier guess how much work needs to finish the various features than I do guessing the work needed to complete a section (ie. admin interface) on the application.</p>
<h2>3. Think performance and security from the beginning</h2>
<p>Remember to think of performance and security from the very beginning. Sometimes performance &#8211; or security &#8211; may cause you to layout the data model in a certain way or structure the application a certain way. While you may be able to add performance and security during refactoring, it’s often much harder than it is keeping both in mind from the very beginning.</p>
<h2>4. Don’t fix the future; focus on the current needs</h2>
<p>I don’t care about the next version. I really don’t want an infrastructure in place, which can help me build the future versions of the application. I want the features and infrastructure in place for the current version I’m working on &#8211; and frankly the features in the next version has a tendency to change before I’m ready to develop them.<br />
Too often future-proofing an application clutters the code and too often the clutter doesn’t ever come to any good use &#8211; it’s just noise once we get to the real future features of the application.</p>
<h2>5. Naming matters</h2>
<p>Do think of what names you use on functions, classes, variables and database tables through out the application &#8211; and choose something meaningful. A variable named $x doesn’t hint what it’s used for. Help yourself (and other looking at the code) by hinting the uses of various things by choosing meaningful names.</p>
]]></content:encoded>
			<wfw:commentRss>http://netfactory.dk/2008/11/28/tips-for-developing-webapplications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Your mileage may vary</title>
		<link>http://netfactory.dk/2008/11/09/your-mileage-may-vary/</link>
		<comments>http://netfactory.dk/2008/11/09/your-mileage-may-vary/#comments</comments>
		<pubDate>Sun, 09 Nov 2008 19:46:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://netfactory.dk/?p=307</guid>
		<description><![CDATA[It’s always fun to read articles with tips and tricks by other developers and see how they figure “best practices” are handled. Most developers do seem to thing they observations and practices are easily adopted by anyone, and should be accepted without any argumentation or reasoning behind the advice. One of the nice examples of [...]]]></description>
			<content:encoded><![CDATA[<p>It’s always fun to read articles with tips and tricks by other developers and see how they figure “best practices” are handled. Most developers do seem to thing they observations and practices are easily adopted by anyone, and should be accepted without any argumentation or reasoning behind the advice.</p>
<p>One of the nice examples of this, was a story called “<a  href="http://blog.midstride.com/2008/09/09/5-tips-to-develop-php-applications-fast/">5 tips and tools to develop php applications fast</a>”, and while it may apply to the web applications developed by the author, it’s one of those where I question who is supposed to be the audience. All 5 tips are often found in many textbooks and other stories on the net, and in my experience they are all wrong (more or less naturally).</p>
<p><strong>1) Use a MVC framework &#8211; it’s an industry accepted standard.</strong><br />
MVC as an idea may be accepted, but there are many ways of implementing the MVC &#8211; even with the various PHP frameworks. If you know the MVC pattern it may be an idea to look at the frameworks supporting it, but don’t get carried away.</p>
<ul>
<li>If all your old code is non-MVC code and you don’t have any plans to MVC-refactor it, it may cause you maintenance overhead to try a completely different style  on a single project/web application.</li>
<li>If you aren’t used to using a (MVC) framework you need to invest time in learning it.</li>
</ul>
<p>Do keep an eye on the overhead caused by the framework. If you web application has a heavy load and the framework causes 5-10% overhead, it may a bad idea.</p>
<p><strong>2) Ajax Frameworks<br />
</strong>Great idea.. but to utilize the power of an ajax framework, you need to learn how to use it. Also Ajax isn’t the holy grail of the internet. Sometimes it’s cleaver to use it, other times it isn’t. By using plain old HTML and reloading the page from time to time, it may be easier to debug the application.</p>
<p>Do also notice, that writing great/professional quality Javascript often requires just as great skills as writing professional PHP.</p>
<p><strong>3) IDEs<br />
</strong>An IDE &#8211; Integrated Development Environment &#8211; can be a great idea if you know your way around it, and use it regularly. An IDE is &#8211; like any other tool &#8211; something you need to invest time and resources into, if you want something back &#8211; and especially if we’re talking a beast like Eclipse-based tools.</p>
<p><strong>4) Database creation/management software<br />
</strong>Let me skip comments on database creating management tools. I’ve never really used them and don’t know if they’re a pain or a benefit. I have often seen though, that too easy access to the database, leads to sloppy database design (or at least something, that isn’t thought through).</p>
<p>So far it’s been my experience, that people who knows the command-line clients to databases, often has invested much more time in thinking their data models through and often spend a little more time considering the table layout, the field definitions, indexes and other important aspects, than those who use a nice graphical interface.</p>
<p><strong>5) Object Relational Mapping<br />
</strong>Object-Oriented programming isn’t a holy grail, and most people doing OO programming (in my experience) doesn’t genuinely do object-oriented programming &#8211; instead they use the OO-facilities in the language to slap functions together in a class.</p>
<p>There’s nothing wrong with procedural programming as such, and trying to force object-orientation into your code &#8211; and even abstracting it away through Object-relational mapping, has often lead to slow performance and odd database designs. If you know what you’re doing great, but there’s no free lunch, and trying to utilze ORM without having a pretty solid grip on what’s happening and why, rarely does anything good to your productivity.</p>
<p>I’m quite sure for some developers, using some sort of object-relational mapping might be a gain in programmer productivity, but do keep in mind, that if you’re developing a site with massive traffic, the programmer gains may easily be crushed in added server resource requirements &#8211; spending a few minutes extra optimizing and tuning applications, may in some cases save hours and hours of cpu cycles once the solution is deployed.</p>
<p>Getting back to the article, I’m sure the advise is well-meant and thought through by the author, but do always &#8211; as with all advise &#8211; think it through and see how may apply to your adoptation. In may daily development some of it is quite terrible (as I often work on a site with thousands if not millions of pageviews every week).</p>
<p>I’m wondering what my 5 tips would be for developing PHP applications fast would be. Check back in a few days, and there may be an answer &#8211; which may or may not &#8211; apply to you.</p>
]]></content:encoded>
			<wfw:commentRss>http://netfactory.dk/2008/11/09/your-mileage-may-vary/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Code archeology</title>
		<link>http://netfactory.dk/2008/10/28/code-archeology/</link>
		<comments>http://netfactory.dk/2008/10/28/code-archeology/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 21:15:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://netfactory.dk/?p=305</guid>
		<description><![CDATA[I’ve been spending quite some time the past days digging around in old code (3+ years old with no or very little changes). It’s quite fun noticing what efforts pay off and which doesn’t when you go back to make chance to old stuff. I’m sure my observations aren’t generally applicable. We’re web developers and [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve been spending quite some time the past days digging around in old code (3+ years old with no or very little changes). It’s quite fun noticing what efforts pay off and which doesn’t when you go back to make chance to old stuff. I’m sure my observations aren’t generally applicable. We’re web developers and are keeping web platform (several pretty big websites on a common codebase) alive year after year.</p>
<p><strong>Proper and sane variable- and function names pays off instantly</strong>. Incredibly short or misguiding function and variable names doesn’t. While it may be fun naming functions “doMagic” or likewise, chances that you &#8211; or someone else maintaining the code years after will probably not appreciate it at all.</p>
<p>Reasonable commenting on functions and tricky code parts often come to good use, but too much commenting is distracting. Some is good, and less is often more valuable.</p>
<p><strong>Version control logs can be quite valuable</strong>, if they’re descriptive for the change made. Too often though, was the comment “misc. bug fixing”, “problem solved” or something which years later was of no use or value at all.</p>
<p><strong>Documentation kept apart from the source code seem to have none or very little value</strong>. Not once have I bothered to look in the wiki-documents or any other documentation which was in the code. In the few instances I did, minor changes and bug fixes had changed the code to such an extend (while not updating the documentation) that it was misleading at best.</p>
<p>The only cases where the documentation apart seem to make a positive is database diagrams and descriptions. They do seem to have value.</p>
]]></content:encoded>
			<wfw:commentRss>http://netfactory.dk/2008/10/28/code-archeology/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code exit strategy &#8211; 3 tips</title>
		<link>http://netfactory.dk/2008/06/07/code-exit-strategy-3-tips/</link>
		<comments>http://netfactory.dk/2008/06/07/code-exit-strategy-3-tips/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 15:28:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[SourceCode]]></category>

		<guid isPermaLink="false">http://netfactory.dk/?p=268</guid>
		<description><![CDATA[It seems many developers get stuck in the same systems maintaining the same code for years and years. While it may be a common phenomenon there are a few things you can do as a developer to avoid being trapped in your own code forever. First make things readable. While your brain may be wired [...]]]></description>
			<content:encoded><![CDATA[<p>It seems many developers get stuck in the same systems maintaining the same code for years and years. While it may be a common phenomenon there are a few things you can do as a developer to avoid being trapped in your own code forever.</p>
<h2>First make things readable.</h2>
<p>While your brain may be wired to a system of only using single character variable and function names or naming global variables after your cats, no one else will get the system. Try to make all names as logical as you possible can. Making it easy to read the code &#8211; not only as syntax but also in the names used in classes, functions and other objects in your source, improves the likelihood that someone else can figure out what’s going on and inherit the code someday.</p>
<h2>Second make the code do what it supposed to.</h2>
<p>Sure it may be cool making the system a generic all-purpose Swiss army knife of software, but preparing the code for all sorts of functions with aren’t used and aren’t needed, it only cause confusion of the next developer trying to move your code forward. Objects and class hierarchies may be suitable in some cases, but sometimes it’s more wrapping and declarations than actual code &#8211; and you’re probably on a wrong path.</p>
<h2>Third provide in-line documentation.</h2>
<p>Documentation are like a ghosts &#8211; it probably doesn’t exist. Making pages of documentation is probably a neat way to spend time if your on billable hours, but if you’re a regular developer, documentation is &#8211; at best a necessary evil. Do try to provide brief relevant comments, when something complicated or “not too obvious” happens in the code. Don’t place small novels in the source, but short precise guidelines.</p>
<p>While the above tips doesn’t guarantee your freedom to move on to new exciting projects, it surely improves the odds dramatically when you code is inheritable and accessible by another developer.</p>
]]></content:encoded>
			<wfw:commentRss>http://netfactory.dk/2008/06/07/code-exit-strategy-3-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: basic

Served from: netfactory.dk @ 2012-05-23 22:18:08 -->
