<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>kovshenin.com</title>
	
	<link>http://kovshenin.com</link>
	<description>Thinking about WordPress, PHP, MySQL, jQuery, Web 2.0, PR and Social Media</description>
	<lastBuildDate>Mon, 15 Mar 2010 08:41:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0-alpha</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/kovshenin_com" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="kovshenin_com" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>The Web Development Cycle Explained</title>
		<link>http://kovshenin.com/archives/the-web-development-cycle-explained/</link>
		<comments>http://kovshenin.com/archives/the-web-development-cycle-explained/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 08:41:52 +0000</pubDate>
		<dc:creator>kovshenin</dc:creator>
				<category><![CDATA[project management]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://kovshenin.com/?p=2075</guid>
		<description><![CDATA[If you&#8217;ve ever been to software development classes you probably already know about the software development cycle: Pre-alpha, Alpha, Beta, Release candidate (Gamma, Delta), Release to Marketing and finally, General Availability. Well it goes pretty much the same in the web development world, except that there are a few other parties involved in the whole [...]


Related posts:<ol><li><a href='http://kovshenin.com/archives/jquery-cycle-pager-and-pageranchorbuilder/' rel='bookmark' title='Permanent Link: jQuery Cycle: Pager and pagerAnchorBuilder'>jQuery Cycle: Pager and pagerAnchorBuilder</a></li>
<li><a href='http://kovshenin.com/archives/plugin-development-technical-support-for-wordpress/' rel='bookmark' title='Permanent Link: Plugin Development: Technical Support for WordPress'>Plugin Development: Technical Support for WordPress</a></li>
<li><a href='http://kovshenin.com/archives/5-really-useful-trac-reports/' rel='bookmark' title='Permanent Link: 5 Really Useful Trac Reports'>5 Really Useful Trac Reports</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve ever been to software development classes you probably already know about the software development cycle: Pre-alpha, Alpha, Beta, Release candidate (Gamma, Delta), Release to Marketing and finally, General Availability. Well it goes pretty much the same in the web development world, except that there are a few other parties involved in the whole process, and today, in the dynamic era of the Internet, web development corporations, small and medium businesses and tiny web development groups often work from different places.</p>
<div class="kimage"><h2>Development, Testing, Production</h2><img src="http://s.kovshenin.com/core/wp-content/uploads/2010/03/dogbert.png" alt="Development, Testing, Production" /></div><div class="clearfloat"></div>
<p>I&#8217;ve been working freelance for quite a long time, and most of my projects were solo or perhaps two or three people at max, leaving me as the leading developer. Since January this year I&#8217;ve been working on a few projects with a team of over 5 people and high-demanding standards. This raised the problem of project managing and a completely different view of the web development cycle. In this article I&#8217;d like to outline the major steps of the software development cycle and how they could be applied to the web development business.</p>
<h2>Development: Pre-alpha Stage</h2>
<p>As we all hopefully know, each web application starts from a project overview written by both the client and the web development company. After this overview has been approved, the designers start to sketch, the programmers start to write code blocks, and the content managers gather keywords and start writing short subjects, while the client sits back and gets ready to mock anything that is sent their way. This is probably the pre-alpha stage, sometimes called <strong>wireframing</strong> or <strong>mocking up</strong> (in general, not only design terms).</p>
<h2>Development: Alpha Stage</h2>
<p>This, perhaps, is the stage where the design layouts are shown to the client, some text is revealed by the content managers, and something gets approved by the client. In most cases this stage takes the majority of time dedicated to the whole project. It&#8217;s pretty difficult sometimes to convince clients why certain designs look better than others, especially if they have a bad, or no taste at all. Practice shows that it&#8217;s often a good idea to:</p>
<blockquote><p>Present the client with two variants to pick from &#8211; a really aweful one that in general terms could be used, but with a probability of at least 95% that it wouldn&#8217;t; and a really good one that you and your company placed the bet on.</p></blockquote>
<p>Sure there&#8217;s a chance that your client goes with the first choice and you&#8217;ll end up working on something that makes you sick, but hey, this doesn&#8217;t work all the time ;)</p>
<h2>Development: Beta Stage</h2>
<p>After everything has been approved by the client, the Beta development stage is where coders have some fun. There&#8217;s no reason to expect that they get it right from the first time, especially when working on a big project. This is where I suggest you use the <strong>three environments</strong> method &#8211; development, testing, production. Some modern IDEs such as RubyMine (for Ruby on Rails) have built that in, allowing you to switch from one environment to another with a click of a mouse. But unfortunatelly the browser problem persists.</p>
<p><a href="http://s.kovshenin.com/core/wp-content/uploads/2010/03/web_dev_cycle_chart.png"><img src="http://s.kovshenin.com/core/wp-content/uploads/2010/03/web_dev_cycle_chart.png" alt="Web Development Cycle" title="Web Development Cycle" width="680" height="300" class="aligncenter size-full wp-image-2077" /></a></p>
<p>I came across a really useful Firefox addon a few weeks ago, it&#8217;s called <a href="https://addons.mozilla.org/en-US/firefox/addon/14258">SwitchHosts</a>. At first sight it&#8217;s something that is unnecessary &#8211; development environments could be switched to different subdomains &#8211; dev.domain.com and test.domain.com, finally the production address &#8211; domain.com. This, in my opinion, is something that&#8217;s really difficult to tackle when working with software that stores options, etc into databases. For instance &#8211; WordPress, where the database is tied to a certain domain.</p>
<p>Sure you could go ahead and use your text editor&#8217;s Search and Replace function but:</p>
<ul>
<li>Would you really like to do it every single time?</li>
<li>Would you like to teach your other employees to do that?</li>
<li>What if there&#8217;s an error checking algorithm involved? For instance WordPress widgets disappear after a Search and Replace run.</li>
<li>It&#8217;s so much easier to keep track of a single database dump than three.</li>
</ul>
<p>Convinced? Okay but why do you need SwitchHosts to keep one domain tied to three different addresses? Couldn&#8217;t you just use the hosts file for that? Well, sure, but then again, try to explain to your employees (I&#8217;m talking about the less coder-fellows) how to work with the hosts file, then of course they&#8217;ll forget to flush their DNS cache as soon as they&#8217;ve added that extra line. They&#8217;ll end up making changes to the production server, and you wouldn&#8217;t like that, would you?</p>
<p>With <a href="https://addons.mozilla.org/en-US/firefox/addon/14258">SwitchHosts for Firefox</a> you could switch to as many hosts file as you setup in only a couple of clicks. Besides, it&#8217;s always there in your status bar, showing which hosts file is currently active which, believe me, solves plenty of problems. One more feature I love in SwitchHosts is that it flushes your DNS cache automatically as soon as you switch from one environment to another.</p>
<p>Make sure that you&#8217;ve setup version control systems (such as <a href="http://subversion.tigris.org/">Subversion</a>) on each of the environments. It&#8217;ll make it <strong>much easier</strong> when replicating from development to testing and back to development, as well as from testing to production.</p>
<p>The Beta Development Stage is probably the most important part to return back to when your client is not satisfied with the results, or perhaps would like to add a few minor changes to the layout, text or pictures. Of course they should be charged extra for this, and it&#8217;s extra work for you, but hey, it&#8217;s their money they&#8217;re wasting ;)</p>
<h2>Testing: Release Candidate</h2>
<p>Each Release Candidate should probably be located on the remote testing server, unlike the development, which should be kept locally for the developers. Of course it&#8217;s easier to do local testing, but:</p>
<ul>
<li>All tests should be held in environments as close to the real world as possible, thus a remote machine, preferably on the same hosting plan as you production server. Don&#8217;t confuse &#8220;same hosting plan&#8221; and &#8220;same server&#8221; &#8211; your testing and production units should have different IP addresses.</li>
<li>Your content managers will need to polish their work, would you really like to educate them to install server software and deploy the project on their local machines, nah! ;)</li>
<li>After all our testing environment couldn&#8217;t be located on the same machine as the development. Wha? Run two different copies of Apache?</li>
</ul>
<p>So, the RC is where you show off to the project manager, who asks the content managers to review their work on a working website. They could do this online themselves, or they could send reports to the developers.</p>
<p>Release to Marketing (from the general software development cycle) should be in the middle of this stage, where a decision is usually taken to go on and show the results or return back to beta development.</p>
<p>So if Marketing approves the whole thing, the end of the RC stage is where you should show the results of you work to the client. Of course they&#8217;ll need some hosts-file hi-jacking, and perhaps with the SwitchHosts addon it wouldn&#8217;t be as dirty as it usually is. If the client has good reasons not to do this, then of course you should drive it over to a sub-domain. But I really don&#8217;t recommend you showing off on the production server, especially if there&#8217;s an old website working there &#8211; clients don&#8217;t like their old websites to be taken down before the new one is 100% approved. Some of them don&#8217;t understand that there&#8217;s an option to restore their old website ;)</p>
<p>And when the Boss says yes &#8230;</p>
<h2>Production: General Availability</h2>
<p>This is the victory stage. It&#8217;s where both parties yell &#8220;Wohoo!&#8221;, drink champagne and drunk coders deploy the project to the production server overnight. What could possibly go wrong? Often takes less than a minute:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">svn checkout svn<span style="color: #339933;">/</span>tags<span style="color: #339933;">/</span><span style="color:#800080;">1.0</span> <span style="color: #339933;">.</span>
<span style="color: #990000;">mysql</span> <span style="color: #339933;">-</span>uname <span style="color: #339933;">-</span>ppass db <span style="color: #339933;">&lt;</span> <span style="color: #b1b100;">include</span><span style="color: #339933;">/</span>db<span style="color: #339933;">.</span>sql</pre></td></tr></table></div>

<p>Great! Well this doesn&#8217;t mean that you can go ahead and delete everything you&#8217;ve done at the development environment. Yes, testing server can go to rest, but you should always keep a copy of all your work, preferably in an archived Subversion repository. Why?</p>
<ul>
<li>The client could return in two weeks and say: hey, remember you showed me that second version before this third? Could we return to that if payed you some extra cash?</li>
<li>Your client could ask you for a backup copy of the work you&#8217;ve done. You shouldn&#8217;t have problems handing it over or restoring the website if they broke it within a few weeks. Keep a good reputation.</li>
<li>Parts of it (even those which were rejected) could be quite useful in future projects.</li>
<li>If clients are satisfied with the work you&#8217;ve done, they will probably return to you when they&#8217;ll need to add a few extra functions to the website that you made.</li>
</ul>
<p>Well, that&#8217;s about it. Of course if you&#8217;re a solo-freelancer you wouldn&#8217;t need any of this stuff. You wouldn&#8217;t need version control systems at all, as all your work is done by you. A project backup is simply a copy-paste issue. Though it&#8217;s sometimes useful to imitate teamwork. After all, you can&#8217;t be sure that you&#8217;ll be coding solo for the rest of your life ;)</p>
<p>There are tonnes of free and open source tools out there to help you out in version control &#8211; <a href="http://subversion.tigris.org/">Subversion</a>; and in project management &#8211; <a href="http://trac.edgewall.org/">The Trac Project</a> (P.S. check out these <a href="http://kovshenin.com/archives/5-really-useful-trac-reports/">5 Really Useful Trac Reports</a>).</p>
<p>This was the web development cycle outlined based on my experience. Sure some individuals and companies work using modified versions of this cycle, some use a completely different model. But, whichever one is picked, it all comes down to three major phases &#8211; <strong>development</strong>, <strong>testing</strong>, <strong>production</strong>. So, what&#8217;s your case? Which model is used by your company and why do you prefer to work that way? Feel free to give a word in the comments area below.</p>


<p>Related posts:<ol><li><a href='http://kovshenin.com/archives/jquery-cycle-pager-and-pageranchorbuilder/' rel='bookmark' title='Permanent Link: jQuery Cycle: Pager and pagerAnchorBuilder'>jQuery Cycle: Pager and pagerAnchorBuilder</a></li>
<li><a href='http://kovshenin.com/archives/plugin-development-technical-support-for-wordpress/' rel='bookmark' title='Permanent Link: Plugin Development: Technical Support for WordPress'>Plugin Development: Technical Support for WordPress</a></li>
<li><a href='http://kovshenin.com/archives/5-really-useful-trac-reports/' rel='bookmark' title='Permanent Link: 5 Really Useful Trac Reports'>5 Really Useful Trac Reports</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://kovshenin.com/archives/the-web-development-cycle-explained/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 Really Useful Trac Reports</title>
		<link>http://kovshenin.com/archives/5-really-useful-trac-reports/</link>
		<comments>http://kovshenin.com/archives/5-really-useful-trac-reports/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 15:38:20 +0000</pubDate>
		<dc:creator>kovshenin</dc:creator>
				<category><![CDATA[project management]]></category>
		<category><![CDATA[snippets]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://kovshenin.com/?p=2063</guid>
		<description><![CDATA[For those of you who are not familiar with the project management software called The Trac Project please proceed to the Trac Guide. I&#8217;ve been working with this project management tool for quite some time now and the latest upgrades are just awesome. I believe the solution for private projects&#8217; RSS feeds has been found [...]


Related posts:<ol><li><a href='http://kovshenin.com/archives/customize-posts-order-in-wordpress-via-custom-fields/' rel='bookmark' title='Permanent Link: Customize Posts Order in WordPress via Custom Fields'>Customize Posts Order in WordPress via Custom Fields</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>For those of you who are not familiar with the project management software called <a href="http://trac.edgewall.org/">The Trac Project</a> please proceed to the <a href="http://trac.edgewall.org/wiki/TracGuide">Trac Guide</a>. I&#8217;ve been working with this project management tool for quite some time now and the latest upgrades are just awesome. I believe the solution for private projects&#8217; RSS feeds has been found a few months ago somewhere <a href="http://trac.edgewall.org/ticket/540">here</a>. The iCalendar issue remains, but it&#8217;s probably solved the exact same way &#8211; http authentication, although not all iCalendar clients and RSS aggregators support that yet. My favourite <a href="http://www.feedly.com/">Feedly</a> doesn&#8217;t.</p>
<div class="kimage"><h2>Effective Project Management with Trac</h2><img src="http://s.kovshenin.com/core/wp-content/uploads/2010/03/trac.png" alt="Effective Project Management with Trac" /></div><div class="clearfloat"></div>
<p>Before showing off the snipets that I wrote for Trac Reports I&#8217;d like to give you one little hint if you&#8217;re running Trac on an old (but stable) OS version, such as Fedora Core 8. Amazon EC2 still ships the Fedora 8 operating system as default for Linux-based EC2 instances, and a simple <em>yum install trac</em> will get you version 0.10.x, which is outdated. The trick here is to install:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">yum install python<span style="color: #339933;">-</span>setuptools
yum install python<span style="color: #339933;">-</span>setuptools<span style="color: #339933;">-</span>devel</pre></td></tr></table></div>

<p>Which include a package called <strong>easy_install</strong>. Since you&#8217;ve got an old version of Trac installed, use easy_install to update it, like this:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">easy_install <span style="color: #339933;">-</span>U trac</pre></td></tr></table></div>

<p>Bam! Wasn&#8217;t that easy? One more situation where you can use easy_install is to install Trac plugins directly from their repositories (instead of the old way by uploading source files). </p>
<p>Okay, now back to the reports. I made these with a little experimenting with the Trac database. It&#8217;s structure is pretty much transparent and obvious, so if you&#8217;re an SQL genius then go ahead and write your own. Here&#8217;s my most useful list &#8230;</p>
<p><span id="more-2063"></span></p>
<h2>1. All Tickets Reported by Me</h2>
<p>This report is very useful to track the status of all your tickets. Shows all types of tickets in all states (opened, closed). Have you ever submitted a ticket and then couldn&#8217;t find it in your submitted tickets because it was marked as fixed or wontfix? Here&#8217;s the SQL query:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> p<span style="color: #66cc66;">.</span>value <span style="color: #993333; font-weight: bold;">AS</span> __color__<span style="color: #66cc66;">,</span>
    <span style="color: #66cc66;">&#40;</span>CASE <span style="color: #993333; font-weight: bold;">STATUS</span> WHEN <span style="color: #ff0000;">'accepted'</span> THEN <span style="color: #ff0000;">'Accepted'</span>
        WHEN <span style="color: #ff0000;">'new'</span> THEN <span style="color: #ff0000;">'New'</span> 
        WHEN <span style="color: #ff0000;">'owned'</span> THEN <span style="color: #ff0000;">'Owned'</span> 
        WHEN <span style="color: #ff0000;">'closed'</span> THEN <span style="color: #ff0000;">'Closed'</span> 
        WHEN <span style="color: #ff0000;">'assigned'</span> THEN <span style="color: #ff0000;">'Assigned'</span> 
    ELSE <span style="color: #ff0000;">'Unknown'</span> END<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> __group__<span style="color: #66cc66;">,</span>
&nbsp;
    id <span style="color: #993333; font-weight: bold;">AS</span> ticket<span style="color: #66cc66;">,</span> summary<span style="color: #66cc66;">,</span> component<span style="color: #66cc66;">,</span> milestone<span style="color: #66cc66;">,</span>
    t<span style="color: #66cc66;">.</span>type <span style="color: #993333; font-weight: bold;">AS</span> type<span style="color: #66cc66;">,</span> priority<span style="color: #66cc66;">,</span> time <span style="color: #993333; font-weight: bold;">AS</span> created<span style="color: #66cc66;">,</span>
    changetime <span style="color: #993333; font-weight: bold;">AS</span> _changetime<span style="color: #66cc66;">,</span> description <span style="color: #993333; font-weight: bold;">AS</span> _description<span style="color: #66cc66;">,</span> owner
&nbsp;
    <span style="color: #993333; font-weight: bold;">FROM</span> ticket t
    <span style="color: #993333; font-weight: bold;">LEFT</span> <span style="color: #993333; font-weight: bold;">JOIN</span> enum p <span style="color: #993333; font-weight: bold;">ON</span> p<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">=</span> t<span style="color: #66cc66;">.</span>priority <span style="color: #993333; font-weight: bold;">AND</span> p<span style="color: #66cc66;">.</span>type <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'priority'</span>
    <span style="color: #993333; font-weight: bold;">WHERE</span> reporter <span style="color: #66cc66;">=</span> $USER
    <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'accepted'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">,</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'assigned'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">,</span> 
        <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'new'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">,</span> CAST<span style="color: #66cc66;">&#40;</span>p<span style="color: #66cc66;">.</span>value <span style="color: #993333; font-weight: bold;">AS</span> int<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> milestone<span style="color: #66cc66;">,</span> t<span style="color: #66cc66;">.</span>type<span style="color: #66cc66;">,</span> time</pre></td></tr></table></div>

<h2>2. All Tickets Owned by Me</h2>
<p>This report is useful to track your own status. See your active tickets, new ones and once that have been closed.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> p<span style="color: #66cc66;">.</span>value <span style="color: #993333; font-weight: bold;">AS</span> __color__<span style="color: #66cc66;">,</span>
    <span style="color: #66cc66;">&#40;</span>CASE <span style="color: #993333; font-weight: bold;">STATUS</span> WHEN <span style="color: #ff0000;">'accepted'</span> THEN <span style="color: #ff0000;">'Accepted'</span> 
    WHEN <span style="color: #ff0000;">'closed'</span> THEN <span style="color: #ff0000;">'Closed'</span> ELSE <span style="color: #ff0000;">'Owned'</span> END<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> __group__<span style="color: #66cc66;">,</span>
&nbsp;
    id <span style="color: #993333; font-weight: bold;">AS</span> ticket<span style="color: #66cc66;">,</span> summary<span style="color: #66cc66;">,</span> component<span style="color: #66cc66;">,</span> version<span style="color: #66cc66;">,</span> milestone<span style="color: #66cc66;">,</span>
    t<span style="color: #66cc66;">.</span>type <span style="color: #993333; font-weight: bold;">AS</span> type<span style="color: #66cc66;">,</span> priority<span style="color: #66cc66;">,</span> time <span style="color: #993333; font-weight: bold;">AS</span> created<span style="color: #66cc66;">,</span>
    changetime <span style="color: #993333; font-weight: bold;">AS</span> _changetime<span style="color: #66cc66;">,</span> description <span style="color: #993333; font-weight: bold;">AS</span> _description<span style="color: #66cc66;">,</span>
    reporter <span style="color: #993333; font-weight: bold;">AS</span> reporter
&nbsp;
    <span style="color: #993333; font-weight: bold;">FROM</span> ticket t
    <span style="color: #993333; font-weight: bold;">LEFT</span> <span style="color: #993333; font-weight: bold;">JOIN</span> enum p <span style="color: #993333; font-weight: bold;">ON</span> p<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">=</span> t<span style="color: #66cc66;">.</span>priority <span style="color: #993333; font-weight: bold;">AND</span> p<span style="color: #66cc66;">.</span>type <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'priority'</span>
    <span style="color: #993333; font-weight: bold;">WHERE</span> owner <span style="color: #66cc66;">=</span> $USER
    <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'accepted'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">,</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'assigned'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">,</span> 
        <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'closed'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DESC</span><span style="color: #66cc66;">,</span> CAST<span style="color: #66cc66;">&#40;</span>p<span style="color: #66cc66;">.</span>value <span style="color: #993333; font-weight: bold;">AS</span> int<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> milestone<span style="color: #66cc66;">,</span> t<span style="color: #66cc66;">.</span>type<span style="color: #66cc66;">,</span> time</pre></td></tr></table></div>

<h2>3. Assigned and Accepted Tickets by Owner</h2>
<p>Such reports are very useful to track the workflow of all the Trac contributors on one page.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> p<span style="color: #66cc66;">.</span>value <span style="color: #993333; font-weight: bold;">AS</span> __color__<span style="color: #66cc66;">,</span>
    <span style="color: #66cc66;">&#40;</span>CASE <span style="color: #993333; font-weight: bold;">STATUS</span> WHEN <span style="color: #ff0000;">'accepted'</span> THEN <span style="color: #ff0000;">'Accepted by: '</span> 
        WHEN <span style="color: #ff0000;">'assigned'</span> THEN <span style="color: #ff0000;">'Assigned to: '</span> END<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">||</span> 
    owner <span style="color: #993333; font-weight: bold;">AS</span> __group__<span style="color: #66cc66;">,</span>
&nbsp;
    id <span style="color: #993333; font-weight: bold;">AS</span> ticket<span style="color: #66cc66;">,</span> summary<span style="color: #66cc66;">,</span> component<span style="color: #66cc66;">,</span> milestone<span style="color: #66cc66;">,</span> t<span style="color: #66cc66;">.</span>type <span style="color: #993333; font-weight: bold;">AS</span> type<span style="color: #66cc66;">,</span> time <span style="color: #993333; font-weight: bold;">AS</span> created<span style="color: #66cc66;">,</span>
    changetime <span style="color: #993333; font-weight: bold;">AS</span> _changetime<span style="color: #66cc66;">,</span> description <span style="color: #993333; font-weight: bold;">AS</span> _description<span style="color: #66cc66;">,</span> priority<span style="color: #66cc66;">,</span> reporter
&nbsp;
    <span style="color: #993333; font-weight: bold;">FROM</span> ticket t
    <span style="color: #993333; font-weight: bold;">LEFT</span> <span style="color: #993333; font-weight: bold;">JOIN</span> enum p <span style="color: #993333; font-weight: bold;">ON</span> p<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">=</span> t<span style="color: #66cc66;">.</span>priority <span style="color: #993333; font-weight: bold;">AND</span> p<span style="color: #66cc66;">.</span>type <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'priority'</span>
    <span style="color: #993333; font-weight: bold;">WHERE</span> <span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'assigned'</span> <span style="color: #993333; font-weight: bold;">OR</span> <span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'accepted'</span>
    <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> owner<span style="color: #66cc66;">,</span> CAST<span style="color: #66cc66;">&#40;</span>p<span style="color: #66cc66;">.</span>value <span style="color: #993333; font-weight: bold;">AS</span> int<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> t<span style="color: #66cc66;">.</span>type<span style="color: #66cc66;">,</span> time</pre></td></tr></table></div>

<h2>4. Active Tickets by Milestone</h2>
<p>Track the overall progress of the development team, see what&#8217;s left to do until a certain milestone is reached.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;">    <span style="color: #993333; font-weight: bold;">SELECT</span> p<span style="color: #66cc66;">.</span>value <span style="color: #993333; font-weight: bold;">AS</span> __color__<span style="color: #66cc66;">,</span>
    <span style="color: #ff0000;">'Milestone '</span><span style="color: #66cc66;">||</span>milestone <span style="color: #993333; font-weight: bold;">AS</span> __group__<span style="color: #66cc66;">,</span>
    id <span style="color: #993333; font-weight: bold;">AS</span> ticket<span style="color: #66cc66;">,</span> summary<span style="color: #66cc66;">,</span> component<span style="color: #66cc66;">,</span> version<span style="color: #66cc66;">,</span> t<span style="color: #66cc66;">.</span>type <span style="color: #993333; font-weight: bold;">AS</span> type<span style="color: #66cc66;">,</span> 
    owner<span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">STATUS</span><span style="color: #66cc66;">,</span> time <span style="color: #993333; font-weight: bold;">AS</span> created<span style="color: #66cc66;">,</span> changetime <span style="color: #993333; font-weight: bold;">AS</span> _changetime<span style="color: #66cc66;">,</span>
    description <span style="color: #993333; font-weight: bold;">AS</span> _description<span style="color: #66cc66;">,</span> reporter <span style="color: #993333; font-weight: bold;">AS</span> _reporter
&nbsp;
    <span style="color: #993333; font-weight: bold;">FROM</span> ticket t
    <span style="color: #993333; font-weight: bold;">LEFT</span> <span style="color: #993333; font-weight: bold;">JOIN</span> enum p <span style="color: #993333; font-weight: bold;">ON</span> p<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">=</span> t<span style="color: #66cc66;">.</span>priority <span style="color: #993333; font-weight: bold;">AND</span> p<span style="color: #66cc66;">.</span>type <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'priority'</span>
    <span style="color: #993333; font-weight: bold;">WHERE</span> <span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">&lt;&gt;</span> <span style="color: #ff0000;">'closed'</span> 
    <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> <span style="color: #66cc66;">&#40;</span>milestone <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> 
        milestone<span style="color: #66cc66;">,</span> CAST<span style="color: #66cc66;">&#40;</span>p<span style="color: #66cc66;">.</span>value <span style="color: #993333; font-weight: bold;">AS</span> int<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> t<span style="color: #66cc66;">.</span>type<span style="color: #66cc66;">,</span> time</pre></td></tr></table></div>

<h2>5. Closed Tickets by Owner</h2>
<p>Finally, this report is extremely useful to track progress by owner. Shows clearly what the contributors have been up to lately.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;">    <span style="color: #993333; font-weight: bold;">SELECT</span> p<span style="color: #66cc66;">.</span>value <span style="color: #993333; font-weight: bold;">AS</span> __color__<span style="color: #66cc66;">,</span>
    owner <span style="color: #993333; font-weight: bold;">AS</span> __group__<span style="color: #66cc66;">,</span>
    id <span style="color: #993333; font-weight: bold;">AS</span> ticket<span style="color: #66cc66;">,</span> summary<span style="color: #66cc66;">,</span> component<span style="color: #66cc66;">,</span> milestone<span style="color: #66cc66;">,</span> t<span style="color: #66cc66;">.</span>type <span style="color: #993333; font-weight: bold;">AS</span> type<span style="color: #66cc66;">,</span> 
    time <span style="color: #993333; font-weight: bold;">AS</span> created<span style="color: #66cc66;">,</span> changetime <span style="color: #993333; font-weight: bold;">AS</span> _changetime<span style="color: #66cc66;">,</span> description <span style="color: #993333; font-weight: bold;">AS</span> _description<span style="color: #66cc66;">,</span> 
    priority<span style="color: #66cc66;">,</span> reporter
&nbsp;
    <span style="color: #993333; font-weight: bold;">FROM</span> ticket t
    <span style="color: #993333; font-weight: bold;">LEFT</span> <span style="color: #993333; font-weight: bold;">JOIN</span> enum p <span style="color: #993333; font-weight: bold;">ON</span> p<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">=</span> t<span style="color: #66cc66;">.</span>priority <span style="color: #993333; font-weight: bold;">AND</span> p<span style="color: #66cc66;">.</span>type <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'priority'</span>
    <span style="color: #993333; font-weight: bold;">WHERE</span> <span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'closed'</span>
    <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> owner<span style="color: #66cc66;">,</span> CAST<span style="color: #66cc66;">&#40;</span>p<span style="color: #66cc66;">.</span>value <span style="color: #993333; font-weight: bold;">AS</span> int<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> t<span style="color: #66cc66;">.</span>type<span style="color: #66cc66;">,</span> time</pre></td></tr></table></div>

<p>Sweet eh? As you can see this is pretty much basic stuff and there are tonnes of other useful reports that have to be created, but these are the essentials. If you&#8217;ve got your own reports to share, you&#8217;re welcome via comments ;) </p>
<p>Happy project managing!</p>


<p>Related posts:<ol><li><a href='http://kovshenin.com/archives/customize-posts-order-in-wordpress-via-custom-fields/' rel='bookmark' title='Permanent Link: Customize Posts Order in WordPress via Custom Fields'>Customize Posts Order in WordPress via Custom Fields</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://kovshenin.com/archives/5-really-useful-trac-reports/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Robots Are Doing Better Than Humans on Twitter</title>
		<link>http://kovshenin.com/archives/robots-are-doing-better-than-humans-on-twitter/</link>
		<comments>http://kovshenin.com/archives/robots-are-doing-better-than-humans-on-twitter/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 07:10:48 +0000</pubDate>
		<dc:creator>kovshenin</dc:creator>
				<category><![CDATA[twitter]]></category>
		<category><![CDATA[robotics]]></category>
		<category><![CDATA[social media]]></category>
		<category><![CDATA[twibots]]></category>

		<guid isPermaLink="false">http://kovshenin.com/?p=2046</guid>
		<description><![CDATA[This is all about an experiment I started back in July 2009, called TwiBots. Initially it was supposed to be a simple 24/7 online tweep (Michael Davis) saying a bunch of stuff randomly. But then we (Michael and I hehe) started picking out certain topics, feeding content from certain RSS feeds, filtering all content by [...]


Related posts:<ol><li><a href='http://kovshenin.com/archives/twitter-robot-in-php-twibots-draft/' rel='bookmark' title='Permanent Link: Twitter Robot in PHP: Twibots Draft'>Twitter Robot in PHP: Twibots Draft</a></li>
<li><a href='http://kovshenin.com/archives/compatibility-twitter-tools-twitter-friendly-links/' rel='bookmark' title='Permanent Link: Compatibility: Twitter Tools &#038; Twitter Friendly Links'>Compatibility: Twitter Tools &#038; Twitter Friendly Links</a></li>
<li><a href='http://kovshenin.com/archives/the-twitter-api-v2-transition/' rel='bookmark' title='Permanent Link: The Twitter API v2 Transition'>The Twitter API v2 Transition</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>This is all about an experiment I started back in July 2009, called <a href="http://twibots.com">TwiBots</a>. Initially it was supposed to be a simple 24/7 online tweep (Michael Davis) saying a bunch of stuff randomly. But then we (Michael and I hehe) started picking out certain topics, feeding content from certain RSS feeds, filtering all content by keywords and regular expressions. </p>
<div class="kimage"><h2>Davis Got 4500 Followers in 6 Months</h2><img src="http://s.kovshenin.com/core/wp-content/uploads/2009/10/twibots2.png" alt="Davis Got 4500 Followers in 6 Months" /></div><div class="clearfloat"></div>
<p>When the new Retweet API came along, I wrote an RT module which uses the Twitter Search API to find relevant tweets and users, then retweets those messages or just somehow interacts with a user. As soon as the Twitter Lists API was announced, I started working on the Lists module, which eventually became a simple &#8220;sorting-the-tweeps&#8221; based on their keywords &#8211; web design, design, wordpress, etc. Soon enough, I found out that Lists couldn&#8217;t contain more than 500 members (although some glitch made 501 possible). Web design 2, wordpress 2, etc wouldn&#8217;t be as fancy. I also tried building a conversation list of tweeps that by any means talked to the robot, but then again, the 500 limit broke all my hopes ;)</p>
<p>There were other modules which I worked on really hard, such as RThx module or Random Buzz, DM Control. Some of them worked, some of them were turned off after a few days (yes, you guessed it &#8211; Random Buzz, that really made some noize ;)</p>
<p>So, what did I achieve? Me &#8211; nothing. Michael did though, in 6 months he went up to 4500+ followers, while following a little more than 200 people himself, has been featured in ~ 250 lists, sent ~ 55,000 tweets and retweets all based on four keywords (or hashtags) &#8211; design, web design, wordpress and jquery. Built 4 lists based on these keywords, 500 members in each. Total list followers is a little less than 150 (which is quite good actually). </p>
<p>For comparison take a look at my account &#8211; (<a href="http://twitter.com/kovshenin">@kovshenin</a>), in a little bit more than a year I got ~ 1700 followers. It took Michael a couple of months to reach that. The chart below illustrates the followers growth during the last three months. Human (me &#8211; blue) vs Robot (Michael &#8211; red). Yeah, I added a new module in mid December ;)</p>
<p><a href="http://s.kovshenin.com/core/wp-content/uploads/2010/02/twibots_chart.png"><img src="http://s.kovshenin.com/core/wp-content/uploads/2010/02/twibots_chart.png" alt="Twibots Chart: Robot vs. Human" title="Twibots Chart: Robot vs. Human" width="692" height="240" class="aligncenter size-full wp-image-2058" /></a></p>
<p>I manually logged into Michael&#8217;s account recently to check out how he&#8217;s doing, and I was kind of surprised to see that people really are talking to the guy, thanking him for retweets, asking him for further reads, wishing him a great day and handing over some coffee. Michael doesn&#8217;t usually reply to these and he&#8217;s a little bit shy sometimes, besides, he never drinks coffee ;)</p>
<p>A few days ago I decided to give Michael a rest, so tuned his backend to a new Twitter account with a few different settings, especially in timing. I&#8217;ll be switching to other keywords and feeds in the next few weeks. So let&#8217;s see if he&#8217;s as good as Michael, or perhaps better? ;)</p>
<p>I&#8217;m not sure what I&#8217;ll do with Michael&#8217;s account. TweetValue said it&#8217;s worth over $5k &#8230; anyone? ;) Or should I just throw it away.. Or run a contest for his password? &#8230;</p>


<p>Related posts:<ol><li><a href='http://kovshenin.com/archives/twitter-robot-in-php-twibots-draft/' rel='bookmark' title='Permanent Link: Twitter Robot in PHP: Twibots Draft'>Twitter Robot in PHP: Twibots Draft</a></li>
<li><a href='http://kovshenin.com/archives/compatibility-twitter-tools-twitter-friendly-links/' rel='bookmark' title='Permanent Link: Compatibility: Twitter Tools &#038; Twitter Friendly Links'>Compatibility: Twitter Tools &#038; Twitter Friendly Links</a></li>
<li><a href='http://kovshenin.com/archives/the-twitter-api-v2-transition/' rel='bookmark' title='Permanent Link: The Twitter API v2 Transition'>The Twitter API v2 Transition</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://kovshenin.com/archives/robots-are-doing-better-than-humans-on-twitter/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Short Note About HTML Anchor Bookmarks</title>
		<link>http://kovshenin.com/archives/short-note-about-html-anchor-bookmarks/</link>
		<comments>http://kovshenin.com/archives/short-note-about-html-anchor-bookmarks/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 11:17:51 +0000</pubDate>
		<dc:creator>kovshenin</dc:creator>
				<category><![CDATA[web design]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://kovshenin.com/?p=2042</guid>
		<description><![CDATA[This is totally rediculous, but it&#8217;s a fact. Some version of Microsoft Internet Explorer do not handle empty anchors at all! Unlike Firefox, Safari and the rest, IE simply doesn&#8217;t see them, so anchors lead to nowhere (top of the page). This is just a note for you (and me) to keep your anchors filled [...]


Related posts:<ol><li><a href='http://kovshenin.com/archives/mysql-charset/' rel='bookmark' title='Permanent Link: MySQL Charset Issues'>MySQL Charset Issues</a></li>
<li><a href='http://kovshenin.com/archives/powered-by-delicious-web-design-coding-html5/' rel='bookmark' title='Permanent Link: Powered by Delicious: Web Design, Coding &#038; HTML5'>Powered by Delicious: Web Design, Coding &#038; HTML5</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>This is totally rediculous, but it&#8217;s a fact. Some version of Microsoft Internet Explorer do not handle empty anchors at all! Unlike Firefox, Safari and the rest, IE simply doesn&#8217;t see them, so anchors lead to nowhere (top of the page). This is just a note for you (and me) to keep your anchors filled with something, at least a whitespace character ;)</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>a name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;bookmark&quot;</span><span style="color: #339933;">&gt;&lt;/</span>a<span style="color: #339933;">&gt;</span>Bookmark Text <span style="color: #339933;">&lt;!--</span> Bad<span style="color: #339933;">!</span> <span style="color: #339933;">--&gt;</span>
<span style="color: #339933;">&lt;</span>a name<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;bookmark&quot;</span><span style="color: #339933;">&gt;</span>Bookmark Text<span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span> <span style="color: #339933;">&lt;!--</span> Good<span style="color: #339933;">!</span> <span style="color: #339933;">--&gt;</span></pre></td></tr></table></div>

<p>Keep that in mind ;) Cheers!</p>


<p>Related posts:<ol><li><a href='http://kovshenin.com/archives/mysql-charset/' rel='bookmark' title='Permanent Link: MySQL Charset Issues'>MySQL Charset Issues</a></li>
<li><a href='http://kovshenin.com/archives/powered-by-delicious-web-design-coding-html5/' rel='bookmark' title='Permanent Link: Powered by Delicious: Web Design, Coding &#038; HTML5'>Powered by Delicious: Web Design, Coding &#038; HTML5</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://kovshenin.com/archives/short-note-about-html-anchor-bookmarks/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Facebook-style Lightbox with jQuery and Facebox</title>
		<link>http://kovshenin.com/archives/facebook-style-lightbox-with-jquery-and-facebox/</link>
		<comments>http://kovshenin.com/archives/facebook-style-lightbox-with-jquery-and-facebox/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 20:19:36 +0000</pubDate>
		<dc:creator>kovshenin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[facebox]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://kovshenin.com/?p=2034</guid>
		<description><![CDATA[I recently came across an awesome plugin for jQuery which is called Facebox. Facebox produces a clean lightbox that can be a container for popup images, text and basically any HTML layout as well as AJAX powered content.
The problem with Facebox is the lightbox placement. The dialog itself is placed in the center of the [...]


Related posts:<ol><li><a href='http://kovshenin.com/archives/jquery-lightbox-plugin-in-wordpress/' rel='bookmark' title='Permanent Link: Using the jQuery Lightbox Plugin in WordPress'>Using the jQuery Lightbox Plugin in WordPress</a></li>
<li><a href='http://kovshenin.com/archives/extending-the-jquery-lightbox-plugin-custom-link/' rel='bookmark' title='Permanent Link: Extending the jQuery Lightbox Plugin: Custom Link'>Extending the jQuery Lightbox Plugin: Custom Link</a></li>
<li><a href='http://kovshenin.com/archives/inspired-javascript-jquery-love/' rel='bookmark' title='Permanent Link: Inspired: Javascript &#038; jQuery Love'>Inspired: Javascript &#038; jQuery Love</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I recently came across an awesome plugin for jQuery which is called <a href="http://famspam.com/facebox">Facebox</a>. Facebox produces a clean lightbox that can be a container for popup images, text and basically any HTML layout as well as AJAX powered content.</p>
<div class="kimage"><h2>Facebox: Creating Facebook-like Dialogs</h2><img src="http://s.kovshenin.com/core/wp-content/uploads/2009/12/jquery.png" alt="Facebox: Creating Facebook-like Dialogs" /></div><div class="clearfloat"></div>
<p>The problem with Facebox is the lightbox placement. The dialog itself is placed in the center of the page horizontally with a preset margin from the top, which looks good, but what I did notice is that the box containing the loading icon is being placed somewhere to the left part of the page. Well at least on Firefox 3.5.7.</p>
<p>I couldn&#8217;t help but noticing that <a href="http://famspam.com/">FamSpam</a> and <a href="http://stafftool.com/">StaffTool</a> are using a different set of functions and styles for the lightbox placement and copying them into my code solved the issue. </p>
<p>The two functions are called getPageScroll() and getPageHeight() and are marked as quirksmode.com inside the code. The #facebox style in the CSS lacked a width: 100% which seems to have solved the issue for now. There&#8217;s also a certain overlay in the original version which includes an interesting IE6 hack:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> expression<span style="color: #00AA00;">&#40;</span>document<span style="color: #6666ff;">.body</span><span style="color: #6666ff;">.scrollHeight</span> <span style="color: #00AA00;">&gt;</span> document<span style="color: #6666ff;">.body</span><span style="color: #6666ff;">.offsetHeight</span> ?
	document<span style="color: #6666ff;">.body</span><span style="color: #6666ff;">.scrollHeight</span> <span style="color: #00AA00;">:</span> document<span style="color: #6666ff;">.body</span><span style="color: #6666ff;">.offsetHeight</span> <span style="color: #00AA00;">+</span> <span style="color: #ff0000;">'px'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span></pre></td></tr></table></div>

<p>The versions at Stafftool and FamSpam however don&#8217;t mention any overlays in there code. Pretty messy, huh? Well, other than that, the plugin is very lightweight and cross-browser, works well in IE and closes the popup when pressing Esc, which unfortunately has to be hand-coded in other versions of the Facebook-style dialog boxes.</p>
<p>Grab the code at GitHub and enjoy: <a href="http://github.com/defunkt/facebox">Facebox for jQuery</a>.</p>


<p>Related posts:<ol><li><a href='http://kovshenin.com/archives/jquery-lightbox-plugin-in-wordpress/' rel='bookmark' title='Permanent Link: Using the jQuery Lightbox Plugin in WordPress'>Using the jQuery Lightbox Plugin in WordPress</a></li>
<li><a href='http://kovshenin.com/archives/extending-the-jquery-lightbox-plugin-custom-link/' rel='bookmark' title='Permanent Link: Extending the jQuery Lightbox Plugin: Custom Link'>Extending the jQuery Lightbox Plugin: Custom Link</a></li>
<li><a href='http://kovshenin.com/archives/inspired-javascript-jquery-love/' rel='bookmark' title='Permanent Link: Inspired: Javascript &#038; jQuery Love'>Inspired: Javascript &#038; jQuery Love</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://kovshenin.com/archives/facebook-style-lightbox-with-jquery-and-facebox/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jQuery Cycle: Pager and pagerAnchorBuilder</title>
		<link>http://kovshenin.com/archives/jquery-cycle-pager-and-pageranchorbuilder/</link>
		<comments>http://kovshenin.com/archives/jquery-cycle-pager-and-pageranchorbuilder/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 15:12:26 +0000</pubDate>
		<dc:creator>kovshenin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://kovshenin.com/?p=2024</guid>
		<description><![CDATA[One very awesome and useful plugin for jQuery is jQuery Cycle, which pretty much works out of the box, but browsing through the second part of the Intermediate Demos we&#8217;ve seen a click transition called Pager, which is somewhat tricky.
Pager is nothing but a few links next to your cycling block with page numbers, which [...]


Related posts:<ol><li><a href='http://kovshenin.com/archives/the-web-development-cycle-explained/' rel='bookmark' title='Permanent Link: The Web Development Cycle Explained'>The Web Development Cycle Explained</a></li>
<li><a href='http://kovshenin.com/archives/jquery-in-wordpress-wp_enqueue_script/' rel='bookmark' title='Permanent Link: jQuery in WordPress: wp_enqueue_script'>jQuery in WordPress: wp_enqueue_script</a></li>
<li><a href='http://kovshenin.com/archives/extending-the-jquery-lightbox-plugin-custom-link/' rel='bookmark' title='Permanent Link: Extending the jQuery Lightbox Plugin: Custom Link'>Extending the jQuery Lightbox Plugin: Custom Link</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>One very awesome and useful plugin for jQuery is <a href="http://malsup.com/jquery/cycle/">jQuery Cycle</a>, which pretty much works out of the box, but browsing through the second part of the <a href="http://malsup.com/jquery/cycle/int2.html">Intermediate Demos</a> we&#8217;ve seen a click transition called Pager, which is somewhat tricky.</p>
<div class="kimage"><h2>Neat Transitions with the jQuery Cycle Plugin</h2><img src="http://s.kovshenin.com/core/wp-content/uploads/2009/12/jquery.png" alt="Neat Transitions with the jQuery Cycle Plugin" /></div><div class="clearfloat"></div>
<p>Pager is nothing but a few links next to your cycling block with page numbers, which switch the cycle upon click. It&#8217;s very useful when you have to create, say a list of services a company provides, with sweet lightboxes (don&#8217;t confuse with the Lightbox plugin), perhaps with some images, cycling through their descriptions, yet we&#8217;d like our visitors to be able to switch through the services manually, without having to wait. This is exactly what the Pager transition does, but hey, who the hell would want page numbers instead of their services names?</p>
<p>This is where pageAnchorBuilder comes in, and it&#8217;s not quite obvious what has to be done to make this work. According to the jQuery Cycle documentation it&#8217;s:</p>
<blockquote><p>
pageAnchorBuilder &#8211; callback function for building anchor links: function(index, DOMelement)
</p></blockquote>
<p>So here&#8217;s a demonstration of how this would work. Let&#8217;s setup a quick cycle, with a few options. Perhaps you&#8217;ll need more than I listed below ;)</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#fade'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">before</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;div id=&quot;nav&quot; class=&quot;nav&quot;&gt;&lt;/div&gt;'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">cycle</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
	pager<span style="color: #339933;">:</span> <span style="color: #3366CC;">'#nav'</span><span style="color: #339933;">,</span>
	pagerAnchorBuilder<span style="color: #339933;">:</span> paginate
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>So paginate is a callback function which takes two arguments, the index and the DOM element. Using the index will work just fine. Let&#8217;s see how this works with text:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> paginate<span style="color: #009900;">&#40;</span>ind<span style="color: #339933;">,</span> el<span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>ind <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #3366CC;">'&lt;span&gt;Service One&lt;/span&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>ind <span style="color: #339933;">==</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #3366CC;">'&lt;span&gt;Service Two&lt;/span&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #006600; font-style: italic;font-style:normal;">// and so on</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>I think that&#8217;s pretty straightforward once you understand how it works. Let&#8217;s try some images:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> paginate<span style="color: #009900;">&#40;</span>ind<span style="color: #339933;">,</span> el<span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #3366CC;">'&lt;img src=&quot;http://whatever.com/services/service'</span> <span style="color: #339933;">+</span> ind <span style="color: #339933;">+</span> <span style="color: #3366CC;">'.jpg&quot; /&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>So name your images service0.jpg, service1.jpg, etc. And my favourite, CSS classes:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> paginate<span style="color: #009900;">&#40;</span>ind<span style="color: #339933;">,</span> el<span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #3366CC;">'&lt;div class=&quot;service'</span> <span style="color: #339933;">+</span> ind <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;&gt;&lt;/div&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Then just add a few .service0, .service1, etc. classes in your stylesheet, voila! Hope that helps, and don&#8217;t forget about the other useful options. Cheers!</p>


<p>Related posts:<ol><li><a href='http://kovshenin.com/archives/the-web-development-cycle-explained/' rel='bookmark' title='Permanent Link: The Web Development Cycle Explained'>The Web Development Cycle Explained</a></li>
<li><a href='http://kovshenin.com/archives/jquery-in-wordpress-wp_enqueue_script/' rel='bookmark' title='Permanent Link: jQuery in WordPress: wp_enqueue_script'>jQuery in WordPress: wp_enqueue_script</a></li>
<li><a href='http://kovshenin.com/archives/extending-the-jquery-lightbox-plugin-custom-link/' rel='bookmark' title='Permanent Link: Extending the jQuery Lightbox Plugin: Custom Link'>Extending the jQuery Lightbox Plugin: Custom Link</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://kovshenin.com/archives/jquery-cycle-pager-and-pageranchorbuilder/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Behold! Technical Support for WordPress</title>
		<link>http://kovshenin.com/archives/behold-technical-support-for-wordpress/</link>
		<comments>http://kovshenin.com/archives/behold-technical-support-for-wordpress/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 13:31:02 +0000</pubDate>
		<dc:creator>kovshenin</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[widgets]]></category>

		<guid isPermaLink="false">http://kovshenin.com/?p=2009</guid>
		<description><![CDATA[I got a response from the WordPress Plugin Directory today. Positive! They approved the new plugin&#8217;s home so I officialy let the plugin go public this morning. Of course I set up a page on my blog with the complete description, screenshots, feedback section (feature requests are welcome). Check it out &#8211; Technical Support for [...]


Related posts:<ol><li><a href='http://kovshenin.com/archives/plugin-development-technical-support-for-wordpress/' rel='bookmark' title='Permanent Link: Plugin Development: Technical Support for WordPress'>Plugin Development: Technical Support for WordPress</a></li>
<li><a href='http://kovshenin.com/archives/video-twitter-friendly-links-for-wordpress/' rel='bookmark' title='Permanent Link: Video: Twitter Friendly Links for WordPress'>Video: Twitter Friendly Links for WordPress</a></li>
<li><a href='http://kovshenin.com/archives/thickbox-and-jquery-in-wordpress-2-8/' rel='bookmark' title='Permanent Link: Thickbox and jQuery in WordPress 2.8'>Thickbox and jQuery in WordPress 2.8</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I got a response from the WordPress Plugin Directory today. Positive! They approved the new plugin&#8217;s home so I officialy let the plugin go public this morning. Of course I set up a page on my blog with the complete description, screenshots, feedback section (feature requests are welcome). Check it out &#8211; <a href="http://kovshenin.com/wordpress/plugins/technical-support/">Technical Support for WordPress</a>!</p>
<p><a href="http://kovshenin.com/archives/behold-technical-support-for-wordpress/"><em>Click here to view the embedded video.</em></a></p>
<p>Thank you for your support and voting at WordPress.org ;)</p>


<p>Related posts:<ol><li><a href='http://kovshenin.com/archives/plugin-development-technical-support-for-wordpress/' rel='bookmark' title='Permanent Link: Plugin Development: Technical Support for WordPress'>Plugin Development: Technical Support for WordPress</a></li>
<li><a href='http://kovshenin.com/archives/video-twitter-friendly-links-for-wordpress/' rel='bookmark' title='Permanent Link: Video: Twitter Friendly Links for WordPress'>Video: Twitter Friendly Links for WordPress</a></li>
<li><a href='http://kovshenin.com/archives/thickbox-and-jquery-in-wordpress-2-8/' rel='bookmark' title='Permanent Link: Thickbox and jQuery in WordPress 2.8'>Thickbox and jQuery in WordPress 2.8</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://kovshenin.com/archives/behold-technical-support-for-wordpress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Plugin Development: Technical Support for WordPress</title>
		<link>http://kovshenin.com/archives/plugin-development-technical-support-for-wordpress/</link>
		<comments>http://kovshenin.com/archives/plugin-development-technical-support-for-wordpress/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 16:24:15 +0000</pubDate>
		<dc:creator>kovshenin</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://kovshenin.com/?p=1995</guid>
		<description><![CDATA[So, you&#8217;re a freelancer and you make WordPress powered websites for your clients, cool. Now how many times have you experienced them calling, emailing, texting, tweeting you asking for a core upgrade, plugin upgrade, theme fix or whatever? Well I&#8217;ve been experiencing that quite a lot, and that&#8217;s a reason to charge an extra monthly [...]


Related posts:<ol><li><a href='http://kovshenin.com/archives/behold-technical-support-for-wordpress/' rel='bookmark' title='Permanent Link: Behold! Technical Support for WordPress'>Behold! Technical Support for WordPress</a></li>
<li><a href='http://kovshenin.com/archives/wordpress-extending-the-contact-form-7-plugin/' rel='bookmark' title='Permanent Link: WordPress: Extending the Contact Form 7 Plugin'>WordPress: Extending the Contact Form 7 Plugin</a></li>
<li><a href='http://kovshenin.com/archives/wordpress-plugin-foller-me-widget/' rel='bookmark' title='Permanent Link: New WordPress Plugin: The Foller.me Widget'>New WordPress Plugin: The Foller.me Widget</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>So, you&#8217;re a freelancer and you make WordPress powered websites for your clients, cool. Now how many times have you experienced them calling, emailing, texting, tweeting you asking for a core upgrade, plugin upgrade, theme fix or whatever? Well I&#8217;ve been experiencing that quite a lot, and that&#8217;s a reason to charge an extra monthly fee for support. And with this plugin &#8230;</p>
<div class="kimage"><h2>Provide Support to Your WordPress Clients</h2><img src="http://s.kovshenin.com/core/wp-content/uploads/2009/12/wordpress.png" alt="Provide Support to Your WordPress Clients" /></div><div class="clearfloat"></div>
<p>Yeah, with this plugin you&#8217;ll get rid of the annoying phonecalls and tweets. Technical Support for WordPress (formely called Bug Reporting for WordPress) adds a dashboard widget to the WordPress admin panel, where your clients could file a support ticket in only a few clicks! Pick a topic, write a title, describe the issue, send. Voila! You will receive the filed report by e-mail, well formatted and with all the necessary details. You can then take action, and finally reply to the e-mail when everything&#8217;s done.</p>
<p>This is one side of it. The second side is that the plugin is totally customizable, the subject and message format are powered by short tags, the topic list is customizable, and of course the company (provider) name and email address. This means that you can include a certain tag, keyword or whatever to the subject line, say &#8220;#CompanyName&#8221; then filter that in Gmail or whatever, and make different clients go to different folders. There, no more junk in your Inbox!</p>
<p>Okay there&#8217;s a second side, this means that there should be a third. What about branding? The plugin permits you to have a provider name, provider URL and a provider logo! Which will be displayed in your clients&#8217; dashboards and will link directly to your website. That way, your clients will keep you in mind, 24/7! Ok, kidding, but it&#8217;s really good for branding..</p>
<p>Now, I know you already want this and can&#8217;t wait to download it, but hey, the request hasn&#8217;t been approved by the WordPress.org Plugin Directory yet, so as soon as it does, we&#8217;ll go live. Meanwhile take a look at these screenshots:</p>

<div class="ngg-galleryoverview" id="ngg-gallery-20-1995">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-209" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://kovshenin.com/core/wp-content/gallery/bug-reporting-post/screenshot-1.jpg" title=" " rel="lightbox[set_20]" >
								<img title="screenshot-1" alt="screenshot-1" src="http://kovshenin.com/core/wp-content/gallery/bug-reporting-post/thumbs/thumbs_screenshot-1.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-210" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://kovshenin.com/core/wp-content/gallery/bug-reporting-post/screenshot-2.jpg" title=" " rel="lightbox[set_20]" >
								<img title="screenshot-2" alt="screenshot-2" src="http://kovshenin.com/core/wp-content/gallery/bug-reporting-post/thumbs/thumbs_screenshot-2.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class="ngg-clear">&nbsp;</div> 	
</div>


<p>Looking forward to your comments, feature requests, etc ;)</p>


<p>Related posts:<ol><li><a href='http://kovshenin.com/archives/behold-technical-support-for-wordpress/' rel='bookmark' title='Permanent Link: Behold! Technical Support for WordPress'>Behold! Technical Support for WordPress</a></li>
<li><a href='http://kovshenin.com/archives/wordpress-extending-the-contact-form-7-plugin/' rel='bookmark' title='Permanent Link: WordPress: Extending the Contact Form 7 Plugin'>WordPress: Extending the Contact Form 7 Plugin</a></li>
<li><a href='http://kovshenin.com/archives/wordpress-plugin-foller-me-widget/' rel='bookmark' title='Permanent Link: New WordPress Plugin: The Foller.me Widget'>New WordPress Plugin: The Foller.me Widget</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://kovshenin.com/archives/plugin-development-technical-support-for-wordpress/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>WordPress: Extending the Contact Form 7 Plugin</title>
		<link>http://kovshenin.com/archives/wordpress-extending-the-contact-form-7-plugin/</link>
		<comments>http://kovshenin.com/archives/wordpress-extending-the-contact-form-7-plugin/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 08:28:50 +0000</pubDate>
		<dc:creator>kovshenin</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://kovshenin.com/?p=1985</guid>
		<description><![CDATA[There are tonnes of good plugins for displaying contact forms on your WordPress blog, even a simple comment form without displaying the comments would do just fine, but let&#8217;s speak about one called Contact Form 7 written by Takayuki Miyoshi. I don&#8217;t think there&#8217;s a reason behind the number 7, perhaps it meant the year [...]


Related posts:<ol><li><a href='http://kovshenin.com/archives/extending-the-jquery-lightbox-plugin-custom-link/' rel='bookmark' title='Permanent Link: Extending the jQuery Lightbox Plugin: Custom Link'>Extending the jQuery Lightbox Plugin: Custom Link</a></li>
<li><a href='http://kovshenin.com/archives/wordpress-iphone-plugin-wptouch/' rel='bookmark' title='Permanent Link: Give WordPress the iPhone Look: wpTouch Plugin'>Give WordPress the iPhone Look: wpTouch Plugin</a></li>
<li><a href='http://kovshenin.com/archives/plugin-development-technical-support-for-wordpress/' rel='bookmark' title='Permanent Link: Plugin Development: Technical Support for WordPress'>Plugin Development: Technical Support for WordPress</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>There are tonnes of good plugins for displaying contact forms on your WordPress blog, even a simple comment form without displaying the comments would do just fine, but let&#8217;s speak about one called <a href="http://wordpress.org/extend/plugins/contact-form-7/">Contact Form 7</a> written by Takayuki Miyoshi. I don&#8217;t think there&#8217;s a reason behind the number 7, perhaps it meant the year 2007, when Takayuki published the first version of his plugin.</p>
<div class="kimage"><h2>Adding the Source URL Module to Contact Form 7</h2><img src="http://s.kovshenin.com/core/wp-content/uploads/2009/12/wordpress.png" alt="Adding the Source URL Module to Contact Form 7" /></div><div class="clearfloat"></div>
<p>First of all I&#8217;d like to note that he plugin is very well written, it&#8217;s very, and I mean VERY flexible, and only due to its flexibility we&#8217;re allowed to extend its functionaltiy. Of course Takayuki&#8217;s probably missed some filters and hooks that other plugin and theme developers would love to see, but the modules directory is good enough, despiting the fact that it&#8217;ll probably be erased and rewritten after an ongoing plugin update.</p>
<p>Now, suppose you have designed a placed a contact form in your sidebar as a widget, using the Contact Form 7 shortcode. It&#8217;s got all the necessary fields, AJAX powered form, Akismet spam check &#038; so on. But we&#8217;re missing something. Contact Form 7 is located in your sidebar, which means that you&#8217;re displaying it on most (if not all) of your posts and pages. Now when somebody writes a message via your contact form, you&#8217;re left guessing which page the visitor was viewing while typing.</p>
<p>This may be crucial in e-commerce situations, say you&#8217;re selling books from your blog, and a visitor contacts you to ask &#8220;who&#8217;s the publisher of this book?&#8221; or &#8220;how many pages does this book have?&#8221;. So you received an e-mail and you have no idea which book is being mentioned. You&#8217;re lucky if you only work with one publisher, or all your books are 100 pages long ;)</p>
<p>Anyways, let&#8217;s create a new file in the modules folder of the plugin, and call it sourceurl.php:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">wpcf7_add_shortcode<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sourceurl'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wpcf7_sourceurl_shortcode_handler'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> wpcf7_sourceurl_shortcode_handler<span style="color: #009900;">&#40;</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$html</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'&lt;input type=&quot;hidden&quot; name=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; 
		value=&quot;http://'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;SERVER_NAME&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;REQUEST_URI&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; /&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$html</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>This is very easy to understand once you&#8217;ve read (and understood) what&#8217;s written in the other modules. Try to take a look at text.php for a while, it includes the code for both text and e-mail fields. I copied some of the code for the text fields, simplified it a little and removed the validation process (why validate our own URL?), and voila, 12 lines of code ;)</p>
<p>Save the file and go to your Contact Form 7 settings in your WordPress admin panel. Select the contact form you&#8217;d like to add source URL to and in the part where it says &#8220;Form&#8221; add the new short code (sourceurl) and give it a name (thesource):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#91;</span>sourceurl thesource<span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<p>Now you can use &#8220;thesource&#8221; in your Mail part of the contact form settings, say:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">Source URL: &lt;a href=&quot;[thesource]&quot;&gt;[thesource]&lt;/a&gt;&lt;br /&gt;</pre></td></tr></table></div>

<p>Then look for the new Source URL in your e-mail ;) So if you&#8217;ve used more than one contact form on several different pages, just to distinguish them in your emails, you can merge them into one now. You can use a similar way to add other interesting data to your e-mails such as, say the user&#8217;s IP address for instance, browser capabilities, etc.</p>


<p>Related posts:<ol><li><a href='http://kovshenin.com/archives/extending-the-jquery-lightbox-plugin-custom-link/' rel='bookmark' title='Permanent Link: Extending the jQuery Lightbox Plugin: Custom Link'>Extending the jQuery Lightbox Plugin: Custom Link</a></li>
<li><a href='http://kovshenin.com/archives/wordpress-iphone-plugin-wptouch/' rel='bookmark' title='Permanent Link: Give WordPress the iPhone Look: wpTouch Plugin'>Give WordPress the iPhone Look: wpTouch Plugin</a></li>
<li><a href='http://kovshenin.com/archives/plugin-development-technical-support-for-wordpress/' rel='bookmark' title='Permanent Link: Plugin Development: Technical Support for WordPress'>Plugin Development: Technical Support for WordPress</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://kovshenin.com/archives/wordpress-extending-the-contact-form-7-plugin/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>From MySQL GUI Tools to MySQL Workbench</title>
		<link>http://kovshenin.com/archives/from-mysql-gui-tools-to-mysql-workbench/</link>
		<comments>http://kovshenin.com/archives/from-mysql-gui-tools-to-mysql-workbench/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 13:07:00 +0000</pubDate>
		<dc:creator>kovshenin</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[phpmyadmin]]></category>

		<guid isPermaLink="false">http://kovshenin.com/?p=1975</guid>
		<description><![CDATA[I bet that some of you still work with phpMyAdmin and there are plenty of good reasons for that. Perhaps the main reason would be its mobility. Being run by a web server, phpMyAdmin is accessible from anywhere, without installing any extra software, even on the mobiles phones. And the second reason is of course [...]


Related posts:<ol><li><a href='http://kovshenin.com/archives/mysql-charset/' rel='bookmark' title='Permanent Link: MySQL Charset Issues'>MySQL Charset Issues</a></li>
<li><a href='http://kovshenin.com/archives/follerme-mysql-tweaking-optimization/' rel='bookmark' title='Permanent Link: Foller.me: MySQL Tweaking &#038; Optimization'>Foller.me: MySQL Tweaking &#038; Optimization</a></li>
<li><a href='http://kovshenin.com/archives/backing-up-mysql-on-amazon-ec2-to-s3/' rel='bookmark' title='Permanent Link: Cloud Tips: Backing Up MySQL on Amazon EC2 to S3'>Cloud Tips: Backing Up MySQL on Amazon EC2 to S3</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I bet that some of you still work with phpMyAdmin and there are plenty of good reasons for that. Perhaps the main reason would be its mobility. Being run by a web server, phpMyAdmin is accessible from anywhere, without installing any extra software, even on the mobiles phones. And the second reason is of course security &#8211; most web hosting providers restrict external access to MySQL servers. But there&#8217;s absolutely no reason to get used to phpMyAdmin, as there&#8217;s software far better than that.</p>
<div class="kimage"><h2>Drop that phpMyAdmin Stuff, it's for Kids! ;)</h2><img src="http://s.kovshenin.com/core/wp-content/uploads/2010/01/mysql.png" alt="Drop that phpMyAdmin Stuff, it's for Kids! ;)" /></div><div class="clearfloat"></div>
<p>Most of you probably used the MySQL GUI Tools bundle, which is very similar to what phpMyAdmin is &#8211; database tweaking, user management, structure design, query builder, etc. Browsing up to the usual MySQL GUI Tools place a few days ago, I encountered the following message:</p>
<blockquote><p>
Users of the MySQL GUI Tools Bundle should plan to upgrade to MySQL Workbench. MySQL Workbench provides DBAs and developers an integrated tools environment for:</p>
<ul>
<li>Database Design &#038; Modeling</li>
<li>SQL Development (replacing MySQL Query Browser)</li>
<li>Database Administration (replacing MySQL Administrator)</li>
</ul>
</blockquote>
<p>So we&#8217;re now forced to upgrade to <a href="http://wb.mysql.com/">MySQL Workbench</a>. Honestly, for a moment there I though that it&#8217;s just a naming issue, and that MySQL GUI Tools has gone so far, that the guys from Sun Microsystems decided to ship the bundle as a single product &#8211; MySQL Workbench, but I was wrong. Browsing the MySQL Workbench website I noticed the archive, which dates back to Novermber 8th, 2007! So it seems that they&#8217;ve just merged the two pieces.</p>
<p>MySQL Workbench is far more professional then the GUI Tools, but may be complicated at first sight. And the most funny thing about it is that the MySQL GUI Tools leads to a page to download the 5.1 community version of MySQL Workbench, which unfortunatelly does not have all the promised features (SQL development, data modelling, server administration), and there&#8217;s no home screen at all, which is shown on each and every screenshot related to the move!</p>
<p>I thought something was wrong, so I went back to the Workbench homepage, browsed the blogs, forums and downloads. It turned out that 5.2 is the one we were supposed to move to, but it&#8217;s still in beta, thus hidden in the downloads. After installing MySQL Workbench 5.2 I finally managed to get to the promising home screen, a little bit fancier than 5.1, and very similar to what we used to see in MySQL GUI Tools, plus the improvements.</p>
<p>Here are a few screenshots:</p>

<div class="ngg-galleryoverview" id="ngg-gallery-19-1975">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-204" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://kovshenin.com/core/wp-content/gallery/mysql_workbench/01.png" title="The new Home screen" rel="lightbox[set_19]" >
								<img title="MySQL Workbench" alt="MySQL Workbench" src="http://kovshenin.com/core/wp-content/gallery/mysql_workbench/thumbs/thumbs_01.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-205" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://kovshenin.com/core/wp-content/gallery/mysql_workbench/02.png" title="MySQL server setup, configuration and management" rel="lightbox[set_19]" >
								<img title="MySQL Workbench" alt="MySQL Workbench" src="http://kovshenin.com/core/wp-content/gallery/mysql_workbench/thumbs/thumbs_02.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-206" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://kovshenin.com/core/wp-content/gallery/mysql_workbench/03.png" title="The new Query Browser" rel="lightbox[set_19]" >
								<img title="MySQL Workbench" alt="MySQL Workbench" src="http://kovshenin.com/core/wp-content/gallery/mysql_workbench/thumbs/thumbs_03.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-207" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://kovshenin.com/core/wp-content/gallery/mysql_workbench/04.png" title="SQL Results" rel="lightbox[set_19]" >
								<img title="MySQL Workbench" alt="MySQL Workbench" src="http://kovshenin.com/core/wp-content/gallery/mysql_workbench/thumbs/thumbs_04.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-208" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://kovshenin.com/core/wp-content/gallery/mysql_workbench/05.png" title="Diagrams and models management" rel="lightbox[set_19]" >
								<img title="MySQL Workbench" alt="MySQL Workbench" src="http://kovshenin.com/core/wp-content/gallery/mysql_workbench/thumbs/thumbs_05.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class="ngg-clear">&nbsp;</div> 	
</div>


<p>So I hope to see the 5.2 release very very soon, and, oh come on, drop the phpMyAdmin stuff, that&#8217;s for kids ;)</p>


<p>Related posts:<ol><li><a href='http://kovshenin.com/archives/mysql-charset/' rel='bookmark' title='Permanent Link: MySQL Charset Issues'>MySQL Charset Issues</a></li>
<li><a href='http://kovshenin.com/archives/follerme-mysql-tweaking-optimization/' rel='bookmark' title='Permanent Link: Foller.me: MySQL Tweaking &#038; Optimization'>Foller.me: MySQL Tweaking &#038; Optimization</a></li>
<li><a href='http://kovshenin.com/archives/backing-up-mysql-on-amazon-ec2-to-s3/' rel='bookmark' title='Permanent Link: Cloud Tips: Backing Up MySQL on Amazon EC2 to S3'>Cloud Tips: Backing Up MySQL on Amazon EC2 to S3</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://kovshenin.com/archives/from-mysql-gui-tools-to-mysql-workbench/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk (enhanced)
Database Caching using disk
Content Delivery Network via Amazon Web Services: CloudFront: s.kovshenin.com

Served from: kovshenin.com @ 2010-03-15 09:04:47 -->
