<?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>Fri, 05 Mar 2010 15:38:46 +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>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://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/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/loading-jquery-from-a-cdn-in-wordpress/' rel='bookmark' title='Permanent Link: Loading jQuery from a CDN in WordPress'>Loading jQuery from a CDN 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>
</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://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/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/loading-jquery-from-a-cdn-in-wordpress/' rel='bookmark' title='Permanent Link: Loading jQuery from a CDN in WordPress'>Loading jQuery from a CDN 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>
</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://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>
		<item>
		<title>Twitter Robot in PHP: Twibots Draft</title>
		<link>http://kovshenin.com/archives/twitter-robot-in-php-twibots-draft/</link>
		<comments>http://kovshenin.com/archives/twitter-robot-in-php-twibots-draft/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 19:19:49 +0000</pubDate>
		<dc:creator>kovshenin</dc:creator>
				<category><![CDATA[twitter]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[robotics]]></category>
		<category><![CDATA[twibots]]></category>

		<guid isPermaLink="false">http://kovshenin.com/?p=1965</guid>
		<description><![CDATA[As I promised quite some time ago, I&#8217;m putting out a draft of the Twitter Robot I wrote. Make sure you read Create Your Own Automated Twitter Robot in PHP before going on. The current functionality is as follows:

Tweets around the clock
Tweets from RSS feeds, supporting prefix and postfix text (for adding hashtags)
Retweet via the [...]


Related posts:<ol><li><a href='http://kovshenin.com/archives/create-your-own-automated-twitter-robot-in-php/' rel='bookmark' title='Permanent Link: Create Your Own Automated Twitter Robot in PHP'>Create Your Own Automated Twitter Robot in PHP</a></li>
<li><a href='http://kovshenin.com/archives/robots-are-doing-better-than-humans-on-twitter/' rel='bookmark' title='Permanent Link: Robots Are Doing Better Than Humans on Twitter'>Robots Are Doing Better Than Humans on Twitter</a></li>
<li><a href='http://kovshenin.com/archives/a-robot-playing-ping-pong/' rel='bookmark' title='Permanent Link: A Robot Playing Ping Pong!'>A Robot Playing Ping Pong!</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>As I promised quite some time ago, I&#8217;m putting out a draft of the Twitter Robot I wrote. Make sure you read <a href="http://kovshenin.com/archives/create-your-own-automated-twitter-robot-in-php/">Create Your Own Automated Twitter Robot in PHP</a> before going on. The current functionality is as follows:</p>
<ul>
<li>Tweets around the clock</li>
<li>Tweets from RSS feeds, supporting prefix and postfix text (for adding hashtags)</li>
<li>Retweet via the Twitter Search API and build conversation lists</li>
<li>Shoot random sentences at users who mention you, thank them for retweets</li>
<li>Control your robot via your own Twitter account by sending him direct messages</li>
<li>All this is Twitter OAuth powered, no password required</li>
<li>Such robots are called <a href="http://twibots.com">Twibots</a></li>
</ul>
<div class="kimage"><h2>Create Your Own Twitter Robot in PHP</h2><img src="http://kovshenin.com/core/wp-content/uploads/2009/10/twibots2.png" alt="Create Your Own Twitter Robot in PHP" /></div><div class="clearfloat"></div>
<p>Now, before downloading the code, I have to warn you that it&#8217;s completely unorganized. The code is horrible, comments are awkward, the database being used is SQLite (just for the fun of it) and it&#8217;s very very glitchy. Be prepared for Twitter suspending your account for &#8217;strange activity&#8217; and use this at your own risk, don&#8217;t run here blaming me for that ;) I also suggest you&#8217;d contact Twitter to get your IP addresses and Twitter account white-listed before you start, especially if you plan to tweet very often (which I wouldn&#8217;t recommend). Use this at your own risk, and please keep my copyrights and preferably the OAuth application IDs.</p>
<p>Download: <a href="http://s.kovshenin.com/core/wp-content/uploads/2010/01/twibots-0.1.zip">here</a> (version 0.1)</p>
<p>Operation Instructions.. To say the truth it&#8217;s pretty tough, no web interface, not buttons, no config files. There are a bunch of files there, some of them useless. There&#8217;s the Snoopy class for reading and parsing RSS, there&#8217;s the Twitter OAuth class, and two core php files &#8211; cron.php and oauth.php. Open up cron.php, there are some comments and examples there. Make sure you get your own bit.ly API key and secret. Also make sure you get a connection with the twibots.sqlite database which has a couple of empty tables. Those will be used for tokens and dump data for unrepeated tweets.</p>
<p>Once you&#8217;re done configuring, use the command-line php in order to make it work. It goes something like this:</p>
<blockquote><p>
# php cron.php oauth register<br />
# Please browse to https://twitter.com/&#8230;<br />
# php cron.php oauth validate 123465<br />
# Authentication successful, greetings @ev ;)</p>
<p># php cron.php random<br />
# tweeting a random RSS feed &#8230;</p>
<p># php cron.php reply<br />
# sending replies&#8230;</p>
<p># php cron.php dm<br />
# reading direct messages</p>
<p># php cron.php retweet<br />
# retweeting&#8230;
</p></blockquote>
<p>You&#8217;ll have to put that in your crontab file and launch by schedule. Don&#8217;t run them too often though, as Twitter doesn&#8217;t like flooding, especially from newly created accounts. Any questions or suggestions are welcome in the comments below, but please, don&#8217;t tell me the code is horrible, I know it is, and I wouldn&#8217;t have posted it if you didn&#8217;t ask ;) Cheers!</p>


<p>Related posts:<ol><li><a href='http://kovshenin.com/archives/create-your-own-automated-twitter-robot-in-php/' rel='bookmark' title='Permanent Link: Create Your Own Automated Twitter Robot in PHP'>Create Your Own Automated Twitter Robot in PHP</a></li>
<li><a href='http://kovshenin.com/archives/robots-are-doing-better-than-humans-on-twitter/' rel='bookmark' title='Permanent Link: Robots Are Doing Better Than Humans on Twitter'>Robots Are Doing Better Than Humans on Twitter</a></li>
<li><a href='http://kovshenin.com/archives/a-robot-playing-ping-pong/' rel='bookmark' title='Permanent Link: A Robot Playing Ping Pong!'>A Robot Playing Ping Pong!</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://kovshenin.com/archives/twitter-robot-in-php-twibots-draft/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss><!-- This site's performance optimized by W3 Total Cache. Dramatically improve the speed and reliability of your blog!

Learn more about our WordPress Plugins: http://www.w3-edge.com/wordpress-plugins/

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

Served from: ip-10-160-23-131.us-west-1.compute.internal @ 2010-03-08 22:55:38 -->
