Kamis, 01 Agustus 2013

Posting pertama via mobile

Postingan pertama via mobile (nexus 7/ 4.3).

Fitur baru android 4.3 built in photo editor



Create new post

Kamis, 07 Maret 2013

Parsing Pesan ISO 8583 dengan Python

Berikut langkah-langkah sederhana untuk melakukan parsing pesan ISO 8583 menggunakan Python.
Instalasi modul ISO8583.

$ pip install https://pypi.python.org/packages/source/I/ISO8583%20Module/ISO8583%20Module-1.2.zip

test_parse_8583.py

# test_parse_8583.py
from ISO8583.ISO8583 import ISO8583


if __name__ == '__main__':
    iso = '0800d010800000000000000000002000000001200000000000400001200170299'

    msg = ISO8583()
    msg.setIsoContent(iso)

    print 'Tipe pesan: %s' % msg.getMTI()
    # iterasi field / kolom
    for field in msg.getBitsAndValues():
        print 'Kolom %s [%s] : %s' % (field['bit'],
                field['type'], field['value'])


Output

Tipe pesan: 0800
Kolom 2 [LL] : 012
Kolom 4 [N] : 000000000004
Kolom 12 [N] : 000012
Kolom 17 [N] : 0017
Kolom 99 [LL] : 0299

Sabtu, 14 Juli 2012

Enkripsi Public Key di Python

Public key memungkinkan orang mengirim pesan terenkripsi tanpa mengetahui kunci yang digunakan untuk dekripsi. Hal ini dikarenakan kunci yang digunakan asymetric, dimana kunci yang digunakan dekripsi berbeda dengan yang digunakan untuk enkripsi.

Terdapat modul Python PyCrypto yang menyediakan fungsi enkripsi public key. Untuk menginstall modul ini gunakan pip atau download module binary yang sudah tersedia

$ pip install PyCrypto

Untuk melakukan enkripsi dan dekripsi diperlukan kunci, PyCrypto menyediakan fungsi untuk membuat kunci dengan beberapa pilihan algoritma.
  • DSA
  • RSA
  • ElGamal
  • qNEW

Pembuatan Kunci

Dalam proses pembuatan kunci dibutuhkan data random dan panjang kunci yang akan dibuat (dalam kelipatan 256 dan lebih dari 1024). Data random dihasilkan oleh class Random yang menyediakan random number generation.

Jumat, 27 April 2012

Menjalankan apache2 web server standalone

Mungkin judulnya kurang tepat,  menjalankan apache2 web server standalone untuk direktori tertentu ke nomor port tertentu tanpa menjadi root terlebih dahulu.

Akhir-akhir ini sering membuat halaman web statis (html, css, dan javascript) yaitu berupa dokumentasi proyek, slide presentasi, dan mockup ui. Untuk sharing lebih enak kalo setup webserver untuk serving file-file tersebut daripada copy-paste lewat flashdisk.

Sabtu, 21 April 2012

Statistik ukuran file HTML di Wikipedia Indonesia offline

Let's do an experiment. Ada mirror Wikipedia bahasa indonesia lokal (entah kapan downloadnya).

$ cd wikipedia_id
$ du . -sh
4.1G .
Total ukurannya 4.1 Gigabyte termasuk file gambar, html dan file pendukung lain. Langkah pertama generate data ukuran file hanya yang bertipe html, gunakan du, grep dan cut.

$ du . -ab | grep \.html$ | cut -f 1 > /tmp/stats.txt
$ head /tmp/stats.txt
7519
8254
8910
8907
8560
8834
10463
8776
9558
10196
$ wc -l /tmp/stats.txt
277899 /tmp/stats.txt
Ada sekitar 277.899 file html dengan informasi ukuran dalam byte tersimpan pada file stats.txt. Untuk pembuatan graph histogram statistik, saya menggunakan Python modul matplotlib.

#!/usr/bin/env python
# generate_hist.py

import matplotlib.pyplot as plt

data = open('/tmp/stats.txt').readlines()

data = map(int, data)

plt.hist(data, 50)

plt.title('Histogram ukuran file HTML Wikipedia ID offline')
plt.xlabel('Ukuran file (byte)')
plt.ylabel('Jumlah file')

plt.savefig('hist1.png')

hist1.png
Wah, ternyata tampilannya kurang informatif, data terlalu mengelompok pada tiga pertama bins. Sekarang coba plot ukuran file dari yang terkecil sampai terbesar.

Kamis, 19 April 2012

Rabu, 11 April 2012

Menghasilkan kombinasi alfabet menggunakan Python

Berikut kode program Python memanfaatkan modul itertools untuk menghasilkan kombinasi dari list
# two_alfabets_combination.py

import itertools
import string


def create_circular_alfabet(count=26):
    multiplier = count / 26 + 1
    result = string.lowercase * multiplier
    return result[:count]

source = create_circular_alfabet(100)
item_length = 2
output_file = 'result.txt'

combination_result = itertools.combinations(source, item_length)

fh = open(output_file, 'w')

count = 0
for item in combination_result:
    fh.write('%s ' % ''.join(map(str,item)))
    count += 1

fh.close()

print "Finished %s result items, check %s" % (count, output_file)
Berikut hasil setelah dijalankan

$ python two_alfabets_combination.py
Finished 4950 result items, check result.txt
$ wc result.txt
    0  4950 14850 result.txt
$ cat result.txt
ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av
.
.
.

Improvement: gunakan modul argparse atau optparse untuk membuat tool command line.