<?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>All About Unidev &#187; Custom Development</title>
	<atom:link href="http://blog.unidev.com/index.php/category/custom-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.unidev.com</link>
	<description>Custom Software, Website and Mobile Development News</description>
	<lastBuildDate>Wed, 25 Jan 2012 20:54:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>What Makes a Good Developer?</title>
		<link>http://blog.unidev.com/index.php/2012/01/19/what-makes-a-good-developer/</link>
		<comments>http://blog.unidev.com/index.php/2012/01/19/what-makes-a-good-developer/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 21:16:46 +0000</pubDate>
		<dc:creator>PatNiday</dc:creator>
				<category><![CDATA[About Unidev]]></category>
		<category><![CDATA[Custom Development]]></category>
		<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Office News]]></category>
		<category><![CDATA[.net development]]></category>
		<category><![CDATA[custom development]]></category>
		<category><![CDATA[great developer traits]]></category>
		<category><![CDATA[java development]]></category>
		<category><![CDATA[mobile applications development]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=601</guid>
		<description><![CDATA[Here at Unidev we pride ourselves on the diverse skills and years of experience our development teams bring to their projects. Whether it’s custom software design or mobile application development, our developers have what it takes to provide innovative and elegant solutions to our clients. But what exactly makes a great developer? Are there certain [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.unidev.com/wp-content/uploads/2012/01/WhatMakesDeveloper.jpg"><img class="alignright size-full wp-image-625" title="WhatMakesDeveloper" src="http://blog.unidev.com/wp-content/uploads/2012/01/WhatMakesDeveloper.jpg" alt="What Makes A Developer from http://alvar.a-blast.org/plat_forms/ " width="376" height="279" /></a>Here at Unidev we pride ourselves on the diverse skills and years of experience our development teams bring to their projects. Whether it’s <a title="Custom Software Development and Design" href="http://www.unidev.com/services/custom_software_development.aspx" target="_blank">custom software design</a> or <a title="Mobile App Developers, Mobile App Design and Development" href="http://www.unidev.com/services/mobile-development.aspx" target="_blank">mobile application development</a>, our developers have what it takes to provide innovative and elegant solutions to our clients.</p>
<p>But what exactly makes a great developer? Are there certain traits, skills or habits a successful developer needs? Well, we asked the talented members of the Java, .Net, and mobile development teams at Unidev to find out.</p>
<h2>Testing</h2>
<p>Of course, a great developer tests her code thoroughly to ensure it performs just as the client expects. Christine of the Unidev West development team in Las Vegas submitted the mantra, “testing, testing, testing” to highlight its importance. This element is essential in delivering high-quality code with confidence.</p>
<p>But testing isn’t simply a phase at the end of a project; it’s a mentality integral to the entire development process. We couldn’t say it any better than one of Unidev’s talented developers, Teresa:</p>
<blockquote><p>“Besides having some test cases before he starts coding, [a great developer] is also thinking of test cases as he goes, so he can try to break his code in the testing phase. Oh yeah, and he tests his stuff- thoroughly.”</p></blockquote>
<h2>Communication</h2>
<p>This development skill may not seem as obvious as technical skills or problem solving abilities, but it is extremely important nonetheless. Great code cannot simply exist in a vacuum, it needs to comply with client needs and function properly with code from other developers.</p>
<p>Strong communication skills reduce errors and can catch minor problems and miscommunications before they become major headaches. Kevin from our development team in St. Louis puts it best:</p>
<blockquote><p>“A good developer must be a good communicator. He must be able to understand a client’s needs and then be able to respond with useful solutions. He must also be able to explain his development strategy to co-workers.”</p></blockquote>
<h2>Teamwork</h2>
<p>Another intangible skill a great developer must possess is teamwork. Successful development may rely heavily on individual abilities, but without positive interactions between other team members, things can fall apart quickly. Brian, another member of our development team in St. Louis, shares his thoughts:</p>
<blockquote><p>“Although development is largely an individual activity, ultimately the efforts of all the individuals on the team are combined to make the final program, product, or website. If a developer cannot handle the teamwork aspect, he/she will likely be limited to projects where his or her efforts will not adversely affect the larger team.”</p></blockquote>
<p>These are just a few aspects that the Unidev team thought distinguished a “competent developer” from a “great developer”. Do you agree or disagree? Tell us what you think makes a great developer in the comments below!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2012/01/19/what-makes-a-good-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Migrate from HP-UX to Linux: Undefined Behavior</title>
		<link>http://blog.unidev.com/index.php/2011/07/27/hpux-linux-undefined-behavior/</link>
		<comments>http://blog.unidev.com/index.php/2011/07/27/hpux-linux-undefined-behavior/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 21:04:45 +0000</pubDate>
		<dc:creator>ScottMcKellar</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Custom Development]]></category>
		<category><![CDATA[General Technology]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[HP-UX]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[C programming language]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[undefined behavior]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=361</guid>
		<description><![CDATA[The C and C++ languages don’t try to define the results of every syntactically correct program.  For example, if you dynamically allocate some memory, and then free it, and then try to access the memory you freed, you invoke undefined behavior.  The C and C++ standards don’t specify how the program will respond. Undefined behavior [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><span style="font-family: helvetica;">The C and C++ languages don’t try to define the results of every syntactically correct program.  For example, if you dynamically allocate some memory, and then free it, and then try to access the memory you freed, you invoke undefined behavior.  The C and C++ standards don’t specify how the program will respond.</span></p>
<p><span style="font-family: helvetica;">Undefined behavior means that anything can happen, because the compiler is under no constraints.   The traditional formulation is that undefined behavior can make demons fly out your nose.  In practice the consequences are usually less dramatic.</span></p>
<p><span style="font-family: helvetica;">If demons ever fly out your nose, you’ll know you have a bug.  You can track it down and fix it.  More insidious is undefined behavior that happens to be exactly what you want.</span></p>
<p><span style="font-family: helvetica;">I ran across an example as I was preparing to port some code from HP-UX to Linux.  The program was freeing a linked list, using code similar to the following:</span></p>
<p>&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">Node * curr_node = first_node;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">while( curr_node )</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">{</span></p>
<p style="padding-left: 60px;"><span style="font-family: courier new,courier;"> free( curr_node );</span></p>
<p style="padding-left: 60px;"><span style="font-family: courier new,courier;"> curr_node = curr_node-&gt;next;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">}</span></p>
<p>&nbsp;</p>
<p><span style="font-family: helvetica;">To a long-time C coder, this code immediately looks fishy, because the loop has only two statements in it.  Look a little closer.  The second statement in the loop tries to access memory through a pointer that has already been freed.  It invokes undefined behavior.</span></p>
<p><span style="font-family: helvetica;">This program has been running for years with no obvious ill effects from this bug.  Apparently HP-UX isn’t very persnickety about accessing previously freed memory.  That’s legal.  “Anything can happen” includes “what you want.”</span></p>
<p><span style="font-family: helvetica;">When I first saw this code, I wasn’t ready to port the entire program to Linux yet, but I could experiment.  I dashed off a little test program that built a linked list and then freed it, using the logic shown above.  Under HP-UX this program ran to completion without incident.  Under Linux, the same program stopped abruptly in the first iteration.  It didn’t issue any messages, dump core, or even leave a non-zero condition code; it just stopped cold.  That’s legal too.  Anything can happen.</span></p>
<p><span style="font-family: helvetica;">I don’t know whether this difference is attributable to the operating systems, the compilers, the libraries, or the machine architectures.  I don’t care.  What matters is that I can’t run this program under Linux without fixing the loop:</span></p>
<p>&nbsp;</p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">Node * curr_node = first_node;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">while( curr_node )</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">{</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;"> Node * temp = curr_node-&gt;next;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;"> free( curr_node );</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;"> curr_node = temp;</span></p>
<p style="padding-left: 30px;"><span style="font-family: courier new,courier;">}</span></p>
<p>&nbsp;</p>
<p><span style="font-family: helvetica;">A few days later, another example of undefined behavior popped up, in the form of a buffer overflow.  Under HP-UX the overflow had no visible effect, at least not until I started poking around with printf statements.  Under Linux the code just didn’t work.  Probably the variables are arranged differently in memory.  In HP-UX the overflow didn’t damage anything that mattered, and in Linux it did.</span></p>
<p><span style="font-family: helvetica;">These examples are just things that I stumbled across.  There will be more, and I won’t catch them all so painlessly.  Fancy code analyzers may help catch things in advance, but there is no substitute for vigilance.</span></p>
<p><span style="font-family: helvetica;">It’s tempting to conclude that HP-UX is more forgiving of blunders than Linux is, since some things work in HP-UX but don’t work in Linux.  That conclusion is premature.  Maybe the two platforms are just forgiving about different things.  If the bugs had done obvious damage under HP-UX they would have been fixed already.</span></p>
<p><span style="font-family: helvetica;">There’s a Darwinian process at work here.  Bugs survive when they’re well adapted to the environment.  When the environment changes, some of those bugs will go extinct.  Unfortunately, new species will probably replace them.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2011/07/27/hpux-linux-undefined-behavior/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Change location of Wicket&#8217;s ajax debug link</title>
		<link>http://blog.unidev.com/index.php/2010/03/04/change-location-of-wickets-ajax-debug-link/</link>
		<comments>http://blog.unidev.com/index.php/2010/03/04/change-location-of-wickets-ajax-debug-link/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 22:39:21 +0000</pubDate>
		<dc:creator>Brian Bohl</dc:creator>
				<category><![CDATA[Custom Development]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=224</guid>
		<description><![CDATA[I needed to move Wicket&#8217;s ajax debug link from the bottom right to the bottom left because it was covering some links.  The script below is how I accomplished it (uses jQuery).  The link uses absolute positioning so you can customize this to move it anywhere on the page. &#60;script type="text/javascript"&#62; $(document).ready(function() { // // [...]]]></description>
			<content:encoded><![CDATA[<p>I needed to move Wicket&#8217;s ajax debug link from the bottom right to the bottom left because it was covering some links.  The script below is how I accomplished it (uses jQuery).  The link uses absolute positioning so you can customize this to move it anywhere on the page.</p>
<pre>    &lt;script type="text/javascript"&gt;
        $(document).ready(function() {
            //
            // Moves the debug window to the left instead of the right.
            //
            // Needs to use setTimeout so that the wicket-ajax-debug.js
            // script has a chance to create the link
            //
            if(wicketAjaxDebugEnable)
            {
                setTimeout(function() {
                    $("#wicketDebugLink").css('left', '10px');
                }, 1000);
            }
        });
    &lt;/script&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2010/03/04/change-location-of-wickets-ajax-debug-link/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unidev Seeks Implementation Partner for Global Web CMS</title>
		<link>http://blog.unidev.com/index.php/2010/01/06/unidev-seeks-implementation-partner-for-global-web-cms/</link>
		<comments>http://blog.unidev.com/index.php/2010/01/06/unidev-seeks-implementation-partner-for-global-web-cms/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 15:33:55 +0000</pubDate>
		<dc:creator>LizMaritz</dc:creator>
				<category><![CDATA[About Unidev]]></category>
		<category><![CDATA[Custom Development]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[.Net Software Development]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Content Management System]]></category>
		<category><![CDATA[Microsoft Partner]]></category>
		<category><![CDATA[Micrsoft Gold Certified Partner]]></category>
		<category><![CDATA[Search Engine Optimization]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[web content management system]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=209</guid>
		<description><![CDATA[        Looking to Microsoft Partner Network to Expand Opportunities in New Markets Unidevannounces its search for Microsoft Partners in North America, Asia and Europe to implement their global web content management (CMS) system, Auctori™. As a 16 year Certified Microsoft Partner, we are looking to leverage the Microsoft Partner Channel Builder to deepen our services and [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center">        <strong>Looking to Microsoft Partner Network to Expand Opportunities in New Markets</strong></p>
<p style="text-align: left"><a title="Software Development" href="http://www.unidev.com/" target="_blank">Unidev</a>announces its search for Microsoft Partners in North America, Asia and Europe to implement their global web content management (CMS) system, Auctori™. As a 16 year Certified Microsoft Partner, we are looking to leverage the <a title="Microsoft Partner Network " href="https://partner.microsoft.com/" target="_blank">Microsoft Partner Channel Builder </a>to deepen our services and solutions to more complex business opportunities, to provide a broader range of client services and to create business relationships with other partners whose skills complement our own.</p>
<p style="text-align: left">“The Microsoft Partner Channel Builder is one of the key sales enablement benefits of our Microsoft relationship, and is an excellent way to combine our expertise and resources. We are looking forward to connecting with industry partners to form new alliances and deliver the end-to-end solutions that address customers&#8217; business needs,” said Greg Alexander, CEO, Unidev. &#8220;This tool, with its two-way model, is making Microsoft Partner communications much easier.&#8221;</p>
<p style="text-align: left">Auctori, a .Net SaaS CMS Platform, was developed by Unidev for multi-national companies, and currently supports a number of European, North American and Asian sites. This system supports multi-lingual site management and site deployment. Auctori was built from the ground up in conjunction with a team of <a title="CMS built for SEO" href="http://www.auctori.com/features.aspx" target="_blank">search engine optimization (SEO) </a>specialist to implement best SEO practices. The next release of Auctori is scheduled for the first quarter of 2010, and will feature European and Asian hosting in addition to its current North American hosting, with all sites and platforms managed from a single console.</p>
<p style="text-align: left">For further information on <a title="Unidev" href="http://www.unidev.com/" target="_blank">Unidev</a> or <a title="Auctori" href="http://www.auctori.com/" target="_blank">Auctori</a>, contact Steve Thomas at 636-532-4424 or <a href="mailto:steve.thomas@unidev.com">steve.thomas@unidev.com</a>.</p>
<p style="text-align: center"><strong> </strong></p>
<p style="text-align: center"><strong>Read the full <a title="Unidev Press Release " href="http://www.prweb.com/releases/2010/01/prweb3408274.htm" target="_blank">press release</a></strong></p>
<p style="text-align: left"> </p>
<p style="text-align: left"> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2010/01/06/unidev-seeks-implementation-partner-for-global-web-cms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wicket Ramblings</title>
		<link>http://blog.unidev.com/index.php/2009/11/20/wicket-ramblings/</link>
		<comments>http://blog.unidev.com/index.php/2009/11/20/wicket-ramblings/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 15:56:34 +0000</pubDate>
		<dc:creator>LizMaritz</dc:creator>
				<category><![CDATA[Custom Development]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[.Net Programming]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[it consulting]]></category>
		<category><![CDATA[java development]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[Wicket]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=195</guid>
		<description><![CDATA[Several months ago, I was assigned the task of developing a web application for a Fortune 500 company.  The specific purpose of the application was to allow certain transportation providers to submit claims directly, something they had previously been doing though e-mail.  Once submitted, a provider would then be notified with regards to status changes [...]]]></description>
			<content:encoded><![CDATA[<p>Several months ago, I was assigned the task of developing a <a title="Web Application Services" href="http://www.unidev.com/services/web-design-development.aspx" target="_blank">web application </a>for a Fortune 500 company.  The specific purpose of the application was to allow certain transportation providers to submit claims directly, something they had previously been doing though e-mail.  Once submitted, a provider would then be notified with regards to status changes in their claim as it made its way through the company’s revenue system.  A provider could then re-log back into the web application to review the particulars of that change.</p>
<p>What made the assignment notable from others was the fact this company had recently set architectural guidelines restricting new web application development to use only the <a title="Wicket " href="http://wicket.apache.org" target="_blank">Wicket </a>framework.  As some of you already know, Wicket is component based framework competing in the same space as JavaServer Faces (JSF) and Tapestry.  Having never worked with Tapestry before, I did have prior experience with JSF.  I had been on two previous projects using Apache’s <a href="http://myfaces.apache.org" target="_blank">MyFaces</a>, and by the end of my second project, I had some real reservations about recommending JSF as a web application framework.  If I had to sum it up at the time, JSF just seemed inconsistent when predicting how you would think it would behave.  There were occasions where if you did two similar things in different parts of your application, they wouldn’t necessarily behave similarly. One would be slightly off kilter, requiring you to make tweaks to your code that weren’t required in the other spot to get the same sort of operation.  I’ll be first to admit, this might have been in large part due to the third-party JSF components that were purchased for the latter project.  So it was with some apprehension that I started this project with yet another component based framework.</p>
<p>Now that I’m near the completion of that project, I’m happy to say that Wicket as a component based framework pretty much flat out works.  It may not be perfect, and I believe there aren’t any, but compared to some other offerings, it works.  So I thought I share a few top level concepts that I think are core to evaluating and understanding this framework.</p>
<p>But before I begin, learning a component based framework can be daunting, especially if your background is only one of the classical request-response frameworks, like Struts or Spring MVC.  It can represent a significant paradigm shift in how you solve the problems at hand.  So to help you in that process, I recommend reading the Manning’s publication ‘Wicket in Action’.  It’s authored by two of the framework’s committers, so without doubt you can consider them to be experts on the subject.  The material they present is done in such a manner so as to keep building on previous concepts, such that you never have the feeling you missed a turn somewhere.  By the end of the book you should have a reasonably good understanding of the framework to tackle a moderately complex web application, assuming of course you have previous experience.  I say moderately complex, because the book won’t explain how to use some of the more advanced Wicket components, like data grids and accordions that so many web applications are now expected to have.  That unfortunately, you’ll have to do that on your own – but hey, you gotta start somewhere.</p>
<p>Now on to some key observations.  When learning Wicket, the first thing you’re going to have to understand is <a title="models" href="http://wicket.apache.org/docs/1.4/org/apache/wicket/model/IModel.html" target="_blank">models</a>. Without understanding models, you’re never going to get anywhere.  Models are the glue between the components and the objects containing the information your app is expected to use.  Simply put, they are placeholders that you share with the component.  It allows you, the developer, to even change the data object with a different instance while keeping the component completely oblivious.  Wicket has several different models, but of all of them, knowing when to use the <a href="http://wicket.apache.org/docs/1.4/org/apache/wicket/model/LoadableDetachableModel.html" target="_blank">LoadableDetachableModel </a>is important.  Here’s why.</p>
<p>One of Wicket’s key features is its solution to one of the ‘Holy Grails’ of web applications – built-in support for the back button.  It does so by serializing each and every page, which basically means the components and the models they reference, to a Wicket abstraction called a <a href="http://wicket.apache.org/docs/1.4/org/apache/wicket/PageMap.html" target="_blank">PageMap</a>. PageMaps themselves can be written to disk, so as to limit the amount of HTTP session being used.  When you hit the back button all that you’re really doing is restoring that page’s state as previously captured in the PageMap.  Sounds expensive, but it’s not nearly as bad as it could be if you are using a LoadableDetachableModel.  What a LoadableDetachableModel will allow you to do is control what gets serialized.  So what if your model references an entity, which is typically a row in a database.  Then it makes sense that all you would want to do is serialize the primary key.  Why?  Well like most component based frameworks, Wicket has several distinct phases it goes through with each request – response cycle.  At the end of a response, Wicket will call the detach method on all components using a LoadableDetachableModel.  This will set your entity object in the model to null before things get serialized.  Then at the start of the next request, when the component requests the entity, it will get restored.  How?  Well the LoadableDetachableModel sees that the entity is still null, so it calls a method that you supplied called ‘load’.  Of course by now the primary key you had previously stored is already deserialized.  All you have to do is get the entity back from the database before Wicket does anything to it, like binding new values posted from the browser.  Pretty slick!</p>
<p>All web applications are expected to do <a href="http://en.wikipedia.org/wiki/Ajax_(programming)" target="_blank">Ajax </a>these days, and Wicket does not disappoint.  It has a well integrated Ajax framework that’s easy to use and easy to control.  It’s as simple as using an ‘Ajaxified’ component, or adding an Ajax behavior to a component that isn’t to initiate an Ajax request.   Then all you have to do is decide what components should be updated as a result of receiving the request.  Let me give an example.  In the web app I built for my client, there was need to allow the user to search for current and previous claims.  The business owners wanted to supply two distinct methods of searching, by allowing the user to either fill out one set of fields and search, or fill out the other set and search.  To make the user interface less confusing, I decided to use a dropdown with a simple description of each of the search methods.  I also encapsulated the fields associated with each of the searches into a <a href="http://wicket.apache.org/docs/1.4/org/apache/wicket/markup/html/panel/Panel.html" target="_blank">Panel</a>. A Panel is nothing more than a component that can act as a container for other components.  But more important is that you can also associate with the panel its own html fragment for displaying what’s in it, the search fields in this case.   And a Panel can also provide the necessary validation and business logic that may be required for those fields.  This really makes it nice when you want to reuse them throughout your application. But here’s how the rest of the design unfolds.</p>
<p>I used a <a href="http://wicket.apache.org/docs/1.4/org/apache/wicket/markup/html/form/DropDownChoice.html" target="_blank">DropDownChoice</a> component, and as you can probably already guess, it was used to represent my dropdown.  Because this component isn’t inherently ‘Ajaxified’, some are and some aren’t, I had to add an <a href="http://wicket.apache.org/docs/1.4/org/apache/wicket/ajax/form/AjaxFormComponentUpdatingBehavior.html" target="_blank">AaxFormComponentUpdatingBehavior</a> to instruct the component to make an Ajax request with each ‘onchange’ event of the dropdown.  <a href="http://wicket.apache.org/docs/1.4/org/apache/wicket/behavior/IBehavior.html" target="_blank">Behaviors</a>, like models, is something else you will need to know.  They are often used to add new capabilities to a component – like Ajax.  Anyway when the search page is initially displayed, only one search panel is shown.  When the user doesn’t want that one, he makes a new selection in the dropdown.  This creates an Ajax request where it will be received back at the behavior’s handler on the server.  All I had to do at this point inside the handler was determine the new state of the dropdown, select the appropriate panel to be shown, and tell Wicket to render this one and not the other.  When it was all said and done, the panel swapping amounted to just a few lines of code.  All of the nitty-gritty update details and Ajax plumbing was handled by the framework.  Sweet!!</p>
<p>I have just one last thing I’d like to mention about Wicket, and that’s its excellent templating and page layout features.  What makes Wicket different is how you associate your page’s <a title="Java  Development Firm" href="http://www.unidev.com/" target="_blank">HTML</a> with the java code.  It’s through the class hierarchy.  So wherever you create a class to be used as the code for the page, you also create an HTML file in the same package with the same class name, but instead with a ‘html’ file extension.  So whenever your class gets instantiated by the framework, it also knows if there is an html file with same class name, then this is the HTML to be used.</p>
<p>Big deal, right?  Well read on a little further.  What the Wicket folks have cleverly done is not only load the html with this class, but any html associated with any of the classes up the hierarchy, basically allowing you to nest the html that is lower in the hierarchy into the html that is higher.  All through the use of the Wicket tags &lt;wicket:extend&gt; and &lt;wicket:child&gt;.  So how do you use this to your advantage?</p>
<p>Well like working with other web frameworks, you generally create a base class that serves as an extension point for the rest of your classes, and with Wicket <a href="http://wicket.apache.org/docs/1.4/org/apache/wicket/markup/html/WebPage.html" target="_blank">WebPage</a> it is no different.  But what you’ll want to do with this base class is also create an html file with the same name that defines the overall look and feel of your web pages.  It may display the application’s title at the top, maybe a place to put menus to the left, etc.  This page will basically act as your application’s template.  Any class that extends this base class and provides its own html can place it inside of this template.  Cool!  Gone are the days of all those nasty Tiles’ definitions.  As a matter of fact, throughout the entire development of my app did I ever once have to create a single XML file for Wicket!  I just followed the conventions and things worked.</p>
<p>If your thinking about venturing into the realm of component based frameworks and you have been searching around, please give Wicket some serious consideration.  It may not be easy at first, but I think once you get over the hump you’ll learn to appreciate what it can do for you.</p>
<p>By: Mark Raterman</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2009/11/20/wicket-ramblings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unidev Introduces a Content Management System Designed with Law Firms in Mind</title>
		<link>http://blog.unidev.com/index.php/2009/10/15/unidev-introduces-a-content-management-system-designed-with-law-firms-in-mind/</link>
		<comments>http://blog.unidev.com/index.php/2009/10/15/unidev-introduces-a-content-management-system-designed-with-law-firms-in-mind/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 14:51:11 +0000</pubDate>
		<dc:creator>LizMaritz</dc:creator>
				<category><![CDATA[About Unidev]]></category>
		<category><![CDATA[Custom Development]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Content Management System]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Search Engine Optimization]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Web Solution]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=174</guid>
		<description><![CDATA[Unidev is proud to announce Auctori:law, a Microsoft Certified Web Content Management System (WCMS), designed specifically for law firms, will launch on October 15, 2009. Unidev designed the WCMS in association with several law firms to give attorneys and legal professionals an easy to use, but powerful system to update and maintain their professionally designed website.
]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><strong> </strong></p>
<p style="text-align: center"><strong>Auctori:law Provides Turn-Key Web Solution for the Legal Industry</strong></p>
<p style="text-align: left"><a title="Software Development and Consulting Firm" href="http://www.unidev.com">Unidev®</a> is proud to announce <a title="A CMS Built for Law Firms" href="http://law.auctori.com/" target="_blank">Auctori:law™</a>, a Microsoft Certified Web Content Management System (WCMS), designed specifically for law firms, will launch on October 15, 2009. Unidev designed the WCMS in association with several law firms to give attorneys and legal professionals an easy to use, but powerful system to update and maintain their professionally designed website.<br />
�<br />
Web-based Auctori:law gives attorneys the power to dynamically update their site from anywhere in the world, at anytime.  With Auctori:law, it is simple to build and edit website content without the help of a professional or having had previous experience or knowledge in HTML. By simply logging into a site through a secure, password-protected portal, site administrators can update content, change images, add keywords and make other instantaneous changes to their <a title="Web Design Firm" href="http://www.thenetimpact.com/" target="_blank">websites</a>.</p>
<p style="text-align: left">Auctori:law is a Software as a Service (SaaS) solution providing all of the benefits of cloud computing. Unidev’s solution provides firms with the opportunity to strengthen their Internet presence and their overall brand reputation by giving lawyers a professionally designed site and the power to maintain their content in real time. In addition to standard content management <a title="Auctori:Law Features" href="http://law.auctori.com/features.aspx" target="_blank">features</a>, Auctori:law is equipped with an attorney biographies module, news and articles module, and an images module. Auctori:law adheres to all Search Engine Optimization best practices in order to maximize website traffic and usability.</p>
<p>&#8220;While I have worked in database driven content management programs in the past, I continue to be impressed by the level of sophistication and ease of use of the WCMS as built by Unidev for our law firm. Through Unidev’s WCMS I am not only able to freely edit content throughout our site, I am now in charge of navigation items and graphics, previously outside the realm of my editing parameters,” said Kelly Annis, Client Relations Manager for The Stolar Partnership, LLP.<br />
<strong> </strong></p>
<p><strong>A Few Unique features of Auctori:Law  include:</strong><br />
• Attorney and professional biography builder with profile photos, dynamic V-card generation, customizable fields, and professional PDF printing functionality<br />
• Flexible content pages and navigation structure for creating practice areas and industry sections<br />
• News and articles module to create and archive publications, resources and events.<br />
• Multi-lingual<br />
• Print-ready PDF documents<br />
• Secured document libraries</p>
<p> </p>
<p>-To see two excellent <a title="Case Studies" href="http://law.auctori.com/case-studies.aspx" target="_blank">examples</a> of Auctori:law in action, please visit The Stolar Partnership, LLP at <a href="http://www.stolarlaw.com/">http://www.stolarlaw.com</a> and Paul J. Passanante, PC &amp; Associates at <a href="http://www.passanantelaw.com">http://www.passanantelaw.com</a>.</p>
<p>“We are very excited about the launch of Auctori:law,” said Greg Alexander, CEO of Unidev. “Our team is very experienced in developing customized legal websites.  We developed this WCMS designed specifically for the legal industry based upon this experience.  Auctori:law presented itself as an excellent opportunity for our clients to really take control of their websites with an application that truly answers the needs of a legal firm.  I am confident that Auctori:law is a complete solution for any law firm’s online needs.”</p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align: center"><strong><span style="font-size: medium">Put the Power into Your Hands Today …</span></strong></p>
<p><a title="Contact Auctori:Law" href="http://www.unidev.com/contact_us.aspx" target="_blank"><span style="font-size: medium">C</span>ontact Auctori:Law  </a>for further information and for a free Auctori:Law™ demonstration!  Call us at: 888.629.4672 or email us at: <a href="mailto:demo@Auctori.com">demo@Auctori.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2009/10/15/unidev-introduces-a-content-management-system-designed-with-law-firms-in-mind/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using PHP FastCGI mode on Windows Server 2003 x64 w/ IIS in 32-bit mode</title>
		<link>http://blog.unidev.com/index.php/2009/09/16/using-php-5-3-0-on-windows-server-2003-x64-w-iis-in-32-bit-mode/</link>
		<comments>http://blog.unidev.com/index.php/2009/09/16/using-php-5-3-0-on-windows-server-2003-x64-w-iis-in-32-bit-mode/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 03:27:31 +0000</pubDate>
		<dc:creator>Brian Bohl</dc:creator>
				<category><![CDATA[Custom Development]]></category>
		<category><![CDATA[General Technology]]></category>
		<category><![CDATA[fastcgi]]></category>
		<category><![CDATA[fcgiext]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[iis 32 bit mode]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[windows server 2003 x64]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=159</guid>
		<description><![CDATA[I recently needed to upgrade the PHP for a particular site from 5.2.6 to 5.3.0.&#160; Of course, this is when I found out that PHP no longer supports the ISAPI module and instead wants you to use FastCGI.&#160; Luckily I found a great article on how to configure IIS at http://learn.iis.net/page.aspx/247/using-fastcgi-to-host-php-applications-on-iis-60/.&#160; However, these instructions have [...]]]></description>
			<content:encoded><![CDATA[<p>I recently needed to upgrade the PHP for a particular site from 5.2.6 to 5.3.0.&#160; Of course, this is when I found out that PHP no longer supports the ISAPI module and instead wants you to use FastCGI.&#160; Luckily I found a great article on how to configure IIS at <a title="http://learn.iis.net/page.aspx/247/using-fastcgi-to-host-php-applications-on-iis-60/" href="http://learn.iis.net/page.aspx/247/using-fastcgi-to-host-php-applications-on-iis-60/">http://learn.iis.net/page.aspx/247/using-fastcgi-to-host-php-applications-on-iis-60/</a>.&#160; However, these instructions have some caveats in regards to running IIS in 32 bit mode on Windows Server 2003 x64.&#160; To make a long story short, just like with most things running in 32 bit mode on x64, everything that references %WINDIR%\system32 really needs to point to %WINDIR%\SysWOW64.&#160; If you use the fcgiconfig.js script, this will configure everything to point to %WINDIR%\system32.</p>
<ul>
<li>The Web Service Extension needs to point to %WINDIR%\SysWOW64\inetsrv\fcgiext.dll. </li>
<li>The .php extension on the website also needs to point to %WINDIR%\SysWOW64\inetsrv\fcgiext.dll. </li>
<li>The fcgiext.ini file must also be located in %WINDIR%\SysWOW64\inetsrv.&#160; Otherwise you will get a 500 error from FastCGI saying it cannot find the configuration file.      </li>
</ul>
<p>Note that the fcgiconfig.js script is only installed in %WINDIR%\system32\inetsrv.&#160; I was able to create a fcgiconfigwow64.js file that points to the correct files.&#160; The script needs to have at least an ini file with the “[Types]” section in the %WINDIR%\SysWOW64\inetsrv directory.&#160; It also needs to be located under %WINDIR%\system32 as it doesn’t support running under Wow64.&#160; You just need to change the following 2 lines near the top of the script.</p>
<p>From:</p>
<p><font size="1" face="Courier New">var g_iniPath&#160;&#160;&#160;&#160;&#160;&#160; = g_Shell.ExpandEnvironmentStrings( &quot;%WinDir%\\system32\\inetsrv\\fcgiext.ini&quot; );      <br />var g_extensionPath = g_Shell.ExpandEnvironmentStrings( &quot;%WinDir%\\system32\\inetsrv\\fcgiext.dll&quot; );</font></p>
<p>To:</p>
<p><font size="1" face="Courier New">var g_iniPath&#160;&#160;&#160;&#160;&#160;&#160; = g_Shell.ExpandEnvironmentStrings( &quot;%WinDir%\\SysWOW64\\inetsrv\\fcgiext.ini&quot; );      <br />var g_extensionPath = g_Shell.ExpandEnvironmentStrings( &quot;%WinDir%\\SysWOW64\\inetsrv\\fcgiext.dll&quot; );</font></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2009/09/16/using-php-5-3-0-on-windows-server-2003-x64-w-iis-in-32-bit-mode/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Development Efficiency</title>
		<link>http://blog.unidev.com/index.php/2009/09/09/development-efficiency/</link>
		<comments>http://blog.unidev.com/index.php/2009/09/09/development-efficiency/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 19:05:11 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Custom Development]]></category>
		<category><![CDATA[software development efficiency]]></category>
		<category><![CDATA[software investment]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=155</guid>
		<description><![CDATA[Development efficiency is an area we are constantly investing in and working to improve. I feel it is imperative that we are able to deliver value to customers at the least cost possible. Just like Walmart, if we drive the costs down to develop high function software and then pass the savings on, it is [...]]]></description>
			<content:encoded><![CDATA[<p>Development efficiency is an area we are constantly investing in and working to improve. I feel it is imperative that we are able to deliver value to customers at the least cost possible. Just like Walmart, if we drive the costs down to develop high function software and then pass the savings on, it is a great thing for both us and our customers.<br />
There are two general methods for approaching a development project (be it a simple website or a complex application). The first is to get a complete defintion prior to coding and then focusing on driving to completion, staying as true to the original design as possible. The second is to define a clear target but assume that the direction will change and that the requirements will change as more information becomes available during the design and development phases. Both work, we tend to the later because we feel our ultimate goal is to deliver the best value product to the customer which may or may not be exactly what was originally defined.<br />
There are a number of important cost drivers of a development effort. Effective communications with the customer and within the team are probably the most important one. By communicating in a timely and complete manner, you can drastically reduce rework. This is also the biggest challenge as everyone communicates differently. It is easy to require daily meetings, it is a lot more difficult to ensure that everyone understands completely everything that was said in the meeting.<br />
We designed the layout of our offices to support easy and constant communications between team members using a open spaces, sound deadening materials which allow many conversations to occur simultaneously without disturbing others. We encourage &#8216;rollup meetings&#8217; and collaboration between team members to help make sure that everyone is moving in the same direction at all times. Teams coordinate activities within the team even though individual members may be from different operating groups (technical, creative, etc.) reducing unnecessary management overhead.<br />
Other simple investments to make to improve efficiencies are having large and available white boards for discussions, dual or triple monitor development stations (probably the most cost effective efficiency there is), fast workstations and servers (it doesn&#8217;t help if it takes a lot of time each day to do the basic development housekeeping such as check in and check out) and available development, test and production systems so teams are not stepping on one another. The software tools you use are worth some effort to evaluate thoroughly. Developers will often gravitate to the latest and flashiest tools but those are not always the best idea, especially if they do not noticably improve the teams production and they are not consistent with the rest of your development platform. It is important however, to make sure you have excellent tools as these can be a great timesaver and a very worthwhile investment.<br />
Training is another critical investment. Teams need to be aware of the latest methods and processes. Not only does this help with the code quality but also with creating more efficient designs.<br />
With investment, training and time, you can work to reduce your development costs significantly. With lower costs, you also have a better risk profile which is a great value to both the developer and the customer.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2009/09/09/development-efficiency/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Software Life Cycle, Source Code and Intellectual Property</title>
		<link>http://blog.unidev.com/index.php/2009/08/30/software-life-cycle-source-code-and-intellectual-property/</link>
		<comments>http://blog.unidev.com/index.php/2009/08/30/software-life-cycle-source-code-and-intellectual-property/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 20:03:00 +0000</pubDate>
		<dc:creator>Greg Alexander</dc:creator>
				<category><![CDATA[Custom Development]]></category>
		<category><![CDATA[intellectual property]]></category>
		<category><![CDATA[software rights]]></category>

		<guid isPermaLink="false">http://blog.unidev.com/?p=141</guid>
		<description><![CDATA[An important but often neglected consideration when contracting for the custom development of your web site or software application are the long term issues such as who owns the source code, is it updated, who maintains the code and do you have the right to change vendors down the line and under what circumstances. While [...]]]></description>
			<content:encoded><![CDATA[<p>An important but often neglected consideration when contracting for the custom development of your web site or software application are the long term issues such as who owns the source code, is it updated, who maintains the code and do you have the right to change vendors down the line and under what circumstances. While this has been an issue for a long time with custom software development, it is becoming much more common now with custom web sites as they become much more powerful through the use of content management tools and e-commerce components. In the past, with a simple brochure site, you could throw away the old one and develop something new to replace it. With today&#8217;s powerful tools, a sites appearance can change but the background code can last for many years. </p>
<p>In most cases, a web design or software development company will have some standard code libraries that they utilize for each project. This is a good thing in that it allows you to get more function usually at a lower cost and faster than developing everything just for you. These libraries could have been developed over a long time across a large number of customers. To replicate them from scratch could cost more than your entire project. The potential issue that you need to resolve in your contract is how do those common libraries affect your ability to upgrade long term. Web server platforms, operating systems and technologies are constantly changing. Are those libraries continually updated to the latest versions? What happens if the vendor goes out of business or decides to no longer support those libraries? What happens if you want to change vendors? At a minimum, you should consider <a href="http://www.sitepoint.com/article/legalities-2-software-escrow/">software escrow </a>with a trusted third party from whom you will be able to get the source code if your current vendor goes out of business or no longer supports the software. </p>
<p>Also, you should consult your lawyer about the ownership of the code and content being developed for your site. If you are having work done overseas, then you should understand that any enforcement of your intellectual property rights or ownership of the source code is going to be difficult at best. Trying to prevent a foreign entity from divulging or reusing your proprietary information would be an expensive and difficult effort. </p>
<p>If you are have enhancements or modifications done to your software, make sure you have the very latest source code when it is complete. The software developer may or may not keep good track of small modifications made to your programs. It is critical that you or your vendor have the ability to rebuild your site at any time from scratch and that you have some legal recourse to obtain all of the source code if the vendor ceases business. I would also try to get the source code if the business unit you worked with is sold. The new owner may have different ideas about how/if you are supported. </p>
<p>In summary, you need to really understand exactly what you are buying and consider what options you have going forward. Without source code (and/or the legal right to it), you will have limited options if your vendor goes out of business, he decides to abandon the software, you have a falling out with the vendor or you wish to change vendors.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.unidev.com/index.php/2009/08/30/software-life-cycle-source-code-and-intellectual-property/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

