Shredding Paper

“There’s story about a little kid who keeps shredding paper
and his parents take him to all kinds of doctors to get him to stop shredding paper

and finally they take him to the most expensive doctor in the world

who turns to the kid and he says
"Kids if you stop shredding paper,
your parents will stop dragging you to doctors"

And the kid turns to his parents and says "Why didn’t you just say so?"

– Newsroom Episode 9 Season 2.

Seringkali, sesuatu akan menjadi lebih sederhana jika kita mengatakan hal yang sebenanya

Windows 8–Application Data

Aplikasi Windows 8 dapat memiliki tempat penyimpanan yang terisolasi, yang hanya dapat diakses oleh aplikasi tersebut. Dalam Windows Phone dan Silverlight hal ini dikenal dengan sebutan IsolatedStorage. Konsep serupa juga dimiliki oleh aplikasi Window 8-style UI dimana masing-masing aplikasi memiliki sejumlah kuota untuk menyimpan berkas-berkas spesifik yang hanya ingin diketahui atau diakses oleh satu aplikasi.

Terdapat dua penyimpanan yaitu lokal (pada perangkat keras) dan roaming .

Untuk melihat bagaimana implementasi application data dalam aplikasi, buatlah sebuah proyek baru, aplikasi Windows Store dengan template Blank App,beri nama Program_ApplicationData.

image

1. Hapus dahulu berkas MainPage.xaml lalu tambahkan sebuah Page bertipe Basic Page lalu beri nama MainPage.xaml. Halaman baru ini akan menjadi halaman pertama aplikasi

image

2. Tambahkan blok kode dibawah ini pada MainPage.xaml tepat sebelum tag <VisualStateManager>.<VisualStateGroups>

<StackPanel Grid.Row=”1″ Margin=”120,30,0,0″ >

<Button Click=”Button_Click_1″>save</Button>

<TextBox Width=”400″ HorizontalAlignment=”Left” x:Name=”inputText”></TextBox>

<TextBox Width=”400″ HorizontalAlignment=”Left” x:Name=”inputText2″></TextBox>

<TextBox Width=”400″ HorizontalAlignment=”Left” x:Name=”inputText3″></TextBox>

<Button Margin=”0,20,0,0″ Click=”Button_Click_2″>open</Button>

<TextBlock x:Name=”outputText2″ Style=”{StaticResource HeaderTextStyle}”/>

<TextBlock x:Name=”outputText3″ Style=”{StaticResource HeaderTextStyle}”/>

<TextBlock x:Name=”outputText4″ Style=”{StaticResource HeaderTextStyle}”/>

</StackPanel>

3. Tambahkan deklarasi ApplicationDataContainer. Variabel ini akan menjadi referensi, tempat kita menyimpan data pada penyimpanan lokal aplikasi.

protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)

{

localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;

}

Windows.Storage.ApplicationDataContainer localSettings;

4. Untuk menyimpan dan membaca data yang disimpan ke dalam kontainer lokal tambahkan blok kode berikut

private async void SaveSettingAsync(string settingKey,string settingValue,ApplicationDataContainer settings)

{

settings.Values[settingKey] = settingValue;

}

private async Task<String> LoadSettingAsync(string settingKey, ApplicationDataContainer settings)

{

return settings.Values[settingKey].ToString();

}

ApplicationDataCointainer memiliki anggota Values yang bekerja seperti Dictionary di .NET framework. Untuk menyimpan data kita cukup menambahkan kata kunci untuk mengacu nilai tersebut.

5. Untuk menyimpan dan membaca data atomik yang disimpan ke dalam kontainer lokal tambahkan blok kode berikut.

private async void SaveSettingCompositeAsync(string settingKey,string settingValue,ApplicationDataContainer settings)

{

ApplicationDataCompositeValue composite = new ApplicationDataCompositeValue();

composite[“intVal”] = 1;

composite[“strVal”] = settingValue;

settings.Values[settingKey] = composite;

}

private async Task<ApplicationDataCompositeValue> LoadSettingCompositeAsync(string settingKey, ApplicationDataContainer settings)

{

ApplicationDataCompositeValue composite = (ApplicationDataCompositeValue)settings.Values[settingKey];

if (composite == null)

return null;

else

return composite;

}

Untuk menyimpan suatu nilai atomic tanpa harus membentuk tipe bentukan kita dapat menggunakan kelas ApplicationDataCompositeValue. Kelas ini dapat menampung sejumlah nilai dan disimpan dengan menggunakan kata kunci. Selanjutnya nilai yang disimpan dapat diacu menggunakan kata kunci yang sesuai.

6. Di dalam ApplicationDataCointainer kita dapat membuat kontainer-kontainer lain untuk membuat semacam grup penyimpanan nilai konfigurasi. Untuk melakukannya berikut contoh penggunaan kontainer pada ApplicationDataContainer.

private async void SaveSettingViaContainerAsync(string settingKey,string settingValue, string settingContainer,ApplicationDataContainer settings)

{

ApplicationDataContainer container = settings.CreateContainer(settingContainer, ApplicationDataCreateDisposition.Always);

if (settings.Containers.ContainsKey(settingContainer))

{

settings.Containers[settingContainer].Values[settingKey] = settingValue;

}

}

private async Task<String> LoadSettingViaContainerAsync(string settingKey, string settingContainer, ApplicationDataContainer settings)

{

bool hasContainer = settings.Containers.ContainsKey(settingContainer);

if (hasContainer)

{

return settings.Containers[settingContainer].Values[settingKey].ToString();

}

else

return null;

}

7. Untuk mencoba beberapa fungsi diatas tempat kan blok kode berikut pada event handler Button 1 dan Button 2.

private async void Button_Click_1(object sender, RoutedEventArgs e)

{

SaveSettingAsync(“setting1”,inputText.Text, localSettings);

SaveSettingCompositeAsync(“setting2”,inputText2.Text, localSettings);

SaveSettingViaContainerAsync(“setting1”,inputText3.Text, “container”, localSettings);

}

private async void Button_Click_2(object sender, RoutedEventArgs e)

{

outputText2.Text = await LoadSettingAsync(“setting1”, localSettings);

ApplicationDataCompositeValue compositeValue = await LoadSettingCompositeAsync(“setting2”, localSettings);

outputText3.Text = compositeValue[“strVal”].ToString();

outputText4.Text = await LoadSettingViaContainerAsync(“setting1″,”container”, localSettings);

}

8. Tekan F5 untuk melihat hasilnya. Berikan nilai pada TextBox pertama,kedua dan ketiga. Lalu tekan save. Kemudian tekan open untuk melihat hasilnya.

image

Perhatikan meskipun kita menyimpan dua nilai dengan satu kata kunci yang sama yaitu setting1 namun nilai nya tidak akan saling overlap , karena penyimpanan yang kedua disimpan di kontainer yang berlainan.

Kita juga dapat menggunakan penyimpanan lokal untuk menyimpan berkas. Untuk mendapatkan referensi terhadap direktori yang akan digunakan aplikasi , panggil fungsi Windows.Storage.ApplicationData.Current.LocalFolder . Setelah mendapatkan acuan ke direktori yang digunakan, berbagai fungsi pada subbab Operasi File Windows RT dapat digunakan. Jika kita menggunakan direktori pada ApplicationData maka hanya aplikasi kita saja yang dapat mengakses berkas yang tersimpan di dalamnya.

Windows 8–Membaca dan Menulis File

Untuk bekerja dengan berkas pada Windows RT maka kita dapat menggunakan File API , terutama kelas StorageFolder dan StorageFile. Jika Anda hendak menulis berkas ke filesystem kita harus mendeklarasikan kemampuan tersebut ke dalam aplikasi melalui App CapabilitApp Capability.

Untuk melihat bagaimana implementasi File API dalam aplikasi, buatlah sebuah proyek baru, aplikasi Windows Store dengan template Blank App,beri nama Program_FileIO.

image

1. Hapus dahulu berkas MainPage.xaml lalu tambahkan sebuah Page bertipe Basic Page lalu beri nama MainPage.xaml. Halaman baru ini akan menjadi halaman pertama aplikasi

image

2. Tambahkan blok kode dibawah ini pada MainPage.xaml tepat sebelum tag <VisualStateManager>.<VisualStateGroups>

<StackPanel Grid.Row=”1″ Margin=”120,30,0,0″ >

<Button Click=”Button_Click_1″>save</Button>

<TextBox Width=”400″ HorizontalAlignment=”Left” x:Name=”inputText”></TextBox>

<TextBlock x:Name=”outputText” Style=”{StaticResource HeaderTextStyle}”/>

<Button Margin=”0,20,0,0″ Click=”Button_Click_2″>open</Button>

<TextBlock x:Name=”outputText2″ Style=”{StaticResource HeaderTextStyle}”/>

</StackPanel>

3. Untuk keperluan program ini,akan dibuat sebuah nilai konstan yang akan digunakan untuk nama berkas yang dibuat :

const string filename = “sample.dat”;

4. Tambahkan event handler Button_Click_1 dengan blok kode berikut ini :

private async void Button_Click_1(object sender, RoutedEventArgs e)

{

StorageFolder storageFolder = KnownFolders.DocumentsLibrary;

StorageFile sampleFile = await storageFolder.GetFileAsync(filename);

await FileIO.WriteTextAsync(sampleFile, inputText.Text);

}

Disini kita membuka sebuah direktori bernama Documents lalu membuka berkas bernama filename. Kemudian berkas tersebut ditulis dengan teks yang diperoleh dari TextBox inputText.

5. Tambahkan event handler Button_Click_2 dengan blok kode berikut ini :

private async void Button_Click_2(object sender, RoutedEventArgs e)

{

StorageFolder storageFolder = KnownFolders.DocumentsLibrary;

StorageFile sampleFile = await storageFolder.GetFileAsync(filename);

outputText2.Text = await FileIO.ReadTextAsync(sampleFile);

}

Disini kita membuka sebuah direktori bernama Documents lalu membuka berkas bernama filename. Kemudian berkas tersebut dibaca dan isinya ditampilkan di layar.

Membaca berkas juga dapat dilakukan dengan membuka berkas terlebih dahulu menjadi sebuah lalu dengan menggunakan Reader membaca String yang berada di dalam berkas.

private async void Button_Click_2(object sender, RoutedEventArgs e)

{

StorageFolder storageFolder = KnownFolders.DocumentsLibrary;

StorageFile sampleFile = await storageFolder.GetFileAsync(filename);

var stream = await sampleFile.OpenAsync(FileAccessMode.Read);

var size = stream.Size;

using (var inputStream = stream.GetInputStreamAt(0))

{

DataReader reader = new DataReader(inputStream);

uint length = await reader.LoadAsync((uint)(stream.Size));

outputText2.Text = reader.ReadString(length);

}

}

6. Untuk membuat berkas yang akan ditulis dan dibaca, tempatkan blok kode berikut ini dan panggil di dalam fungsi LoadState.

private async void CreateFileAsync()

{

StorageFolder storageFolder = KnownFolders.DocumentsLibrary;

StorageFile sampleFile = await storageFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);

outputText.Text = “The file ‘” + sampleFile.Name + “‘ was created.”;

}

protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)

{

CreateFileAsync();

}

Untuk membuat sebuah berkas maka fungsi yang digunakan adalah StorageFolder.CreateFileAsync.

7. Untuk memberikan akses direktori Documents kepada aplikasi kita harus memberikan deklarasi eksplisit di dalam manifest aplikasi. Buka berkas package.manifest dan pastikan konfigurasinya seperti gambar dibawah ini.

image

8. Lalu pada Tab Declarations berikan akses aplikasi terhadap tipe berkas yang ingin digunakan oleh program. Pada daftar deklarasi yang tersedia pilih File Type Associations dan klik Add. Karena pada program tipe berkas yang digunakan adalah file data (.dat) , tambahkan informasi tersebut ke metadata berkas seperti dibawah ini.

image

9. Tekan F5 untuk menjalankan aplikasi. Jika berkas berhasil dibuat maka akan tampil keterangan teks berkas berhasil dibuat. Untuk menulis berkas tambahkan teks sembarang di dalam kotak teks dan tekan save. Lalu untuk membaca nya klik open.

image

Bukalah direktori Documents dan periksa apakah isi berkas tersebut sudah sesuai.

image

Bertambah Usia

Bertambah Usia adalah salah satu lagu Kla yang saya gemari. Karena lagu ini cocok sekali dinyanyikan ketika ada seseorang yang berulang tahun.

Berbicara tentang usia, hari ini ada pembicaraan-pembicaraan yang menyadarkan saya mengenai bagaimana usia kita bergerak. Hari ini saya datang ke pernikahannya @adit_august . Seperti biasa, rekan-rekan #IF06 berkumpul sambil membicarakan hal-hal yang ringan. Sampai tadi Cale,salah seorang rekan yang sudah memiliki anak, 1.5 tahun datang, menggendong si kecil Ziyad. Cale mengobrol bersama Wulan menanyakan “Sudah berapa bulan lan ?”. Wulan balik bertanya “ Ziyad umurnya sudah berapa ?”. Disatu sisi ada @fahmimumtaz dan okky yang saat ini tengah berbahagia karena diketahui okky sudah mengandung. Dilanjutkan dengan pertanyaan “sudah berapa bulan kky ?”.

OK. Usia kita sudah jauh bertambah. Topik obrolan sekarang mulai merambah ke “sudah berapa bulan ?”.

Operasi File Windows RT

Berkas atau file merupakan bagian penting dari suatu aplikasi. Seringkali kita membutuhkan persistensi data,atau membutuhkan suatu masukan berupa berkas untuk menjalankan lojik dari aplikasi kita. Windows RT menyediakan beberapa cara untuk dapat mengakses berkas pada filesytem Windows 8. Cara yang pertama adalah menggunakan file pickers, yaitu sebuah mekanisme dimana aplikasi akan menggunakan suatu antarmuka yang sudah terdefinisi untuk memilih berkas dan mendapatkan nilai kembalian berupa berkas yang dipilih. Cara berikutnya adalah secara manual dengan mengakses File API di WindowsRT.

File pickers memiliki suatu area pada atas dan bawah layar untuk menampilkan informasi dan memberikan kemudahan dan pengalaman yang konsisten bagi pengguna untuk mengakses berkas. Informasi yang disampaikan diantaranya adalah :

· Lokasi saat ini pada bagian atas kiri

· Daftar berkas yang sedang dipilih pengguna pada bagian bawa

· Sebuah daftar drop-drown dimana pengguna dapat memilih dan mencari berkas pada direktori di file system.

image

Pengguna dapat melihat daftar lokasi yang tersedia dengan memilih panah ke bawah. Lokasi ini termasuk lokasi sistem seperti direktori Downloads atau Music dan juga aplikasi penyedia berkas seperti Microsoft SkyDrive dan lainnya.

File Pickers bekerja dengan memanggil File Pickers API dimana pengguna nanti dihadapkan ke suatu antarmuka yang konsisten dan dapat memilih berkas yang dinginkan. Setelah pengguna memilih berkas atau folder, aplikasi akan menerima obyek StorageFile dan StorageFlder. Kemudian obyek ini digunakan di dalam aplikasi.

Diagram dibawah ini menunjukkan bagaimana cara kerja File Pickers.

image

Untuk melihat bagaimana implementasi file pickers dalam aplikasi, buatlah sebuah proyek baru, aplikasi Windows Store dengan template Blank App,beri nama Program_FilePickers.

image

1. Hapus dahulu berkas MainPage.xaml lalu tambahkan sebuah Page bertipe Basic Page lalu beri nama MainPage.xaml. Halaman baru ini akan menjadi halaman pertama aplikasi

image

2. Tambahkan blok kode dibawah ini pada MainPage.xaml tepat sebelum tag <VisualStateManager>.<VisualStateGroups>

<StackPanel Grid.Row=”1″ Margin=”120,30,0,0″ >

<Button Click=”Button_Click_1″>Open</Button>

<TextBlock x:Name=”outputText” Style=”{StaticResource HeaderTextStyle}”/>

</StackPanel>

3. Tambahkan event handler Button_Click_1 dengan blok kode berikut ini :

private async void Button_Click_1(object sender, RoutedEventArgs e)

{

FileOpenPicker openPicker = new FileOpenPicker();

openPicker.ViewMode = PickerViewMode.Thumbnail;

openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;

openPicker.FileTypeFilter.Add(“.jpg”);

openPicker.FileTypeFilter.Add(“.jpeg”);

openPicker.FileTypeFilter.Add(“.png”);

StorageFile file = await openPicker.PickSingleFileAsync();

if (file != null)

{

// Application now has read/write access to the picked file

outputText.Text = “Picked photo: ” + file.Name;

}

else

{

outputText.Text = “Operation cancelled.”;

}

}

File Pickers memiliki beberapa opsi pengaturan yaitu :

· ViewMode : bagaimana berkas-berkas akan ditampilkan

· SuggestedStartLocation : lokasi direktori awal ketika File Pickers dipanggil

· FileTypeFilter : untuk membatasi tipe berkas yang dapat dibuka

· Untuk jumlah berkas lebih dari satu, gunakan fungsi PickMultipleFilesAsync.

· Untuk mengambil satu direktori secara langsung gunakan fungsi FolderPicker.PickSingleFolderAsync

4. Tekan F5 untuk melihat hasilnya.

image

Pada saat Button Open di klik maka antarmuka File Pickers akan tampil dilayar.

Setelah berkas dipilih maka nama berkas yang dipilih akan ditampilkan dilayar.

FilePickers tidak dapat bekerja pada mode Snap sehingga sebaiknya setiap pemanggilan FilePickers dilakukan pemeriksaan kondisi tampilan pada saat ini.

Widnows 8 Konsumsi Web Service–HttpClient

Pada bagian ini akan kita lihat bagaimana menggunakan HttpClient untuk mengonsumsi sebuah resource dari internet. Resource yang akan kita gunakan adalah resource yang sama pada latihan sebelumnya.

1. Modifikasi XAML menjadi seperti berikut ini :

<StackPanel Grid.Row=”1″ Margin=”120,30,0,0″ >

<Button Click=”Button_Click_1″>Call</Button>

<TextBlock x:Name=”outputText” Style=”{StaticResource HeaderTextStyle}”/>

<Button Click=”Button_Click_2″>Call HttpClient</Button>

<TextBlock x:Name=”outputText2″ Style=”{StaticResource HeaderTextStyle}”/>

</StackPanel>

2. Tambahkan event handler Button_Click_2 pada berkas WebService1.xaml.cs

private async void Button_Click_2(object sender, RoutedEventArgs e)

{

HttpClient client = new HttpClient();

Uri uri = new Uri(“http://localhost:23671/WebService1.asmx/HelloWorld&#8221;);

HttpResponseMessage response = await client.PostAsync(uri, null);

outputText2.Text = await response.Content.ReadAsStringAsync();

}

Untuk mengakses fungsi HelloWorld, kita menggunakan HTTP POST dengan memanggil fungsi PostAsync dan memperoleh hasilnya dengan fungsi ReadAsStringAsync();

3. Tekan F5 untuk melihat hasilnya. Klik Button HttpClient dan aplikasi akan menampilkan kembalian dari fungsi HelloWorld dalam format xml.

image

Kelas HttpClient memiliki berbagai fungsi yang dapat kita gunakan sesuai dengan jenis operasi Http yang ingin kita lakukan. Misalnya jika ingin melakukan Http Get , kita dapat menggunakan GetAsync atau jika kita sudah percaya diri bahwa nilai kembalian dari layanan web adalah string kita dapat menggunakan fungsi GetStringAsync . Terdapat juga fungsi untuk operasi Http Put dan Http Delete.

Akses WebService–Windows 8

Di dunia yang serba terhubung seperti saat ini, sering sekali terdapat skenario dimana suatu aplikasi membutuhkan suatu data dari internet. Lebih umum lagi, web service sudah menjadi suatu standar ketika kita ingin menggunakan suatu fungsi yang terdapat pada web. Pada bagian ini kita akan melihat bagaimana cara mengonsumsi web service dalam aplikasi Windows 8-style UI. Web service yang dapat dikonsumsi oleh Windows RT dapat berupa SOAP (baik yang dibangun dengan WCF atau teknologi lain), plain HTTP atau pun REST. Untuk dapat mengakses web service ini dapat dilakukan secara langsung atau pun melalui kelas proxy yang dibangkitkan secara otomatis dari metadata yang melekat pada suatu layanan. Sebuah layanan merupakan service yang Anda buat sendiri dan ditempatkan pada server Anda, atau sebuah layanan pihak ketika, misalnya sebut saja Facebook,Twitter dan layanan lainnya. Windows RT dapat bekerja dengan berbagai data format seperti XML,Json mapun RSS.

Mengakses suatu layanan melalui suatu proxy class yang dibangkitkan dari metadata dapat meningkatkan produktivitas dalam pengembangan aplikasi. Pada bagian ini akan diberikan contoh pengaksesan layanan web yang juga dibangun dengan teknologi Microsoft menggunakan proxy class yang dibangkitkan secara otomatis.

Membuat Web Service

1. Jalankan Visual Studio Anda yang mendukung pembuatan project Web Application buat sebuah project Web ASP.NET Web Application,beri nama Webservice.

image

2. Pada jendela Solution Explorer tambahkan sebuah file web service dengan cara klik kanan pada Project | Add | Add New Item . Pilih Web Service dan klik Add

image

3. Kita hanya akan menggunakan fungsi yang secara otomatis dibangkitkan, yaitu web service method yang akan mengembalikan suatu string “Hello World”. Pembahasan mengenai web service tidak akan dijelaskan lebih jauh disini karena fokus kita adalah di sisi akses Windows 8-style UI.

image

4. Jalankan web service tersebut dengan menekan F5 atau mengklik tombol play.

image

5. Sekarang web service sederhana sudah siap dikonsumsi. Jangan non-aktifkan browser Anda .

image

Menambahkan Referensi Web Service

Untuk melihat bagaimana tampilan implementasi data binding dalam aplikasi, buatlah sebuah proyek baru, aplikasi Windows Store dengan template Blank App,beri nama Program_WebService.

image

1. Pada jendela Solution Explorer, klik kanan References dan pilih Add Service Reference.

image

2. Copy dan paste alamat akses web service yang sudah dibuat sebelumnya. Kita dapat mengambilnya dari kotak alamat yang terbuka pada browser lalu pilih Go.

image

3. Jika web service ditemukan dan tersedia maka daftar service berikut operasi yang dapat digunakan akan ditampilkan. Berikan nama namespace yang sesuai , pada contoh ini akan diberi nama ServiceReference1 dan klik OK

4. Jika penambahah berhasil maka pada jendela Solution Explorer dapat kita amati suatu file config dan file Reference terhadap web service yang sudah dibuat.

image

Mengonsumsi Web Service

Untuk mengonsumsi web service kita akan membuat satu halaman baru.

1. Klik kanan pada project, Add New Item dan pilih Basic Page , beri nama WebService1.xaml dan klik OK.

image

2. Tambahkan sebuah Button dan TextBlock tepat diatas <VisualStateManager.VisualStateGroups>.

<StackPanel Grid.Row=”1″ Margin=”120,30,0,0″ >

<Button>Call</Button>

<TextBlock x:Name=”outputText” Style=”{StaticResource HeaderTextStyle}”/>

</StackPanel>

3. Klik ganda pada Button untuk menambahkan event handler. Tambahkan blok kode berikut ini.

private void Button_Click_1(object sender, RoutedEventArgs e)

{

GetHelloWorldAsync();

}

async void GetHelloWorldAsync()

{

ServiceReference1.WebService1SoapClient client = new ServiceReference1.WebService1SoapClient();

ServiceReference1.HelloWorldResponse result = await client.HelloWorldAsync();

outputText.Text = result.Body.HelloWorldResult;

}

Pada fungsi GetHelloWorldAsync, kita menginisiasi proxy layanan dan memanggil fungsi yang tersedia, yaitu HelloWorldAsync.

4. Buka App.xaml.cs dan temukan fungsi OnLaunched . Modifikasi fungsi tersebut sehingga aplikasi akan membuka WebService1.xaml ketika aplikasi dijalankan.

if (!rootFrame.Navigate(typeof(WebService1), args.Arguments))

{

throw new Exception(“Failed to create initial page”);

}

5. Tekan F5 dan lihat hasilnya.

image

Mr Taxi

Bukan, bukan. Post ini tidak akan menceritakan mengenai salah satu judul lagi girlgroup fenomenal asal Korea yang sebentar lagi akan manggung di Indonesia. Post ini akan menceritakan kisah yang kurang sedap ketika menggunakan salah satu armada taksi di kota kembang.

Kita sudah tahu sama tahu bahwa jika ingin menggunakan armada taksi dari Bandara Husein Sastranegara hanya dapat menggunakan satu armada yang sudah menguasai daerah tersebut. Bisa sih taksi lain hanya kita harus berjalan kaki dulu ke luar area bandara, yang mana kalau anda membawa barang, bisa membuat anda berpikir ulang.

Karena aspek monopoli tersebut, armada dapat menarik bayaran dengan harga yang jauh lebih tinggi dari biasanya. Misalnya, dari rumah saya di Cicadas menuju Bandara jika menggunakan argo hanya memakan 25-30 ribu. Namun jika menggunakan taksi tersebut kita akan dikenakan biaya 60 ribu, yang mana cukup besar. Makan malam cak kohar saja bisa 3x.

OKlah, saya lagi sedikit malas untuk berjalan kaki keluar area bandara, meski tidak membawa barang bawaan. Okelah, tidak apa-apa membayar lebih,yang penting bisa cepat naik taksi dan tidak kepanasan, karena udara Bandung hari ini masih panas sekali. Okelah, saya mahfum saja dengan kondisi taksi yang kurang layak yang saya naiki. Tidak masalah.

Sesampainya di rumah, saya pun mengeluarkan ongkos yang sudah tertera di tiket taksi, sebesar 60 ribu. Pak sopir berkata datar “ Kurang Aa, 70 ribu seharusnya”. Sebagai warga negara yang baik saya bertanya “10 ribunya lagi buat apa ?”. Pak sopir menjawab : “Soalnya nanti saya dipotong lagi sama manajemen, dan sekalian untuk ongkos parkir”. Saya menjawab "Parkirnya biar saya bayar pak, tapi 10 ribu lagi itu biaya apa “. Dengan nada kasar pak sopir langsung berkata : “Ya sudah, sudah keluar saja”. Karena diminta keluar saya pun beringsut dari posisi duduk dan mengeluarkan kaki kiri saya keluar mobil. Baru saja kaki kanan saya mau ikut saya keluarkan dan belum dalam posisi sepenuhnya keluar, pak Sopir sudah menginjak gas seakan hendak beradu balap lalu memindahkan gigi dan maju dengan kencang bahkan tidak membiarkan saya menutup pintu taksinya.

Saya kaget,dan termenung melihat kejadian tersebut. Positive thinking : Pak sopir tidak melihat saya secara penuh dan dia pikir saya sudah keluar sepenuhnya lalu mengebut karena terburu-buru mungkin karena sedang lapar. Negative thinking : Pak sopir marah karena tidak mendapatkan 10 ribu yang ia inginkan dan dengan sengaja hendak mengagetkan saya. Dalam kasus seperti ini saya berpikir : “Bukan urusan saya 10 ribunya mau dipotong manajemen, karena saya akan membayar hanya sebesar biaya tiket yang sudah diberikan di awal”.

Begitulah. Saya pun tak habis pikir tabiat seperti itu. Lantas janganlah bertanya-tanya dengan bingung jika kustomer malas menggunakan jasa armada ini. Jika muka buruk, jangan kaca yang dipecahkan. Meskipun mungkin ini hanya kelakuan oknum, namun jika ada teman atau kolega yang bertanya tanpa pikir panjang saya tidak akan merekomendasikan armada ini.