Pages

Ads 468x60px

Labels

Featured Posts

Tuesday, August 09, 2011

Configure Reverse Proxy Apache 2 for Oracle APEX 4.0

Just taking note reminder for myself, it's about how to configuring Apache 2 HTTP Server (Not OHS come with Compl CD of Oracle Database) as a front end HTTP Server for APEX 4.0 installed in Oracle XE 10g.

Just follow the step as explain below:

  1. Install Apache 2.2 Server (Source can be downloaded from http://httpd.apache.org/download.cgi) installed with listening port configure at 8888

  2. Install Oracle XE 10g Database (Download from http://www.oracle.com/technetwork/database/express-edition/downloads/index.html) installed with listening port configure at 7777

  3. Install APEX 4.0 (Download from http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html)



After those development tools installed last thing to do is Configure Apache2 to become front server and static images server for APEX 4.0 then do the following steps:

  1. Enable/Activate module mod_proxy, proxy_http_module with LoadModule Directive. Configuration example:


    LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
    LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so



    ProxyRequests Off


    Order deny,allow
    Allow from all



    # Proxy Reverse to APEX
    ProxyPass /apex http://localhost:7777/apex
    ProxyPassReverse /apex http://localhost:7777/apex

    ProxyPreserveHost On




  2. For increasing performance let set Apache 2 to server also static images and common Javascript for APEX application. Configuration example:


    # ORiginal
    Alias /i/ "/home/mesz/oApps/apex4/images/"

    Options None
    AllowOverride None
    Order allow,deny
    Allow from all






  3. Check Configuration before start/restarting Apache with command:

    apache2 -k

    Go to next step if result is "Syntax OK"

  4. Test Oracle APEX with new configuration



Monday, May 30, 2011

Intel 3945 Wifi Card Problem Easy Troubleshoot in Ubuntu 10.10

Recently just change my mind to switch back OS to pure Ubuntu (not its derivative).
I've been using Mint version of Ubuntu derivative for 2 years.
Gradually move with upgrade from Mint 5, Mint 8 to Mint 9 (KDE).

Last upgrade (Mint 9 KDE) was to 64 Bit version about 8 months ago.

Today just upgrade to 10.10 Ubuntu and find out that I couldn't access office wireless network.

After googling, I find out a simple solution from this links

So just type this in your terminal:
sudo rfkill unblock wifi


Type 'dmesg | grep iwl' to see the result that should inform something like this:
iwl3945 0000:07:00.0: loaded firmware version 15.32.2.9

And of course available Wifi Network now should appear in Network Manager applet drop down.

See picture below for more verbose outcome.



After this then I'll applied PAE Kernel to utilized unused 1 GB RAM in my laptop, since 32-bit linux without PAE can only used maximum 3 GB of RAM (mine is 4 GB),... hehehe I'm back to 32-bit world again,... and it's still same old hardware I've got back from 2007 as I blog it here.

Thursday, May 26, 2011

Behind The Scene of Processing CSV in Oracle Database using PL/SQL

Melanjutkan postingan sebelumnya: Memproses CSV yg di upload menggunakan APEX dimana penjelasan back end process dan behind the scene Saya coba paparkan semudah mungkin.

Langkah-langkah mengkonversi konten CSV menjadi baris-baris tabel di Oracle Database bisa dilakukan dengan tahapan berikut init.

Pasang dulu 2 fungsi yang sangat dibutuhkan yaitu:
  • Fungsi F_CSV_CONVERT_TO_TABLE
  • Fungsi HEX_TO_DECIMAL

Fungsi F_CSV_CONVERT_TO_TABLE (Detail)
CREATE OR REPLACE FUNCTION "F_CSV_CONVERT_TO_TABLE"
( p_in_string IN VARCHAR2
, p_in_encapsulator IN VARCHAR2 DEFAULT '"'
)
RETURN wwv_flow_global.vc_arr2
AS
l_string VARCHAR2(32767) := p_in_string || ',';
l_quote_start_index PLS_INTEGER := 0;
l_quote_end_index PLS_INTEGER := 0;
l_comma_index PLS_INTEGER;
l_index PLS_INTEGER := 1;
l_tab wwv_flow_global.vc_arr2;
i PLS_INTEGER := 1;
BEGIN
LOOP
l_comma_index := REGEXP_INSTR(l_string, '[,'||p_in_encapsulator||']', l_index);
EXIT WHEN l_comma_index = 0;

CASE
WHEN SUBSTR(l_string,l_comma_index,1) = p_in_encapsulator AND l_quote_start_index = 0 THEN
l_quote_start_index := l_comma_index;
WHEN SUBSTR(l_string,l_comma_index,1) = p_in_encapsulator AND l_quote_start_index <> 0 THEN
l_quote_end_index := l_comma_index;
ELSE
NULL;
END CASE;

IF l_quote_start_index = 0 THEN

l_tab(i) := SUBSTR(l_string, l_index, l_comma_index - l_index);
i := i+1;

ELSIF l_quote_start_index <> 0 AND l_quote_end_index <> 0 THEN

l_tab(i) := SUBSTR(l_string, l_quote_start_index+1, (l_quote_end_index - l_quote_start_index)-1);
i := i+1;
--
-- Lets reset our quote check
--
l_quote_start_index := 0;
l_quote_end_index := 0;
--
-- We need to discard our end comma
--
l_comma_index := INSTR(l_string, ',', l_index);
END IF;Fungsi HEX_TO_DECIMAL
l_index := l_comma_index + 1;
END LOOP;
RETURN l_tab;
END f_csv_convert_to_table;

Fungsi HEX_TO_DECIMAL (Detail)
CREATE OR REPLACE FUNCTION "HEX_TO_DECIMAL"
--this function is based on one by Connor McDonald
--http://www.jlcomp.demon.co.uk/faq/base_convert.html
( p_hex_str in varchar2 ) return number
is
v_dec number;
v_hex varchar2(16) := '0123456789ABCDEF';
begin
v_dec := 0;
for indx in 1 .. length(p_hex_str)
loop
v_dec := v_dec * 16 + instr(v_hex,upper(substr(p_hex_str,indx,1)))-1;
end loop;
return v_dec;
end hex_to_decimal;


Process Handler yang dipasang pada salah satu APEX page seperti pada gambar dibawah ini (event tombol "Finish" diklik):

detail prosesnya adalah sbb:
declare
l_mime_type APEX_APPLICATION_FILES.mime_type%type;
l_doc_size APEX_APPLICATION_FILES.doc_size%type;
l_blob_data BLOB;

v_blob_len NUMBER;
v_position NUMBER;
v_raw_chunk RAW(10000);
v_char CHAR(1);
c_chunk_len number := 1;
v_line VARCHAR2 (32767) := NULL;
v_data_array wwv_flow_global.vc_arr2;
v_rows number;
v_sr_no number := 1;

begin

select
mime_type, doc_size, blob_content
into
l_mime_type, l_doc_size, l_blob_data
from APEX_APPLICATION_FILES
where id = :P3_ITEM1;

-- Just CSV Format will be process
if l_mime_type = 'text/csv' and l_doc_size > 0 then

v_blob_len := dbms_lob.getlength(l_blob_data);
v_position := 1;

-- Read and convert binary to char
WHILE ( v_position <= v_blob_len ) LOOP
v_raw_chunk := dbms_lob.substr(l_blob_data,c_chunk_len,v_position);
v_char := chr(hex_to_decimal(rawtohex(v_raw_chunk)));
v_line := v_line || v_char;
v_position := v_position + c_chunk_len;
-- When a whole line is retrieved
IF v_char = CHR(10) THEN
v_data_array := f_csv_convert_to_table (v_line);

-- For Debugging purpose!
dbms_output.put_line(
'1#' || v_data_array(1) ||'#' ||
'2#' || v_data_array(2) ||'#' ||
'3#' || v_data_array(3) ||'#' ||
'4#' || v_data_array(4) ||'#' ||
'5#' || v_data_array(5) ||'#' ||
'6#' || v_data_array(6) ||'#' ||
'7#' || v_data_array(7) ||'#' ||
'8#' || v_data_array(8)
);

-- Insert data into target table
EXECUTE IMMEDIATE '
INSERT INTO MSGP_PURCHASEITEM_ALL
( ID, ITEM_NUMBER, ITEM_DESCRIPTION, ITEM_TYPE,
VALUATION_METHOD, U_OF_M_SCHEDULE,
DECIMAL_PLACES_CURRENCY, DECIMAL_PLACES_QTYS,
INVENTORY_ACCOUNT_NUMBER
)
VALUES
( :1,
:2,
:3,
:4,
:5,
:6,
:7,
:8,
:9
)'
USING
v_sr_no,
v_data_array(1),
v_data_array(2),
v_data_array(3),
v_data_array(4),
v_data_array(5),
v_data_array(6),
v_data_array(7),
v_data_array(8);

-- Clear out
v_line := NULL;
v_sr_no := v_sr_no + 1;

END IF;
END LOOP;

-- Seharusnya di Archive bukan didelete
delete APEX_APPLICATION_FILES where id = :P3_ITEM1;
--
end if;

exception
when others then
null;
-- dbms_output.put_line(sqlerrm);
end;

Implementasi utama pada processing CSV tersebut ada pada baris ke-54 s/d baris ke-81,
dimana terlihat bagaimana Array (Collections) ditranspose dan dijadikan argumen dalam DDL INSERT.

Jika memahami bagaimana import Workspace & Application di dalam Oracle APEX silakan download prototype aplikasi ini disini

Mudah-mudahan bisa memberikan pencerahan pada yg mencari solusi yg sama.

Memproses CSV yg di upload menggunakan APEX

Setelah mencari-cari cara untuk memenuhi kebutuhan seperti judul blog ini beberapa waktu,...

Akhirnya pencarian mendapatkan setitik pencerahan dari 2 link berikut:

http://avdeo.com/2008/05/21/uploading-excel-sheet-using-oracle-application-express-apex/
dan
http://application-express-blog.e-dba.com/?p=1728

Dari 2 tips tersebut tampaknya jika langsung memproses binary file XLS (MS Excel) belum berhasil tetapi karena kebutuhan nya sudah bisa dicukupi dgn mengubah format file ke CSV (Coma Separated Value), akhir Saya putuskan untuk mencobanya.

Mengenai bagaimana menggunakan fitur dasar File Upload dgn APEX bisa dipelajari di sini.

Sekarang yg akan dijelaskan adalah post upload process dari APEX tersebut.

Semua file yg diupload dgn APEX akan tersimpan di tabel APEX_APPLICATION_FILES yg merupakan alias/synonym ke tabel WWV_FLOW_FILES.

Struktur Tabel APEX_APPLICATION_FILES:
SQL> desc apex_application_files
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER
FLOW_ID NOT NULL NUMBER
NAME NOT NULL VARCHAR2(90)
FILENAME VARCHAR2(400)
TITLE VARCHAR2(255)
MIME_TYPE VARCHAR2(48)
DOC_SIZE NUMBER
DAD_CHARSET VARCHAR2(128)
CREATED_BY VARCHAR2(255)
CREATED_ON DATE
UPDATED_BY VARCHAR2(255)
UPDATED_ON DATE
LAST_UPDATED DATE
CONTENT_TYPE VARCHAR2(128)
BLOB_CONTENT BLOB
LANGUAGE VARCHAR2(30)
DESCRIPTION VARCHAR2(4000)
FILE_TYPE VARCHAR2(255)
FILE_CHARSET VARCHAR2(128)

SQL>
Insight yg didapatkan adalah:

Jika CSV file yang diupload tersebut (tersimpan dalam bentuk BLOB di kolom BLOB_CONTENT) dibaca baris demi baris, kemudian dipindahkan kedalam array (dalam PL/SQL istilahnya Collections) setelah itu dimasukkan kedalam tabel tujuan dengan mengambil nilai Array tersebut tentunya bisa dilakukan bukan? Hanya saja sudah barang tentu harus dalam format yg Common dan terbuka seperti CSV.
Dengan contoh dan pola yg dijelaskan oleh 2 tips diatas,... Here is what I've acomplished,..

Target Table dari Upload CSV adalah MSGP_PURCHASEITEM_ALL dengan struktur sbb:


XLS File yg disesuaikan dengan Target Table seperti berikut ini:



APEX Page yang disiapkan (belum dirapihkan jadi jangan dikomentari mengenai kualitas layout)


Dan hasilnya adalah,....


Untuk bagaimana handling back end dan Behind the Scene Scenario nya,... read my next post.

Friday, January 14, 2011

Sekelumit kisah tentang Nokia N900 - Part III (Happy Ending)

Seperti yg pernah Saya ceritakan pada Sekelumit kisah tentang Nokia N900 - Part II dan Sekelumit kisah tentang Nokia N900 - Part I dimana tersimpulkan bahwa:
Respon default NCP terhadap masalah perangkat diluar kemampuan / yg pernah diberitahukan sesuai standard operation repair adalah "Kesalahan User" (User Error).
Sebagai contoh masalah yg menimpa perangkat Saya (USB Port nya terlepas) padahal sejak Februari 2010 Nokia sendiri sudah mengakui bahwa ada kemungkinan Port USB N900 bisa terlepas walaupun tidak terjadi mistreatment terhadap perangkat.

Ternyata mungkin tidak semua Nokia Care Point (NCP) mendapatkan informasi ini secara lengkap (Entah mungkin saja sebenarnya NCP kebanyakan meningkatkan kompetensinya dengan metode learning by doing & learn by mistake/error) .

Setelah melalui proses yg sebenarnya tidak perlu seperti adu mulut, kencengin urat leher, pasang muka seram dsb nya, perangkat Saya sudah diperbaiki sesuai Garansi dan sudah berfungsi normal.


Perangkat diberitahukan selesai melalui SMS pada tanggal 13 Januari 2010, sedangkan notifikasi SMS bahwa permasalahan sudah dieskalasi ke Support Nokia Pusat pada 7 Januari 2010. Walaupun ada notifikasi SMS lainnya pada tanggal 11 Januari 2010 yg memberitahukan bahwa estimasi perbaikan sekitar 2 - 3 minggu dari awal perbaikan.


Notifikasi tersebut dalam kalkulasi Saya mulai 7 Januari 2010, berarti kemungkinan baru selesai minggu ke 3 Januari, tetapi ternyata terbukti bahwa Nokia memang masih Care!

Perbaikan N900 Saya selesai tanggal 13 Januari 2010 berarti ternyata hanya butuh 1 minggu perbaikan saja.

Thanks to Nokia.

Mudah-mudahan langkah dibawah ini bisa mempercepat penyelesaian masalah USB Port N900 yg sama (jika terjadi).

  1. Jika Officer NCP memberikan respon default "User Error" kemudian memberikan pernyataan Garansi dibatalkan karena masalah USB Port terlepas, beritahukan informasi dari forum diskusi nokia di
  2. yang menyatakan sebaliknya.

  3. Minta dukungan untuk mengeskalasi masalah ini ke Nokia Care lebih lanjut atau bisa kontak langsung Nokia Care pusat (berikan informasi mengenai no. Repair Case Anda).
Informasi hotline Nokia Care Indonesia bisa dilihat di http://www.nokia.co.id/dukungan/hubungi-kami/nokia-careline.

Thanks Nokia.

Now I'm a Happy N900 User and Nokia Customer.

Monday, January 10, 2011

Sekelumit kisah tentang Nokia N900 - Part II

Menyambung tulisan Saya sebelumnya pada bagian pertama Sekelumit kisah tentang Nokia N900 - Part I, sebagai Customer yang merasa diperlakukan tidak layak maka Saya terpaksa berusaha untuk mendapatkan perhatian yang lebih mengenai masalah yang dihadapi.

Karena adanya tugas kantor ke luar daerah sampai dengan 24 Desember 2010, Saya belum sempat mengurus lebih lanjut nasib perangkat yang statusnya "masih tersandera" di NCP. Berhubung jadwal kerja sudah harus berangkat tanggal 20 Desember 2010, dan juga karena setelah 25 Desember 2010 Saya ingin cuti dulu sampai tahun baru, Saya freeze dulu permasalahan ini sampai awal tahun 2011.

Kemudian setelah ada waktu senggang Saya sempatkan untuk datang ke NCP ITC Kuningan tersebut, tepatnya tanggal 5 Januari 2011. Sebelumnya sudah diusahakan kontak ke nomor telepon yg tertera pada dokumen Customer Receipt tetapi tidak pernah ada yang mengangkat.

Sesampainya disana Saya diterima oleh Customer Care Officer perempuan, dibawah ini reka ulang percakapan di NCP tersebut.

Customer Care Officer - Wanita (CCF): Apa yang bisa Saya bantu pak?

Saya (Sy): Saya minta tolong diperjelas mengenai status perbaikan HP Saya, yg sudah Saya kirimkan beberapa waktu lalu.

CCF: O,.. iya pak,.. bisa minta dokumen Customer Receipt nya pak?

Sy: Ini bu, (sambil Saya serahkan dokumennya)

CCF: (Inquiry di Komputer) OK,... tipe HP bapak N900 ya?

Sy: Betul bu,..!

CCF: Masalahnya,...

Sy: (Saya potong) Iya bu, itu port USB untuk ngecharge nya copot, jadi ngga bisa dicharge!

CCF: Hmmm,... betul pak, begitu juga menurut catatan Kami juga,... dengan pak Rusman sendiri?

Sy: Bukan bu, yg tercantum di dokumen tersebut adalah teman Saya yg mengantar HP nya kesini, HP nya itu sendiri punya Saya (mencoba menegaskan)

CCF: Kalo begitu boleh Saya minta identitas bapak, KTP nya ya pak,...

Sy: (Saya keluarkan KTP sambil bertanya) Jadi bagaimana bu?

CCF: Bapak pernah dihubungi pihak Kami sebelumnya? Karena kalo lihat datanya HP bapak Kami terima sudah cukup lama,... pernah ditelepon?

Sy: Ditelepon sih belum pernah bu, Saya coba telepon kesini juga nggak diangkat-angkat! Tapi Saya pernah diSMS bu, lupa tanggal terima SMS nya (pura-pura lupa).

CCF: OK Pak, begini menurut hasil pemeriksaan teknisi Kami, Perangkat HP bapak tidak bisa diperbaiki

CCF: Oleh karena itu Garansinya Kami batalkan

Sy: (Dengan mimik muka marah) Saya minta penjelasan lebih detail mengenai hal ini!

CCF: Bisa menunggu sebentar pak Saya coba panggilkan teknisi Kami untuk menjelaskan

Sy: Ya, silakan! (Dengan mimik muka marah & kesal)

Kemudian beberapa saat kemudian datanglah si teknisi laki-laki,... dibawah ini reka ulang percakapannya:

TEKNISI: Selamat siang pak, perkenalkan nama Saya .... (disensor) teknisi yg incharge hari ini

Sy: Saya minta dijelaskan kenapa bisa HP Saya Anda batalkan Garansinya!

TEKNISI: Begini pak, setelah Kami periksa ternyata pada HP bapak, N900 ini, ada bagian yg terangkat jalur listriknya karena kesalahan bapak! Oleh karena kesalahan pengguna maka Kami batalkan garansinya.

Sy: Maksud Anda terangkat jalur listriknya itu port USB nya itu yg lepas?

TEKNISI: Betul pak!

Sy: Kemudian berdasarkan SMS ini disebutkan bahwa masalah ini tidak bisa diperbaiki?

TEKNISI: Betul pak, oleh karena itu Garansinya Kami void, Saya mohon maaf tidak bisa membantu!

Sy: (Dengan sekuat tenaga menahan amarah) MAKSUD ANDA VOID ARTINYA BATAL?

TEKNISI: Iya pak! (Agak ketus)

Sy: (2x Dengan sekuat tenaga menahan amarah) SAYA TIDAK TERIMA ANDA BATALKAN GARANSINYA, SAYA BISA MENGERTI KALO ANDA TIDAK BISA MEMPERBAIKINYA

TEKNISI: (Dengan Marah) TAPI KAMI BERHAK MEMBATALKAN GARANSI!

Sy: SAYA TIDAK TERIMA ANDA BATALKAN GARANSINYA, KALO PERLU SAYA BAWA KASUS INI KE PENGADILAN!

TEKNISI: (Dengan Marah & Arogan) SILAKAN PAK, YANG PASTI KAMI BERHAK MEMBATALKAN GARANSI HP BAPAK!

This is the moment I've waiting for!
Sy: SAYA BERIKAN INFORMASI KEPADA ANDA MENGENAI HAL INI
KEJADIAN COPOTNYA PORT USB INI TIDAK HANYA TERJADI PADA SAYA SAJA!
DAN INI SUDAH DIKETAHUI OLEH NOKIA SEJAK JANUARI 2010!
BAHKAN ADA EKS KARYAWAN NOKIA YG MENGANGGAP INI SALAH DESAIN!
SAYA TIDAK BISA TERIMA ANDA BATALKAN GARANSI KARENA MEMANG SUDAH SALAH DESAIN DARI PABRIKNYA!
HAMPIR DISELURUH DUNIA SUDAH ADA YANG MENGALAMI KEJADIAN INI
DI INGGRIS DIGANTI, DI AMERIKA DIGANTI, DI AMERIKA SELATAN MESKIPUN BELINYA DI AMERIKA DIGANTI
SAYA SEPAKAT MEMBAYAR ONGKOS BONGKAR RP. 200.000 INI BUKAN KARENA SAYA TIDAK PUNYA INFORMASI
SILAKAN BAPAK CEK KE FORUM NOKIA MENGENAI HAL INI, INFORMASINYA PUN DIPUBLISH OLEH
SEORANG ADMINISTRATOR FORUM!
KALO BELUM TAHU, INI SAYA TUNJUKKAN HALAMANNYA (Sambil membuka halaman forum nokia terkait
dari HP lama Saya, jelek2 juga HP lama sudah bisa 3.5G)

TEKNISI: (Kaget bukan kepalang) Bisa Saya lihat pak?

Sy: Nih baca! (Saya kasih lihat halaman yg sudah dibuka di Opera Mini)
Sy: (Saat Teknisi tersebut membaca) Saya perjelas lagi ya Pak,... di halaman tersebut
disebutkan bahwa "a detached N900 usb connector should be covered and fixed under warranty".
Kalo Saya terjemahkan USB connector yg terlepas harus diperbaiki karena masuk dalam lingkup garansi!

Sedang diatas angin
Sy: Tolong bapak mengerti, ini perangkat bukan perangkat murahan, tidak mungkin Saya perlakukan
dengan tidak hati-hati! USB connector memang fungsinya untuk dicabut-colok, cabut-colok, cabut-colok
terus apa karena USB connector Saya gunakan dengan sebagaimana mestinya kemudian terlepas
mengakibatkan Garansi HP jadi hilang?
Saya yakin perangkat ini tidak punya masalah yg lain selain USB port nya saja yg copot,
kalo perlu Saya buktikan bapak cari batere yg sama speknya untuk N900, pasang, pasti nyala
dengan tidak ada masalah!
Karena sebelum Saya antar kesini Saya masih sempat membackup datanya, cek email & terima SMS.
Saya tidak terima garansi HP ini dibatalkan begitu saja!

TEKNISI: (Sudah mulai Sadar, arogansinya sudah hilang) Baik Pak, Saya minta tolong bapak biar Saya bisa membantu bapak ke atasan Saya, bapak email web informasi tersebut ke tek.jkt.kng@.com, kemudian bisa menghubungi no. Saya 021-3267XXXX untuk informasi lebih lanjut, ini Saya tuliskan di lembar
Customer Receipt punya bapak.

Sy: Maksudnya untuk memperjelas masalah ini Anda minta diemail, OK, sesampainya di kantor Saya emailkan ke alamat ini!

Sy: Jadi HP Saya masih belum bisa diambil?

TEKNISI: Kami coba dulu untuk membantu bapak jadi untuk sementara masih Kami proses statusnya.

Sy: OK, kalo begitu!

TEKNISI: Terima Kasih banyak Pak!

Sy: Sama-sama

10 menit kemudian pas lagi dijalan Saya menerima SMS dari teknisi tersebut:
Dear pak Mesa, alamat email saya yang benar adalah tek.kng.jkt@.com.Terima kasih

Kadang bertanya apakah untuk mendapatkan perlakuan yang benar apa harus adu mulut & pasang urat dulu ya?

Sampai hari ini perangkat N900 Saya masih dalam tahap proses pemeriksaan lebih lanjut.

Sekelumit kisah tentang Nokia N900 - Part I

Bermula dari ketertarikan dengan sebuah perangkat yg menurut review sangat (mungkin paling) mumpuni saat itu, sekitar April - Mei 2010.

Setelah baca banyak review juga terhadap perangkat tersebut, akhirnya Saya memutuskan untuk menebus perangkat Nokia N900 tersebut pada 30 Mei 2010, walaupun untuk mendapatkannya ternyata harus keliling dulu ke beberapa authorized reseller Nokia karena peredarannya agak terbatas.

Dan ternyata setelah beberapa waktu menggunakannya memang terbukti sangat mumpuni and the device had satisfied me almost everything I need for a sophisticated device.

Setelah hampir 7 bulan menggunakannya (awal Desember 2010), mulai terasa ada keanehan, gejalanya adalah kalo mau dicharge harus dalam posisi berdiri (dimana bagian mini USB Port nya berada diatas) dan kabel chargenya harus diposisikan kebelakang supaya bisa dicharge, kalo tidak begini proses charging nya jadi suka on/off.

Waktu itu tidak banyak berprasangka aneh-aneh, cuman berpikiran mungkin emang perlu ada sedikit penyesuaian dalam cara men-charge perangkat tersebut.

Pernah baca pada beberapa postingan forum di talk.maemo.org, mengenai masalah pada port USB ini, cuman Saya berasumsi mungkin ini karena yg digunakan adalah perangkat prototype atau istilah kerennya pre-production device.

Tetapi sesuatu yg mengejutkan terjadi pada pertengahan Desember 2010 (16 Desember 2010) kemarin, seperti biasa pagi hari (sekitar jam 6 an) Saya cek status baterenya, ternyata sudah Low, Saya charge saja sembari siap-siap berangkat kerja. Pada sekitar jam 7an pas Saya cabut chargernya ternyata,......
port mini USB nya ikutan tercabut dari perangkat tersebut,..!

Walah,.... Gawat juga nih,... segera sesampainya di kantor Saya minta teman mengirimkan perangkat tersebut ke Nokia Care Point (kebetulan NCP yg terdekat adalah di ITC Kuningan). Perangkat diantar masih dalam keadaan hidup (stand by mode), ternyata berdasarkan keterangan NCP nya ada kemungkinan Data Loss sehingga disarankan untuk membackup data dulu. Ya walaupun dalam kondisi tidak bisa nyambung port USB nya, Saya lakukan back up data dulu kemudian hasil backupnya dicopy ke Laptop via WiFi di kantor.

Setelah dibackup, teman Saya kembali lagi ke NCP tersebut dan akhirnya perangkat tersebut diterima untuk kemudian dilakukan pemeriksaan lebih lanjut. Seperti prosedur normal, Saya mendapatkan dokumen Customer Receipt untuk Repair Case No. 1-2IIH6WQ, dan juga Saya mendapatkan konfirmasi bahwa akan dikenakan biaya membuka/membongkar perangkat sebesar Rp. 200.000.

Walaupun tidak diberikan estimasi berapa lama waktu yg diperlukan untuk perbaikan, Saya berekspektasi mungkin sekitar 2-3 mingguan lamanya, yg berarti Saya harus pindah lagi ke perangkat lama Saya (yg sampai hari ini pun tidak pernah bermasalah dan produknya berasal dari vendor lain).

Sayapun kemudian berinisiatif untuk mencari informasi seputar masalah "Port USB N900 terlepas copot" dengan keyword "N900 USB Port Detached" seperti biasa kita andalkan mbah google untuk hal ini. Adapun hasilnya adalah "Nokia responds to reports about the N900 micro-usb port getting detached" yg membawa Saya ke situs forum diskusi nokia dgn detail URL:
http://discussions.europe.nokia.com/t5/Maemo-Devices/Nokia-responds-to-reports-about-the-N900-micro-usb-port-getting/td-p/629019

Setelah dibaca lebih seksama ternyata yg mempublish mempunyai ID: Vandelay, jika dilihat pada detail profil nama aslinya adalah Juha-Matti Heikkinen, berasal dari Finlandia (sama asalnya dengan perusahaan Nokia ini), ternyata menjabat sebagai Social Media Editor di Nokia. Pantas saja dalam forum ini bertindak sebagai Administrator.

Dari diskusi tersebut Saya mendapatkan kesimpulan yg menggembirakan karena sudah dikabarkan bahwa Nokia sudah memahami adanya masalah Port USB yg bisa terlepas ini, dan pada pesan no. 12 persisnya (http://discussions.europe.nokia.com/t5/Maemo-Devices/Nokia-responds-to-reports-about-the-N900-micro-usb-port-getting/m-p/632939#M5537) disebutkan bahwa masalah port USB ini akan dicover dan diperbaiki sesuai dengan Garansi.

Dibawah ini Saya kutip tulisan Mr. Vandelay (Administrator Forum) (diposting tanggal 17 Februari 2010) di forum ini:

Hi all,

we have just received additional information from Nokia that a detached N900 usb connector should be covered and fixed under warranty.

It may take a few days for this information to reach all Nokia Care points. Apparently there has been some confusion until now in some countries but this policy should make it clear.

.... ,etc...



Dengan informasi yg sedemikian gamblang ini, Saya bisa menyimpulkan masalah yg terjadi pada perangkat Saya akan dicover garansi. So it's fine, I believe that people at NCP will do their job to fixed it.

Dua hari kemudian (persisnya tanggal 18 Desember 2010), Saya mendapat forward SMS dari teman Saya (yg Saya minta tolong mengirimkan perangkat ke NCP) dan ternyata dari NCP tersebut dengan detail SMS sbb:
Pelanggan YTH, HP anda tipe N900 garansinya kami batalkan dikarenakan adanya opentrack (jalur yg terangkat) pada rangkaian listrik dan tidak dapat diperbaiki, atas perhatiannya kami ucapkan terima kasih, NCC ITC Kuningan

Sungguh sangat mengejutkan sekali response yg diberikan oleh NCP ini! Bagaimana bisa menyimpulkan demikian padahal di forum nokia ini sudah diterangkan secara jelas bahwa hal ini seharusnya masuk dalam Garansi.

Selain itu apakah fair jika adanya masalah pada perangkat (apapun modelnya) dengan cara-cara sebagai berikut:

1. Anda Saya charge biaya membuka/membongkar perangkat
2. Karena masalahnya tidak bisa diperbaiki maka Saya batalkan Garansi Anda.

Bagaimana bisa dianggap fair memperlakukan Customer seperti ini?

Tuesday, November 02, 2010

Configure Oracle APEX 3.2.1 using Embedded PL/SQL Gateway (Unsupported Feature)

Just want to share for those who don't want to setup APEX using Apache HTTP Server with mod_plsql (which will be deprecated according to latest SOD Oracle), instead using pre installed Embedded PL/SQL Gateway on top of XML DB Server feature of Oracle Database, but doesn't have the luxury of newest version of Oracle Database (as latest is 11g).

Installation step should be followed normally as documented in installation guide.

After APEX component installation complete (no error occured during installation)
using SQL/Plus Command:

SQL> @apexins SYSAUX SYSAUX TEMP /i/

*) SYSAUX should be replace by another target tablespace created earlier (recommended)

For normal installation it should move to point 3.3.5 Configure the Embedded PL/SQL Gateway but after several times installation experience this always causing error 404 Unauthorized.

I began to examine the instalation script, and found out that there's missing step in creation/configure of DAD (Database Access Descriptor) in:
default installation script => apex_epg_config_core.sql. called by apex_epg_config.sql script.

So the script needs to be patch in several lines after line 345 as the following:

--- Original Script
alter session set current_schema = XDB;

begin
dbms_epg.create_dad('APEX','/apex/*');
dbms_epg.set_dad_attribute('APEX','database-username','ANONYMOUS');
dbms_epg.set_dad_attribute('APEX','default-page','apex');
dbms_epg.set_dad_attribute('APEX','document-table-name','wwv_flow_file_objects$');
dbms_epg.set_dad_attribute('APEX','document-path','docs');
dbms_epg.set_dad_attribute('APEX','nls-language','american_america.al32utf8');
dbms_epg.set_dad_attribute('APEX','document-procedure','wwv_flow_file_mgr.process_download');
dbms_epg.set_dad_attribute('APEX','request-validation-function','wwv_flow_epg_include_modules.authorize');
end;
--- Patched Script
alter session set current_schema = XDB;

begin
dbms_epg.create_dad('APEX','/apex/*');
dbms_epg.authorize_dad (
dad_name => 'APEX',
user => 'ANONYMOUS'); -- Mesz
dbms_epg.set_dad_attribute('APEX','database-username','ANONYMOUS');
dbms_epg.set_dad_attribute('APEX','default-page','apex');
dbms_epg.set_dad_attribute('APEX','document-table-name','wwv_flow_file_objects$');
dbms_epg.set_dad_attribute('APEX','document-path','docs');
dbms_epg.set_dad_attribute('APEX','nls-language','american_america.al32utf8');
dbms_epg.set_dad_attribute('APEX','document-procedure','wwv_flow_file_mgr.process_download');
dbms_epg.set_dad_attribute('APEX','request-validation-function','wwv_flow_epg_include_modules.authorize');
end;

So you have to rerun EPG configuration using your patch script as describe in installation guide:

On Windows:
SQL> @apex_epg_config SYSTEM_DRIVE:\TEMP
On UNIX and Linux:
SQL> @apex_epg_config /tmp
and then unlock anonymous acount ( the next step) .

*) For detailed explanation of SYSTEM_DRIVE:\TEMP or /tmp please read installation guide.

But it's still will not allowing anonymous access to APEX so the last step required is executing script below (thanks to Oracle-Base)
-- Script to Update Allow Anonymous Acces to XDB
-- For APEX without Apache Instalation
-- MKR, 2009.11.17
DECLARE
l_configxml XMLTYPE;
l_value VARCHAR2(5) := 'true'; -- (true/false)
BEGIN
l_configxml := DBMS_XDB.cfg_get();

IF l_configxml.existsNode('/xdbconfig/sysconfig/protocolconfig/httpconfig/allow-repository-anonymous-access') = 0 THEN
-- Add missing element.
SELECT insertChildXML
(
l_configxml,
'/xdbconfig/sysconfig/protocolconfig/httpconfig',
'allow-repository-anonymous-access',
XMLType(''
|| l_value ||
''),
'xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd"'
)
INTO l_configxml
FROM dual;

DBMS_OUTPUT.put_line('Element inserted.');
ELSE
-- Update existing element.
SELECT updateXML
(
DBMS_XDB.cfg_get(),
'/xdbconfig/sysconfig/protocolconfig/httpconfig/allow-repository-anonymous-access/text()',
l_value,
'xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd"'
)
INTO l_configxml
FROM dual;

DBMS_OUTPUT.put_line('Element updated.');
END IF;

DBMS_XDB.cfg_update(l_configxml);
DBMS_XDB.cfg_refresh;
END;
/
commit;
/


If the above script give you error:




probably work around alternative script below will solve it.

--Script work around
DECLARE
configxml XMLType;
configxml2 XMLType;
BEGIN
-- Get the current configuration
configxml := DBMS_XDB.cfg_get();

-- Modify the configuration
SELECT INSERTCHILDXML(
configxml,
'/xdbconfig/sysconfig/protocolconfig/httpconfig',
'allow-repository-anonymous-access',
XMLType('true'),
'xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd"')
INTO configxml2 FROM DUAL;
-- Update the configuration to use the modified version
DBMS_XDB.cfg_update(configxml2);
END;
/
commit;
/
UPDATE resource_view r
SET r.res=UPDATEXML(res, '/a:Resource/a:Contents/b:acl','
xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
xmlns:dav="DAV:"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd http://xmlns.oracle.com/xdb/acl.xsd"
>

true
ANONYMOUS




',
'xmlns:a="http://xmlns.oracle.com/xdb/XDBResource.xsd" xmlns:b="http://xmlns.oracle.com/xdb/acl.xsd"') WHERE r.any_path = '/sys/acls/ro_anonymous_acl.xml';

After all these unofficial patched step please restart your database.

Hopefully now you can access your APEX home => http://your-host:8080/apex/

Remember that this is not officially supported configuration by Oracle and I think it's not the recommended setup for production site. So the risk is all yours.

I personally used this solution in my Development host only.

Happy patching,
Mesz

Thursday, March 11, 2010

First Test Blogging from Mobile Device

Just testing posting using mobile devices and test syntax highlighter in my blog.

create tablespace apexts datafile '/usr/lib/oracle/xe/oradata/xe/apexts.dbf' size 180m
extent management local segment space management auto;


Another test below: