Skip navigation

Category Archives: Very Easy


So I some times need to run a monthly cron job. And I want to set a parameter for duration spanned from first day and last day in the current month.

This is how I do it.

if [ -z “$STARTTIME” ] || [-z “$ENDTIME”]; then
STARTTIME=`date -d “-$(($(date +%d)-1)) days” +%Y-%m-%dT00:00:00Z`;
ENDTIME=`date -d “+1 month -$(date +%d) days” +%Y-%m-%dT23:59:59Z`;
fi

echo $STARTTIME
echo $ENDTIME

Iklan

This is just a very simple snippets, yet I can’t find it anywhere. I guess this rarely met.

Here’s how to use multiline input using Yii ConsoleCommand. In the console command class, use `$args` parameter in the console action.

public function actionIndex($args=array()){
   print_r($args)
}

Then you can execute something like command below which tries to input a JSON string to the console command.

$yii command index '{
   "name": "value"
}'

and the console will return

Array
(
    [0] => {
   "name": "value"
}
)

Satu hal yang suka dari Python adalah fitur REPL dan banyaknya fitur pemrosesan data. Ini membuat pemrosesan data bisa lebih interaktif dan efisien.

Dari banyak data yang saya proses, salah satu yang paling sering adalah log apache. Sebelum data log apache bisa diproses, pertama-tama harus diparsing dulu, yakni dengan library apachelog.

$sudo pip install apachelog

Dan di REPL

$python
>>> import apachelog, sys
>>> p = apachelog.parser(apachelog.formats['extended'])
>>> for line in open('file.log'):
...    data = p.parse(line)
...    print data

Dari kode di atas, variabel data bisa tinggal digunakan untuk pemrosesan.

UPDATE 2014-02-20:

Ada salah ketik di bagian

apachelog.format['extended']

harusnya

apachelog.formats['extended']

Tadi ada yang menanyakan di forum Yii tentang bagaimana membuat file excel yang dapat didownload di Yii. Intinya di sini kita tinggal pakai HTTP Header Content-Disposition yang dapat menyatakan sebuah halaman dapat diunduh ke dalam sebuah file. Setelah itu kita tinggal menggunakan library PHPExcel.

Ini contoh kodenya. Belum saya coba, tapi harusnya jalan.

<?php

class DownloadController extends CController {

        public function actionIndex(){
                //Pertama-tama download phpexcel terus ditaruh di /protected/extension/

                //Load data ke dalam array sebelum dimasukkan ke file Excel
                //ActiveRecord dan kelas-kelas bawaan Yii kemungkinan tidak akan jalan setelah kita nyalakan PHPExcel

                $users = User::model()->findAll();

                $arrayUsers = array();
                foreach($users as $user){
                        $arrayUsers[] = array(
                                'nama' => $user->nama,
                                'email' => $user->email,
                        );
                }

                //Matikan autoloader bawaannya Yii
                $phpExcelPath = Yii::getPathOfAlias('ext.phpexcel.Classes');
                spl_autoload_unregister(array('YiiBase', 'autoload'));
                //Include PHPExcel
                include($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel.php');
                //Setelah ini kelas-kelas bawaan Yii kemungkinan besar tidak akan jalan

                //Buat object PHPExcel Baru
                $objPHPExcel = new PHPExcel();
                $objPHPExcel->getProperties()->setCreator("Petra Barus");
                $objPHPExcel->getProperties()->setLastModifiedBy("Petra Barus");
                $objPHPExcel->getProperties()->setTitle("Dokumen Saya");
                $objPHPExcel->getProperties()->setSubject("Dokumen Saya");
                $objPHPExcel->getProperties()->setDescription("Dokumen Saya");

                //Selecting sheets
                $objPHPExcel->setActiveSheetIndex(0);

                //Mengisi Excel
                foreach($arrayUsers as $k => $u){
                        $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(1, $k, $u['nama']);
                        $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(2, $k, $u['email']);
                }

                //HTTP Header untuk download
                header('Content-type: application/ms-excel');
                header('Content-Disposition:  inline; attachment; filename=dokumen.xls');
                flush();

                //Dumping data to HTTP
                $writer = new PHPExcel_Writer($objPHPExcel);
                $writer->save('php://output');

		exit();

        }
}

Untuk membuat sebuah JFrame menjadi fullscreen hanya perlu dengan 2 baris kode di bawah.

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(0, 0, screenSize.width, screenSize.height);

JFrame akan menjadi memenuhi layar. Tapi mungkin masih kurang karena titlebar dari JFrame masih akan terlihat. Untuk itu tinggal eksekusi method setUndecorated dengan nilai true sebelum JFrame ditampilkan.

Cara ini juga dapat diterapkan pada JDialog.


*postingan sebelum tidur*

Ada salah satu cara mudah yang sudah disediakan di Java untuk melakukan parsing format tanggal. Cara itu adalah dengan menggunakan SimpleDateFormat. Misalkan kita mempunyai sebuah String berisi “23-01-2010”. Cara paling naif adalah dengan melakukan splitting pada karakter “-“. Ini akan merepotkan kalau kita mempunyai banyak string yang ingin diparsing. Daripada kita membuat sebuah rutin untuk parsing, akan lebih menyenangkan menggunakan method parse yang disediakan oleh SimpleDateFormat.

Contoh kodenya

//Parse
SimpleDateFormat sdf = new SimpleDateFormat("dd-mm-yyyy");
String dateStr = "23-01-2010";
Date date = sdf.parse(dateStr);
//Test
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
System.out.printf("%d, %d-%d-%d\n", gc.get(Calendar.DAY_OF_WEEK),
    gc.get(Calendar.DAY_OF_MONTH),
    gc.get(Calendar.MONTH),
    gc.get(Calendar.YEAR));

Postingan ini dan beberapa postingan berikutnya akan membahas mengenai Image Histogram sederhana dengan menggunakan Java. Image histogram adalah sebuah representasi dari distribusi warna sebuah gambar. Biasanya untuk sistem warna RGB, histogram ini dibangun dengan menghitung frekuensi nilai-nilai kompoisi tiap warna ini.

Image histogram ini dibuat untuk tugas kuliah Sistem Rekognisi. Pada postingan ini saya akan mempraktikkan bagaimana mengambil data sebuah pixel pada sebuah image dengan menggunakan Java. Hal ini dapat dilakukan dengan menggunakan library imageio

Kodenya cukup sederhana.

public static void main(String[] args) throws IOException {
        String imagepath = "C:\\lenna.bmp";
        BufferedImage image = ImageIO.read(new File(imagepath));
        int width = image.getWidth();
        int height = image.getHeight();
        int count[][] = new int[3][0x100];
        int RED = 0;
        int BLUE = 1;
        int GREEN = 2;
        int total = width * height;
        for (int i = 0; i < width; i++) {
            for (int j = 0; j < height; j++) {
                int color = image.getRGB(i, j);
                int cred = (color & 0x00ff0000) >> 16;
                int cgreen = (color & 0x0000ff00) >> 8;
                int cblue = color & 0x000000ff;

                count[RED][cred]++;
                count[BLUE][cblue]++;
                count[GREEN][cgreen]++;
            }
        }
        for (int i = 0; i < 0x100; i++) {
            System.out.printf("%03d %04d %04d %04d\n", i, count[RED][i], count[BLUE][i], count[GREEN][i]);
        }
    }

Bagian yang paling menarik adalah bagian

int color = image.getRGB(i, j);
int cred = (color & 0x00ff0000) >> 16;
int cgreen = (color & 0x0000ff00) >> 8;
int cblue = color & 0x000000ff;

method getRGB mengembalikan sebuah nilai long integer yang berisi data RGBnya di mana kode blue berada pada least significant byte, green lebih signifikan, dan red berada pada posisi most significant byte.

Pada postingan selanjutnya akan dibahas cara integrasi komponen-komponen seperti progress bar dan chart untuk memperindah representasi dari histogram.


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 »


Di salah satu kuliah yakni High Performance System sering dibutuhkan fungsi untuk menghitung durasi waktu. Salah satu fungsi yang dapat dipakai adalah clock_gettime yang menyediakan ketelitian hingga nanosecond. Fungsi ini menggunakan struktur data yakni timespec yang juga didefinisikan di header time.h.
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 »

%d blogger menyukai ini: