<?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>Web Development by Joe Sak &#187; Improving Code</title>
	<atom:link href="http://www.joesak.com/category/improving-code/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.joesak.com</link>
	<description>Rails, HTML5, CSS3, jQuery - Thoughts, Advice &#38; Work</description>
	<lastBuildDate>Tue, 27 Jul 2010 14:10:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Online Photo Gallery, Payment &amp; Order Fulfillment: Ruby on Rails Tutorial</title>
		<link>http://www.joesak.com/2009/09/18/online-photo-gallery-payment-order-fulfillment-ruby-on-rails-tutorial/</link>
		<comments>http://www.joesak.com/2009/09/18/online-photo-gallery-payment-order-fulfillment-ruby-on-rails-tutorial/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 16:51:04 +0000</pubDate>
		<dc:creator>Joe Sak</dc:creator>
				<category><![CDATA[Custom Development]]></category>
		<category><![CDATA[Improving Code]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Websites]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.joesak.com/?p=255</guid>
		<description><![CDATA[This post is a follow-up to the post on my personal blog, titled &#8220;Ruby on Rails Photo Gallery &#38; Shopping Cart with RESTful Authentication&#8221; In that article, I merely showed off what I&#8217;d done with Ruby on Rails, but I didn&#8217;t show anyone how. Well, I&#8217;ve gotten some comments from people asking me to show [...]]]></description>
			<content:encoded><![CDATA[<p>This post is a follow-up to the post on <a title="Joe Sak's Web Development Blog" href="http://www.joesak.com">my personal blog</a>, titled &#8220;<a title="Ruby on Rails Photo Gallery &amp; Shopping Cart with RESTful Authentication" href="http://www.joesak.com/2009/05/31/ruby-on-rails-photo-gallery-shopping-cart-restful-authentication/">Ruby on Rails Photo Gallery &amp; Shopping Cart with RESTful Authentication</a>&#8221; In that article, I merely showed off what I&#8217;d done with Ruby on Rails, but I didn&#8217;t show anyone how. Well, I&#8217;ve gotten some comments from people asking me to show them how to build it.</p>
<p>That&#8217;s what this post is for.</p>
<p>So on to the nitty gritty details.</p>
<p>Start with the RESTful Authentication Tutorial:</p>
<p><script src="http://gist.github.com/189148.js"></script> <a></a> Follow the README to install, but <a title="Fix #1 to RESTful Authentication Install" href="http://railsforum.com/viewtopic.php?pid=96632#p96632">READ THIS FIRST</a> to fix the ExceptionLogger error  Then <a href="http://railsforum.com/viewtopic.php?pid=99223#p99223">follow these instructions</a> to fix the OpenID plugin error  Make sure you get your <a href="http://recaptcha.net/whyrecaptcha.html">recaptcha keys</a> for the config.yml, otherwise failed login attempts will bust your application.  Fill out the config &amp; database.yml files accordingly, run your database create &amp; migrate rakes, fire up the server and make sure it looks good. Cool? Let&#8217;s move on:  <strong>Define the objects</strong> Let&#8217;s begin by pointing out what, exactly, we&#8217;ll be building this application around: <strong>Galleries </strong>of <strong>Photos </strong>that <strong>Customers</strong> can order with a private <strong>Account</strong> provided to them by an <strong>Admin</strong> who can manage the galleries and review the <strong>Orders</strong>, which are also available to their respective customers.  I will go through how to set up the following models like so:</p>
<ul>
<li>Galleries
<ul>
<li>has_many :photos</li>
<li>belongs_to :customer</li>
<li>title</li>
<li>acts_as_urlnameable (pretty URLs)</li>
</ul>
</li>
<li>Photos
<ul>
<li>belongs_to :gallery</li>
<li>paperclip attachment: image</li>
</ul>
</li>
<li>Customers
<ul>
<li>username, password, full name</li>
</ul>
</li>
<li>Orders
<ul>
<li>has_many :line_items</li>
<li>belongs_to :customer</li>
</ul>
</li>
<li>Line Items
<ul>
<li>belongs_to <img src='http://www.joesak.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> rder</li>
<li>quantity, size, price</li>
</ul>
</li>
</ul>
<p>So let&#8217;s build the Galleries first:  <script src="http://gist.github.com/189161.js"></script></p>
<p>Then edit the Gallery model:</p>
<p><script src="http://gist.github.com/189149.js"></script> That&#8217;ll be fine for now. Let&#8217;s add the Photos model with paperclip image attached:  <script src="http://gist.github.com/189151.js"></script></p>
<p>Now edit the Photo model as such:</p>
<p><script src="http://gist.github.com/189152.js"></script> You should read all about <a href="http://thoughtbot.com/projects/paperclip">the paperclip gem</a> if you need more info on this model. Basically, we&#8217;re telling it to allow image attachments to the Photo model.  Customers can be the RESTful Authentication Tutorial User model, just need to add a couple things here:  <script src="http://gist.github.com/189153.js"></script></p>
<p>Let&#8217;s worry about Orders and Line Items later. We&#8217;ll have to add a cart, too. I&#8217;ll cover it, but it is all derived from <a href="http://www.pragprog.com/titles/rails3/agile-web-development-with-rails">Agile Web Development with Ruby on Rails Third Edition</a></p>
<p>Run your rake db:migrate and confirm all is well. Delete the Galleries layout file so it uses the application layout.</p>
<p>Let&#8217;s go see http://localhost:3000/galleries and play around. Add a gallery and then go to edit it. This is where we&#8217;ll add SWFUpload. <a href="http://jimneath.org/2008/05/15/swfupload-paperclip-and-ruby-on-rails/">Follow Jim Neath&#8217;s advice for this</a>.</p>
<p>You&#8217;ll want a photos controller:</p>
<p><script src="http://gist.github.com/189155.js"></script> The create method I use is:  <script src="http://gist.github.com/189156.js"></script></p>
<p>I had no luck getting Jim Neath&#8217;s session fix working, so I put skip_before_filter :verify_authenticity_token in the Photos Controller. Bad? Yea, probably. I haven&#8217;t found a better way yet.</p>
<p>Add this code to app/views/galleries/edit.html.erb:</p>
<p><script src="http://gist.github.com/189157.js"></script> Which leads you to add the following partial: app/views/photos/_image.html.erb  <script src="http://gist.github.com/189159.js"></script></p>
<p>We&#8217;ll worry about the destroy link later, let&#8217;s integrate swfupload. <a href="http://code.google.com/p/swfupload/">Download the latest copy of SWFUpload</a>. Copy flash/swfupload.swf to public/flash (make directory first). Copy swfupload.js &amp; upload.js (in Jim Neath&#8217;s demo app) to public/javascripts. Copy Jim Neath&#8217;s swfupload.css file to public/stylesheets. Copy Jim Neath&#8217;s images/icons folder to public/images.</p>
<p>Add this code to app/views/galleries/edit.html.erb:</p>
<p><script src="http://gist.github.com/189160.js"></script></p>
<p>Yep, a lot is going on there. Reload your galleries/edit page and see if it&#8217;s still working <img src='http://www.joesak.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ok, so this gets you to a functioning online photo gallery. Up next will be adding user accounts, a shopping cart, ordering options, customers &amp; paypal integration. Stay tuned!</p>
<p>For now, please find the <a href="http://github.com/joemsak/proofs_package">source</a> here: <a href="http://github.com/joemsak/proofs_package">http://github.com/joemsak/proofs_package</a></p>
<p>And for help on your project, visit us at <a href="http://www.simplifyadvance.com">http://www.simplifyadvance.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.joesak.com/2009/09/18/online-photo-gallery-payment-order-fulfillment-ruby-on-rails-tutorial/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SEO for Enliven has been Successful</title>
		<link>http://www.joesak.com/2008/10/06/seo-for-enliven-has-been-successful/</link>
		<comments>http://www.joesak.com/2008/10/06/seo-for-enliven-has-been-successful/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 21:47:32 +0000</pubDate>
		<dc:creator>Joe Sak</dc:creator>
				<category><![CDATA[Improving Code]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Semantic XHTML]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Websites]]></category>
		<category><![CDATA[Work Stuff]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.joesak.com/?p=84</guid>
		<description><![CDATA[Bunmi told me recently that our sister company, Enliven Software, has been getting regular business and sales through online visitors who did a search on Google. I&#8217;m proud of this, because I wrote the XHTML that&#8217;s been helpful in optimizing enlivensoftware.com for robots like googlebot to understand the site and return it high in the rankings for [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Bunmi Akinyemiju's Blog" href="http://inthrill.com/weblogs/bunmi/">Bunmi</a> told me recently that our sister company, <a href="http://www.enlivensoftware.com">Enliven Software</a>, has been getting regular business and sales through online visitors who did a search on Google.</p>
<p>I&#8217;m proud of this, because I wrote the XHTML that&#8217;s been helpful in optimizing enlivensoftware.com for robots like googlebot to understand the site and return it high in the rankings for search results lists.</p>
<p>How did I do it?<br />
 <br />
<strong>Header tags, Title attributes and Cross-linking, oh my!</strong></p>
<p>Use the proper hierarchy of Header tags in your code. On the home page, H1 belongs to your logo and company name. H2 belongs to the main headline of the page and maybe your company&#8217;s motto if you have one. H3 and H4 can be headers of sections, like News or Events.</p>
<p>On your subpages, make your logo/company name a regular anchor tag linking back to the home page. Now H1 goes to your page name and H2 becomes a sub-header for dividing content. H3 and H4 can still designate page sections. It helps if your H1 matches your Page Title</p>
<p>Then you should put titles on those tags and on your navigation menu links. Hell, you can even put titles on divs! These titles should differ from the text in the tag itself. For example, you could have a link named &#8220;Events&#8221; and its corresponding title could be &#8220;Calendar of Events at Company ABC&#8221;. This is cross-linking and keyword density rolled into one swift move without overloading the user with too much fluff in the words they see.</p>
<p>Also, a good friend of yours can be the ABBR tag. It&#8217;s the tag you use to define abbreviations. In a real-world example, here&#8217;s the code I used for the logo for the new MHSAA web site we&#8217;re working on:</p>
<p>&lt;h1 id=&#8221;logo&#8221; title=&#8221;Michigan High School Athletic Association&#8221;&gt;&lt;abbr title=&#8221;Michigan High School Athletic Association&#8221;&gt;MHSAA&lt;/abbr&gt;&lt;/h1&gt;</p>
<p>Now Google and other robots will know what MHSAA means. That should help in future searches. It also helps that their domain is mhsaa.com.< You can <a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;answer=34575">submit your sitemap to google and <a href="http://www.google.com/webmasters/tools/">use webmaster tools</a> and <a href="http://www.google.com/analytics">google analytics</a>, as well.</p>
<p>So these are simple ways you as a programmer can help your company and clients succeed in SEO. Don&#8217;t forget that you should <a href="http://www.artemisphere.com/posts/30-you-dont-need-seo-usability/">start with a kick-ass writer</a>, too.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joesak.com/2008/10/06/seo-for-enliven-has-been-successful/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DotNetNuke Core Team all up in my Grill</title>
		<link>http://www.joesak.com/2008/06/03/dotnetnuke-core-team-all-up-in-my-grill/</link>
		<comments>http://www.joesak.com/2008/06/03/dotnetnuke-core-team-all-up-in-my-grill/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 23:33:52 +0000</pubDate>
		<dc:creator>Joe Sak</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Improving Code]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Skinning]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.joesak.com/?p=64</guid>
		<description><![CDATA[Man, I&#8217;ve been getting quite a bit of attention from the DNN Core Team the past couple days. I just wanted to say I appreciate the feedback and I&#8217;m interested in the advancements and improvements being considered in upcoming versions of the platform. Thanks for putting up with my candor and overt angst in these [...]]]></description>
			<content:encoded><![CDATA[<p>Man, I&#8217;ve been getting <a href="http://www.joesak.com/2008/06/02/dotnetnuke-defaultcss-seriously/#comments">quite a bit of attention</a> from the DNN Core Team the past couple days.</p>
<p>I just wanted to say I appreciate the feedback and I&#8217;m interested in the advancements and improvements being considered in upcoming versions of the platform. Thanks for putting up with my candor and overt angst in these past few bitch posts.</p>
<p>I&#8217;d be particularly interested in knowing about any plans to move forward with .Net 3.5 and its ability to allow designers to define all the HTML in the controls. I&#8217;d like to see DNN reach the point where all rendered HTML is controlled by the front-end engineer, and we can achieve W3C compliance and simpler control over themes and content generation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joesak.com/2008/06/03/dotnetnuke-core-team-all-up-in-my-grill/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DotNetNuke Default.CSS: Seriously??</title>
		<link>http://www.joesak.com/2008/06/02/dotnetnuke-defaultcss-seriously/</link>
		<comments>http://www.joesak.com/2008/06/02/dotnetnuke-defaultcss-seriously/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 20:23:15 +0000</pubDate>
		<dc:creator>Joe Sak</dc:creator>
				<category><![CDATA[Artemis Solutions Group]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Improving Code]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ranting]]></category>
		<category><![CDATA[Skinning]]></category>
		<category><![CDATA[Venting]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Work Stuff]]></category>

		<guid isPermaLink="false">http://www.joesak.com/?p=63</guid>
		<description><![CDATA[Here&#8217;s another one of the myriad of reasons that I am displeased with DotNetNuke as a web development platform: The &#8220;default.css&#8221; included with all installs of DNN has this (and more CSS for other stuff like it) in it: H1 { font-family: Tahoma, Arial, Helvetica; font-size: 20px; font-weight: normal; color: #666644; } H2 { font-family: Tahoma, [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s another one of the <a title="DotNetNuke Sucks" href="/2008/04/23/why-dotnetnuke-is-terrible/">myriad of reasons</a> that I am displeased with DotNetNuke as a web development platform:</p>
<p>The &#8220;default.css&#8221; included with all installs of DNN has this (and more CSS for other stuff like it) in it:<br />
<code><br />
H1<br />
{<br />
font-family: Tahoma, Arial, Helvetica;<br />
font-size: 20px;<br />
font-weight: normal;<br />
color: #666644;<br />
}</code></p>
<p><code>H2<br />
{<br />
font-family: Tahoma, Arial, Helvetica;<br />
font-size: 20px;<br />
...</code></p>
<p>(I think you get the point)</p>
<p>Excuse me, DotNetNuke core team, but isn&#8217;t stuff like this up to the Designers and Developers? Why are you including a default stylesheet with definitions for HTML elements that would be used by Web developers? I can&#8217;t tell you how many times default.css has left me absolutely baffled about the smallest details not being quite right according to our design specs because it has these random &#8220;defaults&#8221; in it. It&#8217;s not up to DNN Core team to define my font families, sizes, and colors. And seriously, <a title="How to Set Font Sizing with CSS" href="http://www.alistapart.com/articles/howtosizetextincss/">stop using pixel font sizing</a>.</p>
<p>It&#8217;s becoming clearer to me almost on a daily basis, that DNN is not the right CMS for a professional Web shop to be using. They probably have this default.css for people who don&#8217;t make skins or know anything about Web development. And if you remove default.css, it completely hoses all the Admin pages and Control Panel. It takes way too much time and effort to figure out what&#8217;s removable and what&#8217;s not, and you always end up surprised when some random element isn&#8217;t positioned or styled correctly later on down the road.</p>
<p>It&#8217;s time for us to move on to a CMS that gives the developer full control over the theme, and not put a bunch of defaults in it that you can&#8217;t get rid of. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.joesak.com/2008/06/02/dotnetnuke-defaultcss-seriously/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Why DotNetNuke is Terrible</title>
		<link>http://www.joesak.com/2008/04/23/why-dotnetnuke-is-terrible/</link>
		<comments>http://www.joesak.com/2008/04/23/why-dotnetnuke-is-terrible/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 20:17:31 +0000</pubDate>
		<dc:creator>Joe Sak</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Improving Code]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ranting]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Venting]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.joesak.com/?p=61</guid>
		<description><![CDATA[I really could go on and on about this, but just a few notes. 1. Forced Registration to Download their Software When you go to DNN&#8217;s web site and sister sites, like the new DNN Events site, the first thing you have to do before you can download anything is register an account. Now, it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I really could go on and on about this, but just a few notes.</p>
<p><strong>1. Forced Registration to Download their Software</strong><br />
When you go to DNN&#8217;s web site and sister sites, like the new <a href="http://www.dnnevents.net">DNN Events</a> site, the first thing you have to do before you can download anything is register an account. Now, it&#8217;s not all bad because it&#8217;s free and I guess they just want to track popularity (ever heard of <a href="http://www.google.com/analytics">Google Analytics</a><a></a>?), but the registration process <strong>takes too long</strong>. I registered an account to download the new Events Module beta about 10 minutes ago and still haven&#8217;t received my &#8220;verify your account&#8221; email. Sorry, DNN team, I&#8217;ve now lost all interest in your beta.</p>
<p>Not only that, but <strong>it&#8217;s not clearly obvious you have to register</strong>. They bury the instruction to register in their rather long and boring content. If I go to wordpress or drupal&#8217;s site, I see big freakin links to download (no registration required of course). It wouldn&#8217;t be so bad if they had a big link that said &#8220;Register and Download&#8221; but no, of course they don&#8217;t.</p>
<p>Which leads to my next point,</p>
<p><strong>2. They really don&#8217;t support or discuss usability and accessibility</strong><br />
DNN modules and the DNN platform itself are so hard to use. Their website is hard to navigate, most of the icons don&#8217;t make sense, and the forums are cluttered and don&#8217;t work in all browsers. You can&#8217;t make a post in their forums in Safari. Sorry, Safari users, outta luck. Get firefox, I guess. No one seriously talks about how to make the admin screens and layouts of their modules more functional, faster, and easier to understand.</p>
<p>Most of the modules we have to buy (another point) are riddled with awful and outdated front-end code, and have the absolute worst Admin screens.</p>
<p><strong>3. You have to pay for most of the modules</strong><br />
Now this isn&#8217;t <em>that</em> bad. I mean, a software developer&#8217;s gotta make money, and some people run their business solely off of DNN modules, right? Ok, but step up your game and make a module <strong>worth paying for</strong>. Refer to point #2.</p>
<p>More later, I have to get back to work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joesak.com/2008/04/23/why-dotnetnuke-is-terrible/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Cheap Web Companies are Ruining the Web</title>
		<link>http://www.joesak.com/2007/12/04/cheap-web-companies-are-ruining-the-web/</link>
		<comments>http://www.joesak.com/2007/12/04/cheap-web-companies-are-ruining-the-web/#comments</comments>
		<pubDate>Wed, 05 Dec 2007 02:06:45 +0000</pubDate>
		<dc:creator>Joe Sak</dc:creator>
				<category><![CDATA[Clients]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Feedback]]></category>
		<category><![CDATA[Improving Code]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ranting]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Venting]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://www.joesak.com/cheap-web-companies-are-ruining-the-web/</guid>
		<description><![CDATA[This is completely opinion and I didn&#8217;t do any research but I&#8217;m probably right in most cases. This is really me venting because I&#8217;ve been having more than enough run-ins with external companies who under-price our clients for &#8220;services&#8221; such as consulting or even developing systems that they can&#8217;t afford for us to do. Here&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>This is completely opinion and I didn&#8217;t do any research but I&#8217;m probably right in most cases. This is really me venting because I&#8217;ve been having more than enough run-ins with external companies who under-price our clients for &#8220;services&#8221; such as consulting or even developing systems that they can&#8217;t afford for us to do.<span id="more-57"></span></p>
<p>Here&#8217;s why companies that come in at the lowest bid are bad for the web: <strong>they don&#8217;t allow or encourage businesses to think critically about their web site</strong>. All that matters to the business owner is the bottom line: cost. So this is partly the fault of the business owner but way more the fault of the web firm that&#8217;s cheaper than others. They make price the most important factor in choosing a web solution.</p>
<p>Not research. Not user experience. Not standards. Not compatibility. Not design. Not aesthetics. Just price.</p>
<p>I urge you, if you are working for a company that still uses code, design aesthetics, and usability from 1997, please stop. <strong>You are hurting the web</strong>. You make it worse for everyone else and you continue to encourage terrible development, harmful user experience, and poor decisions by company executives. You haven&#8217;t challenged your clients to think bigger and better about where the web is today. You haven&#8217;t encouraged executives to learn more about technology and how their customers might use it.</p>
<p>Just go away.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joesak.com/2007/12/04/cheap-web-companies-are-ruining-the-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DotNetNuke and Search Usability</title>
		<link>http://www.joesak.com/2007/11/18/dotnetnuke-and-search-usability/</link>
		<comments>http://www.joesak.com/2007/11/18/dotnetnuke-and-search-usability/#comments</comments>
		<pubDate>Sun, 18 Nov 2007 14:51:16 +0000</pubDate>
		<dc:creator>Joe Sak</dc:creator>
				<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Improving Code]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Search Engines]]></category>
		<category><![CDATA[Search Modules]]></category>
		<category><![CDATA[Search Results]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://www.joesak.com/dotnetnuke-and-search-usability/</guid>
		<description><![CDATA[DotNetNuke recently added what they call a &#8220;feature&#8221; to their implementation of a search bar: the ability to search the web or search your web site. This poses a couple problems: It can confuse users with unnecessary options It&#8217;s pretty meaningless. Why would someone come to your web site to search other web sites? Read [...]]]></description>
			<content:encoded><![CDATA[<p>DotNetNuke recently added what they call a &#8220;feature&#8221; to their implementation of a search bar: the ability to search the web or search your web site.</p>
<p>This poses a couple problems:</p>
<ol>
<li>It can confuse users with <strong>unnecessary options</strong></li>
<li>It&#8217;s pretty meaningless.</li>
</ol>
<p><span id="more-56"></span></p>
<p>Why would someone come to your web site to search other web sites?  <a href="http://www.useit.com/alertbox/20010513.html" title="Search: Visible &amp; Simple - useit.com">Read more about Search Usability</a> at Jakob Nielsen&#8217;s web site. If they&#8217;re going to add this &#8220;scope&#8221; feature of site and web, then they should at least make it so when you&#8217;re on the Results page, and you click the &#8220;Web&#8221; radio button, it automatically takes their query to web results. But <strong>you shouldn&#8217;t include the web as a scope</strong> anyway. People go to major search engine web sites. In fact, they probably found your site on a search engine in the first place.</p>
<p>Now, if DotNetNuke wants to make their search functionality better, they should do some things to improve the results:</p>
<ol>
<li>They should increase the search scope to a LIKE instead of an exact string match</li>
<ol>
<li>From <a href="http://www.useit.com/alertbox/9605.html" title="Top 10 Web Design Mistakes - useit.com">Jakob Nielsen:</a></li>
</ol>
<blockquote><p>Overly literal search engines reduce usability in that they&#8217;re unable to handle typos, plurals, hyphens, and other variants of the query terms.</p></blockquote>
<li>They should allow for the creation of a dictionary (or use the <a href="http://code.google.com/apis/ajaxsearch/web.html">Google Search API</a>) to assist with common spelling mistakes.</li>
<li>The Results Page should be configurable to show page names instead of module titles.</li>
</ol>
<p>Those are just a few things that would make DNN search better. What do you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joesak.com/2007/11/18/dotnetnuke-and-search-usability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Login Usability: Am I in or out?</title>
		<link>http://www.joesak.com/2007/08/01/login-usability-am-i-in-or-out/</link>
		<comments>http://www.joesak.com/2007/08/01/login-usability-am-i-in-or-out/#comments</comments>
		<pubDate>Wed, 01 Aug 2007 13:41:44 +0000</pubDate>
		<dc:creator>Joe Sak</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Feedback]]></category>
		<category><![CDATA[Improving Code]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://www.joesak.com/login-usability-am-i-in-or-out/</guid>
		<description><![CDATA[UPDATE: After making this post, and refreshing the parallels forums page, I was presented with &#8220;Welcome, Joseph Sak&#8221; instead of a login prompt. So maybe I got it wrong, or they did, but this post still stands! The Parallels Forums recently got some redesign and information restructure, which all looks good and is organized quite [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE:</strong> <em>After making this post, and refreshing the parallels forums page, I was presented with &#8220;Welcome, Joseph Sak&#8221; instead of a login prompt. So maybe I got it wrong, or they did, but this post still stands!<br />
</em></p>
<p><a href="http://forums.parallels.com">The Parallels Forums</a> recently got some redesign and information restructure, which all looks good and is organized quite well. But they&#8217;ve missed a couple really easy issues with their login functionality.</p>
<p><span id="more-47"></span></p>
<p>When you log into the Parallels Forums, it takes you to a &#8220;logging in&#8221; screen and redirects you back to where you were, which is fine, but what is this?!</p>
<h2>Am I logged in or out?</h2>
<p><img src="/images/logged-in-or-out.gif" alt="Am I logged in or out of Parallels Forums?" /></p>
<p>This is what you see in the top right of the forums after logging in. Apparantly, I&#8217;m logged in because I can start threads, but unless I click on the &#8220;+&#8221; symbol in the top left and opening a post-thread page, I have no visual cue that I am logged in.</p>
<p>Originally, with the old design, you saw your name and a &#8220;logout&#8221; link next to it. Or you could click your name to edit your profile. This was highly usable and gave immediate feedback to the user that yes, <strong>John Smith</strong>, you are logged in.</p>
<p>Now, Parallels, if you&#8217;re not willing to clean up that little mess, why are you making me erase &#8220;Login&#8221; from your textbox before typing my user name?</p>
<p><img src="/images/dont-erase-me-please.gif" alt="Why doesn't it disappear onclick?" /></p>
<p>You can solve this with a simple function.</p>
<p><code><br />
onclick="eraseInput();"</p>
<p>...</p>
<p>function eraseInput(){<br />
     if(this.value == "Login"){<br />
        this.value = "";<br />
     } else { return false; }<br />
}</p>
<p></code></p>
<p>Pretty simple usability points, and I can&#8217;t believe Parallels just got rid of them with their new design.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joesak.com/2007/08/01/login-usability-am-i-in-or-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Semantic XHTML &#8211; More than Table-less layouts</title>
		<link>http://www.joesak.com/2007/07/18/semantic-xhtml-more-than-table-less-layouts/</link>
		<comments>http://www.joesak.com/2007/07/18/semantic-xhtml-more-than-table-less-layouts/#comments</comments>
		<pubDate>Wed, 18 Jul 2007 19:24:52 +0000</pubDate>
		<dc:creator>Joe Sak</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Improving Code]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Semantic XHTML]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Work Stuff]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.joesak.com/semantic-xhtml-more-than-table-less-layouts/</guid>
		<description><![CDATA[OK so I have a confession to make. I didn&#8217;t know that semantic XHTML is different from standards-compliant XHTML. I formally apologize to the entire web development community. My terrible practice over the last seven years has finally caught up with me and put me in my place! I am deeply ashamed and will be [...]]]></description>
			<content:encoded><![CDATA[<p>OK so I have a confession to make. I didn&#8217;t know that semantic XHTML is different from standards-compliant XHTML.</p>
<p>I formally apologize to the entire web development community. My terrible practice over the last seven years has finally caught up with me and put me in my place!</p>
<p>I am deeply ashamed and will be making every effort to step up my game and read all about <a href="http://brainstormsandraves.com/articles/semantics/structure/">the wonderful world of semantic web development</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joesak.com/2007/07/18/semantic-xhtml-more-than-table-less-layouts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modifying DotNetNuke Search and Improving the Results</title>
		<link>http://www.joesak.com/2007/07/14/modifying-dotnetnuke-search-and-improving-the-results/</link>
		<comments>http://www.joesak.com/2007/07/14/modifying-dotnetnuke-search-and-improving-the-results/#comments</comments>
		<pubDate>Sat, 14 Jul 2007 12:41:38 +0000</pubDate>
		<dc:creator>Joe Sak</dc:creator>
				<category><![CDATA[Artemis Solutions Group]]></category>
		<category><![CDATA[Custom Development]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Improving Code]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Search Engines]]></category>
		<category><![CDATA[Search Modules]]></category>
		<category><![CDATA[Search Results]]></category>
		<category><![CDATA[Stored Procedure Improvement]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Websites]]></category>
		<category><![CDATA[Work Stuff]]></category>

		<guid isPermaLink="false">http://www.joesak.com/modifying-dotnetnuke-search-and-improving-the-results/</guid>
		<description><![CDATA[Recently, I modified the Stored Procedure named &#8220;GetSearchResults&#8221; to improve the results pages in DotNetNuke web sites. Here is my explanation from the DNN forums. OK &#8212; here is where the actual change is: &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; AND (sw.Word like &#8216;%&#8217; + @Word + &#8216;%&#8217;) AND (t.IsDeleted = 0) AND (t.DisableLink = 0) AND (m.IsDeleted = 0) [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I modified the Stored Procedure named &#8220;GetSearchResults&#8221; to improve the results pages in DotNetNuke web sites. Here is my explanation from the DNN forums.</p>
<p><span id="more-44"></span></p>
<p>OK &#8212; here is where the actual change is:</p>
<p> &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p><strong>  AND (sw.Word like &#8216;%&#8217; + @Word + &#8216;%&#8217;)</strong></p>
<p>    AND (t.IsDeleted = 0)</p>
<p><strong>    AND (t.DisableLink = 0)</strong></p>
<p>    AND (m.IsDeleted = 0)</p>
<p>    AND (t.PortalID = @PortalID)</p>
<p><strong>    OR (m.ModuleTitle like &#8216;%&#8217; + @Word + &#8216;%&#8217;)</strong></p>
<p>&#8212;&#8212;&#8212;&#8211;</p>
<p>The bolded lines are the changes</p>
<p>First line is how the search term is matched. Instead of exact, it does a like. We found that a lot of clients would complain that searching &#8220;map&#8221;, for instance, would not return pages which had the word &#8220;maps&#8221; on them. Or &#8220;auto&#8221; won&#8217;t give you &#8220;automobile&#8221;.</p>
<p>Second is the disablelink line. We had the problem of hidden pages showing up in results  but realized sometimes we WANT hidden pages to show up, but sometimes we hide pages because they&#8217;re not ready to be published. So I decided that if I &#8220;disable&#8221; the page then I definitely don&#8217;t want it to come up in the results, but I might want to keep it for later (we aren&#8217;t much for deleting pages around here)</p>
<p>Third is the OR m.ModuleTitle like &#8216;%&#8217; + @Word + &#8216;%&#8217; part &#8212; now this is kind of a subjective one. I have a web site right now for a client that sells insurance. Home insurance, life insurance, and car insurance. When I searched &#8220;car&#8221; I didn&#8217;t get the car insurance page at all, even though the page was titled car insurance and the module was titled car insurance&#8230; The content copy used the word &#8220;automobile&#8221; because this particular client is very traditional and was picky about that wording. So I added the &#8220;OR&#8221; line because if we put the search term in the title, it&#8217;s most likely relevant. We know module titles are what show up as the links on the SRP and so we make sure those titles are always relevant and helpful for the user.</p>
<p>BUT &#8212; we would like to see page name or page title as an option in the settings for how the text displays. we couldn&#8217;t figure out how to modify the core to do that.</p>
<p>OK that is all i hope this has been informational</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joesak.com/2007/07/14/modifying-dotnetnuke-search-and-improving-the-results/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced)
Database Caching 10/16 queries in 0.014 seconds using disk

Served from: www.joesak.com @ 2010-09-08 01:47:17 -->