Kompresi SMS

Posted: July 27, 2008 in J2ME
Tags: , , , , ,

Januari lalu aku berhasil bikin program buat kompresi SMS.
Intinya sih, SMS yang aslinya cuma muat 160 karakter tiap SMS,
bisa jadi lebih dari 200 karakter.

Last January, I’ve managed to build an SMS Compressor for mobile phones
While normal SMS contains up to 160 characters per package, compressed one can contain more than 200 characters.

Klo sekarang, cocok banget dipake sama kartu esia yang bayar SMS nya per karakter,
karena di programku karakternya dikompres.
Aku bikin pake J2ME.
Btw, terakhir ngecek di getjar.com sama googling, programku ini bisa ngompres paling tinggi dibanding program2 laen yang ada. Tapi tu Februari 2008 klo gak salah, ato Maret gitu.
Programku kerjanya bukan lewat GPRS.. tapi tetep jaringan GSM/CDMA, jadi SMS tu bisa pending (in case hape tujuan lagi diluar area ato mati)

Last time I checked it (around February-March 2008), this program got the highest compression result, when I compared it with another similiar programs at that time.
My program uses GSM/CDMA network, and not using GPRS. It still allows SMSes to pending.

Konsepnya simpel.
Untuk kompresi, misal ada tulisan “mengambil”

Tulisan itu dipisah-pisah dulu, trus dijadiin biner :

The concept is simple.
Let’s put down a string of “mengambil” as a sample.
It then will be separated and converted into binary :

Huruf Heksadesimal (berdasar ASCII) Biner
m 6D 01101101
e 65 01100101
n 6E 01101110
g 67 01100111
a 61 01100001
m 6D 01101101
b 62 01100010
i 69 01101001
l 6C 01101100

nah, dari tabel di atas bisa dilihat bahwa ada kesamaan bit biner yang berulang toh.
(yang warnanya merah)..

We can see from the table above, that there are many similiar bits (the red ones)

Berdasarkan itu, aku potong bagian-bagian yang sama, terus aku sisakan satu aja di awal untaian binernya :

Based on that, I cut the same bits but one I put it in front of the new binary string :

01101101
01011110
01110001
11010010
10011100

Trus untuk menandai saat proses dekripsi, maka aku tambahkan byte penanda sapaya ngerti bagian mana yang nanti kudu didekrip :

Then, to mark the string for decompressing process, I add a sign byte :

11111111 (byte penanda awal / begin sign byte)
01101101
01011110
01110001
11010010
10011100
11111111 (byte penanda akhir / end sign byte)

nah.. sekarang kita bandingkan. “mengambil” terdiri dari 9 karakter. 1 karakter = 1 byte = 8 bit.
Bandingkan dengan hasil kompresinya (di atas).. cuma ada 7 untaian 8 bit = 7 karakter.
Dan semakin panjang untai awal, kompresi yang dilakukan bisa makin besar.

Now e can compare. “mengambil” contained 9 characters. 1 chars = 1 byte = 8 bit.
Compare with the compression result : there are only 7 byte = 7 char.
And so the longer string, the higher compression rate can be done.

Itu namanya algoritma Halfbyte.. tapi di programku, Halfbyte aku modifikasi sedemikian rupa sehingga cocok buat data SMS.
Perlu diketahui bahwa karakter GSM rada beda sama karakter ASCII – toh karakter GSM sama dengan yang dipake di CDMA kok.
Algoritma yang aku hasilkan itu tak kasih nama “Expanded Halfbyte” cie…. Hehehehe..

It is called Hlafbyte algorithm.. But in my program, I modified it so it can be fit with SMS data type.
GSM characters are a bit different with ASCII.
The new algorithm that I modified from Halfbyte, I called it “Expanded Halfbyte”

Modifikasinya yaitu :
Penciptaan byte awal, mengingat pemotongan byte terkompresi tu tiap 4 bit, jadi ada kemungkinan terjadi untai yang bukan kelipatan 8,
jadi disesuaikan dulu.
Penyesuaian dengan karakter GSM.
Yeah, itu penjelasan yang aku rasa paling mendekati tentang apa yang aku buat, hehehe.

The modification are :
Adding starter byte, because I cut the byte per 4 bit, so it is possible that the result string cannot be divided with 8, as supposed to be.
Adjustment with GSM characters.
Maybe those are the best explanation about what I’m doing.

Klo mau programnya, silakan aja

If you’d like to get it, so please click :

download di sini gratis : http://rapidshare.com/files/132871385/Kompresi_SMS.zip.html
atau disini : http://www.geocities.com/winartan_angkin/Kompresi_SMS.zip

Adapun gambaran programku :

Software description :

Berat : 60 Kb doang
Syarat :

  • Hape yang support java MIDP 2.0 & WMA (udah download aja, perkara gak jalan berarti gak bisa, gt aja, hehehe)
  • Untuk bisa kirim SMS terkompresi, hape penerima juga harus memiliki program ini. (To be able to send compressed SMS, receiver’s cellphone should also install this first)
  • Untuk nerima SMS terkompresi, program ini nggak perlu nyala,
    jadi klo ada pesan terkompresi masuk, otomatis nangkep sendiri kok. Jadi programnya mati pun diSMS tetep bisa (gak harus standby nyala terus). (The program doesn’t have to run all the time, it can automaticaly run when a compressed SMS received)

Feature :

  • Send Message + kompres/dekompres
  • Inbox
  • Sent Items
  • Contacts (tetep bisa akses kontak dari hape juga)
  • Archives

notes : berhubung gak gitu serius bikinnya, mungkin masih ada bug… tapi mungkin juga enggak.. kekekeke. OK, silahkan

There might be bugs in the program, as I’m not so serious when making it..
Please feel free to download it

download di sini gratis : http://rapidshare.com/files/132871385/Kompresi_SMS.zip.html
atau disini : http://www.geocities.com/winartan_angkin/Kompresi_SMS.zip

Comments
  1. Dicky says:

    Nice😀 Btw gimana kalo pake karakter non ASCII misal dari bahasa jerman kan ada tuh.

  2. goldenspring says:

    @Dicky
    asalkan karakter bahasa jerman itu masuk standar karakter GSM/CDMA (pokoknya bisa ditulis di hape buat SMS), gak masalah..🙂

    thx bro..

    Bahas AJAX dong di xrvel🙂

  3. Yoyo says:

    manteb..tapi mbuh aku rak mudeng j2me..dan sayangnya lagi kayanya HP esia ku gak support java..hahaha (mohon belas kasihan dari Anda..)

  4. Christian Lilik says:

    keren bro.. niat banget bikin posting nya..hehehe

    mampir ke blog ku bro

    http://creativeville.wordpress.com/

    God Bless

  5. Dicky says:

    Maksudku gmana kalo :
    huruf 1 => 00101101
    huruf 2 => 01101001

    Nggak ada yg dikompres ya?🙂

    Ajax : http://www.xrvel.com/rw/programming/simple-ajax-tutorial :p

  6. goldenspring says:

    @Dicky
    yups… minimum harus ada 11karakter berturut-turut yang similiar gitu

  7. kadafie says:

    ass..
    kalo make huffman coding, algortmanya ditaruh dimana ya…??
    mhn imunya…
    thanks…

  8. indri says:

    kl kompresi MMS gmn mz?

  9. manshoezz says:

    kan biasanya ad tuh yang sms pake symbol,,,
    mungkin g itu di kompres juga,,,

    trus untuk ascii kan requirenya 11 karakter berurut yang memiliki 4 bit terdepan yang sama,,,,
    jika sms itu tidak memiliki karakter yang sama,,,
    maka g bisa di kompresi dunk,,,

  10. goldenspring says:

    @indri
    Maaf saya lama banget gak blogging. MMS sama kok, ini bisa diterapkan. Hanya saja proses pengirimannya syntaxnya berbeda.

    @manshoezz
    Betul, ada yang pakai simbol.
    Adapun simbol-simbol itu semua sebenarnya terbatas, jadi SMS character itu tidak ‘sekaya’ ASCII, AFAIK.
    Jadi bisa dikompress.

    Betul, kalau tidak memiliki karakter yang sama, gak bisa dikompresi. Tapi algoritma ini saya buat berdasarkan kebiasaan orang-orang dalam menulis SMS (saya melihat dari susunan kata yang mungkin ada dan rata-rata jumlah tulisan). Jadi untuk lebih jelasnya bisa dicoba saja, dari percobaan saya, 90% text pasti berhasil dikompresi.

    Adapun yang gagal dikompresi kalau tulisannya seperti anak-anak SMP (@kk0H l4P3eRzz! – “Aku lapar” maksudnya).

    thx 4 visiting

  11. rengganis says:

    Thanks for sharing. Sourcenya bisa diupload di server selain RapidShare nggak? Masak mau download 10KB aja harus pake account Premium, gara2 selalu gak kebagian download slot😀

  12. eko says:

    Mas linknya gbs didownload
    – yang rapid gak bisa didownload pake free user

    tolong dikasih mirror laen dunk….

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s