Irmante Astalavista

Simsalabim!!!
Blog ini bercerita tentang dunia IT, ilmu kebumian, dan lain-lain.

Sunday, January 25, 2009

Nilai Median pada Postgres

Nilai median sering kali digunakan dalam perhitungan statistik. Kalo dalam database PostgreSQL 8.3, fungsi penghitung nilai median ini perlu ditambahkan secara manual. Caranya adalah menambahkan SQL function syntax sebagai berikut:

CREATE OR REPLACE FUNCTION array_median(anyarray)
RETURNS anyelement AS
$$
SELECT CASE
WHEN array_upper($1,1) = 0 THEN null
WHEN mod(array_upper($1,1),2) = 1 THEN asorted[ceiling(array_upper(asorted,1)/2.0)]
ELSE ((asorted[ceiling(array_upper(asorted,1)/2.0)] + asorted[ceiling(array_upper(asorted,1)/2.0)+1])/2.0) END
FROM (SELECT ARRAY(SELECT ($1)[n] FROM
generate_series(1, array_upper($1, 1)) AS n
WHERE ($1)[n] IS NOT NULL
ORDER BY ($1)[n]
) As asorted) As foo ;
$$
LANGUAGE 'sql' IMMUTABLE;

CREATE AGGREGATE median(anyelement) (
SFUNC=array_append,
STYPE=anyarray,
FINALFUNC=array_median
);

Cara panggilnya adalah sebagai berikut:

SELECT median(columnname) FROM tablename;

Kalo mo dibandingin sama nilai lain gunakan perintah:

SELECT median(columnname), avg(columnname), sum(columnname), max(columnname), min(columnname) FROM tablename;

Simple and very usefull ;;)
Source: dari sini

Labels:


Monday, January 12, 2009

Could not load file or assembly dan ILMerge

Salah Satu kendala yang mungkin muncul bilamana kita membuat turunan Dynamic Link Library (DLL) dari DLL lain adalah munculnya penyakit 'klasik' ASP.NET yaitu could not load file or assembly (CNLFOA). Artinya, DLL yang terkait dengan error tersebut tidak ditemukan, padahal kita telah menempatkannya dalam direktori BIN atau root. Dikatakan bahwa metode ini tidak berjalan pada beberapa system environment, tetapi yang mengherankan masalah ini terkadang muncul dadakan, kadang hilang sendiri, dst pada environment yang sama bahkan dari sebuah website yang sudah live 2 tahun. Kenapa saya katakan klasik, hal ini disebabkan karena penyakit ini belum sembuh total meski sudah berlangsung sejak VS 2005 hingga VS 2008SP1 yang paling baru.

Ini sudah menghabiskan hampir sebulan sebelum akhirnya saya tanya sama yg buat DLL tersebut. Saya telah mencoba banyak saran dari internet dan gagal maning gagal maning. Mungkin terlalu telat bertanya ke prinsipal, tapi saya akui saya emang newbie di ASP.NET 2008 dan biasa bermain sebagai seorang copy paste programming :D. Masalah CNLFOA ini membuat saya belajar banyak tentang windows form yang dimainkan pada web, Global Assembly Cache, struktur Web.Config, Il-Merge, strong name, console Visual Studio, dst. Saya baru tau juga, ternyata belum tentu masalah CNLFOA ini dialami oleh orang2 yang bermain dengan .NET > 2th.

Balik lagi ke solusinya. Salah satu solusi yang saya dapatkan dan ingin saya sharing adalah menggabungkan beberapa DLL, termasuk DLL yang tidak ditemukan tersebut kedalam satu DLL baru. Dengan demikian maka DLL baru tersebut telah berisi DLL class yang 'hilang' ketika menjalankan web tersebut.
Tools termudah untuk menggabungkannya adalah menggunakan ILMerge-GUI.

Tools ini jauh lebih mudah penggunaannya daripada IL-Merge.exe yang musti diketik di console Visual Studio. Selain itu, tools ini memudahkan kita untuk menempelkan stongname key, dari sebuah DLL tanpa strongname, sehingga DLL bisa kita taruh di GAC sehingga dapat digunakan oleh bebarapa aplikasi web pada server yang sama.

Selamat mencoba.
[irmant]

Labels:


Friday, January 09, 2009

TableView Peta pada Postgis

Peta dalam postgresql bisa dimungkinkan karena skema database postgresql telah mendukung data geometri yang berupa titik, garis, poligon, multi-garis, multi-poligon, dan multi-titik.
Sehingga, ketika kita membuat table view yang merupakan hasil join sembarang tabel, ditambah sebuah tabel yang memiliki kolom bertipe geometry, kemudian terhubung melalui kolom refensi yang sama, maka tabel tersebut memungkinkan untuk ditayangkan dalam bentuk peta.
Contohnya adalah script berikut, yang akan membuat view "tabelpeta_join", terdiri dari tabel bergeometri berjudul "tabel_peta", dijoin dengan
tabel biasa berjudul "tabel_data", berdasarkan ID_2008, maka kalimat querynya adalah:

CREATE OR REPLACE VIEW tabelpeta_join AS SELECT p.*, b.uid
FROM tabel_peta p
LEFT JOIN tabel_data d
ON (p.id_2008=d.id_2008);

Nah meskipun query berjalan sukses tanpa error, ditandai kalimat
Query result in 50ms,
bukan berarti table view "tabelpeta_join" dapat langsung diakses dari aplikasi GIS.

Hal ini disebabkan karena file geometri tersebut belum terdaftar pada tabel daftar data spasial-nya postgis.
Tabel daftar data spatial postgis bernama "geometry_columns". Tabel ini mengatur berbagai referensi proyeksi, kolom geometri, SRID, dari sebuah tabel.

So, table view "tabelpeta_join" tadi musti didaftarkan dulu ke tabel tersebut dengan perintah umum:

INSERT INTO geometry_columns (f_table_catalog, f_table_schema, f_table_name,
f_geometry_column, coord_dimension, srid, type) VALUES ('', 'public', 'tabelpeta_join', 'geometry', 2, 4326, 'GEOMETRY');


Bagi yang penasaran kode 2 merupakan kode referensi dimensi koordinat, dan kode 4326
merupakan kode SRID untuk proyeksi Latitude/Longitude atau derajat desimal.

Berikut adalah tahapan untuk membuat tabel peta permanen bukan view.
CREATE TABLE namatabel
AS select sum(td_2008,td_2008) as TD_2008 from prod;

--1. PRIMARY KEY:
ALTER TABLE namatabel
ADD CONSTRAINT namatabel_pkey PRIMARY KEY(gid);

--2. Tambahkan NDIMS:
ALTER TABLE namatabel
ADD CONSTRAINT enforce_dims_geometry CHECK (ndims(geometry) = 2);

--3. Tambahkan SRID:

ALTER TABLE namatabel
ADD CONSTRAINT enforce_srid_geometry CHECK (srid(geometry) = 4326);

--4. Buat index:
CREATE INDEX namatabel_geometry_sidx
ON namatabel USING gist (geometry);

--5. Daftarkan pada geometry columns:
INSERT INTO geometry_columns (f_table_catalog, f_table_schema, f_table_name,
f_geometry_column, coord_dimension, srid, type) VALUES ('', 'public', 'namatabel',
'geometry', 2, 4326, 'GEOMETRY');


Selamat mencoba,
Irmant

Labels: ,