<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Robert Kern</title> <atom:link href="http://www.robertkern.com/feed" rel="self" type="application/rss+xml" /><link>http://www.robertkern.com</link> <description>PHP Web developer</description> <lastBuildDate>Mon, 13 Feb 2012 02:35:39 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <cloud
domain='www.robertkern.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' /> <item><title>Bugify API now has &#8220;write&#8221; support</title><link>http://www.robertkern.com/bugify/bugify-api-now-has-write-support.html</link> <comments>http://www.robertkern.com/bugify/bugify-api-now-has-write-support.html#comments</comments> <pubDate>Mon, 13 Feb 2012 02:35:39 +0000</pubDate> <dc:creator>Robert Kern</dc:creator> <category><![CDATA[Bugify]]></category><guid
isPermaLink="false">http://www.robertkern.com/?p=612</guid> <description><![CDATA[We have recently added &#8220;write&#8221; support to the Bugify API, which means you are now able to create tickets, update tickets, add comments, and update comments through the API. You need to be running at least version 1.1.337 to access this. For information on how to use the API, please read the API information here.]]></description> <content:encoded><![CDATA[<p>We have recently added &#8220;write&#8221; support to the Bugify API, which means you are now able to create tickets, update tickets, add comments, and update comments through the API.  You need to be running at least version 1.1.337 to access this.</p><p>For information on how to use the API, please <a
href="https://bugify.com/api">read the API information here</a>.</p> ]]></content:encoded> <wfw:commentRss>http://www.robertkern.com/bugify/bugify-api-now-has-write-support.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Bugify &#8220;Overview&#8221; page updated</title><link>http://www.robertkern.com/bugify/bugify-overview-page-updated.html</link> <comments>http://www.robertkern.com/bugify/bugify-overview-page-updated.html#comments</comments> <pubDate>Mon, 13 Feb 2012 02:34:48 +0000</pubDate> <dc:creator>Robert Kern</dc:creator> <category><![CDATA[Bugify]]></category><guid
isPermaLink="false">http://www.robertkern.com/?p=602</guid> <description><![CDATA[Something that has been bugging me for a while, is how to show some useful information on the Bugify &#8220;Overview&#8221; page. Up until now, we have been showing the history of recent changes made to tickets. But, based on our experience (and user feedback), this was not the best way to utilise the &#8220;Overview&#8221; page [...]]]></description> <content:encoded><![CDATA[<p>Something that has been bugging me for a while, is how to show some useful information on the Bugify &#8220;Overview&#8221; page. Up until now, we have been showing the history of recent changes made to tickets. But, based on our experience (and user feedback), this was not the best way to utilise the &#8220;Overview&#8221; page &#8211; so, we have been working on updating it.</p><div
id="attachment_605" class="wp-caption aligncenter" style="width: 310px"><a
href="http://www.robertkern.com/wp-content/uploads/2012/02/overview-screeny.png"><img
class="size-medium wp-image-605" title="New &quot;Overview&quot; page" src="http://www.robertkern.com/wp-content/uploads/2012/02/overview-screeny-300x131.png" alt="New &quot;Overview&quot; page" width="300" height="131" /></a><p
class="wp-caption-text">New &quot;Overview&quot; page</p></div><p>Above is the new &#8220;Overview&#8221; page (you can experience it yourself by trying out the <a
href="http://demo.bugify.com">Bugify demo</a>).  The idea was to provide a brief overview of where you&#8217;re tracking both as an organisation, and as a user.  We are pretty happy with it, and find it a vast improvement over the old &#8220;Overview&#8221; page.</p><p>To get the new &#8220;Overview&#8221; page, simply update your installation of Bugify, or if you don&#8217;t have it yet, <a
href="https://bugify.com">download Bugify from bugify.com</a></p> ]]></content:encoded> <wfw:commentRss>http://www.robertkern.com/bugify/bugify-overview-page-updated.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Detecting touch events on Google Maps using Sencha Touch</title><link>http://www.robertkern.com/sencha-touch/detecting-touch-events-on-google-maps-using-sencha-touch.html</link> <comments>http://www.robertkern.com/sencha-touch/detecting-touch-events-on-google-maps-using-sencha-touch.html#comments</comments> <pubDate>Fri, 03 Feb 2012 01:29:54 +0000</pubDate> <dc:creator>Robert Kern</dc:creator> <category><![CDATA[Sencha Touch]]></category><guid
isPermaLink="false">http://www.robertkern.com/?p=595</guid> <description><![CDATA[I recently had a situation where I needed to detect taps on a Google Maps instance in a Sencha Touch app, so I could place a marker where the user tapped. The Google Maps API (v3) doesn&#8217;t support the &#8220;touch&#8221; event, and the iPhone doesn&#8217;t support the &#8220;click&#8221; event. Below is an example of the [...]]]></description> <content:encoded><![CDATA[<p>I recently had a situation where I needed to detect taps on a Google Maps instance in a Sencha Touch app, so I could place a marker where the user tapped.  The Google Maps API (v3) doesn&#8217;t support the &#8220;touch&#8221; event, and the iPhone doesn&#8217;t support the &#8220;click&#8221; event.  Below is an example of the way I worked around the issue (this.map is an instance of Ext.Map).</p><pre>
/**
 * We need to use multiple touch events to handle a "tap" because
 * the google maps api doesn't natively support the touch event.
 */
//Prepare the overlay object so we can use its "fromContainerPixelToLatLng" method
var overlay = new google.maps.OverlayView();
overlay.draw = function() {};
overlay.setMap(this.map.map);

//Prepare the touch vars
this.touches = {
    startX  : 0,
    startY  : 0,
    currentX: 0,
    currentY: 0,
    reset   : function() {
        this.startX   = 0;
        this.startY   = 0;
        this.currentX = 0;
        this.currentY = 0;
    }
};

this.map.el.dom.addEventListener('touchstart', function(e) {
    /**
     * Only deal with single touches (not multi-touch) - when it is multi-touch,
     * the array of touches will have an item for each finger.
     */
    if (e.touches.length == 1) {
        //Remember that the user has started a touch
        this.touches.startX = this.touches.currentX = e.touches[0].clientX;
        this.touches.startY = this.touches.currentY = e.touches[0].clientY;
    }
});

this.map.el.dom.addEventListener('touchmove', function(e) {
    //Only track the current position if we know of the start position
    if (this.touches.startX > 0) {
        //Remember the current position of the finger
        this.touches.currentX = e.touches[0].clientX;
        this.touches.currentY = e.touches[0].clientY;
    }
});

this.map.el.dom.addEventListener('touchend', function(e) {
    //Only track the current position if we know of the start position
    if (this.touches.startX > 0) {
        //Make sure the user hasn't dragged their finger too much
        if (Math.abs(this.touches.currentX - this.touches.startX) < 4 &#038;&#038; Math.abs(this.touches.currentY - this.touches.startY) < 4) {
            if (e.changedTouches &#038;&#038; e.changedTouches.length > 0) {
                var touch = e.changedTouches[0];

                //Work out the coordinates on the map
                var x = (touch.pageX - this.map.el.dom.offsetParent.offsetLeft),
                    y = (touch.pageY - this.map.el.dom.offsetParent.offsetTop);

                var point  = new google.maps.Point(x, y),
                    latLng = overlay.getProjection().fromContainerPixelToLatLng(point);

                google.maps.event.trigger(this.map.map, 'tapped', {latLng: latLng});
            }
        }
    }

    //Reset the touches
    this.touches.reset();
});

//Allow click events also (for testing in desktop browser)
google.maps.event.addListener(this.map.map, 'click', function(e) {
    google.maps.event.trigger(this.map.map, 'tapped', {latLng: e.latLng});
});

google.maps.event.addListener(this.map.map, 'tapped', function(e) {
    //Add this point to the list of points
    this.routePoints.push({lat: e.latLng.lat(), lng: e.latLng.lng()});

    //Update the lines on the map
    this.displayRoute();

    //Calculate the distance etc
    this.calculateStats();

    //Save the current trip details (for page reloads)
    this.saveTrip();
});
</pre>]]></content:encoded> <wfw:commentRss>http://www.robertkern.com/sencha-touch/detecting-touch-events-on-google-maps-using-sencha-touch.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Download Bugify</title><link>http://www.robertkern.com/bugify/download-bugify.html</link> <comments>http://www.robertkern.com/bugify/download-bugify.html#comments</comments> <pubDate>Wed, 28 Dec 2011 08:06:16 +0000</pubDate> <dc:creator>Robert Kern</dc:creator> <category><![CDATA[Bugify]]></category><guid
isPermaLink="false">http://www.robertkern.com/?p=589</guid> <description><![CDATA[Bugify can now be downloaded from bugify.com and as always, the demo is available at demo.bugify.com]]></description> <content:encoded><![CDATA[<p>Bugify can now be downloaded from <a
href="https://bugify.com">bugify.com</a> and as always, the demo is available at <a
href="http://demo.bugify.com">demo.bugify.com</a></p> ]]></content:encoded> <wfw:commentRss>http://www.robertkern.com/bugify/download-bugify.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Using Google Analytics with Sencha Touch (queues while offline)</title><link>http://www.robertkern.com/sencha-touch/using-google-analytics-with-sencha-touch-queues-while-offline.html</link> <comments>http://www.robertkern.com/sencha-touch/using-google-analytics-with-sencha-touch-queues-while-offline.html#comments</comments> <pubDate>Fri, 04 Nov 2011 03:15:26 +0000</pubDate> <dc:creator>Robert Kern</dc:creator> <category><![CDATA[Sencha Touch]]></category><guid
isPermaLink="false">http://www.robertkern.com/?p=583</guid> <description><![CDATA[The Google Analytics ga.js script is designed to work with cookies, but as your Sencha Touch app is probably running through something like PhoneGap, it is being accessed using the file:// protocol, so no cookies &#8211; which means that if you simply include the normal Google Analytics script, nothing will happen. The heart of the [...]]]></description> <content:encoded><![CDATA[<p>The Google Analytics ga.js script is designed to work with cookies, but as your Sencha Touch app is probably running through something like PhoneGap, it is being accessed using the file:// protocol, so no cookies &#8211; which means that if you simply include the normal Google Analytics script, nothing will happen.</p><p>The heart of the ga.js file is loading the __utm.gif image, with a number of parameters that Google then uses to generate your stats. Most websites just track page loads, but again, with a Sencha Touch (or any javascript-based app running locally) there is generally only one page load.</p><p>The best way to track usage with Google Analytics in a javascript-based app running locally &#8211; that I have found &#8211; is to use &#8220;events&#8221;. You must trigger these events for things that you want to track (e.g., in Sencha Touch you probably want to track the &#8220;cardswitch&#8221; event on your viewport). You can find more info about events with Google Analytics at <a
href="http://code.google.com/apis/analytics/docs/tracking/eventTrackerGuide.html">http://code.google.com/apis/analytics/docs/tracking/eventTrackerGuide.html</a></p><p>It&#8217;s important to understand how &#8220;events&#8221; work with Google Analytics, so please read that page&#8230; now that you have read it, you need to know that you won&#8217;t be using the _trackEvent method. You don&#8217;t even need to include the ga.js script.</p><p>Back to how ga.js works for a moment: if you use _trackEvent on a normal website, every time you call it, another __utm.gif file will be loaded with the event parameters &#8211; that is how the event details get back to Google.</p><p>The way we can track events in a Sencha Touch app is to load the __utm.gif file with certain parameters. You can find the list of possible parameters at <a
href="http://code.google.com/apis/analytics/docs/tracking/gaTrackingTroubleshooting.html">http://code.google.com/apis/analytics/docs/tracking/gaTrackingTroubleshooting.html</a> (scroll down to the bottom of the page).</p><p>The way I have implemented event tracking in my apps is by queuing the events, then batch loading the __utm.gif file when it has either a maximum number of events in the queue, or after a set interval, or if the app was offline for a while, then when it comes back online it will process the queue. I have a simple-to-use method with 3 parameters (category, action, label &#8211; these are the main parameters for event tracking) that I call when I want to track another event.</p><p>Hopefully this brief intro into how you might implement event tracking gives you enough to create your own implementation. If you are having trouble tracking events in your Sencha Touch (or other js app) then let me know and I should be able to share some of my code with you.</p> ]]></content:encoded> <wfw:commentRss>http://www.robertkern.com/sencha-touch/using-google-analytics-with-sencha-touch-queues-while-offline.html/feed</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Bugify &#8211; PHP Issue Tracker</title><link>http://www.robertkern.com/bugify/bugify-php-issue-tracker.html</link> <comments>http://www.robertkern.com/bugify/bugify-php-issue-tracker.html#comments</comments> <pubDate>Sat, 02 Jul 2011 05:38:35 +0000</pubDate> <dc:creator>Robert Kern</dc:creator> <category><![CDATA[Bugify]]></category><guid
isPermaLink="false">http://www.robertkern.com/?p=555</guid> <description><![CDATA[So, another project I have been working on for a while is Bugify. Bugify is a simple PHP/SQLite (or MySQL) based issue tracker.  I have gone with SQLite as the default again (same as Inspectify) because it makes for a much easier installation process for everyone (but you can use MySQL if you prefer) &#8211; [...]]]></description> <content:encoded><![CDATA[<p>So, another project I have been working on for a while is <a
href="http://bugify.com">Bugify</a>.</p><p>Bugify is a simple PHP/SQLite (or MySQL) based issue tracker.  I have gone with SQLite as the default again (same as <a
href="https://inspectify.com">Inspectify</a>) because it makes for a much easier installation process for everyone (but you can use MySQL if you prefer) &#8211; and performance is fantastic.  I&#8217;m very aware that there are already tons of issue tracking systems around, but the problem I found was that most of the good ones were hosted services &#8211; but I, along with many others, prefer to keep certain information out of the so called &#8220;cloud&#8221;.</p><p>I have used many different issue tracking systems before (both hosted and self-install) and from my experiences, I wanted something that met the following requirements (in no particular order):</p><ul><li>It has to look good &#8211; I spend a ton of time each day looking at issues, so I want it to look good.</li><li>It has to be fast.</li><li>It needs to have an API so I can get my data in and out.</li><li>It must be self-hosted.</li><li>It needs to be simple &#8211; a lot of issue trackers go overboard.</li></ul><p>So, from there I came up with Bugify, and I think it&#8217;s pretty good.  Below are some of the other features that may make it into (or have already made it into) Bugify:</p><ul><li>Poll a mailbox for new issues.</li><li>Detailed filtering.</li><li>Save filters for easy access.</li><li>Import from some other popular issue trackers (haven&#8217;t finalised which ones yet).</li></ul><p>At this stage, I am using Bugify full-time, but it&#8217;s not ready to be released &#8211; there are a few features that haven&#8217;t yet been implemented.  But, I could use some testers if you&#8217;re interested (sign up at <a
href="http://bugify.com">bugify.com</a>).</p><p><strong>Update</strong>: you can now play with a demo at <a
href="http://demo.bugify.com">demo.bugify.com</a>.</p><p><strong>Update 2</strong>: Bugify has been released.  Find out more at <a
href="https://bugify.com">bugify.com</a></p> ]]></content:encoded> <wfw:commentRss>http://www.robertkern.com/bugify/bugify-php-issue-tracker.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Inspectify has been released!</title><link>http://www.robertkern.com/web-development/inspectify-has-been-released.html</link> <comments>http://www.robertkern.com/web-development/inspectify-has-been-released.html#comments</comments> <pubDate>Tue, 07 Jun 2011 08:53:25 +0000</pubDate> <dc:creator>Robert Kern</dc:creator> <category><![CDATA[Web Development]]></category><guid
isPermaLink="false">http://www.robertkern.com/?p=552</guid> <description><![CDATA[Inspectify is a new code review tool. It&#8217;s designed to be downloaded and run on your own server. Have a look.]]></description> <content:encoded><![CDATA[<p>Inspectify is a new code review tool.  It&#8217;s designed to be downloaded and run on your own server. <a
href="https://inspectify.com">Have a look</a>.</p> ]]></content:encoded> <wfw:commentRss>http://www.robertkern.com/web-development/inspectify-has-been-released.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Working with the Chaos Monkey</title><link>http://www.robertkern.com/web-development/performance/working-with-the-chaos-monkey.html</link> <comments>http://www.robertkern.com/web-development/performance/working-with-the-chaos-monkey.html#comments</comments> <pubDate>Thu, 28 Apr 2011 05:25:35 +0000</pubDate> <dc:creator>Robert Kern</dc:creator> <category><![CDATA[Performance]]></category><guid
isPermaLink="false">http://www.robertkern.com/?p=548</guid> <description><![CDATA[&#8220;Seems like insane advice at first glance. I&#8217;m not sure many companies even understand why this would be a good idea, much less have the guts to attempt it. Raise your hand if where you work, someone deployed a daemon or service that randomly kills servers and processes in your server farm.&#8221; via Jeff Atwood at Coding [...]]]></description> <content:encoded><![CDATA[<blockquote><p>&#8220;Seems like insane advice at first glance. I&#8217;m not sure many companies even understand why this would be a good idea, much less have the guts to attempt it. Raise your hand if where you work, <em>someone deployed a daemon or service that randomly kills servers and processes in your server farm</em>.&#8221;</p><p
style="text-align: right;">via Jeff Atwood at <a
href="http://www.codinghorror.com/blog/2011/04/working-with-the-chaos-monkey.html">Coding Horror</a></p></blockquote><p>Cool!</p> ]]></content:encoded> <wfw:commentRss>http://www.robertkern.com/web-development/performance/working-with-the-chaos-monkey.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Inspectify</title><link>http://www.robertkern.com/web-development/inspectify.html</link> <comments>http://www.robertkern.com/web-development/inspectify.html#comments</comments> <pubDate>Sun, 17 Apr 2011 00:16:31 +0000</pubDate> <dc:creator>Robert Kern</dc:creator> <category><![CDATA[Subversion]]></category> <category><![CDATA[Web Development]]></category><guid
isPermaLink="false">http://www.robertkern.com/?p=542</guid> <description><![CDATA[I&#8217;ve been working on a new project for a while &#8211; code review for teams. The idea is that teams of developers want/need a simple way to ensure that their code gets reviewed by other people in their team (without having someone looking over your shoulder).  I think enough other people have talked about why [...]]]></description> <content:encoded><![CDATA[<p>I&#8217;ve been working on a new project for a while &#8211; code review for teams.</p><p>The idea is that teams of developers want/need a simple way to ensure that their code gets reviewed by other people in their team (without having someone looking over your shoulder).  I think enough other people have talked about why we need code review (see below), but there hasn&#8217;t been a suitable, easy platform for doing it.</p><ul><li><a
href="https://www.owasp.org/index.php/Code_Review_Introduction" target="_blank">https://www.owasp.org/index.php/Code_Review_Introduction</a></li><li><a
href="http://www.codinghorror.com/blog/2006/01/code-reviews-just-do-it.html" target="_blank">http://www.codinghorror.com/blog/2006/01/code-reviews-just-do-it.html</a></li><li><a
href="http://blog.nelhage.com/2010/06/i-hate-code-review/" target="_blank">http://blog.nelhage.com/2010/06/i-hate-code-review/</a></li></ul><p>There are a few hosted code review apps, but hopefully for commercial apps you have a policy to keep source-code in-house.  So we need an installable code review app, that automatically fetches commits from a repository, and provides a simple interface to do simple code review.</p><p><a
href="http://www.inspectify.com" target="_blank">Inspectify</a> is my answer to this problem.  It&#8217;s still a wee way off, but when it&#8217;s ready, you&#8217;ll be able to install it on a basic *nix box and start reviewing your Subversion-based code (support for other SCM&#8217;s may come later).</p> ]]></content:encoded> <wfw:commentRss>http://www.robertkern.com/web-development/inspectify.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Sysadmins: how to make the programmers love you</title><link>http://www.robertkern.com/web-development/sysadmins-how-to-make-the-programmers-love-you.html</link> <comments>http://www.robertkern.com/web-development/sysadmins-how-to-make-the-programmers-love-you.html#comments</comments> <pubDate>Fri, 29 Oct 2010 02:31:12 +0000</pubDate> <dc:creator>Robert Kern</dc:creator> <category><![CDATA[Web Development]]></category><guid
isPermaLink="false">http://www.robertkern.com/?p=530</guid> <description><![CDATA[&#8220;Last week I wrote a piece called “Programmers: how to make the sysadmin love you“. The feedback has convinced me it needs a counterpart; something written from the perspective of the systems guy trying to get along with the dev team. Having offended all the programmers of the world (not to mention several Americans who [...]]]></description> <content:encoded><![CDATA[<blockquote><p>&#8220;Last week I wrote a piece called “Programmers: how to make the sysadmin love you“.  The feedback has convinced me it needs a counterpart; something written from the perspective of the systems guy trying to get along with the dev team.  Having offended all the programmers of the world (not to mention several Americans who don’t know what a fag packet is) it’s time to do the same for you systems folk.&#8221;</p><p
style="text-align: right;">via <a
href="http://mocko.org.uk/b/2010/10/23/sysadmins_how_to_make_the_programmers_love_you/">mockyblog</a></p></blockquote> ]]></content:encoded> <wfw:commentRss>http://www.robertkern.com/web-development/sysadmins-how-to-make-the-programmers-love-you.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: www.robertkern.com @ 2012-02-22 17:07:05 -->
