Saturday, June 7, 2014

Google Directions Points Decode

https://maps.googleapis.com/maps/api/directions/json?.....

Google Direction API membantu kita untuk mendapatkan laluan dari point A ke point B.

Kalau kita baca balik JSON(prefered) data yang google return, google akan bagi steps start & end location point. dimana kalau kita translate terus diatas peta akan nampak cacat sedikit sebab polyline tak ikut exactly atas jalan.

Goole ada sertakan detail point diantara start & end point, melalui atribute routes->legs->steps[$_]->polyline->points

Cuma, 'cuma' ia telah di encode kan supaya size data nya tidak besar. saya agak sahaja. sebab google ada bagi tips/cara yg digunakan untuk encode points ni. cuma dia tak bagi complete function kat kita.... hampeh kan?... hehehhe

Saya nak buat sendiri x reti... bila cari kat internet diaorg kata dah ada org buat guna javascript tapi saya cari x jumpa... link broken... yang saya jumpa mamat ni dah convert ker PHP code. dia translate dr javascript... saya plak nak kan yg javascript... bila cari tak jumpa... saya translate balik ke javascript.... hahahhaa.... . may be ada mistake.. tapi saya test ok jer... hehehhe

ini code nya dlm javascript function

/*
 * Copyright (c) 2008 Peter Chng, http://unitstep.net/
 * 
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

/*
 * convert to javascipt by hairul@mbek@ayun, http://blog.mbek.net 
*/

function decodePolylineToArray(encoded){
  var length = encoded.length;
  var index = 0;
  var points = [];
  var lat = 0;
  var lng = 0;

  while (index < length)
  {
    // Temporary variable to hold each ASCII byte.
    var b = 0;

    // The encoded polyline consists of a latitude value followed by a
    // longitude value.  They should always come in pairs.  Read the
    // latitude value first.
    var shift = 0;
    var result = 0;
    do
    {
      // The `ord(substr(encoded, $index++))` statement returns the ASCII
      //  code for the character at $index.  Subtract 63 to get the original
      // value. (63 was added to ensure proper ASCII characters are displayed
      // in the encoded polyline string, which is `human` readable)
      //b = ord(substr(encoded, index++)) - 63;
      b = encoded.charCodeAt(index++) - 63;

      // AND the bits of the byte with 0x1f to get the original 5-bit `chunk.
      // Then left shift the bits by the required amount, which increases
      // by 5 bits each time.
      // OR the value into $results, which sums up the individual 5-bit chunks
      // into the original value.  Since the 5-bit chunks were reversed in
      // order during encoding, reading them in this way ensures proper
      // summation.
      result |= (b & 0x1f) << shift;
      shift += 5;
    }
    // Continue while the read byte is >= 0x20 since the last `chunk`
    // was not OR'd with 0x20 during the conversion process. (Signals the end)
    while (b >= 0x20);

    // Check if negative, and convert. (All negative values have the last bit
    // set)
    dlat = ((result & 1) ? ~(result >> 1) : (result >> 1));

    // Compute actual latitude since value is offset from previous value.
    lat += dlat;

    // The next values will correspond to the longitude for this point.
    shift = 0;
    result = 0;
    do
    {
      //b = ord(substr(encoded, index++)) - 63;
      b = encoded.charCodeAt(index++) - 63;
      result |= (b & 0x1f) << shift;
      shift += 5;
    }
    while (b >= 0x20);

    dlng = ((result & 1) ? ~(result >> 1) : (result >> 1));
    lng += dlng;

    // The actual latitude and longitude values were multiplied by
    // 1e5 before encoding so that they could be converted to a 32-bit
    // integer representation. (With a decimal accuracy of 5 places)
    // Convert back to original values.
    points.push([lat * 1e-5, lng * 1e-5]);
  }

  return points;
}

Wednesday, February 19, 2014

Apache Cordova

Salam,

sudah lama saya ingin involve dlm mobile application development. tapi java & C# merupakan bahasa alien yg saya tak tercapai2 lagi nak menguasainya... hehehehhehehe

Tahun lepas saya ada cuba phonegap, setelah membaca kebolehan kita develop mobile apps pakai html, css & javascript... excited... install.... dan..... gagal utk dpt run kan hatta sample apps sekalipun... hahahha.... saya ngaku kalah.... saya tinggalkan phonegap dgn perasaan sayu...

dan awal bulan ni.... ada kawan call tanya boleh buat android apps tak.... saya dgn nada sedih ckp tak reti nak buat.... sedih lagi.... tapi saya cuba balik bertanyakan pakcik google manatau phonegap ada ciri2 baru yg lebih memudahkan..... tetiba... terjumpa la CORDOVA (under apache foundation).

Cordova adalah phonegap yg di edarkan secara percuma dibawah apache foundation. dgn cordova (aku terus x pandang/ambik tahu pasal phonegap) ia membenarkan apps kita di compile sendiri tidak seperti mula2 phonegap di lancarkan dimana perlu hantar apps kita untuk dicompile di server phonegap.

Walaupun byk lagi yg aku perlu belajar, tapi cordova membuatkan hati aku berbunga2 kembali... heheheehe..

Setakat ini aku dah buat beberapa simple apps,

  1. launcher web app supaya nampak mcm native apps dlm IOS.
  2. apps mcm instagram & foursquare di combine untuk mengesan lokasi & geocoding sesuatu gambar yg di ambil. beserta sedikit maklumat seperti tajuk & note. yg ni pakai elasticsearch utk query laju.
  3. POC utk satu agensi... yg ni complicated apps skit involve geocoding, photo/image, mobile printing, and client server comunication.

Banyak lagi nak kene belajar.... tapi menyeronokkan...

Wednesday, January 29, 2014

Mojolicious

Salam,

Saya mmg tgh mencari pekerjaan tetap... hehehehe... kalau ada yg nak offer kerja boleh la... terima kasih didahulukan.

Ada hantar resume kat satu company ni... dia dah reply, tetapi kene buat satu assessment test. syarat nya kene pakai Mojolicious (http://mojolicio.us/) framework.

Pertama kali install and bermain dgn mojo ni... slow skit sebab nak pahamkan flow dia etc... as sebelum ni hampir kesemua development pakai framework sendiri. bila nak study framework org ni ambik masa skit.

Assessment dah hantar tak tau le mcmana result... sebab basic sgt buatnya... sebab x abis xplore mojo ni... byk kene study lg...

ada sesiapa biasa pakai? bleh la share skit....

Monday, January 27, 2014

MAX_WAYPOINTS_EXCEEDED

Salam,

Ada request POC utk google mapping replated project. involve direction services dari google map.

Tak dapat nak bagi commitment sebab client tu nak cepat. 2 hari je tempoh yg melalui weekend yang dah ada byk plan nak kene buat.

Tapi tangan masih gatal utk came out dgn something.

Tak dpt nak kongsi kat sini, sebab nama pun POC... kang ken curi lak idea dia... cuma yang nak dikongsi kat sini, Google MAP API v3 ada limitkan waypoints dlm direction service dia...

Maximum kalau x silap hanya 8 waypoint. kene subscribe kepada premium service baru dpt upkan ke 23 waypoint. termasuk origins & destinantion point. kalau tak nanti return status 'MAX_WAYPOINTS_EXCEEDED'.

Waypoint perlu utk bagi route kita tepat. kalau tak nanti dia akan ikut suggested route. dah tak accurate.

Solution terdekat adalah limitkan waypoint kita.

Sunday, December 1, 2013

DIV CSS Border Inside

Salam,

Kalau kita main dengan DIV. bila kita set kan border, div itu akan menjadi lebih panjang/tinggi bergantung kepada berapa pixel kita letak sebagai border kerana line/border itu akan mengelilingi div di bahagian luar.

Untuk sesetengah kes, ini akan menganggu pengiraan anda.

Apa yang saya baru tahu, kita bleh gunakan:

   -moz-box-sizing:    border-box;
   -webkit-box-sizing: border-box;
    box-sizing:        border-box;

Supported on Firefox, Chrome, Safari, Opera and IE8+.

kita akan dpt ini:

saya hensem

instead of:

saya hensem

code penuh css untuk div ini:

.divbox{
 border: 10px solid #ffcc33;
 -moz-box-sizing:    border-box;
 -webkit-box-sizing: border-box;
 box-sizing:        border-box;
 width: 200px;
}

happy coding...

Saturday, November 30, 2013

mysql-bin.***** mengunakan byk space

Salam,

Tiba-tiba terdetik untuk buat backup segala kerja2 di laptop.

baru aku perasan yg folder /usr/local/mysql/data aku makan byk space... hampir 300GB. mula2 aku kira logik lagi sebab aku banyak simpan & pakai data yg besar2 dlm MySQL server aku.

tapi bila tgh buat backup baru perasan yg ada satu pattern file ni ... mysql-bin.***** ada byk dlm folder data/ .... size aeach file maximum dlm 1GB... yg aku nampak ada dekat 200++ file...

aku pun tak pernah tau kewujudan file ni sebelum ni.

Lepas tanya pakcik google, baru tau apa gunanya file ni.

  • Data Recovery
  • High Avaibality/Replication

ada suggestion utk disabled bin log ni... tapi bila pikir2... bende ni perlu... incase jadi apa2... so aku ambil option ke dua utk purge shj existing bin log ni... nak purge gunakan sql command mcm ni

$ mysql -u root -p 'MyPassword' -e "PURGE BINARY LOGS TO 'mysql-bin.03';"

OR

$ mysql -u root -p 'MyPassword' -e "PURGE BINARY LOGS BEFORE '2008-12-15 10:06:06';"

Lepas purge bin log ni... aku dpt reclaim space dlm 150GB++....

kalau nak auto purge... letakkan shj command diatas ni dt cron job.... tapi aku lebih prefer manually.

Saturday, November 23, 2013

Google Map Api V2 Shutdown

Salam Semua.

Lama tak menulis.

Seperti yang semua tahu, Google map API V2 dah shutdown sepenuhnya pada 19hb Novermber 2013.

salah satu client aku yg pakai Google Map API v2 dlm module portal dia terlalu berkira utk invest supaya convert kod semamsa ke V3. aku pun tak ada pilihan selain melihat sejauh mana automagically yg Google Map team claim dlm perubahan dr v2 ke v3 ni.

As aku tunggu dan lihat.... dpt gak la email dr client yg mengatakan some module tak berjalan seperti sepatutnya... kalau ikutkan hati malas nak layan dah. as aku dah cakap awal2.

tapi pikirkan hubungan antara pelanggan... aku tgk2 gak kan la masalah berkaitan Google Map API dia.

untuk convert ke V3 mmg aku x sanggup secara percuma. as boleh dikira buat balik semua sekali.

and apa yg aku jumpa. semua yg lain jalan ok... cuma... 'point' yg kita dpt masa GEvent.addListener ada perubahan sedikit

dari:

var lat = point.x;
var lng = point y;

kepada

var lat = point.ob;
var lng = point.nb;

untuk setakat ni, itu sahaja yang aku jumpa...

****

var lng = point.nb;

Sebelum ni aku update point.pb... ok je... tapi alih2 x bleh plak... kene pakai point.nb.... hahahahha sorryyyy .... ke aku yg dah tuaaaaa....