Sunday 29 December 2013

Install zend debugger for php 5.4.x on Mac OSX 10.9 64bit


After updating to OSX10.9, the default php shipped with OSX is updated to 5.4. Zend.com doesn't publicly provide a zend debugger for php5.4. The files used in this article are shipped with zend server. Here is the steps to install zend debugger for php5.4 on Mac OSX 10.9 64bit.

Step 1. Download ZendDebugger.so (download linkfrom https://github.com/mkb2000/zend_debugger.

Step 2. Put ZendDebugger.so to somewhere like /Library/WebServer/Documents/zend_debugger.

Step 3. Modify php.ini. The default configuration file used by Mac OS is at /private/etc/php.ini. Admin permission is required to modify this file. So go to /Applications/Utilities and open Terminal. Enter sudo nano /private/etc/php.ini. Jump to the end of this file and add 
[zend_debugger]
zend_extension="/the/path/to/the/folder/you/made/in/step2/ZendDebugger.so"
zend_debugger.allow_hosts=127.0.0.1, localhost
zend_debugger.expose_remotely=always
Control+x to save this file. You'd better comment out Xdebug if it is enabled. (There is also a full version of debug configure available at https://github.com/mkb2000/zend_debugger/blob/master/debugger.ini which is shipped with zend server.)

Step 4. Download dummy.php from https://github.com/mkb2000/zend_debugger/blob/master/dummy.php. Put it in your web server root document fold. By default, it is /Library/WebServer/Documents.

Step 5. Restart apache. In Terminal, enter sudo apachectl restart.


Step 6. Choose to use zend debugger in zend studio or eclipse.



        Monday 2 December 2013

        iOS development: CLLocationManager gets some problem to monitor regions

        By using the CLLocationManager and <CLLocationManagerDelegate>,  people can make geoRegions to be monitored by system . And get notified when user location enter that region. How to use them, see: https://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/LocationAwarenessPG/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009497-CH1-SW1

        However, according to my tests on Simulator and discussion on forum (https://devforums.apple.com/message/251046#251046), the performance of the region features are poor. In Simulator, the - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region method often get triggered 2km far away from the defined region, regardless the desired accuracy (cllocationManager.desiredAccuracy=kCLLocationAccuracyBest) and the radius of region ([CLCircularRegion alloc]initWithCenter:o.coordinate radius:o.radius identifier:name). 

        The discussion on forum implies that the region features are based on cell and the accuracy could only be at kilometre level. I haven't test it on device. But currently, it seems not qualified to use for small region detection.

        iOS development: customise GPS path for Simulator

        When developing location-based apps, sometimes we want to simulate a path or movements on Simulator. Xcode provides the ability to change "current user location". Rather than a single location, it can also continuously change the "current user location". And it looks like the user travels along a route. To enable this, a GPS path file is required.  Here is a way to create a path for Xcode to run after.

        Step 1. Generate gpx file.
        Go to http://www.bikehike.co.uk/mapview.php or some similar websites to generate a gps path file which ended with .gpx. Download it, and it shall looks like:
        <?xml version="1.0" encoding="UTF-8" standalone="no" ?>

        <gpx xmlns="http://www.topografix.com/GPX/1/1" creator="bikehike.co.uk" version="1.1" 
          <metadata>
            <time>2013-12-02T12:35:19Z</time>
            <bounds minlat="-37.900140" minlon="144.662850" maxlat="-37.897000" maxlon="144.673920" /> 
          </metadata>
          <rte>
            <name>swhereTwerribee</name>
            <number>1</number>
            <rtept lat="-37.897000" lon="144.673920">
              <ele>13</ele>
              <time>2013-12-02T12:35:19Z</time>
              <name>pt0</name>
            </rtept>
        ...
        ...
        ...
            <rtept lat="-37.897970" lon="144.671830">
              <ele>13</ele>
              <time>2013-12-02T12:36:35Z</time>
              <name>pt1</name>
            </rtept>
          </rte>

        </gpx>

        Step 2. Modify the gpx file.
        This format is not compatible with Xcode. So we need to do some fix. First, delete the content which is meaningless for Xcode (shown above). Then, replace all rtept with wpt . It should looks like this after modification:
        <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
        <gpx xmlns="http://www.topografix.com/GPX/1/1" creator="bikehike.co.uk" version="1.1" 
            <wpt lat="-37.897000" lon="144.673920">
              <ele>13</ele>
              <time>2013-12-02T12:35:19Z</time>
              <name>pt0</name>
            </wpt>
        ...
        ...
        ...
            <wpt lat="-37.897970" lon="144.671830">
              <ele>13</ele>
              <time>2013-12-02T12:36:35Z</time>
              <name>pt1</name>
            </wpt>
        </gpx>


        Step 3. Load the modified gpx file to Xcode.
        After launching app from Xcode and running it in Simulator, go back to Xcode and add the gpx file to your project (following graph). Then the your new location/path will be showed in this list. Click to choose it.
        Step 4. Check it.
        When your app is still running in Simulator, click the "home" button of your iPhone/iPad Simulator. Then open the default map app, and show the current location. The movement will be exactly the same as you made from http://www.bikehike.co.uk/mapview.php.


        Something worth mention:
        1. Several default movements are available from Simulator menu ->Debug->Location.
        2. The speed of customised path seems possibly to be controlled by the <time> rag in gpx file? I am not sure about this. But anyway, you can set the speed when you make the path on the website.