Skip navigation

Tag Archives: pemrograman


Beberapa hari lalu gw mengumpulkan tugas kuliah Algoritma dan Pemrograman (yap, untuk S2). Salah satu bagian dari tugasnya adalah untuk memodelkan sebuah pohon n-er (n-ary tree).  Sebuah pohon n-er adalah seperti yang digambarkan di bawah.

N-ary tree

Berbeda dengan pohon biner yang setiap simpul memiliki paling banyak 2 simpul anak, maka sebuah simpul pada pohon di atas dapat memiliki simpul anak yang jumlahnya tidak tentu. Karena jumlah anaknya tidak dapat ditentukan maka representasi larik statis untuk mencatat setiap anak dari sebuah simpul bukan lah merupakan pilihan yang baik, apalagi menggunakan larik 2 dimensi yang berisi matriks ketetanggaan (yang jelas untuk masalah representasi pohon akan memakan banyak sekali ruang). Yang jelas pilihan yang cukup masuk akal adalah menggunakan senarai dinamis.

N-ary tree dengan list

Ilustrasinya dapat dilihat di gambar atas. Setiap simpul akan memiliki sebuah senarai yang akan mencatat simpul-simpul anak. Karena simpul-simpul anak dapat bertambah maka akan sangat nyaman menggunakan senarai.

Tapi karena tugasnya diwajibkan menggunakan C, gw merasa agak kecewa karena di saat publikasi tugas mata gw sudah berbinar-binar akan menggunakan fitur senarai generik pada STL. Dengan senarai generik tersebut gw tinggal membuat sebuah struktur simpul yang memiliki sebuah senarai simpul. Rasanya agak malas kalau harus mengkode senarai berkait lagi seperti yang dilakukan saat masih di tahun kedua kuliah sarjana. Apalagi Bu Inggriani Liem selalu berpesan bahwa seorang programmer harus selalu bisa menulis kode senarai kapanpun dibutuhkan. LOL.

Untungnya teman sekelompok sudah bersedia membuatkan representasi pohon. Tapi yang cukup menarik, representasi ini merupakan representasi senarai yang sudah sangat disederhanakan. Idenya sangat mirip dengan ide pohon biner.

Pohon biner

Pada pohon biner, sebuah simpul mempunyai dua buah simpul anak: anak kiri dan anak kanan. Representasi ini dimodifikasi sehingga dapat merepresentasikan pohon n-ary. Anak kiri akan dianggap sebagai simpul anak sedangkan anak kanan dapat dianggap sebagai simpul saudara. Pohon yang ada pada gambar paling atas akan direpresentasikan sebagai berikut.

Pohon n-ary dengan representasi biner

Jika diuraikan sebagai pohon biner maka akan terlihat seperti berikut.

Representasi pohon biner

Menarik juga 🙂


Untuk memudahkan autentikasi, kadang-kadang gw harus menyediakan fungsi autentikasi menggunakan username atau email. Di contoh tutorial blog yang ada di situs Yii diberikan contoh demikian.

<?php
class UserIdentity extends CUserIdentity
{
    private $_id;
 
    public function authenticate()
    {
        $username=strtolower($this->username);
        $user=User::model()->find('LOWER(username)=?',array($username));
        if($user===null)
            $this->errorCode=self::ERROR_USERNAME_INVALID;
        else if(!$user->validatePassword($this->password))
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
        else
        {
            $this->_id=$user->id;
            $this->username=$user->username;
            $this->errorCode=self::ERROR_NONE;
        }
        return $this->errorCode==self::ERROR_NONE;
    }
 
    public function getId()
    {
        return $this->_id;
    }
}

Read More »


*postingan gak penting*
Biar gak lupa aja 😀

$username = "Petra Novandi Barus";
if (preg_match('/^[\p{L}\s]+$/', $username){
  echo "Valid";
} else {
  echo "Invalid";
}

Sudah lama tidak mengisi blog ini karena banyak kerjaan. Oke belakangan ini gw sedang mengerjakan sebuah aplikasi menggunakan PHP Framework Yii. Framework ini cukup menyenangkan dibanding beberapa framework lain. By the way, di tulisan ini gw akan memberikan solusi gw dari sebuah permasalahan kecil yang gw hadapi.

Yii menyediakan sebuah tabel model yang kodenya digenerate. Tabel ini adalah CGridView. Tabel ini menyediakan banyak sekali fitur yang siap digenerate: pagination, column sorting, dan lain-lain. Jadi dengan menggunakannya, gw jadi tidak perlu menulis banyak kode.

Tapi satu masalah yang gw hadapi adalah bagaimana gw merefresh isi tabel ini dengan sebuah filter yang disediakan oleh sebuah Dropdown List.  Gambarnya dapat dilihat di bawah.


Read More »


Mungkin gw udah cerita di beberapa post lalu kalau pada semester ini gw mengambil mata kuliah Sistem Rekognisi. Permasalahan yang dihadapi kali ini adalah bagaimana menipiskan ketebalan sebuah gambar pada karakter yang ingin direkognisi. Penipisan ini dilakukan untuk mengambil fitur-fitur penting dari karakter tersebut. Algoritma ini disebut thinning. Keterangan lebih lanjut bisa dibaca di sini.

Algoritma yang gw gunakan di sini adalah algoritma yang dikemukakan oleh Zhang-Suen dalam paper mereka yang berjudul “A Fast Parallel Algorithm For Thinning Digital Pattern“. Read More »


Kemarin saya dijebak diminta untuk mengisi pelatihan Java untuk OSUM UPI. Saya membawa sesi terakhir dari 6 sesi pelatihan. Pelatihan ini diadakan setiap Sabtu selama 3 minggu di mana setiap hari terdapat 2 sesi. Pelatihan ini ditujukan bagi mahasiswa UPI dan untuk tingkat pemula. Awalnya saya dijebak diminta untuk mengisi materi Netbeans Platform. Tapi agaknya terlalu jauh melompat tingkatnya. Akhirnya saya menawarkan mengisi materi konkurensi di Java.

Materi yang saya bawakan adalah pengantar konkurensi. Saya mengenalkan tentang Thread dan fitur-fitur manajemen Thread yang disediakan oleh Java seperti sleep, interrupt, join, dan wait (yang terakhir ditambahkan di detik-detik terakhir). Selain itu saya juga mengenalkan metode untuk sinkronisasi antar Thread. Dan terakhir saya menyinggung sedikit mengenai Timer.

Modul pelatihan dan slide presentasi dapat dilihat di bawah.

Read More »


Untuk pengguna Linux atau UNIX pasti familiar dengan penggunaan options pada aplikasi berbasis CLI (command line interface). CLI options atau CLI parameter adalah sebuah mekanisme untuk memasukkan variabel ke dalam aplikasi tersebut.
Contohnya untuk di Linux atau UNIX

t76010@server42411:~$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print octal escapes for nongraphic characters
      --block-size=SIZE      use SIZE-byte blocks
  -B, --ignore-backups       do not list implied entries ending with ~
  -c                         with -lt: sort by, and show, ctime (time of last
                               modification of file status information)
                               with -l: show ctime and sort by name
                               otherwise: sort by ctime

Sedangkan di Windows pun ada format parameter yang berbeda (seringkali disebut switch) untuk command pada MS-DOS

Displays a list of files and subdirectories in a directory.

DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N] [/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]
[drive:][path][filename]	Specifies drive, directory, and/or files to list.
attributes	

D  Directories                R  Read-only files
H  Hidden files               A  Files ready for archiving
S  System files               -  Prefix meaning not

/B	Uses bare format (no heading information or summary).
/C	Display the thousand separator in file sizes. This is the default. Use /-C to disable display of separator.
/D	Same as wide but files are list sorted by column.
/L	Uses lowercase.

Setiap bahasa pemrograman memiliki fitur parameter untuk memfasilitasi passing variabel ke dalam program. Akan tetapi umumnya bahasa tidak langsung menyediakan format passing variabel seperti di atas yakni melakukan passing variabel secara terstruktur.

Read More »


Cuman numpang posting source code. Know what, mata kuliah High Performance System menurut saya adalah salah satu mata kuliah yang unik. Tugasnya dari awal sampai akhir hanya melakukan perkalian matriks. Tapi yang menarik perkalian matriks ini dilakukan dalam berbagai cara dengan menggunakan fitur, pustaka, ataupun mesin berkinerja tinggi. Semua cara ini nantinya akan dibandingkan dengan cara perkalian matriks yang naif dan serial.
Berikut adalah kodenya
Read More »


Melanjutkan postingan sebelumnya tentang masalah The Readers and Writers Problem. Untuk memberikan hak ekslusif bagi Writers untuk menulis file maka diperlukan sebuah mekanisme locking. Mekanisme ini akan coba diimplementasikan pada sebuah class bernama Lock.

class Lock {

        public static int countRequestingWriter = 0;
        public static int countRunningWriter = 0;
        public static int countRunningReader = 0;

        public synchronized void lockRead() throws InterruptedException {
            while (countRunningWriter > 0 || countRequestingWriter > 0) {
                wait();
            }
            countRunningReader++;
        }

        public synchronized void unlockRead() {
            countRunningReader--;
            notifyAll();
        }

        public synchronized void lockWrite() throws InterruptedException {
            countRequestingWriter++;
            while (countRunningReader > 0 || countRunningWriter > 0) {
                wait();
            }
            countRequestingWriter--;
            countRunningWriter++;
        }

        public synchronized void unlockWrite() {
            countRunningWriter--;
            notifyAll();
        }
    }

Ketika lock akan dipakai oleh sebuah thread untuk melakukan write locking, maka lock akan memeriksa apakah sedang dilakukan reading atau writing. Jika ada maka lock akan menunggu. Ketika thread lain selesai melakukan tugasnya maka lock akan memberitahu thread yang menungu itu untuk memeriksa lagi. Jika berhasil maka thread akan menambahkan nilai variabel tersebut. Variabel ini bertugas sebagai semacam semaphore. Untuk menggunakan lock ini, method untuk write dan read harus dimodifikasi.

Read More »


Barusan ada anak-anak 2006 yang minta diajarin make JavaMail API. Padahal gw juga hampir gak pernah make. Setelah googling bentar akhirnya dapet juga contoh source codenya.

API ini digunakan untuk melakukan penanganan komunikasi email
Sebelumnya harus download dulu librarynya di sini.

Berikut source codenya.
Read More »

%d blogger menyukai ini: