Search This Blog

Tuesday, January 27, 2015

Inhouse training project management at PT.Denki Engineering Bekasi

Pelatihan / Inhouse training project management methodologies with ms project bersama staff dari PT Denki Engineering berlokasi di ruko sentral niaga bekasi, 24-25 jan 2015

Terima kasih atas undangan dan peran sertanya, semoga bermanfaat

Hery Purnama
Freelance Certified Trainer
081.223344.506
Http://good.web.id
Http://freelance-it-trainer.blogspot.com
Bandung

Training mobile apps. Development for android with jquery mobile n phonegap. Bank BJB

Training mobile Application Development for android bersama staff bank BJB bandung

Terima kasih atas undangan dan Semoga bermanfaat

Hery Purnama
Freelance Certified Trainer
081.223344.506

Monday, January 26, 2015

Inhouse training project management at PT.Denki Engineering Bekasi

Pelatihan / Inhouse training project management methodologies with ms project bersama staff dari PT Denki Engineering berlokasi di ruko sentral niaga bekasi, 24-25 jan 2015

Terima kasih atas undangan dan peran sertanya, semoga bermanfaat

Hery Purnama
Freelance Certified Trainer
081.223344.506
Http://good.web.id
Http://freelance-it-trainer.blogspot.com
Bandung

Training mobile apps. Development for android with jquery mobile n phonegap. Bank BJB

Training mobile Application Development for android bersama staff bank BJB bandung

Terima kasih atas undangan dan Semoga bermanfaat

Hery Purnama
Freelance Certified Trainer
081.223344.506

Training mobile apps. Development for android with jquery mobile n phonegap. Bank BJB

Training mobile Application Development for android bersama staff bank BJB bandung

Terima kasih atas undangan dan Semoga bermanfaat

Hery Purnama
Freelance Certified Trainer
081.223344.506

Inhouse training project management at PT.Denki Engineering Bekasi

Pelatihan / Inhouse training project management methodologies with ms project bersama staff dari PT Denki Engineering berlokasi di ruko sentral niaga bekasi, 24-25 jan 2015

Terima kasih atas undangan dan peran sertanya, semoga bermanfaat

Hery Purnama
Freelance Certified Trainer
081.223344.506
Http://good.web.id
Http://freelance-it-trainer.blogspot.com
Bandung

Saturday, January 24, 2015

PERANG KPK DAN POLRI , BUDI TERSANGKA, BAMBANG DI KRIMINALISASI, JOKOWI MATI KUTU

Setelah heboh foto mesra palsu abraham samad ketua kpk dengan wanita coba diungkit reskrim, kini giliran bambang wakil ketua kpk ditangkap dengan mengungkit ungkit kasus lama, apa peran presiden jokowi ? tidak ada, tidak berperan layaknya negarawan dan presiden.

Selamatkan kpk

Thursday, January 22, 2015

Jquery Ajax clear form after submit

How to clear your form after submission using Jquery

The easiest way is using

$('#formId').trigger("reset")


Example

$(document).ready(function(e) {
    $("#btntambah").click(function(){
        var nama = $("#txtnama").val(); // cara jquery mangambil value dari object html dengan id txtnamaprd
        var kota = $("#txtkota").val();
        var detail = $("#txtdetail").val();
       

    $.ajax({ // ajax jqeury untuk mengirim value dengan methode post
            type: "POST",
            url: urlService+'proses.php?mode=add', // proses.php berisi php dengan script sql insert
            data:"txtnama="+nama+'&txtkota='+kota+'&txtdetail='+detail,
            success: function(data){
                $("#result").html(data); // callback respon ajax apabila proses.php berhasil, hasil dikembalikan ke halaman html di tag dengan id #result
            }
    });
   
$('#frmnasabah').trigger("reset") // form field di reset
   


    })
});


Wednesday, January 21, 2015

Classic google map mode

f you've switched to the new Google Maps desktop interface, you can quickly go back to the classic interface by clicking the "Help" icon at the bottom of the page and picking "Return to classic Google Maps". You'll see a message that asks you if you want to permanently go back to the old interface or temporarily switch.

Another option is to bookmark this URL: Classic Google Maps (https://www.google.com/maps?output=classic). It will always send you to the standard Maps interface and you won't have to open the new interface first.


Why would you switch to the old interface? Maybe you need to use the more advanced directions that let you add more than 2 destinations, maybe you like the terrain/photos/webcam layers or Maps Labs features like the distance measurement tools or the LatLng tooltip, maybe you miss the Pegman icon you could drag and drop to switch to Street View or you want to customize the printing format for directions.

You've probably noticed that the new maps style (with new colors, icons, labels, tooltips) is now also available in the classic Google Maps. If you hide the sidebar, you can make it look more like the new Google Maps.



by

Hery Purnama
Freelance IT Trainer
Bandung 081.223344.506

Monday, January 19, 2015

PHP Ajax images and file upload script

PHP Ajax upload for images and files scripts


<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.form.js"></script>
<script type="text/javascript">

$(document).ready(function() {
$("#loading")
.ajaxStart(function(){
$(this).show();
})
.ajaxComplete(function(){
$(this).hide();
});
var options = {
beforeSubmit: showRequest,
success: showResponse,
url: 'upload4jquery.php', // your upload script
dataType: 'json'
};
$('#Form1').submit(function() {
document.getElementById('message').innerHTML = '';
$(this).ajaxSubmit(options);
return false;
});
});

function showRequest(formData, jqForm, options) {
var fileToUploadValue = $('input[@name=fileToUpload]').fieldValue();
if (!fileToUploadValue[0]) {
document.getElementById('message').innerHTML = 'Please select a file.';
return false;
}

return true;
}

function showResponse(data, statusText) {
if (statusText == 'success') {
if (data.img != '') {
document.getElementById('result').innerHTML = '<img
src="/upload/thumb/'+data.img+'" />';
document.getElementById('message').innerHTML = data.error;
} else {
document.getElementById('message').innerHTML = data.error;
}
} else {
document.getElementById('message').innerHTML = 'Unknown error!';
}
}

</script>

Next create a PHP script named "upload4jquery.php" and place it in the
same directory where the other files are located. Place this code into
your PHP file:

<?php
include($_SERVER['DOCUMENT_ROOT'].'/classes/upload/foto_upload_script.php');

$foto_upload = new Foto_upload;

$json['size'] = $_POST['MAX_FILE_SIZE'];
$json['img'] = '';

$foto_upload->upload_dir = $_SERVER['DOCUMENT_ROOT']."/upload/";
$foto_upload->foto_folder = $_SERVER['DOCUMENT_ROOT']."/upload/";
$foto_upload->thumb_folder = $_SERVER['DOCUMENT_ROOT']."/upload/thumb/";
$foto_upload->extensions = array(".jpg", ".gif", ".png");
$foto_upload->language = "en";
$foto_upload->x_max_size = 480;
$foto_upload->y_max_size = 360;
$foto_upload->x_max_thumb_size = 120;
$foto_upload->y_max_thumb_size = 120;

$foto_upload->the_temp_file = $_FILES['fileToUpload']['tmp_name'];
$foto_upload->the_file = $_FILES['fileToUpload']['name'];
$foto_upload->http_error = $_FILES['fileToUpload']['error'];
$foto_upload->rename_file = true;

if ($foto_upload->upload()) {
$foto_upload->process_image(false, true, true, 80);
$json['img'] = $foto_upload->file_copy;
}

$json['error'] = strip_tags($foto_upload->show_error_string());
echo json_encode($json);
?>

This tutorial or guide is not about how to use the PHP upload class.
If you never used the class before, than try the example files first
and try than the Ajax upload form.
Paths and upload directories

You need to create two upload directories: One for the upload main
file and one for the thumbnails. Check/change the permission for the
directories (CHMOD the directories with 0755). If you use the same
structure as suggested in the PHP class file, there is no need to
change the includes at the top of the PHP script.

Now we need to create the form HTML and some other containers where
the response data will be placed.

<form id="Form1" name="Form1" method="post" action="">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo
$max_size; ?>" />
Select an image from your hard disk:

<div>
<input type="file" name="fileToUpload" id="fileToUpload" size="18" />
<input type="Submit" value="Submit" id="buttonForm" />
</div>
</form>
<img id="loading" src="loading.gif" style="display:none;" />

<p id="message">

<p id="result">

The file loading.gif is the upload indicator image, pick the file I've
used on the demo page or check Google for other stylish images or use
an online image generator.

Some final note, the code works as it is. Don't change variable names
or form field attributes, if you're not sure how to change them inside
your JavaScript code.


Requote by

Hery Purnama (Freelance IT Trainer)
081223344506
Jakarta, Bandung, Yogya, Bali

Project Management with MS Project, Looking for Freelance Professional and Certified Trainer

Freelance IT Trainer for Project management Methodologies with MS.
Project , Certified Trainer , 15 years experience as technical trainer
and Consultant , Call/SMS (Mr. Hery Purnama - Bandung Indonesia)
+62.81.223344.506 for inquiry

Pengajar , trainer Project Management, MS Project, ITILF

Freelance IT Trainer , Excel VBA , Android Phonegap, Google Map API,
Sketchup3D , MS Project, ExtJS

Hery Purnama 081.223344.506 - Freelance Certified IT Trainer , Excel
VBA , Android Phonegap, Google Map API, Google Sketchup3D , MS
Project, ExtJS, Oracle, SQL Server, MySQL, MS. Access VBA, Facebook
API Developer dll.. Berpengalaman 15 Tahun sebagai Trainer
bersertifikasi CIW, OCA, ITILF, MCP, MOS , Visit :
http://freelance-it-trainer.blogspot.com/2014/12/freelance-certified-it-trainer-bandung.html

http://good.web.id Freelance Personal IT Trainer, Hery Purnama 081.223344.506

cari pengajar, trainer google map api , sketchup 3d untuk inhouse

Freelance IT Trainer , Excel VBA , Android Phonegap, Google Map API,
Sketchup3D , MS Project, ExtJS

Hery 081.223344.506 - Freelance Certified IT Trainer , Excel VBA ,
Android Phonegap, Google Map API, Google Sketchup3D , MS Project,
ExtJS, Oracle, SQL Server, MySQL, MS. Access VBA, Facebook API
Developer dll.. Berpengalaman 15 Tahun sebagai Trainer bersertifikasi
CIW, OCA, ITILF, MCP, MOS , Visit :
http://freelance-it-trainer.blogspot.com/2014/12/freelance-certified-it-trainer-bandung.html

Sunday, January 18, 2015

Cari trainer excel vba macro , MS Project , Android Phonegap, ExtJS

Cari Freelance Trainer, Pengajar, Instruktur, Bandung, Jakarta, Yogya, Bali, Surabaya, Inhouse

Mencari tenaga pengajar freelance professional untuk :
IT Training dan Management Training hubungi Hery 081.223344.506

Cari Trainer Excel VBA Macro, Trainer MS Project, Trainer Google Map API, Trainer ExtJS , Trainer ASP/VB.net


http://good.web.id

Saturday, January 17, 2015

Cari Freelance Trainer, Pengajar, Instruktur, Bandung, Jakarta, Yogya, Bali, Surabaya, Inhouse

Mencari tenaga pengajar freelance professional untuk :
IT Training dan Management Training hubungi Hery 081.223344.506

Friday, January 16, 2015

Jadwal Pelatihan/ Training IT 2015 , Bandung

Berikut jadwal pelatihan IT yang tersedia di SISINDOTEK Bandung, sebagai salah satu training center terbaik di Indonesia , semua kegiatan training berlangsung di hotel

more training


Requoted by

Hery Purnama

http://freelance-it-trainer.blogspot.com , http://good.web.id

081.223344.506



Cara Setting mengarahkan domain ke blogspot

cara setting domain Anda sendiri ke blogspot yang anda buat sangat mudah, ikuti langkah berikut

 Misalkan kita punya blog dengan alamat blogkita.blogspot.com dan kita ingin merubahnya ke alamat milik kita sendiri yang telah kita beli misalkan www.namadomain.xyz

 

Bagaimana cara settingnya?

 

Caranya Mudah, anda dapat melakukan setting blogspot dengan cara :

1. Pastikan anda telah memesan Free Domain Parking (Gratis) atau domain berbayar Anda

2. Setelah Free Domain Parking aktif , selanjutnya login blogger , lalu masuk ke menu "Setting"


 

3. Tambahkan domain dengan mengklick + Add a custom domain, isikan nama domain, saat anda klik "save", blogger akan meminta verifikasi CNAME


 

4. 2 kode Cname akan muncul yaitu www dengan address ghs.google.com dan satu lagi berupa kode acak dari google ( kode berbeda setiap orang)


5. Login ke Cpanel di tab baru dan masuk ke menu Advanced DNS editor


 

6. Add a record, isi CNAME dengan kode acak dibawah www (pada halaman di langkah 3), isi TTL: 14400, Type CNAME, dan isi Address dengan kode unic dibawah ghs.google.com (pada halaman di langkah 3).
Untuk record www.namadomain.xyz bukan melalui Add record melainkan dengan melakukan Edit sesuai dengan screenshot berikut ini :
Setelah Edit record -> save / Edit record.
7. klik Add record
8. tunggu sekitar 1-4 Jam, lalu coba kembali langkah 3. jika verifikasi gagal, pastikan kembali langkah ke 7 dilakukan dengan benar.
 Berikut ini adalah contoh dari bentuk Advance DNS Zone Editor nya setelah di edit:

Advance DNS Zone Editor

 

Note: Nameserver domain anda harus sudah mengarah ke hosting dimana anda melakukan setting Cpanel diatas. hubungi pihak penyedia domain anda untuk request pengarahan nameserve

Thanks,

Hery Purnama
http://freelance-it-trainer.blogspot.com
http://good.web.id
081.223344.506

How to make your new website index quickly in Google

How to Get Google to Index Your New Website & Blog Quickly

Whenever you create a new website or blog for your business, the first thing you probably want to happen is have people find it. And, of course, one of the ways you hope they will find it is through search. But typically, you have to wait around for the Googlebot to crawl your website and add it (or your newest content) to the Google index.

So the question is: how do you ensure this happens as quickly as possible? Here are the basics of how website content is crawled and indexed, plus some great ways to get the Googlebot to your website or blog to index your content sooner rather than later.

What is Googlebot, Crawling, and Indexing?

What is googlebot?

Before we get started on some good tips to attract the Googlebot to your site, let's start with what the Googlebot is, plus the difference between indexing and crawling.

  • The Googlebot is simply the search bot software that Google sends out to collect information about documents on the web to add to Google's searchable index.
  • Crawling is the process where the Googlebot goes around from website to website, finding new and updated information to report back to Google. The Googlebot finds what to crawl using links.
  • Indexing is the processing of the information gathered by the Googlebot from its crawling activities. Once documents are processed, they are added to Google's searchable index if they are determined to be quality content. During indexing, the Googlebot processes the words on a page and where those words are located. Information such as title tags and ALT attributes are also analyzed during indexing.

So how does the Googlebot find new content on the web such as new websites, blogs, pages, etc.? It starts with web pages captured during previous crawl processes and adds in sitemap data provided by webmasters. As it browses web pages previously crawled, it will detect links upon those pages to add to the list of pages to be crawled. If you want more details, you can read about them in Webmaster Tools Help.

Hence, new content on the web is discovered through sitemaps and links. Now we'll take a look at how to get sitemaps on your website and links to it that will help the Googlebot discover new websites, blogs, and content.

How to Get Your New Website or Blog Discovered

So how can you get your new website discovered by the Googlebot? Here are some great ways. The best part is that some of the following will help you get referral traffic to your new website too!

  • Create a Sitemap – A sitemap is an XML document on your website's server that basically lists each page on your website. It tells search engines when new pages have been added and how often to check back for changes on specific pages. For example, you might want a search engine to come back and check your homepage daily for new products, news items, and other new content. If your website is built on WordPress, you can install the Google XML Sitemaps plugin and have it automatically create and update your sitemap for you as well as submit it to search engines. You can also use tools such as the XML Sitemaps Generator.
  • Submit Sitemap to Google Webmaster Tools – The first place you should take your sitemap for a new website is Google Webmaster Tools. If you don't already have one, simply create a free Google Account, then sign up for Webmaster Tools. Add your new site to Webmaster Tools, then go to Optimization > Sitemaps and add the link to your website's sitemap to Webmaster Tools to notify Google about it and the pages you have already published. For extra credit, create an account with Bing and submit your sitemap to them via their Webmaster Tools.
  • Install Google Analytics – You'll want to do this for tracking purposes regardless, but it certainly might give Google the heads up that a new website is on the horizon.
  • Submit Website URL to Search Engines – Some people suggest that you don't do this simply because there are many other ways to get a search engine's crawler to your website. But it only takes a moment, and it certainly doesn't hurt things. So submit your website URL to Google by signing into your Google Account and going to the Submit URL option in Webmaster Tools. For extra credit, submit your site to Bing. You can use the anonymous tool to submit URL's below the Webmaster Tools Sign In – this will also submit it to Yahoo.
  • Create or Update Social Profiles – As mentioned previously, crawlers get to your site via links. One way to get some quick links is by creating social networking profiles for your new website or adding a link to your new website to pre-existing profiles. This includes Twitter profiles, Facebook pages, Google+ profiles or pages, LinkedIn profiles or company pages, Pinterest profiles, and YouTube channels.
  • Share Your New Website Link – Once you have added your new website link to a new or pre-existing social profile, share it in a status update on those networks. While these links are nofollow, they will still alert search engines that are tracking social signals. For Pinterest, pin an image from the website and for YouTube, create a video introducing your new website and include a link to it in the video's description.
  • Bookmark It – Use quality social bookmarking sites like Delicious and StumbleUpon.
  • Create Offsite Content – Again, to help in the link building process, get some more links to your new website by creating offsite content such as submitting guest posts to blogs in your niche, articles to quality article directories, and press releases to services that offer SEO optimization and distribution. Please note this is about quality content from quality sites – you don't want spammy content from spammy sites because that just tells Google that your website is spammy.

How to Get Your New Blog Discovered

So what if your new website is a blog? Then in additional to all of the above options, you can also do the following to help get it found by Google.

  • Setup Your RSS with FeedburnerFeedburner is Google's own RSS management tool. Sign up or in to your Google account and submit your feed with Feedburner by copying your blog's URL or RSS feed URL into the "Burn a feed" field. In addition to your sitemap, this will also notify Google of your new blog and each time that your blog is updated with a new post.
  • Submit to Blog Directories – TopRank has a huge list of sites you can submit your RSS feed and blog to. This will help you build even more incoming links. If you aren't ready to do them all, at least start with Technorati as it is one of the top blog directories. Once you have a good amount of content, also try Alltop.

The Results

Once your website or blog is indexed, you'll start to see more traffic from Google search. Plus, getting your new content discovered will happen faster if you have set up sitemaps or have a RSS feed. The best way to ensure that your new content is discovered quickly is simply by sharing it on social media networks through status updates, especially on Google+.

Also remember that blog content is generally crawled and indexed much faster than regular pages on a static website, so consider having a blog that supports your website. For example, if you have a new product page, write a blog post about it and link to the product page in your blog post. This will help the product page get found much faster by the Googlebot!


Requoted by

Hery Purnama

http://freelance-it-trainer.blogspot.com

How Export Wordpress to Blogspot Blog

Very easy to export your wordpress blog post to blogspot/blogger
follow these steps bellowed :

  1. to transfer to Blogger.
  2. Click on the Manage tab below the Blog name.
  3. Click on the Export link below the Manage tab.
  4. Download the WordPress WXR export file by clicking on Download Export File.
  5. Save this file to your local machine.
  6. Go to this link to convert the file format https://wordpress2blogger.appspot.com/




and then follow instruction bellowed to import in to blogspot

Export or import your blog

Imports and exports are only for posts and comments. If you want to save a copy of your template, click the Backup/Restore button on the Template tab.

You can export a copy of your blog to your computer and import the posts and comments into a different Blogger blog.

Export Your blog

  1. Sign in to blogger.com.
  2. Under "Settings," click Other.
  3. Go to the "Blog Tools" section.
  4. Click Export Blog.
  5. Click Download blog.

Your blog will be saved as a .xml file. Don't worry, the blog is still in your dashboard and on Blogger.com.

Import, export, and delete

Import posts and comments into another Blogger blog

Here's how to import the blog you exported into a new blog:

  1. Sign in to blogger.com.
  2. Under "Settings," click Other.
  3. Go to the "Blog Tools" section.
  4. Click Import Blog.
  5. Select a Blogger export file (.xml) from your computer./li>
  6. Click Publish.

By default, all of your imported posts will remain unpublished until you publish them from your dashboard later. However, if you would rather have all posts published immediately, make sure to check the box next to Automatically publish all imported posts before you click Import Blog.

Requoted by

Hery Purnama
http://freelance-it-trainer.blogspot.com

Thursday, January 15, 2015

How to Using HTML 5 Local Storage


Loading data from a remote source

When loading data from a remote source I'd use jQuery or Zepto's ajax() function like this:

1$.ajax({
3    dataType: 'JSONp',
4    success: function(data, status) {
5        $.each(data, function(key, value){
6            //handle the data               
7        });
8    },
9    error: function() {
10        //handle the error
11    }
12}

In this example I'm accessing a fictional data source to load a news article.

Once the article is loaded the user might browse another article but later on may return to read this particular one again. You could load the article from your server again. But that's a bit inefficient if you have already loaded it before. You could just as easily store the article locally, using HTML5's localStorage, on the device and request the details from there. That's pretty simple to setup.

HTML5 local and session storage

HTML5 introduced several methods of storing data within the clients browser. Two of these methods are local and session storage. localStorage saves data until it is removed by the client or app whereas sessionStorage saves data until the session ends, when the browser window/tab is closed.

Mark Pilgrim sums up HTML5 local storage as:

a way for web pages to store named key/value pairs locally, within the client web browser. Like cookies, this data persists even after you navigate away from the web site, close your browser tab, exit your browser, or what have you. Unlike cookies, this data is never transmitted to the remote web server (unless you go out of your way to send it manually).

Dive into HTML – Introducing HTML5 local storage

Storing a key/value pair is very straightforward:

1localStorage.setItem('yourKeyName', 'your value');

This works great for simple key/value pairs.

Storing a JSON object in local storage

Attempting to store a JSON object, or an ordinary array of data, in local storage will yield an error. Local storage requires you to store strings of information. To store a JSON object in local storage you will need to convert it into a JSON-formatted string, using the JSON.stringify() function.

Referring back to the ajax example above, we could take the data object and stringify it:

1var dataToStore = JSON.stringify(data);

Then it's just a case of storing the new JSON-formatted string in local storage:

1localStorage.setItem('someData', dataToStore);

Loading a JSON object from local storage

Now that the JSON object is stored locally you can access the data directly from the device, without having to make a request to the remote server. However, because the object was previously converted to a JSON-formatted string, you will have to reverse the effects of the stringify function before you can access the data within the object. This is easily done through use of the JSON.parse() function:

1var localData = JSON.parse(localStorage.getItem('someData'));

Now you can access the object and handle it as you normally would:

1$.each(localData, function(key, value){
2    console.log(key + ' = ' + value);
3});

Using PhoneGap's local storage api

The above example will work in any modern browser as well as in your PhoneGap app, but PhoneGap also provides local storage access via its api:

1//setting an item
2window.localStorage.setItem('key', 'value');
3 
4//loading an item
5var value = window.localStorage.getItem('key');

The only difference here being window. prepended to the ordinary localStorage methods.

Putting it all together in a PhoneGap app

Taking all of this into account you might end up with something like this:

1$.ajax({
3    dataType: 'JSONp',
4    success: function(data, status) {
5        $.each(data, function(key, value){
6            //handle the data               
7        });
8         
9        var localData = JSON.stringify(data);
10         
11        window.localStorage.setItem('newsArticle12', localData);
12    },
13    error: function() {
14        //handle the error
15    }
16}

And when you want to get access to that data the next time:

1var localData = JSON.parse(window.localStorage.getItem('newsArticle12');
2 
3$.each(function(key, value){
4    //handle the data
5});

This is a useful technique to use in PhoneGap apps, it can be a significant optimisation when used appropriately. It reduces server requests and loads your [previously loaded] data faster.

Some considerations

There are some considerations with using local storage though.

There is a limit to how much data you can store via localStorage – approximately 5mb. If you are dealing with a lot of data you could soon reach that limit.

The main consideration should always evaluating the type of data that you are storing locally. Maybe sessionStorage is the better choice if your users require up to date information each time they open your app. Or maybe you need to include an expiry data in your JSON object and check against that before serving the data.

IT Trainer Indonesia

Hery 081.223344.506 - Freelance Certified IT Trainer , Excel VBA , Android Phonegap, Google Map API, Google Sketchup3D , MS Project, ExtJS, Oracle, SQL Server, MySQL, MS. Access VBA, Facebook API Developer dll.. Berpengalaman 15 Tahun sebagai Trainer bersertifikasi CIW, OCA, ITILF, MCP, MOS , Visit : http://freelance-it-trainer.blogspot.com/2014/12/freelance-certified-it-trainer-bandung.html

Recommended , IT Trainer, Bandung, Jakarta, Indonesia,

Freelance IT Trainer , Excel VBA , Android Phonegap, Google Map API, Sketchup3D , MS Project, ExtJS

JSON to JSONP

Introduction JSON

In my last article (Prepare a JSON Web Service and access it with JQuery), I had explained JSON, how to return JSON data from a Web Service, and how to use a JSON-enabled Web Service with JQuery. In this article, I will explain how JavaScript Object Notation with Padding (JSONP), an extended concept from JSON, can be used to solve cross domain issues.

What and why JSONP?

AJAX is a key technology in web 2.0 that is being used widely in web sites. AJAX uses the XMLHttpRequest client side API for communicating with the server in the background. However, this approach doesn't allow cross domain communication due to security reasons. JavaScript Object Notation with Padding (JSONP) is a way to grab JSON data from external domains. It's a better and cleaner alternative to other approaches (web proxy and IFrame) to get data from an external domain.

Same-Origin Policy

Same-origin policy is a concept in browser-side programming languages (such as JavaScript) which allows accessing resources in the same site (same domain) but preventing accessing resources in different domains. To overcome the same origin policy, we have the two following popular options in our hand:

Use a Proxy Web Service

As XMLHttpRequest (in AJAX) doesn't allow cross domain calls, the common approach is to use a proxy Web Service to access third party data. Say your site is hosted in www.mydomain.com and you need to access data from a different domain called www.thirdpartydomain.com. With AJAX, you can't directly call a Web Service on www.thirdpartydomain.com, but you can write a Web Service in your domain which will get data from www.thirdpartydomain.com. The approach is shown in figure 1:

Fig_1_-_Proxy_to_access_third_party_domain_data.jpg

Figure 1: Using a proxy Web Service to access data from a different domain

This approach works as the XMLHttpRequest calls the Web Service (i.e., the proxy Web Service) in my own domain and then the proxy Web Service calls the actual Web Service on the different domain. But though this is the easiest and widely used solution, it requires two Web Services calls, which is slower. Also, every call to the external Web Service requires going through my Web Service, which takes my server's valuable thread to process.

Use IFrame

Using IFrame, we can easily fetch data from a third party site. IFrame is easy to use but difficult to manage as each IFrame is an independent element in a page and interactions between IFrames are difficult. Also, once the content in the IFrame is loaded, the content itself is subjected to the same same-origin policy.

Why do we need to break the same-origin policy?

Today's web applications are rich in both data and UI, complex from a technical point of view, and combine different sets of data from different sources. For example, you have a university site where students visit. Also, you have a Facebook group for this university and you want to show group activities in your university site. To get activities from Facebook, you need to access services on the Facebook site (a different domain) from you web page. And here comes the cross domain issue. You can access Facebook site services from your server side code without any cross-domain issue. But this will prevent the processing of the page from finishing until the Web Service call finishes. Instead of calling the Web Service from server side code, you can add a JavaScript block which call the Web Service from the client's browser and thus alleviate load on your server. In a Mashup application, we need to access data from different sources. In the computing world, Mashup is a web application that combines data or functionality from two or more external sources.

How JSONP works?

The same-origin policy doesn't allow a script loaded from one domain to manipulate properties of a document loaded from a different domain. The browser does so to isolate contents from different domains to protect from improper manipulation. However the same-origin policy doesn't prevent adding scripts dynamically in the page from a different domain as long as the script doesn't try to load document from a different domain. The JSONP is a combination of these facilities: "On-demand JavaScript", and "Same-origin's flexibility for adding JavaScript from different domains":

On-demand JavaScript: This allows adding JavaScript to the page after the page is loaded. The JavaScript can be added by calling a Web Service with AJAX/XMLHttpRequest. So, due to this on-demand JavaScript facility, JavaScript can be added after the page is loaded. The script will be executed as soon as it will be added to the page. Details on on-demand JavaScript can be found here.

To explain how JSONP works, consider there's an external third party site www.thirdpartydomain.com and we have our site www.mydoman.com, and our site will call a third party site's Web Service to get data. Let's consider the following scenario to explain JSONP:

  • Add a JS function in your page: Say, in your page, you have a JavaScript function showThirdpartyData which takes an argument (of type JSON) and process this argument to show data on your site's web page. However, the data showThirdPartyData expects (dataArgument in the following code snippet) that ans argument will come from a Web Service on a different domain www.thirdpartydomain.com. The following code snippet shows the function signature:
  • Collapse | Copy Code
    <script type="text/javascript">          function showThirdPartyData(dataArgument) {               //process data here          }  </script>
  • Make sure the third party Web Service supports JSONP: We need to have a Web Service on www.thirdpartydomain.com which will support JSONP. That is, the Web Service will return JSON data but should be packed within a function name. The JSON data the Web Service will return will look like:
  • Collapse | Copy Code
    showThirdPartyData('{ firstName: 'Sohel', lastName: 'Rana' }');

    So, by calling the Web Service on www.thirdpartydomain.com, we will generate JSON data as shown above. Calling the Web Service will generate JSON data which is actually a JavaScript function call. The function name (in which data will be packed) needs to be configurable. Say, we can pass the function name in the querystring in the Web Service call and the Web Service will pack data inside the function name. That's how Flickr API works and we'll see that later.

  • Call the third party Web Service: Now you can call the www.thirdpartydomain.com Web Service with AJAX as it generates a JavaScript function call and the JavaScript function doesn't try to access data from a different domain except www.thirdparty.com. So, calling this Web Service complies with the same-origin policy [the same-origin policy doesn't prevent adding a script dynamically in the page from a different domain until the script doesn't try to load the document from different domains]. The following code block can be used to call a Web Service from the www.thirdparydomain.com site. You can call the following JavaScript function (callWebService) on a button's OnClick event:
  • Collapse | Copy Code
    function callWebService() {       // Insert dynamic script       var script = document.createElement('script');       script.src = 'http://www.thirdpartydomain.com/webservice/... ';              // append the script in the document body.        // As per on-deman script behaviour as soon as you add the script to        // the document,the script will be execute and the web service will        // be called.       document.body.appendChild(script);   }

Here is the sequence of how JSONP will work:

  1. The callWebService method will add a script tag in the page and will set the source of the script tag to the URL of the third party Web Service.
  2. You will call the CallWebService method on some events, say on a button's click event. As soon as the callWebService method is called, the script from the third party site will be added in the page.
  3. As soon as the script tag is added to the page, the script will be executed as per on-demand JavaScript's behavior. Once the script is executed, the method showThirdPartyData will be called in the page.

How a Web Service can be JSONP compatible

For JSONP to work, the Web Service from www.thirdpartydomain.com will support JSONP. To support JSONP, the Web Service must return JSON data in the format:

Collapse | Copy Code
functionName('{JSONData}')

Here the function name is a JavaScript function name. So when you call the Web Service from another site, the Web Service will generate JSON data which is actually a JavaScript function call. For example, to get the latest images tagged as 'cat' from Flickr, we can call the Web Service as: http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=myFunctionName.

In the above URL, the querystring tags=cat tells the service to return images tagged with cat. Here, the important one is jsoncallback=myFunctionName. This tells the service that the return data will be packed in a function call named myFunctionName. If you hit the URL, you will get the JSON data as shown below:

Fig_2_-_JSONP_support_in_flickr_API.jpg

Fig 2: JSONP support in Flickr API

So the above call to the Flickr API takes the function name in the querysting jsoncallback and we can pass the method name we are interested to use.

A real life example with Flickr

In the code provided along with this article, I have used the Flickr API to show recent images. Using JSONP, I have accessed data from flickr.com which is different from my domain. The Web Service URL is: http://api.flickr.com/services/feeds/photos_public.gne?tags=dog&tagmode=any&format=json&jsoncallback=showFilckrDataDog.

When you run the application provided along with this code, you will get two buttons in a web page. Clicking on a button will show the images tagged with cat, and clicking on another will show images tagged with dog. The two buttons invoke two different JavaScript functions: getFlickrDataWithDogTag and getFlickrDataWithCatTag. getFlickrDataWithDogTag uses the native JavaScript approach to add a script to the page. Whereas getFlickrDataWithCatTag uses JQuery to call the JSONP supported Web Service. The JQuery.getJSON method allows to load JSON data from a different domain. The format of the getJSON method is:

jQuery.getJSON(url, data, callback)

url is the URL for the Web Service. data (which is JSON data to the Web Service) can be omitted if not needed. callback is the callback method which will be called once the JSON data will be returned from the Web Service. Remember when you call the Web Service with the getJSON method, the Web Service URL will be a bit different. The jsoncallback querystring needs to have a '?' value. The URL to be used in the getJSON method is shown below:

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?" +             "tags=cat&tagmode=any&format=json&jsoncallback=?", showFilckrDataCat);

jQuery will automatically replace the '?' with the callback method (in the above URL, this is the showFlickrDataCat). And also, jQuery will add the script tag for you. So, when the Web Service call will return, jQuery will add the script tag which will invoke the JavaScript method in your page.

Wednesday, January 14, 2015

Tips Liburan Ke Legoland johor

Kali ini saya akan membahas kegiatan liburan saya dengan keluarga ke legoland bulan Januari 2015 ini tepatnya trip itinerary selama 4 hari 3 malam di johor malaysia

Liburan tahun ini cukup istimewa karena ditemani dengan putra kami yang baru berumur 16 Bulan

Berikut ulasannya semoga bermanfaat buat para keluarga yang ingin berlibur ke legoland johor tertutama membawa balita

BOOKING PESAWAT AIRASIA DARI BANDUNG KE JOHOR

Semua berawal dari iseng mencari jadwal penerbangan untuk liburan pada bulan desember 2014 lalu, awalnya kami berniat liburan akhir tahun ke bali namun melihat ternyata harga tiket pesawat sungguh mahal karena peak season , maka setelah memilih rute lain akhirnya jatuh pilihan pada Johor disamping putriku sudah cukup lama ingin wisata ke legoland dan hello kitty johor malaysia. Saya memilih penerbangan di awal tahun di samping harga tiket yang murah dan tentunya kami tidak akan menemukan crowded yang terjadi saat berpergian dengan tingkat keramaian tinggi karena kami akan membawa putra kami yang masih balita dan belum tau dilema apa yang akan dihadapi.

Syukurnya kami mendapatkan jadwal dan harga yang pas yaitu berangkat sabtu 10 Jan dan pulang selasa 13 Jan 2015 dan lebih bersyukur lagi karena Airasia memiliki jadwal penerbangan pulang pergi dari Bandung (husein) ke Johor (Senai Airport) langsung. Kami pun langsung membooking penerbangan tersebut dengan kartu kredit, tak lama ticket itinerary dari asia sudah langsung kami dapatkan

Kesimpulan saya setelah kembali ke indonesia
- Beli tiket tidak disaat peak seasion jauh menguntungkan
- Penerbangan Airasia Bandung - johor sungguh membantu kami yang tinggal di bandung
- Bayi (Infant) tidak membayar full , hanya sekitar 180 ribu
- Bagasi cukup pesan untuk 1 orang kapasitas 25 KG , ternyata saya cuma membawa 18 KG saja
- Stroller bayi sangat membantu di tempat tujuan , Gratis masuk bagasi (tidak dihitung dari yang 25 kg tersebut) Aturan berlaku untuk semua penerbangan Internasional


Tahapan selanjutnya memesan hotel yang sesuai budget dan nyaman, proses pencarian memakan waktu cukup lama kurang lebih sekitar 3-4 hari setiap pulang kerja, bolak balik agoda.com dan booking.com mencari harga spesial diskon, sepertinya hampir semua hotel di johor saya cek reviewnya di tripadvisor, target saya untuk hotel saat itu adalah :
1. Murah tentunya
2. Besar ukurannya (> 20 M2), Jika memungkinkan 2 kamar
3. Lokasi strategis dekat dengan mall, tempat makan, apotik, dan klinik (karena saya bawa bayi tentunya jadi prioritas masalah keamanan)
4. Amenities (Minimal harus ada Coffee maker, agar bisa buat susu panas buat bayi)
5. Terakhir baru sebisa mungkin dekat dengan legoland/ hello kitty jika dapat
6. Breakfast tidak terlalu penting yang penting dekat dengan tempat makan

Setelah mencari cari bahkan sampai begadang akhirnya pilihan jatuh pada hotel Grand Sentosa Hotel (Plaza sentosa - taman Sentosa Johor) yang merupakan hotel budget di johor  , lokasi di dalam mall Plaza sentosa. dan berdekatan dengan klinik, apotik dan tempat makan walaupun jarak ke lokasi Legoland dan Hello Kitty cukup jauh sekitar 40 menit  pakai taksi atau sekitar 25 KM tapi tidak masalah yang penting keluarga aman.

Beberapa review di tripadvisor mungkin tidak terlalu bagus, tapi saya rasa logic saja namanya juga Budget hotel, tentunya jangan berharap lebih seperti bintang 4 atau 5 , yang saya suka dari hotel ini ukuran kamarnya 54 meter2 dan syukurnya saya berhasil mendapatkan 2 kamar connecting hanya dengan 2,1 Juta saja untuk 3 malam ( strategi saya adalah 2 kamar tersebut bermanfaat sebagai kamar bersih dan kamar kotor atau artinya area buat istirahat anak anak tentunya di kamar bersih dan area buat segala macam kekacauan dan crowded di kamar kotor ) Alhamdulillah artinya  dengan 2 kamar itu saya punya kamar seluas 100 Meter persegi untuk dimanfaatkan anak anak dan keluarga

Kesimpulan saya setelah balik ke indonesia :

1. Pilihan saya sudah tepat dengan hotel  Grand Sentosa karena lokasinya sangat mendukung buat keluarga , karena berada di dalam mall plaza sentosa , didalamnya ada area toko toko buat istri window shopping, ada supermarket juga didalamnya  yang menjual susu bayi, makanan bayi, pampers, hampir sama besar dan lengkap dengan yogya dept store, harga sama dengan di Indonesia kok tidak jauh beda terkecuali Rokok yah (2x harga di indonesia, masih murahlah ketinmbang di singapore)

2. Pilihan memilih 2 kamar juga tepat, karena ketika si bayi waktunya istirahat disaat bersamaan istri saya harus mempersiapkan ini itu atau mencuci kelengkapan makan dan baju si bayi di kamar mandi tidak ada yang terganggu (anak anak tidur pulas ditemani saya) dan istri di kamar satu lagi sibuk dengan aktifitasnya, kamar mandi pun tidak saling menunggu untuk digunakan

3. Jangan lupa membawa penghubung colokan listrik yang kaki tiga - mirip  di singapore (untungnya saya masih menyimpannya sisa perjalanan singapore tahun lalu)

4. Seperti beberapa ulasan di tripadvisor mengenai air yang tidak panas memang terjadi tapi saya sudah tahu resikonya (Pihak hotel cept tanggap kok menyelesaikan masalah air), karenanya strategi saya mengambil 2 kamar sehingga saat salah satu kamar airnya tidak panas, kami punya kamar lainnya. Oh ya kebiasaan saya juga setiap checkin bersama staff roomboy yang mengantar koper saya tidak pernah menyuruh dia langsung pergi tapi saya akan touring dan cek semua amenities yang ada di hotel dan memastikan lancar semua, jadi saat saya mengetahui air di salah satu kamar mandi tidak panas, langsung saya info dan langsung mendapat respon teknisi kurang dari 5 menit

5. Di sekitar hotel terdapat berbagai makanan, mayoritas masakan china, karena wilayah itu dikenal sebagai sentra bisnis kaum cina , masalah halal dan haram tentu harus Anda tanyakan dulu ke pihak resorannya, tapi kalau mau aman saat keluar hotel ambil kiri kurang lebih berjarak 50 meter ada restoran India Muslim yang buka 24 Jam , rasa masakannya mirip mirip masakan padang tentunya

6. Di sebelah hotel juga banyak klinik obat tradisional cina dan tidak jauh dari situ sekitar 150 meter ada juga toko farmasi modern dimana waktu itu saya memang harus membeli obat buat si bayi yang mencret mencret

7. Pihak hotel sangat friendly, sangat membantu sekali, setiap hari jam 9 kurang  kamar pasti dibersihkan tanpa diminta, kalau saya sudah terbiasa tidak membiarkan kamar dibersihkan saat saya tidak ada, bukan berarti disana tidak aman yah, itu sudah kebiasaan saya saja di hotel manapun

8. Setiap  malam saya dan keluarga atau kadang bergantian dengan istri bisa berjalan jalan di sekitar hotel dan di mall, bahkan terkadang istri saya pergi sendiri untuk belanja kebutuhan di supermarket tanpa ditemani saya

9. karena daerah tersebut mayoritas etnis cina, maka jangan kaget pemandangannya jauh diluar konteks negara islam , wanita wanita cina super super seksi akan sering anda lihat siang ataupun malam, malam akan lebih ramai lagi karena penuh dengan tempat makan outdoor. (Tapi positifnya bagi saya adalah daerah ini lebih terbuka dengan modernisasi sehingga gaya berpakaian atau kegiatan kita tidak selalu jadi sorotan)


Jadi Grand sentosa Hotel membuat saya nyaman menginap terutama saat membawa bayi

Selanjutnya setelah pesan hotel, saya lanjukan dengan membuat passpor untuk bayi, prosesnya lagi lagi sangat mudah, setelah searching link di google akhirnya ketemu link web imigrasi dan saya mulai proses tahapan buat passpor online.. saran saya lakukan tengah malam saat server tidak terlalu sibuk, beberapa kali saya coba siang terjadi error.

Prosesnya sangat mudah Anda tidak perlu lagi scan Kartu keluarga dan lain lain karena sudah tidak ada upload dokumen lagi, Anda cukup mengisikan data data utama bayi anda sesuai kartu keluarga, gunakan alamat email valid Anda untuk daftar, setelahnya anda akan mendapatkan  email berisi besaran yang harus anda bayar , waktu itu saya cuma 355 ribu, print attachmentnya dan bawa ke bank BNI, tanya saja ke security  bahwa anda mau bayar passpor online, di teller setelah membayar Anda akan mendapat bukti bayar (jangan sampai hilang) di dalam bukti bayar ada kode bayar yang harus Anda masukkan kembali ke website imigrasi (melalui link di email) , setelahnya Anda akan diminta mengisikan tanggal kedatangan Anda ke kantor imigrasi setempat, pastikan Anda dan istri (harus berdua, kalau tidak bikin surat kuasa) Harus  datang sesuai tanggal yah dan jangan lupa bawa kelengkapan (Passpor suami istri, Surat Nikah, KTP, Kartu Keluarga (Semua dicopy 2 kali, yang asli tetap dibawa) , Materai 6000 sebanyak 2 buah, dan bawa juga bukti setor BNI

Begitu datang ke imigrasi jangan ikutan ngantri dengan pengantri umum lainnya, tanya ke security / petugas dimana antrian passpor online (Antriannya sedikit kok untuk online) waktu itu saya  cuma butuh waktu 30 menit  dari antri sampai dengan interview dan pengambilan foto si jagoan kecil saya

Setelahnya tunggu 3 hari kerja untuk pengambilan passpor (Ngantri ambilnya yang lama sampai 2 jam  karena waktu itu  lagi rame orang mau berpergian ke luar negeri kali diakhir tahun ), datanglah pagi pagi untuk ambil

Kesimpulan saya soal passpor online
1. Bikin passpor online mudah dan murah
2. Lakukan di malam hari
3. Selalu simpan bukti pembayaran dan buat copy semua kelengkapan minimal 2
4. jangan lupa materai 2 buah
5. Antri untuk ambil passport sebaiknya datang paling pagi (sebelum buka)


MEMBELI TICKET LEGOLAND ONLINE

Satu hal yang tidak saya lakukan / tidak sempat adalah membeli ticket legoland online yang bisa hemat sampai dengan 20% hal itu karena waktu yang mepet sudah H-3 dan saya tidak ingin ambil resiko ticket onlinenya tidak saya terima atau ada masalah pembayaran online, akhirnya saya putuskan tidak membelinya secara online.

Untungnya begitu sampai di hotel saya iseng menanyakan apakah ada yang menjual ticket legoland di hotel, dan ternyata ada dengan harga cukup murah 130 RM/adult dan kids 90RM (<3 tahun gratis) jadi saya bisa save lumayan walau tidak  sampai  hemat 20% seperti beli online, belum lagi supir taksi juga menawarkan voucer hemat 40RM , karena para supir tersebut kalau beli (petrol/ bensin) mereka mendapatkan voucer potongan ke legoland biasanya mereka jual vouvher potongan itu 20RM tapi karena saya sudah pesan di hotel jadi tawaran supir taksi saya tolak

Kesimpulan saya :
1. Jangan takut kalau tidak sempat beli online
2. Tanyakan pihak hotel alternatif pembelian tiket murah legoland , pasti selalu ada


MEMBELI KELENGKAPAN PERJALANAN

Saya selalu berprinsip apabila berpergian sebisa mungkin barang barang bagus yang ada dirumah tidak dibawa mengindari tertinggal dan menjadi keributan baru dengan istri

Jadi sebelum berangkat saya membeli beberapa perlengkapan yang berharga murah terutama buat sikecil seperti

1. Botol Susu
2. Tempat Susu Bubuk Plastik (saya pakai botol minum plastik biar praktis tidak perlu pake sendok)
3. Pasta gigi, sabun cair
4. Topi murah, kaca mata hitam murah  (di legoland panas banget)
5. Beli stroller baby yang super murah dan ringan cuma Rp 200 rb di toko lavie bandung
6. Tempat makan plastik  bayi dan sendok yang sekali pakai
7. Karena Senai dan Husein keduanya Airport lokal dan bukan internasional maka proses pemeriksaan cukup ringan tidak seperti Seoakrno Hatta dan Changi airport singapore yang cukup ketat, bahkan aturan membawa cairan > 100 ml seakan tidak berlaku, botol minuman saya lolos pemeriksaan sejak di husein s/d senai airport

Pokoknya semua barang itu yang saya nilai kalau hilang , tertinggal atau rusak nothing to lose lah..., tidak perlu jadi keributan  dengan istri

Kesimpulannya :
1. Barang barang itu benar benar menghemat konsentrasi saya agar tidak banyak yang diingat dan diurus bahkan ada yang sekali pakai - buang
2. Buatlah senyaman mungkin perjalanan Anda agar fokus dengan si kecil , bukan dengan barang barang bawaan




Untuk pengguna Airasia Anda sebenarnya dari senai Airport johor bisa hemat biaya taksi dengan order ticket bis causeway link senai - JB Sentral for free (lakukan sewaktu masih di Indonesia), silahkan cari link causeway link johor dan cari link airasia passenger , isikan booking no. Air asia dan data semua penumpang dari keluarga Anda (Sistem mereka akan cek data penumpang sesuai ticket), tunggu beberapa menit maka ticket causeway link akan dikirim ke email Anda (langsung di print), lumayan Anda bisa menghemat 90-100 RM perjalanan Dari Grand sentosa - Senai Airport atau sebaliknya.

Namun sekalipun saya memesan tiket causeway tapi saya tidak gunakan karena pertimbangan
1. Saya membawa keluarga dan barang banyak, akan repot membawa  dan menunggu bis yang akan mengantar karena lokasinya tidak di pintu keluar bandara
2. Suasana pas landing lagi hujan di Airport senai
3. Jalur bis causeway tidak ada yang melewati taman sentosa daerah hotel, jadi saya nantinya akan turun di JB Sentral lalu sambung taksi lagi sekitar 10RM ke Grand sentosa Hotel

Sehingga saya putuskan demi kenyamanan spent 90RM untuk nantinya PP Hotel - Senai Airport

Kesimpulan saya :
1. causeway link perlu / tidak perlu mending tetap diregistrasi saja (toh gratis buat penumpang airasia)


Melihat fasilitas web checkin di airasia tentu saja membuat saya berpikir untuk mencobanya sehingga tidak perlu berlama lama antri checkin di airport nantinya, sehingga saya lakukan  web checkin Airasia di H-3 , masalahnya adalah :

1. Saat datang kita tetap harus baggage check in karena membawa koper yang akan masuk bagasi dan tentu antriannya tetap sama dengan antrian orang checkin lainnya , untungnya bukan peak session jadi counter pun kosong
2. Saya berani katakan bahwa terjadi kecurangan oleh petugas bandara husein.  saat checkin saya menunjukkan boarding passdari web checkin online , tentunya didalamnya sudah tidak tercantum cost breakdown seperti di lembar ticket  itinerrary airasia, dan petugas menagih kembali airport tax, karena yang checkin saat itu istri saya dan saya sibuk urus memasukkan koper dan stroller , istri saya langsung membayar kembali airport tax, tidak lama setelah itu saya baru ingat bahwa airaisa sudah memasukkan airport tax dalam tagihan itinerary yang kami bayar, tapi karena itinerary saya ada di tas yang lain dan susah untuk diambil dan saya juga tidak mau jadi masalah yah sudahlahhh saya ikhlaskan saja (biar tuhan yang balas).
Tapi strategi saya adalah nanti saat balik dari senai saya tidak akan menunjukkan boarding pass web cehckin tapi saya tunjukkan saja Itinerary yang saya bawa dimana ada cost breakdownnya sehingga bisa saya tunjukkan ke petugas bahwa airport tax sudah saya bayar saat beli online,  dan benar saja di senai petugas tidak menagih airport tax lagi, kami langsung mendapat boarding pass

Kesimpulan saya :
1. Jika Anda berpergian dengan membawa koper bagasi , percuma lakukan web checkin, sebaiknya tetap lakukan checkin biasa dengan datang 2 jam lebih awal sebelum flight
2. Hati hati dengan oknum petugas di Husein yang memanfaatkan keribetan anda, tunjukkan ticket  itinerary yang ada cost breakdownnya, kalau perlu todong duluan bahwa anda sudah bayar airport tax dan perlihatkan detail yang ada di itinerary airasia


Satu yang saya sesali adalah tidak membeli prepaid simcard sewaktu di pesawat airasia padahal pramugari sudah menawarkan saat dipesawat, kalau anda bisa beli langsung saat booking online mendingan beli langsung nanti tinggal diambil simcardnya saat dipesawat dengan menunjukkan itinerary anda, kenapa ?? karena harganya ternyata jauh lebih murah hanya 35RM sudah termasuk 500MB untuk data internet, 30 menit call

kenapa saya sesali karena begitu sampai airport Anda hanya menemukan 1 counter operator yaitu celcom yang mahal sekali yaitu 50RM dan hanya 30 menit telepon (tanpa paket data), akhirnya tidak saya beli dan di mall didalam hotel pun sama bahkan lebih parah  15 menit pemakaian 40 RM (tanpa paket data) akhirnya karena sudah nanggung saya beli di mall di hotel untuk internet untungnya wifi cukup kencang di hotel jadi masih bisa BBM dengan orang tua di bandung mengabari bahwa kami sudah sampai di hotel dengan selamat.

Anda tidak perlu 2 kartu yang penting cukup 1 kartu saja agar anda bisa menelepon supir taksi dan juga untuk tujuan darurat (Tapi terserah anda jika ingin tetap bisa komunikasi dengan istri saat mungkin tiba tiba anda terpisah), kalau saya selama trip ke luar negeri cukup beli 1 saja


Waktu di johor sama dengan waktu indonesia tengah (WITA) artinya beda  lebih cepat 1 jam dengan waktu bandung (WIB) , karenanya begitu sampai disana sesuaikan jam anda dengan menambah 1 jam, dan jangan kaget juga disana jam 7.20  malam masih terang benderang dan jam 6 pagi masih gelap sekali (mmhh ..saya rasa harusnya johor itu WIB.. :)



Perlu di ingat bahwa grand sentosa Hotel ada juga kekurangan lainnya  (walau bagi saya tidak masalah) tapi belum tentu buat Anda, yaitu jalur hotel ini tidak dilalui bis sekalipun ditengah kota yang ramai, sehingga kemana mana harus dengan taksi, tapi bagi saya gak masalah karena semua kebutuhan ada di sekitar hotel dan udara disekitar hotel tidak panas bahkan sejuk berangin (beda sekali dengan lokasi legoland yang super panas)

Hanya saja untuk ke legoland atau ke hello kitty tentu saja kami harus mengenakan taksi. Ok begini petunjuk dari saya

Di Johor ada 4 jenis taksi dibedakan dengan warna (Putih, Merah, Kuning, Biru)
1. Taksi putih, taksi ini adalah taksi khusus airport , begitu anda sampai dekat pintu keluar ada counter khusus Taksi (hanya 1 counter kok), sebutkan tujuan Hotel Anda nanti resepsionisnya akan memberi tahukan pricenya. Enaknya harga yang disampaikan sudah include semua layanan bahkan sampai Tips (Anda dilarang memberi tips ke supir  taksi putih dan memang pasti ditolak drivernya, karena sudah saya coba dan supir tidak mau terima) waktu itu saya cuma bayar 45RM dan bayar langsung di counternya dari senai ke grand sentosa hotel (Drivernya friendly sekali, semua taxi driver di johor benar benar ramah termasuk yang kalangan India), mayoritas orang India bekerja sebagai pelayan, tukang sapu atau supir taksi

2. Taksi Merah, taksi ini bukan taksi dari perusahaan, taksi ini milik personal tapi diawasi ijin dan operasionalnya  oleh pemerintah jadi anda tetap terjamin aman, dan karena taksi ini milik personal/pribadi maka anda bisa bernegosiasi dengan supir taksi harga non argo-nya dimana paling jauh rata - rata 40-50 RM asumsi 45 menit - 1 jam perjalanan (pelajari jarak tempuh di google map bisa membantu), enaknya adalah jika Anda menggunakan supir etnis India mereka suka kasih diskon kalau kita memesan ulang lagi , contohnya saat kami ke hello kitty kami bayar 45 RM , saat ke legoland cuma 40 RM dan saat ke airport yang lumayan jauh cuma 40 RM (simpanlah no kontaknya) sebenarnya anda bisa meminta pihak hotel untuk memanggil taksi yang sama tapi saran saya sebaiknya jangan,  anda cukup janjian dengan si supir jam berapa ingin dijemput di hotel , karena kalau melalui hotel si supir harus kasih tips petugas hotelnya (curhat si pak supir ke saya ... he he ). tapi yah gpp terserah Anda (kalau saya lebih senang janjian dengan 1 taksi yang sama biar dapat diskon dan obrolannya bisa nyambung terus)

3. Taksi Biru, banyak ulasan jelek tentang taksi ini di internet, tapi jangan salah tafsir saya rasa taksi ini tidak mahal karena sebanding dengan pelayanannya, dikatakan lebih mahal mungkin karena taksi ini milik perusahaan dan kita dilarang nembak atau negosiasi dengan supir karena harus menggunakan argo, taksi biru benar benar exclusive dan taksinya baru baru tidak seperti taksi putih atau merah yang jadul, taksi ini pun kelasnya bukan sedan tapi seperti inova, KIA carnival  dan mobil jenis APV besar lainnya, jadi buat keluarga terutama yang bawa stroller ke legoland atau hello kity tidak perlu repot melipatnya. Saya dan keluarga menggunakan taksi ini setiap pulang dari satu lokasi , kenapa taksi ini saya gunakan? , karena mereka mendominasi tempat  kunjungan hello kitty dan legoland perusahaan mereka berani bayar sewa parkir taksi di lokasi tersebut, sehingga taksi lain seperti taksi merah tidak akan bisa ngetem atau parkir disana, mereka hanya bisa lewat saja dan drop penumpang, dan beberapa taksi merah yang lewat pun jangan kaget kalau tidak mau menerima Anda karena area itu dimiliki taksi biru, karena sudah saya coba , kecuali anda jalan jauh keluar dari area hello kity dan legoland, anda tentu tidak mau kalau bersama keluarga jalan kaki dulu jauh ke area yang non blue taksi area, alternatif lain anda bisa gunakan bus sekitar 4,5-8 RM / perorang ke JB Sentral dari Hello Kitty / legoland lalu sambung pake taksi ke hotel sekitar 8-10 RM(tapi sekali lagi saya tidak mau repot kalau bawa baby) rate pulang dari Hello kitty ke hotel 60 RM dan kalau dari legoland ke hotel berdasarkan argo 50 RM dengan taksi biru, sekali lagi sebanding karena taksinya nyaman dan pengemudinya ramah sekali, jagoan kecil saya saja suka dengan para supir india ini

4. Taksi kuning, taksi ini jarang dan belum saya coba, tapi kata supir taksi merah taksi ini sistemnya charter atau sewaan

Taksi lain juga ada taksi hitam yang kelas mercy biasanya ada di hotel mewah tentu saja ratenya jangan ditanyalah.. untuk tamu VIP juga sepertinya




Lokasi ini tidak menyenangkan buat orang dewasa, tapi buat anak anak terutama anak cewek cukup menyenangkan karena semua bertema hello kitty, tiket masuk 75RMbaik dewasa atau anak kecuali dibawah 3 tahun (gratis), tapi lokasi diluar hello kitty cukup bagus untuk foto foto, sebenarnya ada 3 lantai di lokasi ini, untuk anak cewe cocok lantai 2 (Hello kity) dan untuk anak cowo lantai cocoknya di lantai 3 (tiap lantai beda wahana dan beda tiket tentunya), saya hanya berkunjung ke Hello Kity saja karena sudah cukup memuaskan putri cantik saya... dan kami juga tidak bisa lama karena kami datang terlambat jam 14.30 kami baru sampai sedangkan tempatnya tutup jam 17.30 (tapi cukup kok karena wahanya sangat sedikit).

Supir taksi sebenarnya lebih menyarankan kami berkunjung ke angry bird ketimbang hello kitty, karena beberapa turis menurut dia lebih puas berkunjung ke angry bird, tapi karena sudah janji ke anak saya tetapkan tetap ke hello kitty daripada putri cantikku penasaran sepulang ke Indonesia


Kami berangkat ke legoland jam 9.30 sampai sana jam 10.20 karena kami memilih waktu pas hari kerja yaitu hari senin maka suasana disana yang panas tidak menyebalkan karena tidak ada antrian setiap kali naik wahana, bahkan putri saya bisa naik 1 wahana sampai beberapa kali, sayangnya si baby cuma bisa naik 1 wahana saja yaitu kereta kecil di tempat bermain khusus baby.

Saat sampai disana suasana sepi sekali, kami manfaatkan untuk makan siang dulu di KFC sebelum pintu masuk  walaupun baru jam 10.45 biar tidak terpotong acaranya dan info dari supir taksi bahwa makanan di cafe didalam area legoland mahal mahal
Satu hal yang menarik soal KFC di johor baik di senai airport dan lokasi lain termasuk legoland adalah ayamnya yang besar besar dan nasinya selalu dalam bentuk nasi lemak (enak dan gurih) sehingga paket 13,5 RM cukup saya beli 2 buat bertiga (saya, istri dan anak perempuan yang besar) tinggal tambah nasi 1 buah, 1 paket saja berisi 2 ayam yang besar besar (pokoknya kenyang)

Wahana di legoland mirip dengan percampuran  dufan dan Universal studio singapore, yang saya suka adalah lokasi toilet yang selalu ada didekat setiap wahana terutama juga ada family room di area toilet sehingga memudahkan saya dan istri mengganti popok bayi putra kami yang sedang mencret (toilet bersih dan harum kok) petugas kebersihannya hampir semua etnis India yang standby setiap saat.

Saran saya saat melihat pekerja india di johor ingatlah "Don't judge the book from it's cover yah... " , penampilan mereka terlihat selintas kurang nyaman karena hitam pekat dan tatapannya kadang terlihat kurang senyum, tapi cobalah iseng tanya sesuatu atau minta bantuan , mereka akan menjawab dan membantu dengan sangat ramah (sampaikan hal itu ke istri dan anak anak anda biar hilang rasa tidak nyamannya)


Kami kembali ke indonesia dengan berangkat dari hotel jam 9 pagi walaupun mepet dengan waktu checkin tapi Alhamdulillah kami bisa membeli oleh oleh oleh berupa coklat dan permen khas johor di airport diborong samapi sekitar 150 RM sama istri, agenda yang tidak bisa kami lakukan selama di johor adalah ke angry bird dan ke  JPO (Johor premium Outlet) katanya berjarak 30 menit dari hotel kami, kendalanya adalah  karena putra kami dalam kondisi kurang bagus (Mencret mencret dari sejak sampai di Johor) tapi tidak apa yang penting hello kitty dan legoland sebagai agenda utama sudah tercapai dan itu sudah cukup memuaskan terutama lagi tahun ini adalah perjalanan pertama kami dengan si jagoan kecil kami yang baru 16 bula dan menjadi tantangan buat kami. Alhamdulillah sampai di bandung sikecil langsung ke dokter dan sekarang sudah sehat kembali

Satu hal yang berkesan adalah penduduk Johor, supir taksi, petugas imigrasi johor, awak airasia semuanya sangat ramah kepada kami , sehingga kunjungan ke johor sungguh berkesan.

Justru pengalaman tidak berkesan saya adalah saat keberangkatan di husein (Kecurangan airport tax oleh oknum petugas) dan kepulangan di husein juga dimana saat pulang kami pemegang passpor Indonesia yang jelas beralamat di bandung masih harus mengisi form kedatangan , sampai kesalnya menunggu karena juga kelelahan istri membawa anak anak saya nyelonong keluar dan saat ditanya petugas istri saya cuma bilang "Sedang diisi suami saya disana tuh!!" (mantap !! he he)

Bukan kami tidak taat aturan tapi menurut kami perlu direview hal hal konyol seperti ini. karena di Johor saja kami tidak perlu mengisi apapun, bahkan saya ingat saat di senai dimana istri saya sedang menggendong si jagoan kecil sehingga susah melepas tasnya, petugas wanitanya dengan ramah mempersilahkan istri saya lewat tanpa periksa tas (karena dia tau istri saya sedang ribet) bahkan petugas itu setelahnya berbincang bincang dengan istri serta bercanda dengan anak anak saya, ketika saya ribet mencari stroller untuk angkut barang petugas itu juga yang mengambilkan stroller buat saya (benar benar pengalaman berkesan di johor dan diairport senai, someday saya dan keluarga InsyaAllah kembali lagi untuk menyelesaikan agenda wisata kami lainnya, Terima kasih buat warga johor malaysia atas keramah tamahannya)



Postingan selanjutnya akan saya tampilkan foto foto perjalanan kami




Salam,
Semoga bermanfaat
Hery Purnama
SISINDOTEK Bandung