<?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>Joe Song &#187; programming</title> <atom:link href="http://joesong.com/tag/programming/feed/" rel="self" type="application/rss+xml" /><link>http://joesong.com</link> <description>Development, music.</description> <lastBuildDate>Tue, 22 Jun 2010 04:37:09 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.0</generator> <item><title>Overriding Drupal Login Form Messages via Localization</title><link>http://joesong.com/2010/03/overriding-drupal-login-form-messages-via-localization/</link> <comments>http://joesong.com/2010/03/overriding-drupal-login-form-messages-via-localization/#comments</comments> <pubDate>Fri, 19 Mar 2010 16:22:32 +0000</pubDate> <dc:creator>josephsong</dc:creator> <category><![CDATA[Development]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[drupal]]></category> <category><![CDATA[drupal 6]]></category> <category><![CDATA[forms]]></category> <category><![CDATA[localization]]></category> <category><![CDATA[programming]]></category><guid
isPermaLink="false">http://joesong.com/?p=991</guid> <description><![CDATA[Altering form messages in Drupal via i10n.]]></description> <content:encoded><![CDATA[<h3>Sx</h3><p>We want something besides the default messaging for user forms in Drupal. They are still in English, but just custom to our application. Also, we don&#8217;t need to override all of them, just a few. And, we are using Drupal 6.</p><h3>Dx</h3><p>Drupal is set up to automatically translate form messaging. Using this mechanism, we can cleanly alter the messages to appear just as we would like them to appear. We create a custom language and set it as the default. We only make the few translations that we need and Drupal falls back on the default English for stuff we don&#8217;t translate.</p><p>To setup the custom language:</p><ol
class="default_list"><li>Make sure the Locale module is enabled and that you have permissions to use it (both to Administer Languages and for the Translate Interface)</li><li>Go to Site Configuration -&gt; Languages -&gt; Add Language</li><li>Open the Custom Language form</li><li>Fill in the form with something like:<br
/> Language code: en-MySite<br
/> Language name in English: MySite<br
/> Native language name: MySite<br
/> Path prefix: mysite (this is only a placeholder and won&#8217;t be needed later)<br
/> Language domain: [blank]<br
/> Direction: Left to right</li><li>Click the Add custom language</li><li>Go to Site Configuration -&gt; Languages and choose en-MySite as the default language, click Save Configuration</li></ol><p>To make the faux translations:</p><ol
class="default_list"><li>Go to Site Building -&gt; Translate Interface -&gt; Search</li><li>Search for a particular string by something it contains, say, &#8220;username&#8221;.</li><li>Find your string in the search results and click edit. Enter your translation and submit it.</li><li>Repeat for other strings as necessary.</li></ol><h3>Tx</h3><p>So, we end up with a clean faux translation of the default strings into your application-specific copy.</p> ]]></content:encoded> <wfw:commentRss>http://joesong.com/2010/03/overriding-drupal-login-form-messages-via-localization/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>HTML and CSS Development Guidelines</title><link>http://joesong.com/2010/02/html-and-css-development-guidelines/</link> <comments>http://joesong.com/2010/02/html-and-css-development-guidelines/#comments</comments> <pubDate>Thu, 18 Feb 2010 17:23:29 +0000</pubDate> <dc:creator>josephsong</dc:creator> <category><![CDATA[CSS]]></category> <category><![CDATA[Development]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[html]]></category> <category><![CDATA[optimization]]></category> <category><![CDATA[performance]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[progressive enhancement]]></category><guid
isPermaLink="false">http://joesong.com/?p=925</guid> <description><![CDATA[Some rules for HTML and CSS development based on success in the field.]]></description> <content:encoded><![CDATA[<p>*NOTE &#8211; Feb 18, 2010: this is a work in progress. Very likely, there are points not yet included.</p><h2>Philosophical Approach</h2><p>The approach can be summed up in two points:</p><ol
class="default_list"><li>Write enough markup and style definitions to make it clear to other developers what is happening.</li><li>Write as little markup and style definitions as possible.</li></ol><p>Let’s talk about what these mean.</p><h5>Write enough markup and style definitions to make it clear to other developers what is happening.</h5><p>We follow the principles of semantic web development which involves using markup to describe the data or content of a web page. In practice, this means things like using <code>ol</code> and <code>ul</code> tags to make lists of items instead of text delineated with <code>br</code> tags, and giving page elements class names that describe their function (eg “<code>article-wrapper</code>”) instead of class names that describe their appearance (eg “<code>blue-background</code>”).</p><h5>Write as little markup and as few style definitions as possible.</h5><p>Small file size and shallow markup heirarchy make the site faster to load and easier to maintain. To that end, we write as little markup and as few style as possible to make the page appear and function as necessary. In practice, this means things like using <code>padding</code> and <code>margin</code> to create space between elements instead of using <code>br</code> or empty <code>p</code> tags, and writing reusable CSS classes that add common traits (eg <code>background-color</code>) and can be used in conjunction with other reusable CSS classes that provide other common traits (eg <code>font-size</code>).</p><h2>Rules</h2><p>We have a few easy-to-follow rules for HTML and CSS development that have evolved from years of experience.</p><h5>Rules for writing HTML</h5><ul
class="default_list"><li>Block-level elements      are  never be self-closing, even      when empty.<br
/> <code>&lt;div /&gt;</code> should always be written as <code>&lt;div&gt;&lt;/div&gt;</code>, but but <code>&lt;img /&gt;</code> or <code>&lt;span /&gt;</code> is proper.</li><li>Markup always validates      unless there is a very good reason (eg for cross-browser support or CMS      limitations).<br
/> There are many validators but W3C’s is preferred: <a
href="http://validator.w3.org/">http://validator.w3.org/</a></li><li>Documents are written for      HTML 5.<br
/> Documents should use the the <code>&lt;!DOCTYPE html&gt;</code> declaration.</li><li>Tables are used only for      tabular data, not for layout.</li><li>Stylesheets are included      in the <code>&lt;head&gt;</code> of the page.</li><li>Stylesheets are included      using <code>&lt;link /&gt;</code> tags, not <code>@import</code> statements.<br
/> It is permissable, however, to use <code>@import</code> statements within an external stylesheet.</li><li>Markup should be indented      using tabs, not spaces, so that the indentation matches the markup      heirarchy.</li><li>CSS and JavaScript are      included in external files, not written inline in the page.</li><li>External JavaScript files      are included at the bottom of the page just before the <code>&lt;/body&gt;</code>.</li></ul><h5>Rules for writing CSS</h5><ul
class="default_list"><li>CSS is written a compact      format characterized by the selector and all definitions on one line.<br
/> Use <a
href="http://www.codebeautifier.com/">http://www.codebeautifier.com/</a> to switch between formats; the format described here is called ‘High’ compression.<br
/> <strong><em>Improper:<br
/> </em></strong></p><pre class="brush: css;">.my-class {
	width: 300px;
	height: 300px;
}</pre><p><strong><em>Proper:</em></strong></p><pre class="brush: css;">.my-class { width: 300px; height: 300px; }</pre></li><li>Selectors use hyphens to      delineate words, not camel case or underscores.<br
/> Improper: <code>.myClass</code> or <code>#my_element</code>.      Proper: <code>.better-class</code></li><li>Hacks to make pages work      correctly in Internet Explorer are included in a separate IE-specific      stylesheet and included on the page using conditional comments.</li><li>During development, sites      use a global stylesheet for universal definitions and separate sheets for      independent areas or features of the site.</li><li>Use of style attributes in markup is avoided.</li><li>When possible (that is,      when specific instances are known), <code>.png</code> transparency should be fixed for      specific elements using the IE-6 specific stylesheet instead of using an <code>.htc</code> file as a behavior.<br
/> <strong><em>Improper:</em></strong></p><pre class="brush: css;">a { behavior: url(iepngfix.htc); }</pre><p><strong><em>Proper:<br
/> </em></strong></p><pre class="brush: css;">a#button { background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,      sizingMethod=crop, src='../images/button.png'); }</pre></li><li>The default font size is      declared in pixels for the <code>&lt;body&gt;</code> and      the declared for other elements as percentages.<pre class="brush: css;">body { font-size: 13px; }
h1 { font-size: 125%; }</pre></li></ul> ]]></content:encoded> <wfw:commentRss>http://joesong.com/2010/02/html-and-css-development-guidelines/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>WestlawNext.com</title><link>http://joesong.com/2010/01/westlawnext-com/</link> <comments>http://joesong.com/2010/01/westlawnext-com/#comments</comments> <pubDate>Sun, 31 Jan 2010 23:00:25 +0000</pubDate> <dc:creator>josephsong</dc:creator> <category><![CDATA[Portfolio]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[Development]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[OLSON]]></category> <category><![CDATA[programming]]></category><guid
isPermaLink="false">http://joesong.com/?p=683</guid> <description><![CDATA[Product launch site for the biggest name in legal research.]]></description> <content:encoded><![CDATA[<p><a
href="http://joesong.com/wp-content/uploads/2010/02/westlawnext.png"><img
class="alignright size-thumbnail wp-image-686" title="WestlawNext.com" src="http://joesong.com/wp-content/uploads/2010/02/westlawnext-150x150.png" alt="" width="150" height="150" /></a><strong>The Site:</strong> Thomson Reuters, the leading provider of legal and business research products, needed a site to promote the launch of their newest product, WestlawNext.<br
/> <a
href="http://westlawnext.com" target="_blank">http://westlawnext.com</a></p><p><strong>The Client:</strong> Thomson Reuters&#8217; clients are savvy and busy. They knew that if the site was going to reach them, it had to be fast, solid and engaging.</p><p><strong>My Role:</strong> Developer in small, focused group to create the prototype and an on-site advisor during integration with their existing systems.</p><p><strong>The Technology:</strong> The client needed to integrate the site into their CMS but they had asked us to create and test a prototype site before handing it over. We built the original with very limited PHP since we knew TR would be using .NET in the end but PHP allowed our team to quickly build the prototype. The site uses a custom Flash video player and also has a limited but useful mobile version. This mobile version was very important to the client as the majority of their customers regularly use BlackBerrys and other mobile devices. During integration a few technical hurdles appeared from use of their legacy systems but because I was on-site at the time, launch was not affected.</p><p><strong>The Highlights:</strong> <a
href="http://west.thomson.com/westlawnext/seeit/default.aspx" target="_blank">Multiple video players</a> used in conjunction with jQuery UI tabs. Animated main navigation.</p> ]]></content:encoded> <wfw:commentRss>http://joesong.com/2010/01/westlawnext-com/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>External Links in New Window. Passive and with MooTools.</title><link>http://joesong.com/2009/11/external-links-in-new-window-passive-and-with-mootools/</link> <comments>http://joesong.com/2009/11/external-links-in-new-window-passive-and-with-mootools/#comments</comments> <pubDate>Wed, 04 Nov 2009 15:50:55 +0000</pubDate> <dc:creator>josephsong</dc:creator> <category><![CDATA[Development]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[mootools]]></category> <category><![CDATA[passive]]></category> <category><![CDATA[programming]]></category><guid
isPermaLink="false">http://joesong.com/?p=571</guid> <description><![CDATA[Sx All external links from the site should open in a new window. Do not want to write this on a link-by-link basis. Should be light and unobtrusive. Using MooTools. Dx We can easily know what domain the script lives on. Other domains are easily distinguished. Links come and go and are loaded in, sometimes, by [...]]]></description> <content:encoded><![CDATA[<h3>Sx</h3><p>All external links from the site should open in a new window. Do not want to write this on a link-by-link basis. Should be light and unobtrusive. Using MooTools.</p><h3>Dx</h3><p>We can easily know what domain the script lives on. Other domains are easily distinguished. Links come and go and are loaded in, sometimes, by other links. We will use one of my favorite patterns, which I am calling the Passive Click Pattern (got a better or more widely-used name?) to listen to all clicks anywhere on the document.body. In this case, if the click is on a link and the link is external, then we will set the target of the link to &#8216;_blank&#8217;.  Paramount to using the PCP (OMG, I did not realize that was the acronym) is the pattern of not <em>stopping </em>clicks in other patterns but just using <em>preventDefault</em>. That way, the click can flow through the DOM and be heard by multiple listeners.</p><p>This solution requires only the most core of MooTools and is built against version 1.2.3.</p><h3>Tx</h3><pre class="brush: jscript;">
window.addEvent('domready', function(){
	var currentDomain = window.location.host;
	$(document.body).addEvent('click', function(evt) {
		$trgt = $(evt.target);
		if ($trgt.get('tag') !== 'a') {
			$trgt = $trgt.getParent();
		}
		// if the target is a link AND the link is absolute AND the link goes to a different domain,
		// then set the target to _blank to open in new page
		if ($trgt &amp;&amp;
				$trgt.get('tag') === 'a' &amp;&amp;
				$trgt.get('href').test('http') &amp;&amp;
				!$trgt.get('href').test(currentDomain)) {
			$trgt.set('target', '_blank');
		}
	});
});
</pre><h3>EDIT:</h3><p>A more fitting name for this pattern is &#8220;Passive EVENT Pattern&#8221; since it can be applied to more than just clicks. Form submissions, for instance, or key entry.</p><p>Plus, then you can say your application is PEPpy. #amirightfolks</p> ]]></content:encoded> <wfw:commentRss>http://joesong.com/2009/11/external-links-in-new-window-passive-and-with-mootools/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Style.Target.com</title><link>http://joesong.com/2009/08/style-target-com/</link> <comments>http://joesong.com/2009/08/style-target-com/#comments</comments> <pubDate>Sat, 29 Aug 2009 01:25:18 +0000</pubDate> <dc:creator>josephsong</dc:creator> <category><![CDATA[Portfolio]]></category> <category><![CDATA[Development]]></category> <category><![CDATA[OLSON]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[progressive enhancement]]></category> <category><![CDATA[wordpress]]></category><guid
isPermaLink="false">http://joesong.com/?p=614</guid> <description><![CDATA[Design-driven WordPress theme for Target's most stylish clothing and accessories.]]></description> <content:encoded><![CDATA[<p><a
href="http://joesong.com/wp-content/uploads/2010/01/style_target_com.png"><img
class="size-thumbnail wp-image-615 alignright" title="style_target_com" src="http://joesong.com/wp-content/uploads/2010/01/style_target_com-150x150.png" alt="Style.Target.com" width="150" height="150" /></a><strong>The Site:</strong> Flexible and stylish boutique for promotion of Target&#8217;s most stylish clothing and accessories. <br
/> <a
href="http://style.target.com" target="_blank">http://style.target.com</a></p><p><strong>The Client:</strong> Already well known for their design-on-a-dime offerings, Target needed a site to regularly update with new product announcements, features about their relationships with top designers and frugal fashion tips.</p><p><strong>My Role:</strong> Implementation of ongoing content and evolving design of blog. Each post has a slightly new feel that keeps the whole blog fresh.</p><p><strong>The Technology:</strong> The site is built on WordPress but uses custom short codes and fields. In this way, the project is able to keep WordPress&#8217; ease of use while using unique design features.</p><p><strong>The Highlights: </strong><a
href="http://style.target.com/?category_name=Designers">Designer&#8217;s directory</a> from which users can quickly access any designer&#8217;s Target collection. Integration of Target&#8217;s universal header and footer navigation, including seasonal updates, into the WordPress theme.</p> ]]></content:encoded> <wfw:commentRss>http://joesong.com/2009/08/style-target-com/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Mootools 1.2 Horizontal Accordion &#8211; the secret revealed</title><link>http://joesong.com/2009/04/mootools-12-horizontal-accordion-the-secret-revealed/</link> <comments>http://joesong.com/2009/04/mootools-12-horizontal-accordion-the-secret-revealed/#comments</comments> <pubDate>Wed, 15 Apr 2009 18:44:42 +0000</pubDate> <dc:creator>josephsong</dc:creator> <category><![CDATA[Development]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[mootools]]></category> <category><![CDATA[programming]]></category><guid
isPermaLink="false">http://joesong.com/?p=445</guid> <description><![CDATA[Sometimes the API docs are wrong. Since I couldn&#8217;t find out how to do it, I&#8217;ll post the secret here. To make the horizontal accordion work in Mootools 1.2 you have to specify a fixed width. The API docs say it is a Boolean, but it ain&#8217;t. It is what the plugin uses to determine [...]]]></description> <content:encoded><![CDATA[<p>Sometimes the API docs are wrong.</p><p>Since I couldn&#8217;t find out how to do it, I&#8217;ll post the secret here. To make the horizontal accordion work in Mootools 1.2 you have to specify a fixed width. The API docs say it is a Boolean, but it ain&#8217;t. It is what the plugin uses to determine the size of open panels.</p><p>Markup:</p><pre class="brush: xml;">
&lt;ul id=&quot;get-started-steps&quot;&gt;
	&lt;li class=&quot;get-started-step&quot;&gt; &lt;a class=&quot;trigger left&quot; href=&quot;#&quot;&gt;Step 1&lt;/a&gt;
		&lt;div class=&quot;get-started-content left&quot;&gt;step 1 content&lt;/div&gt;
	&lt;/li&gt;
	&lt;li class=&quot;get-started-step&quot;&gt; &lt;a class=&quot;trigger left&quot; href=&quot;#&quot;&gt;Step 2&lt;/a&gt;
		&lt;div class=&quot;get-started-content left&quot;&gt;step 2 content&lt;/div&gt;
	&lt;/li&gt;
	&lt;li class=&quot;get-started-step&quot;&gt; &lt;a class=&quot;trigger left&quot; href=&quot;#&quot;&gt;Step 3&lt;/a&gt;
		&lt;div class=&quot;get-started-content left&quot;&gt;step 3 content&lt;/div&gt;
	&lt;/li&gt;
&lt;/ul&gt;
</pre><p>JS:</p><pre class="brush: jscript;">&lt;br /&gt;
new Accordion(&lt;br /&gt;
$$(’.get-started-step .trigger’),&lt;br /&gt;
$$(’.get-started-content’),&lt;br /&gt;
{&lt;br /&gt;
height: false,&lt;br /&gt;
width: true,&lt;br /&gt;
fixedWidth: 200&lt;br /&gt;
});&lt;br /&gt;
</pre><p>CSS:</p><pre class="brush: css;">&lt;br /&gt;
#get-started-steps { width: 100%; }&lt;br /&gt;
#get-started-steps li { float: left; }&lt;br /&gt;
.get-started-content { width: 200px; height: 200px; }&lt;br /&gt;
.left { float: left; }&lt;br /&gt;
</pre>]]></content:encoded> <wfw:commentRss>http://joesong.com/2009/04/mootools-12-horizontal-accordion-the-secret-revealed/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>JavaScript Namespacing</title><link>http://joesong.com/2009/02/javascript-namespacing/</link> <comments>http://joesong.com/2009/02/javascript-namespacing/#comments</comments> <pubDate>Fri, 20 Feb 2009 19:34:24 +0000</pubDate> <dc:creator>josephsong</dc:creator> <category><![CDATA[Acting]]></category> <category><![CDATA[Development]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[Performing]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[namespacing]]></category> <category><![CDATA[programming]]></category><guid
isPermaLink="false">http://joesong.com/?p=427</guid> <description><![CDATA[I figure if you are reading even this far you care / know about namespacing in JavaScript so I&#8217;m not going to go into WHY. However, the HOW is here. But, okay, yeah, maybe some specific WHY. We had been using a generic namespacing function that required plugging in the base name three times. Not [...]]]></description> <content:encoded><![CDATA[<p>I figure if you are reading even this far you care / know about namespacing in JavaScript so I&#8217;m not going to go into WHY.</p><p>However, the HOW is here. But, okay, yeah, maybe some specific WHY.</p><p>We had been using a generic namespacing function that required plugging in the base name three times. Not really that much work, but kind of a pain if you want to redistribute it. So, it is now reworked to be changed only in one place. It requires three variables in the default global namespace but that ain&#8217;t bad, right?</p><pre>var APPLICATION_NAMESPACE = "MYPROJECT";
var _global = this;
var _global[APPLICATION_NAMESPACE] = {};

_global[APPLICATION_NAMESPACE].namespace = function() {
    var a=arguments, o=null, i, j, d;
    for (i=0; i&lt;a.length; i=i+1) {
        d=a[i].split(".");
        o=_global[APPLICATION_NAMESPACE];

        for (j=(d[0] == APPLICATION_NAMESPACE) ? 1 : 0; j&lt;d.length; j=j+1) {
            o[d[j]]=o[d[j]] || {};
            o=o[d[j]];
        }
    }

    return o;
}</pre><p>So, <span
class="code">_global</span> here refers to <span
class="code">window</span> most of the time (but sometimes not so we need a reference to it).  <span
class="code">MYPROJECT</span> can be whatever you want it to be.</p><p>When we use the namespacing stuff we refer to the specific namespace directly using JS dot-deliminated object syntax. This function goes soft on existing objects; it will not destroy a previously created object with the same name.</p><p>The function will ignore the name of the namespace if it is the first part in there. I&#8217;m not saying that well, but these calls are functionally identical and both namespace MYPROJECT.SomeOtherPart.</p><pre>MYPROJECT.namespace("SomeOtherPart");
MYPROJECT.namespace("MYPROJECT.SomeOtherPart");</pre>]]></content:encoded> <wfw:commentRss>http://joesong.com/2009/02/javascript-namespacing/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Setting up Trac on Dreamhost</title><link>http://joesong.com/2008/12/setting-up-trac-on-dreamhost/</link> <comments>http://joesong.com/2008/12/setting-up-trac-on-dreamhost/#comments</comments> <pubDate>Wed, 31 Dec 2008 04:15:31 +0000</pubDate> <dc:creator>josephsong</dc:creator> <category><![CDATA[Bug Tracking]]></category> <category><![CDATA[Development]]></category> <category><![CDATA[bluehost]]></category> <category><![CDATA[dreamhost]]></category> <category><![CDATA[dreamy-trac]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[trac]]></category><guid
isPermaLink="false">http://joesong.com/?p=237</guid> <description><![CDATA[The following is what worked for me to get Trac up and running at Dreamhost. So, I just transferred my hosting from Bluehost to Dreamhost (very happily, by the way) and was in the process of moving my SVN repos from Assembla (only because DH offers them free and unlimited, otherwise very happy with Assembla) [...]]]></description> <content:encoded><![CDATA[<p>The following is what worked for me to get Trac up and running at Dreamhost.</p><p><img
class="alignleft size-full wp-image-239" style="margin: 5px;" title="trac_logo" src="http://joesong.com/wp-content/uploads/2008/12/trac_logo.png" alt="trac_logo" width="214" height="61" />So, I just transferred my hosting from Bluehost to Dreamhost (very happily, by the way) and was in the process of moving my SVN repos from Assembla (only because DH offers them free and unlimited, otherwise very happy with Assembla) when I figured I needed a bug tracking setup for client work.</p><p>Last night I tried a few and landed on Bug Genie. Solid interface, a little slow on the ajax (which might not be the fault of Bug Genie) but overall very good. The ajax was helpful and, in fact, I miss it in Trac, and it probably has more features that Trac.</p><p>And, I came back to Trac just because it is more common, right? But, having done my due diligence, I&#8217;m going with it.</p><p>Mostly, what I needed was <a
href="http://www.petarmaric.com/entry/2008/aug/22/trac-dreamhost-install/" target="_blank">Petar Marić&#8217;s dreamy-trac script</a>. FOR REAL. I tried creamy-trac and the AutoTracOnDreamHost and they both seemed useful but lead to other problems.</p><p>So, the second thing is to add the line</p><pre>password_store = HtPasswdStore</pre><p>to the trac.ini file which should be at /home/&lt;username&gt;/trac_projects/&lt;tracprojectname&gt;/conf/, and change the hash_method:</p><pre>hash_method = HtPasswdHashMethod</pre><p>Then turn off the trac.web.auth.loginmodule and turn on the acct_mgr.web_ui.accountmodule in the [components] section of the trac.ini, like so</p><pre>[components]
acct_mgr.* = enabled
acct_mgr.http.httpauthstore = enabled
acct_mgr.web_ui.accountmodule = enabled
trac.web.auth.loginmodule = disabled
webadmin.* = enabled</pre><p>And then, IF you want email notifications enabled smtp in the [notification] section, like so:</p><pre>smtp_enabled = true</pre><p>While in notifications I also set the smtp_from and smtp_replyto to a real address just for fun.</p><p>Also, I chose to use the AccountManager plugin instead of htaccess autorization so I stayed away from editing the .htaccess, but that&#8217;s my opinion.</p><p>And, that&#8217;s all I know.</p> ]]></content:encoded> <wfw:commentRss>http://joesong.com/2008/12/setting-up-trac-on-dreamhost/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Hearst Broadcasting Weather</title><link>http://joesong.com/2008/02/hearst-broadcasting-weather/</link> <comments>http://joesong.com/2008/02/hearst-broadcasting-weather/#comments</comments> <pubDate>Tue, 05 Feb 2008 02:22:54 +0000</pubDate> <dc:creator>josephsong</dc:creator> <category><![CDATA[Portfolio]]></category> <category><![CDATA[Development]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[OLSON]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[progressive enhancement]]></category><guid
isPermaLink="false">http://joesong.com/?p=627</guid> <description><![CDATA[AJAX-centered singular interface for weather used across Hearst Broadcasting stations.]]></description> <content:encoded><![CDATA[<p><a
href="http://joesong.com/wp-content/uploads/2010/01/kmbc_com_weather.png"><img
class="size-thumbnail wp-image-628 alignright" title="kmbc_com_weather" src="http://joesong.com/wp-content/uploads/2010/01/kmbc_com_weather-150x150.png" alt="KMBC.com Weather" width="150" height="150" /></a><strong>The Site:</strong> Weather information destination in use across Hearst Broadcasting stations.<br
/> <a
href="http://www.kmbc.com/weather/">http://www.kmbc.com/weather/</a> (and many others)</p><p><strong>The Client:</strong> Hearst Broadcasting is a part of the powerful and historic Hearst Corporation. They needed a friendly and useful interface for the weather section of the stations&#8217; sites.</p><p><strong>My Role:</strong> Part of the small, dedicated development group.</p><p><strong>The Technology:</strong> The site is built for progressive enhancement and semantics but at the top level the interface is JavaScript driven with AJAX-loaded content and smooth animations. The JavaScript uses the Yahoo User Interface library and build system to provide a consistent experience across browsers and platforms.</p><p><strong>The Highlights:</strong> Home page tiles are arrangeable by user and saved in a cookie to persist across visits. The tiles and their associated content are built abstractly to allow content owners tight control over presentation and interaction.</p> ]]></content:encoded> <wfw:commentRss>http://joesong.com/2008/02/hearst-broadcasting-weather/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
Page Caching using disk (enhanced) (user agent is rejected)

Served from: joesong.com @ 2010-07-31 09:30:10 -->