0 komentar


Keunikan Perusahaan Aplle

Perusahaan yang memproduksi gadget yang berguna dan inovatif. Iklannya pun terpampang dimana-mana, hohoo. Ok langsung saja aku kasih tau keunikannya. Check 'em out bro 'n sis !!!

Logo Pertama Apple
Tau logo pertama Apple ?? Logo gambar Apple yang pakai warna retro pelangi. Sebenarnya gambar ini adalah gambar Sir Isaac Newton, penemu hukum gravitasi (kalau ga salah ya). Sir Isaac menggambar apel yang jatuh dan mengenai kepalanya. Tahun 1976 logo itu diganti karena kurang mendongkrak produksi.

Jual Kalkulator Buat Tambah Modal
Steve Jobs menjual Volkswagen , dan Wozniak menjual kalkulator HP-65nya seharga $500 untuk tambah modal. Sama kayak harga laptop jaman sekarang.

Apple 1 Harganya $666.66
Apple selalu jual dengan harga mahal produk-produknya. Oh ya, harga ini juga menimbulkan kontroversi karena identik dengan angka setan (666). Namun Woz menjelaskan harga tersebut berlaku di toko, karena Apple menjualnya dengan $500. Tetapi toko-toko menjualnya dengan harga $667, maka Woz merubahnya dengan $666.66 supaya mudah diketik.

Apple Menemukan DogCow
Pernah mendengar "DogCow" ? Pengguna Apple pertama pasti akan mengetahuinya, Dogcow disertakan di dalam Cairo Font yang merupakan bagian dari Macintosh asli. Setelah font Cairo dihentikan, Dogcow hidup dengan driver LaserWriter 4.0 dan kemudia menjadi semacam maskot untuk staf Apple.

"Macintosh" Terinspirasi dari Jenis Apel
Steve Jobs memberi nama putrinya dengan nama Apple Lisa, tapi dari manakah nama "Macintosh" ditemukan? Jeff Raskin, pekerja Apple menjelaskan bahwa nama Macintosh didapatkan dari jenis apel. Apa ada ya ??

Apple Buat Mass-Market Digital Kamera Pertama
Pada tahun 1994, Apple merilis digital kamera pertama di US. Apple QuickTake 100 bisa mengambil gambar-gambar yang menakjubkan dan terhubung ke Mac via kabel. Harga kamera tersebut berkisar dengan harga $749, resolusi kurang dari satu megapiksel dan tidak ada tampilan digitalnya. QuickTake kemudian diperluas ke dua model sebelum Steve Jobs menghentikan produksinya di tahun 1997.

IPod Edisi Pertama Punya Rahasia
iPod edisi pertama datang dengan sebuah rahasia kecil, yaitu telur paskah. Yang dapat diakses jika pengguna mengetahui kombinasi yang tepat pada saat menekan tombol. Bagaimana menemukan permainan ini dijelaskan oleh Nick Triano pada tahun 2002 di geek.com. Caranya dengan menahan tombol tengah selama 3 detik, dan pengguna akan mendapatkan Breakout(Pong) berupa permainan telur paskah

Tutorial Membuat Interpreter dan Compile

0 komentar

Tutorial Membuat Interpreter dan Compiler (bagian 2)

part 1 part 2 part 3 part 4 part 5 part 6 part 7 part 8 part 9
Source code untuk artikel ini: expr1.zip

Memahami langkah pembuatan interpreter

Jika Anda punya niat untuk membaca tutorial ini, saya asumsikan Anda sudah tahu cara kerja interpter. Interpreter membaca source dalam bahasa X (misalnya file.php, program.py, dsb). Interpreter akan menjalankan program input tersebut, dan menghasilkan output. Kira-kira seperti ini diagramnya:
interpreter.png
Proses itu sudah jelas, tapi Anda membaca tutorial ini karena ingin tahu apa yang ada dalam sebuah interpreter. Sebuah interpreter terdiri atas bagian parser, dan interpreter. Parser menghasilkan sebuah tree yang disebut dengan parse tree. Jadi, isi sebuah interpreter bisa digambarkan seperti ini:
interpreter2.png
Bagian yang umumnya memakan banyak waktu adalah menuliskan bagian parser, oleh karena itu banyak program parser generator yang dikembangkan (beberapa di antaranya YACC, Bison,dan ANTLR). Sebuah parser generator hanya perlu diberikan grammar sebuah bahasa, lalu akan menghasilkan kode program untuk parsing. Kode program yang dihasilkan bisa dikompilasi bersama-sama dengan kode program kita yang lain.
interpreter3.png
Jadi dalam gambaran totalnya, peran parser generator adalah seperti ini:
interpreter4.png
Dengan adanya parser generator, kita hanya perlu berkonsentrasi pada dua hal: seperti apa syntax bahasa kita, dan bagaimana mengeksekusi tree yang dihasilkan oleh parser untuk bahasa tersebut.

Bahasa paling sederhana: KALKULATOR

Kita akan mengimplementasikan bahasa yang sangat sederhana, yang hanya berfungsi sebagai kalkulator. Pertama kita akan membuat versi interpreter, lalu membuat versi compilernya. Grammar kalkulator ini sangat sederhana, hanya sebuah ekspresi '+', '-' dan '*'. Saya sengaja tidak membuatkan '/' untuk bahan latihan. Ketika dijalankan program akan mencetak setiap ekspresi yang dievaluasi. Jadi program:
1+2
2*3
(8-2)*(7-2)
akan menghasilkan: 3, 6, dan 40

ANTLR

Untuk memudahkan, dalam tutorial ini kita gunakan tools ANTLR http://www.antlr.org/ yang berbasis GUI yaitu Antlrworks. Tools ini sangat mudah dipakai dan sudah cukup matang. Versi command line ANTLR sudah dirilis sejak 1992 dan GUI modern dikembangkan sejak 2005. Sebelumnya sebenarnya sudah ada versi GUI, tapi masih kurang matang, sehingga dibuatlah versi GUI yang modern.
Bagi Anda yang masih kurang lancar dalam memahami grammar, ANTLR sangat bisa membantu, Anda bisa mencoba langsung grammar Anda sebelum mulai membuat program satu baris pun. Jika ada fitur yang saya jelaskan tapi Anda belum paham, Anda bisa mencoba-coba mengubah grammar dan langsung mencoba melihat visualisasinya. Jadi jika Anda merasa artikel ini terlalu cepat, cobalah berhenti dan mencoba hasilnya di ANTLRWorks.
Saya tidak akan memberi tutorial bagaimana cara memakai ANTLRWorks. Anda bisa mencoba-coba sendiri. Untuk mengikuti tutorial ini, download saja source code yang saya sediakan dan buka file berekstensi .g dengan ANTLRWorks.
ANTLR dan ANTLRWorks hanyalah salah satu tools yang tersedia. Jika Anda sudah mahir, tools apapun akan sama saja. Programmer yang baik tidak akan dibatasi oleh tools.
Cara menjalankan ANTLRWorks tergantung pada OS yang Anda gunakan. Di Mac OS X/Windows, jika sudah diset dengan benar, Anda bisa mengklik file antlrworks-1.2.3.jar, dan GUI akan muncul. Jika cara tersebut gagal, mungkin Anda perlu menjalankan dari command line, caranya:
 java -jar /path/to/antlrworks-1.2.3.jar
Berikut ini grammar yang akan kita pakai (ini versi 1, lihat file Expr_1.g) sebagai dasar bagi interpreter dan compiler kita (catatan, baris yang diawali // adalah komentar):
grammar Expr;

// START:stat
prog:   stat+ ;

stat:   expr NEWLINE
    |   NEWLINE
    ;
// END:stat

// START:expr
expr:   multExpr (('+'|'-') multExpr)*
    ; 

multExpr
    :   atom ('*' atom)*
    ; 

atom:   INT 
    |   '(' expr ')'
    ;
// END:expr

// START:tokens
INT :   '0'..'9'+ ;
NEWLINE:'\r'? '\n' ;
WS  :   (' '|'\t'|'\n'|'\r')+ {skip();} ;
// END:tokens
Mari kita bahas grammarnya. Sebuah program <prog> terdiri atas banyak pernyataan <stat>+ (simbol plus artinya satu atau lebih), sebuah pernyataan boleh sebuah ekpresi <expr> atau sebuah baris kosong (NEWLINE). Anda juga bisa melihat Syntax Diagram dari sebuah rule, misalnya prog akan tampak seperti ini:
prog plus.jpg
stat.jpg
Karena Anda bisa melihat sendiri syntax diagram-nya di ANTLRWorks, saya tidak akan menampilkan sisanya.
Sebuah ekspresi terdiri dari pernyataan perkalian <multExpr> yang diikuti oleh plus/minus ekpresi yang lain. Tapi plus dan minus itu tidak wajib, jadi kita tambahkan * yang artinya nol atau lebih.
Pernyataan perkalian sendiri terdiri atas <atom> yang (mungkin) dikalikan dengan atom lain, karena tidak harus dikalikan atom lain, maka kita tambahkan juga *. Aturan terakhir adalah <atom> yang bisa berupa sebuah integer, atau ekspresi lain dalam tanya kurung.
Berikutnya kita perlu mendefinisikan token. Dalam kasus ini yang menjadi token adalah INT (0-9), NEWLINE (boleh \r\n yang merupakan versi DOS atau \n saja yang merupakan versi UNIX). Kita juga mengijinkan spasi ada di antara ekspresi, jadi 1+2 sama dengan 1 + 2, untuk itu kita perlu mendefinisikan karakter apa saja yang perlu dilewatkan (skip), dalam kasus ini kita mengabaikan spasi, tab, dan karakter baris baru.
Kita bisa langsung mencoba grammar ANTLR ini, dengan menggunakan ANTLRWorks. Coba pilih menu Debugger, lalu pilih Debug. Masukkan teks, misalnya 1+2. Perhatikan bahwa Anda harus mengakhiri sebuah ekspresi dengan karakter baris baru (enter) setelah ekspresi. Anda bisa menjalankan grammar langkah per langkah, atau langsung saja klik pada tombol END. Hasilnya sebuah pohon akan ditampilkan, pohon ini dinamakan Pohon Parsing (Parsing Tree). Silakan Anda mencoba-coba aneka ekspresi lain, termasuk ekspresi multi baris, supaya bisa melihat bagaimana pohon untuk setiap ekspresi.
Berikut ini adalah gambar pohon yang dihasilkan oleh 1 + 2 * 3. Gambar pohon ini dihasilkan langsung oleh ANTLRWorks (saya tidak menggambarnya manual).
1 plus 2 times 3.jpg

AST

Jika diperhatikan karakter yang tidak penting juga masuk dalam pohon ini, yaitu karakter '\n'. Ada juga node yang tidak penting, yaitu atom. Jika Anda membuat bahasa yang lebih rumit, misalnya bahasa C, maka karakter seperti '{', '}', ';' yang tidak penting juga akan masuk dalam parse tree. Kita mengatakan karakter itu tidak penting karena gunanya hanya untuk memisahkan blok, dan dalam bentuk pohon, sudah jelas bahwa blok-blok tersebut terpisah.
Sebelum masuk tahap pemrosesan, kita perlu mengubah pohon tersebut ke bentuk AST (abstract syntax tree) dengan membuang hal-hal yang tidak perlu, dan mungkin mengorganisasi tree menjadi bentuk yang lebih baik (lebih mudah diproses, misalnya menukar node kiri dan kanan, dsb). Jika kita menggunakan tools tertentu (misalnya Bison) kita menulis kode untuk mengubah parse tree menjadi AST, tapi untungnya ANTLR sudah cukup canggih, sehingga kita cukup menambahkan aturan untuk membuat pohon.
AST yang saya inginkan untuk 1 + 2 * 3 adalah:
ast 1 plus 2 times 3.jpg
Dan jika ada dua baris (saya menambahkan satu baris baru: 2 * 5 + (6 - 8)) :
  1 + 2 * 3
  2 * 5 + (6 - 8)
Saat ini parse tree sudah terlalu kompleks:

Sedangkan AST yang diharapkan adalah seperti ini:
2 times 5 plus x 6 minus 8 x.jpg
Perhatikan bahwa tanda kurung juga tidak ada lagi (tidak lagi penting, karena dalam bentuk tree sudah jelas presedensinya).
Ada beberapa perubahan yang diperlukan untuk menghasilkan AST. Pertama di bagian options, kita tambahkan opsi output = AST, dan ASTLabelType = CommonTree. Ini artinya kita meminta ANTLR menghasilkan AST, dengan tipe node AST-nya adalah CommonTree. Jika kita mau, kita juga bisa membuat sendiri jenis node untuk tree kita sendiri, tapi saat ini hal tersebut tidak diperlukan.
Berikutnya, kita perlu menentukan seperti apa bentuk tree kita. Dalam kasus ini, karena ada banyak ekspresi, saya ingin di bagian akar (root) adalah EXPRESSIONLIST, dan terdiri atas banyak EXPRESSION. Jika dilihat kembali, tidak ada rule yang bernama EXPRESSION ataupun EXPRESSIONLIST, jadi kita perlu mendefinisikan kedua nama tersebut di bagian tokens. Kita juga ingin agar INT menjadi nama node untuk literal integer. Setiap nama yang didefinisikan di bagian tokens akan memiliki konstanta bertipe integer di file parser yang dihasilkan ANTLR.
options {
 output = AST;
 ASTLabelType =CommonTree;
}

tokens {
       EXPRESSION_LIST;
       EXPRESSION;
       INT;
}
Kita perlu mengubah pohon stat menjadi pohon EXPRESSION_LIST, yang terdiri atas banyak EXPRESSION. Caranya kita gunakan operator -> milik ANTLR. Operator ini digunakan setelah sebuah rule, untuk menentukan bentuk tree untuk rule tersebut. Umumnya bentuknya adalah ^(ROOT rules), yang artinya, jadikan ROOT sebagai akar dan rules sebagai anak-anaknya. Contohnya seperti ini:
// START:stat
prog:   stat+ -> ^(EXPRESSION_LIST stat+);

stat:   expr NEWLINE -> ^(EXPRESSION expr)
    |   NEWLINE
    ;
// END:stat
Bagian pertama stat+ -> ^(EXPRESSION_LIST stat+); artinya, node-node yang berupa stat, dikumpulkan dibawah node yang bernama EXPRESSION_LIST. Bagian kedua expr NEWLINE -> ^(EXPRESSION expr) artinya Node expr ditaruh dibawah node EXPRESSION, dan kita mengabaikan karakter NEWLINE.
Kita juga ingin agar '+' dan '-' memiliki nodenya sendiri. Jadi jika ada 11+12, kita ingin agar punya Node '+' yang anak kirinya adalah node 11 dan anak kanannya adalah node 12. Untuk hal ini, ANTLR memiliki shortcut. Agar '+' dan '-' menjadi node, cukup tambahkan karakter ^ di bagian grammar yang ingin dijadikan root node.
// START:expr
expr:   multExpr (('+'|'-')^ multExpr)*
    ; 
Sama halnya dengan '*', kita juga ingin agar * memiliki nodenya sendiri
    
multExpr
    :   atom ('*'^ atom)*
    ; 
Dan terakhir, kita ingin membuang kurung buka dan kurung tutup, karena urutan evaluasi sudah jelas dalam tree. Untuk membuangnya, kita nyatakan bahwa '(' expr ')' -> expr, yang artinya: jika ada kurung buka, lalu expr, lalu kurung tutup, cukup hasilkan expr saja (dengan kata lain buang kurung buka dan tutupnya).
atom:   INT 
    |   '(' expr ')' -> expr
    ;
// END:expr
Sekarang kita bisa mengklik tab AST di ANTLRWorks, dan hasil AST-nya adalah seperti ini.
ast 1 plus 2 times 3.jpg
Nah sekarang kita sudah punya tree yang bagus. Berikutnya adalah bagaimana mengeksekusi tree tersebut? Ada dua cara: pertama adalah interpretasi, dan kedua adalah kompilasi. Namun kita perlu menghasilkan dulu source code parsernya, caranya cukup klik menu Generate lalu pilih Generate Code. ANTLR akan membuat tiga buah file, yaitu file Lexer, file Parser, dan file Tokens.
antlr.png
Catatan: Java hanyalah salah satu bahasa yang didukung ANTLR. ANTLR juga bisa membuat parser dalam bahasa C, C#, Python, JavaScript, dan ActionScript.

Menulis Kode

Nah sekarang kita perlu menuliskan kode dalam bahasa Java. Kode-kode berikut ini ada pada file ExprLang.java. Setiap parser pasti punya kode inisialisasi, kode inisialisasi ini akan sama untuk aneka jenis bahasa, sehingga tidak akan dijelaskan lagi di bagian berikutnya.
    public static void main(String argv[]) throws Exception {       
        ExprLexer lex = new ExprLexer(new ANTLRFileStream(argv[0]));
        CommonTokenStream tokens = new CommonTokenStream(lex);
        ExprParser g = new ExprParser(tokens);
        ExprParser.prog_return r = g.prog();

        CommonTree ct = (CommonTree)r.getTree();
    }
Baris pertama dalam sebuah fungsi main membuat sebuah lexer (dalamkasus ini ExprLexer), yang fungsinya memecah string menjadi bagian-bagiannya (menjadi INT, '*', '+', '-', dsb). Baris kedua membuat object CommonTokenStream yang diberikan ke parser (ini adalah sebuah adapter, Anda tidak perlu mengetahui internalnya kecuali ingin mengubah kode ANTLR). Baris ketiga adalah bagian untuk mengkonstruksi parser, dan baris ke empat adalah baris yang penting, baris di mana proses parsing itu sendiri dipanggil:
    ExprParser.prog_return r = g.prog();
Kita meminta nilai kembalian parser dimulai dari aturan prog. Setelah itu kita bisa mendapatkan Tree (AST) dengan menggunakan r.getTree(). Tree yang kita pakai adalah Tree standar bawaan ANTLR, jadi kita memakai CommonTree. Setelah memiliki root dari tree, kita bisa mengevaluasi ekspresi dengan mudah. Saya tidak akan menjelaskan semua method milik CommonTree, penjelasan lengkap ada di dokumentasinya di:
http://www.antlr.org/api/Java/classorg_1_1antlr_1_1runtime_1_1tree_1_1_common_tree.html
Method-method yang akan saya pakai adalah: getChildren, getChilCount, getChild, getType, dan getText. Berikut ini penjelasan singkatnya:
  1. Method getChildren untuk mendapatkan List of children yang bisa diiterasi menggunakan format loop Java (for (Tree x: e.getChildren()) {}). Sebagai catatan, Anda akan melihat banyak casting tipe Object ke CommonTree, ketika ANTLR ditulis, Java 1.5 belum dirilis, sehingga fitur Generic milik Java belum dipakai. Mereka saat ini sudah mulai beralih ke JDK 1.5.
  2. Method getChildCount digunakan untuk mendapatkan jumlah anak. Berguna untuk menentukan apakah misalnya pernyataan if memiliki else atau tidak.
  3. Method getChild digunakan untuk mendapatkan anak ke-n.
  4. Method getType digunakan untuk mendapatkan konstanta integer tipe node. Nilainya terdefinisi (tidak nol) jika node tersebut diberi nama dibagian tokens. Hasil kembalian method ini bisa dibandingkan dengan konstanta integer yang dihasilkan ANTLR dalam format NamaGrammarLexer.KONSTANTA (dalam contoh ini misalnya ExprLexer.INT)
  5. Method getText digunakan untuk mendapatkan teks node (misalnya node + akan memiliki teks +). Ketika nanti node variabel diperkenalkan, getText bisa digunakan untuk mendapatkan nama variabel.
Mari kita mulai memproses tree. Kita memiliki banyak ekspresi dalam satu file, maka kita buat method evaluateExprList, method ini hanya akan memanggil evaluateExpression yang tugasnya adalah mengevaluasi ekspresi itu sendiri.
    void evaluateExprList(CommonTree exprlist) {
        for (Object e: exprlist.getChildren()) {
            System.out.println("Result: " + 
            evaluateExpression((CommonTree)e));
        }
    }
Kalau kita lihat dari gambar AST yang dihasilkan oleh Antlr, misalnya pohon ini:
ast 1 plus 2 times 3.jpg
kita melihat bahwa ada suatu node dengan nama EXPRESSION yang tidak terlalu berguna untuk saat ini. Gunanya hanyalah agar terlihat bahwa node di bawahnya adalah sebuah ekspresi. Saya sengaja membuat node ini untuk pengembangan versi berikutnya, di mana setiap baris belum tentu berisi ekspresi. Kita hanya perlu melewati node itu dengan mengambil anaknya yang pertama.
    int evaluateExpression(CommonTree expr) {
        debug("Evaluate Expression "+expr.getText());
        return evaluateExpr((CommonTree)expr.getChild(0)) ;
    }
Fungsi evaluateExpr adalah fungsi yang melakukan komputasi. Ini sangat mudah, karena pada dasarnya hanya ada dua kasus: INTEGER, dan OPERATOR.
Pertama, jika isi node adalah integer, maka hasilnya adalah nilai integer itu sendiri (di Java kita memakai Integer.parseInt untuk mengubah string menjadi integer)
    if (expr.getType()==ExprLexer.INT) {
        return Integer.parseInt(expr.getText());
    }
Kedua, jika isi node adalah operator ('+' atau '-' atau '*') berarti nilai ekspresi adalah nilai anak pertama dioperasikan (ditambah/dikurang/dikali) dengan anak kedua:
    if (expr.getText().equals("+")) {
        return evaluateExpr((CommonTree)expr.getChild(0)) + 
            evaluateExpr((CommonTree)expr.getChild(1));
    }
    if (expr.getText().equals("-")) {
        return evaluateExpr((CommonTree)expr.getChild(0)) - 
            evaluateExpr((CommonTree)expr.getChild(1));
    }

    if (expr.getText().equals("*")) {
        return evaluateExpr((CommonTree)expr.getChild(0)) *
            evaluateExpr((CommonTree)expr.getChild(1));
    }

Cara Berpikir

Perhatikan bahwa algoritma ini sangat sederhana, Anda hanya perlu berpikir: di Node ini saya harus melakukan apa? Anda jangan melihat kompleksitas semu. Jika Anda berpikir bahwa untuk membuat kalkulator seperti ini Anda harus memikirkan aneka kombinasi yang ada, seperti 4*7, 4+7, 4+(7), (4)+7, dst, maka cara berpikir Anda masih salah. Ingatlah bahwa proses parsing menghasilkan pohon, sehingga Anda harus berpikir bagaimana melakukan aksi dalam suatu node di pohon tersebut.

Mengkompilasi

Untuk mengkompilasi interpreter ini, Anda perlu file antlr-runtime-3.1.3.jar (tergantung versi terbaru saat ini). Anda perlu memberikan path ke file tersebut, di Linux/Mac/BSD, kira-kira seperti ini:
 javac -classpath /path/to/antlr-runtime-3.1.3.jar:. ExprLang.java
di Windows, kira-kira seperti ini:
 javac -classpath c:\path\to\antlr-runtime-3.1.3.jar;. ExprLang.java
Tentu saja Anda juga bisa menggunakan Netbeans, atau Eclipse atau IDE apapun. Jangan lupa menambahkan antlr-runtime-3.1.3.jar ke bagian Library/Classpath.
Untuk menjalankan programnya dari command line:
 java -classpath /path/to/antlr-runtime-3.1.3.jar:. ExprLang test.e
Di mana test.e adalah file teks yang berisi baris-baris ekspresi.
Selesai sudah interpreter yang sangat sederhana. Saya sengaja menyertakan pernyataan debug agar pembaca dapat memahami alur eksekusi. Total baris, tanpa debug hanyalah 60 baris, ditambah dengan file grammar Expr.g totalnya hanya 100 baris. Mudah bukan?

0 komentar

 

 Untuk apa membuat compiler?

Sudah ada banyak bahasa di dunia ini, untuk apa belajar membuat interpreter atau compiler untuk sebuah bahasa?
Ada dua alasan:
  1. Belajar membuat compiler merupakan latihan pemrograman yang bagus. Untuk membuat compiler, kita perlu mengetahui parsing, abstract syntax tree, dan aneka hal lain yang memerlukan algoritma dan struktur data yang kompleks.
  2. Pengetahuan pembuatan compiler terutama parsing dan pembuatan abstract syntax tree dapat diaplikasikan ke berbagai bidang lain. Contoh aplikasi kedua ilmu tersebut misalnya source-to-source translators (penerjemahan otomatis dari satu bahasa pemrograman ke bahasa lain, misalnya f2c yang menerjemahkan FORTRAN ke C), refactoring tools, reengineering tools, metrics tools (mengukur jum lah baris kode/fungsi, dsb untuk metrik perangkat lunak), consistency checkers (memeriksa apakah kode program konsisten dengan aturan), dan lain-lain. Beberapa contoh aplikasi lain dari ilmu yang dipelajari ketika membuat compiler bisa dilihat di http://progtools.comlab.ox.ac.uk/members/torbjorn/thesis.
Tidak terlalu banyak orang yang belajar membuat compiler untuk general purpose language, kebanyakan orang belajar untuk membuat Domain specific language (DSL). DSL adalah bahasa yang digunakan hanya untuk aplikasi tertentu. Contoh DSL misalnya bahasa scripting di game, atau macro di word processor tertentu, bahkan Cascading Style Sheeet (CSS) pada HTML/XML juga bisa dipandang sebagai DSL. DSL biasanya jauh lebih sederhana dibandingkan general purpose language, karena tujuannya spesifik untuk domain tertentu.
Dalam bagian 1 ini saya akan membahas dasar teori parsing, teori yang saya bahas di sini singkat saja. Jika Anda ingin langsung praktik, silakan lanjut ke bagian kedua.

Cara Kerja Compiler

Compiler membaca sebuah source code dalam bentuk teks, menyatukan karakter-karakter yang berhubungan menjadi token, lalu memeriksa apakah token-token tersebut memenuhi grammar, setelah itu compiler akan memeriksa semantik input, dan membuat output dalam sebuah bahasa (yang umumnya adalah assembly). Jika outputnya adalah assembly maka proses berikutnya adalah assembling yang dilakukan dengan assembler untuk menghasilkan bahasa mesin. Proses terakhir untuk membuat executable file dilakukan oleh linker.
Mungkin terlalu banyak kata-kata asing di kalimat tersebut, secara singkat:
  • source code adalah kode program tekstual dalam bahasa tertentu
  • token adalah kumpulan karakter yang memiliki arti khusus. Misalnya token 123 adalah token angka seratus dua puluh tiga, tidak dipandang sebagai karakter terpisah 1, 2, dan 3.
  • grammar adalah tata bahasa. Misalnya dalam program kalkulator 11 + 23 merupakan sesuatu yang benar, tapi 12 + / 4 tidak benar (plus sebelum bagi tidak memiliki makna)
  • assembly adalah bahasa sederhana yang mudah diterjemahkan ke bahasa mesin. Tools untuk menerjemahkannya adalah assembler, dan prosessnya namanya assembling.
  • executable file adalah file program yang siap dijalankan
  • linker adalah tools yang akan menggabungkan kode mesin yang kita tulis dengan library
  • library adalah kumpulan kode yang disatukan dalam sebuah file yang dapat digunakan oleh sebuah program. Biasanya programmer tidak akan menulis sendiri kode untuk menghitung sinus, kosinus, dsb. Kode-kode standar ini biasanya ada pada sebuah library.

Fase dalam sebuah compiler

Urutan fase dalam sebuah compiler adalah: Lexical analysis/parsing, Semantic analysis, dan code generation. Tutorial ini tidak akan memisahkan bagian-bagian tersebut secara spesifik. Bahasa yang akan digunakan dalam tutorial ini cukup beragam, dimulai dengan Java namun berikutnya mungkin C juga akan dimasukkan.

Dasar-dasar parsing

Dasar parsing yang lengkap butuh beberapa minggu untuk menjelaskannya, tapi dalam praktik kita tidak perlu memahami 100% teori parsing untuk bisa membuat compiler. Saya akan merangkum dasar parsing ini dalam kurang dari 1000 kata.
Grammar adalah deskripsi formal suatu bahasa. Chomsky membagi grammar menjadi 4 tipe, dan hampir semua bahasa pemrograman merupakan bahasa dengan grammar tipe 2 (context-free grammar). Dalam tutorial ini tidak akan dibahas tipe grammar selain context-free. Umumnya grammar context free dinyatakan dalam notasi BNF (Backus Naur Form) atau EBNF (Extended BNF). Anda perlu mengerti sedikit BNF karena sintaks bahasa biasanya dinyatakan dalam BNF.
Lihat contoh grammar berikut (kita sebut ini grammar M) adalah:
<kalimat> ::= <katabenda> <katakerja> <katabenda>

<katabenda> ::= 'koala'|'KURSI'|'PISANG'

<katakerja> ::= 'MEMUKUL'|'MEMAKAN'|'MEMBUANG'
Semua kalimat ini valid menurut grammar di atas (atau dikatakan bahwa: kalimat-kalimat berikut ini berada dalam bahasa yang didefinisikan oleh grammar M):
KOALA MEMAKAN KURSI
KOALA MEMAKAN PISANG
KOALA MEMUKUL KURSI
KOALA MEMUKUL KOALA
PISANG MEMAKAN KOALA
Sebuah unit dalam sebuah bahasa (sebuah "kata") disebut sebagai "token", sebuah token biasanya adalah sebuah kata atau simbol. Sesuatu literal seperti 'KOALA', 'KURSI' yang tidak bisa dipecah lagi disebut sebagai terminal. Parsing (syntactic analysis) adalah proses untuk menganalisis token untuk menentukan struktur grammarnya. Diberikan salah satu kalimat di atas, kita bisa melakukan parsing untuk menentukan apakah kalimat-kalimat di atas memenuhi grammar M.
Proses parsing biasanya terdiri dari dua bagian: bagian pertama adalah yang menggabungkan karakter demi karakter untuk membuat token (biasanya dilakukan oleh bagian yang disebut scanner atau lexer), dan bagian kedua adalah yang menentukan apakah token-token tersebut memenuhi grammar (dilakukan oleh bagian yang disebut parser).
Proses syntactic analysis hanya memeriksa grammar, tapi tidak menangani semantik. Kalimat "PISANG MEMAKAN KOALA" mungkin tidak valid secara semantik (kecuali ada pisang mutan yang bisa memakan Koala), tapi valid secara grammar. Pada tahap ini jangan pedulikan dulu masalah semantik.
Lihat contoh lain berikut (kita sebut ini grammar N):
<kalimat> ::= <aksi>|<pernyataan>

<aksi> ::= <katabenda> <katakerja> <katabenda>

<pernyataan> ::= <katabenda> <adverb> <katasifat>

<katabenda> ::= 'KOALA'|'KURSI'|'PISANG'

<katakerja> ::= 'MEMUKUL'|'MEMAKAN'|'MEMBUANG'

<adverb> ::= 'SANGAT'|'AGAK'|''

<katasifat> ::= 'BESAR'|'KECIL'
Contoh kalimat untuk grammar tersebut:
KOALA MEMAKAN KURSI
KOALA AGAK BESAR
Ada dua jenis metode parsing, yaitu bottom up dan top down. Tools yang memakai pendekatan bottom up parsing adalah YACC/Bison dan Tools yang memakai untuk top down parsing adalah ANTLR. Kedua tools tersebut gratis, dan boleh digunakan untuk keperluan non komersial maupun komersial. Tools-tools tersebut juga bisa dipakai di sembarang sistem operasi, misalnya Linux, Windows, FreeBSD, Solaris, dan OS X.

Bottom Up parsing

Bottom Up parser berusaha mencocokkan input dengan aturan produksi. Dalam kalimat koala MEMAKAN KURSI, parser akan melihat kata KOALA, lalu mencari aturan apa yang menghasilkan KOALA, dan kesimpulannya adalah <katabenda>, lalu berikutnya kata MEMAKAN adalah <katakerja> dan KURSI adalah <katabenda>. Dari ketiga aturan tersebut, kita bisa mereduksi menjadi sebuah <aksi>, dan ternyata aksi ini bisa direduksi lagi menjadi <kalimat> sehingga input tersebut adalah valid.

Top down parsing

Top down parser berusaha mengekspansi aturan produksi, dan mencocokkannya dengan input. Parser jenis ini akan mencoba mengekspansi <kalimat> menjadi <aksi> atau <pernyataan>, pertama jenis <aksi> akan dicoba (nanti jika ternyata bagian ini gagal, bagian <pernyataan> akan dicoba). Dari <aksi> bisa diekspansi menjadi <katabenda> <katakerja> <katasifat>. Kata benda diekspansi menjadi KOALA, KURSI, atau PISANG. Ternyata input KOALA cocok dengan salah satu terminal tersebut, sehingga bisa disimpulkan untuk saat ini, bahwa KOALA adalah <katabenda>, berikutnya <katakerja> akan dicoba diekspansi menjadi MEMUKUL, MEMAKAN atau MEMBUANG, dan karena ditemukan MEMAKAN, maka ini akan disimpulkan bahwa ini adalah <katakerja>, demikian juga disimpulkan bahwa <katabenda> menghasilkan KURSI.
Masalah dengan parser top down yang sederhana adalah parser ini akan bingung dengan grammar yang sifatnya rekursif kiri. Misalnya grammar sederhana berikut adalah untuk ekspresi digit plus/minus digit:
<ekspresi> ::= <ekspresi> ('+'|'-') <term> | <term>
<term> := ['0'..'9']
Ketika ingin mencocokkan ekspresi, parser akan mencoba mengekspansi <ekspresi> menjadi <ekspressi> dan <ekspresi> menjadi <ekspresi>, dan demikian seterusnya. Masalah ini bisa diselesaikan dengan mengubah bentuk di atas menjadi bentuk non rekursif. Tapi dalam kebanyakan kasus, Anda tidak perlu khawatir karena tools modern sudah menangani kasus tersebut.

0 komentar



ETIKA BISNIS
1.1Latar Belakang

Akhir-akhir ini makin banyak dibicarakan perlunya pengaturan tentang perilaku bisnis terutama menjelang mekanisme pasar bebas. Dalam mekanisme pasar bebas diberi kebebasan luas kepada pelaku bisnis untuk melakukan kegiatan dan mengembangkan diri dalam pembangunan ekonomi. Disini pula pelaku bisnis dibiarkan bersaing untuk berkembang mengikuti mekanisme pasar.
Tumbuhnya perusahaan-perusahaan besar berupa grup-grup bisnis raksasa yang memproduksi barang dan jasa melalui anak-anak perusahaannya yang menguasai pangsa pasar yang secara luas menimbulkan kekhawatiran bagi masyarakat banyak, khususnya pengusaha menengah ke bawah. Kekhawatiran tersebut menimbulkan kecurigaan telah terjadinya suatu perbuatan tidak wajar dalam pengelolaan bisnis mereka dan berdampak sangat merugikan perusahaan lain.
Dalam persaingan antar perusahaan terutama perusahaan besar dalam memperoleh keuntungan sering kali terjadi pelanggaran etika berbisnis, bahkan melanggar peraturan yang berlaku. Demikian pula sering terjadi perbuatan penyalahgunaan wewenang yang dilakukan pihak birokrat dalam mendukung usaha bisnis pengusaha besar atau pengusaha keluarga pejabat.
Peluang-peluang yang diberikan pemerintah pada masa orde baru telah memberi kesempatan pada usaha-usaha tertentu untuk melakukan penguasaan pangsa pasar secara tidak wajar. Keadaan tersebut didukung oleh orientasi bisnis yang tidak hanya pada produk dan kosumen tetapi lebih menekankan pada persaingan sehingga etika bisnis tidak lagi diperhatikan dan akhirnya telah menjadi praktek monopoli, persengkongkolan dan sebagainya.
Akhir-akhir ini pelanggaran etika bisnis dan persaingan tidak sehat dalam upaya penguasaan pangsa pasar terasa semakin memberatkan para pengusaha menengah kebawah yang kurang memiliki kemampuan bersaing karena perusahaan besar telah mulai merambah untuk menguasai bisnis dari hulu ke hilir.
Dengan lahirnya UU No.5 tahun 1999 tentang Larangan Praktik Monopoli dan Persaingan Usaha Tidak Sehat diharapkan dapat mengurangi terjadinya pelanggaran etika bisnis.

BAB II

2.1 Landasan Teori
Etika bisnis merupakan etika yang berlaku dalam kelompok para pelaku bisnis dan semua pihak yang terkait dengan eksistensi korporasi termasuk dengan para kompetitor. Etika itu sendiri merupakan dasar moral, yaitu nilai-nilai mengenai apa yang baik dan buruk serta berhubungan dengan hak dan kewajiban moral.
Dalam etika bisnis berlaku prinsip-prinsip yang seharusnya dipatuhi oleh para pelaku bisnis. Prinsip dimaksud adalah :
1.Prinsip Otonomi, yaitu kemampuan mengambil keputusan dan bertindak berdasarkan kesadaran tentang apa yang baik untuk dilakukan dan bertanggung jawab secara moral atas keputusan yang diambil.
2.Prinsip Kejujuran, bisnis tidak akan bertahan lama apabila tidak berlandaskan kejujuran karena kejujuran merupakan kunci keberhasilan suatu bisnis (missal, kejujuran dalam pelaksanaan kontrak, kejujuran terhadap konsumen, kejujuran dalam hubungan kerja dan lain-lain).
3.Prinsip Keadilan, bahwa tiap orang dalam berbisnis harus mendapat perlakuan yang sesuai dengan haknya masing-masing, artinya tidak ada yang boleh dirugikan haknya.
4.Prinsip Saling Mengutungkan, agar semua pihak berusaha untuk saling menguntungkan, demikian pula untuk berbisnis yang kompetitif.
5.Prinsip Integritas Moral, prinsip ini merupakan dasar dalam berbisnis dimana para pelaku bisnis dalam menjalankan usaha bisnis mereka harus menjaga nama baik perusahaan agar tetap dipercaya dan merupakan perusahaan terbaik.
Penerapan etika bisnis sangat penting terutama dalam menghadapi era pasar bebas dimana perusahaan-perusahaan harus dapat bersaing berhadapan dengan kekuatan perusahaan asing. Perusahaan asing ini biasanya memiliki kekuatan yang lebih terutama mengenai bidang SDM, Manajemen, Modal dan Teknologi.
Ada mitos bahwa bisnis dan moral tidak ada hubungan. Bisnis tidak dapat dinilai dengan nilai etika karena kegiatan pelaku bisnis, adalah melakukan sebaik mungkin kegiatan untuk memperoleh keuntungan. Sehingga yang menjadi pusat pemikiran mereka adalah bagaimana memproduksi, memasarkan atau membeli barang dengan memperoleh keuntungan sebesar-besarnya. Perilaku bisnis sebagai suatu bentuk persaingan akan berusaha dengan berbagai bentuk cara dan pemanfaatan peluang untuk memperoleh keuntungan.
Apa yang diungkapkan diatas adalah tidak benar karena dalam bisnis yang dipertaruhkan bukan hanya uang dan barang saja melainkan juga diri dan nama baik perusahaan serta nasib masyarakat sebagai konsumen. Perilaku bisnis berdasarkan etika perlu diterapkan meskipun tidak menjamin berjalan sesuai dengan apa yang diharapkan, akan tetapi setidaknya akan menjadi rambu-rambu pengaman apabila terjadi pelanggaran etika yang menyebabkan timbulnya kerugian bagi pihak lain.
Masalah pelanggaran etika sering muncul antara lain seperti, dalam hal mendapatkan ide usaha, memperoleh modal, melaksanakan proses produksi, pemasaran produk, pembayaran pajak, pembagian keuntungan, penetapan mutu, penentuan harga, pembajakan tenaga professional, blow-up proposal proyek, penguasaan pangsa pasar dalam satu tangan, persengkokolan, mengumumkan propektis yang tidak benar, penekanan upah buruh dibawah standar, insider traiding dan sebagainya. Ketidaketisan perilaku berbisnis dapat dilihat hasilnya, apabila merusak atau merugikan pihak lain. Biasanya factor keuntungan merupakan hal yang mendorong terjadinya perilaku tidak etis dalam berbisnis.
Suatu perusahaan akan berhasil bukan hanya berlandaskan moral dan manajemen yang baik saja, tetapi juga harus memiliki etika bisnis yang baik. Perusahaan harus mampu melayani kepentingan berbagai pihak yang terkait. Ia harus dapat mempertahankan mutu serta dapat memenuhi permintaan pasar yang sesuai dengan apa yang dianggap baik dan diterima masyarakat. Dalam proses bebas dimana terdapat barang dan jasa yang ditawarkan secara kompetitif akan banyak pilihan bagi konsumen, sehingga apabila perusahaan kurang berhati-hati akan kehilangan konsumennya.
Perilaku tidak etis dalam kegiatan bisnis sering juga terjadi karena peluang-peluang yang diberikan oleh peraturan perundang-undangan yang kemudian disahkan dan disalah gunakan dalam penerapannya dan kemudian dipakai sebagai dasar untuk melakukan perbuatan-perbuatan yang melanggar etika bisnis.

2.2Contoh Kasus

PT. Telekomunikasi Indonesia Tbk (Telkom) optimis dapat menyelesaikan dengan baik pembangunan backbone serat optik Mataram Kupang (Mataram-Kupang Cable System) sepanjang 1.041 km meski ada penundaan peresmian dimulainya proyek tersebut. Demikian dinyatakan Vice President Public and Marketing Communication Telkom, Eddy Kurnia.
Peresmian dimulainya proyek Mataram-Kupang Cable System semula dijadwalkan pada 12 Oktober 2009 oleh President Susilo Bambang Yudhoyono. Namun karena jadwal Presiden yang begitu padat, rencana peresmian sedang dijadwal ulang.
Seperti disampaikan Sekjen Depkominfo Basuki Yusuf Iskandar, Minggu (11/10), sejatinya peresmian akan dilakukan pada Senin (12/10). Namun karena ada beberapa hal teknis yang belum selesai, maka diundur.
Diungkapkan Basuki, berdasarkan informasi yang diterimanya proses tender untuk vendor yang dimiliki Telkom belum selesai. “Saya dengar tinggal tiga vendor. Tetapi ini tidak bisa main tunjuk langsung. Saya setuju jika mengikuti peraturan saja. Lebih baik ditunda ketimbang mencari terobosan dalam tender tetapi bermasalah nanti di mata hukum,“ jelas Basuki Yusuf Iskandar.
Ditegaskan Eddy Kurnia, penundaan peresmian proyek yang juga dikenal sebagai bagian dari Proyek Palapa Ring tersebut sama sekali tidak akan mengganggu jadwal proyek secara keseluruhan yang ditargetkan selesai pada tahun 2010. “Telkom akan terus fokus menyiapkan sebaik mungkin segala sesuatunya, baik proses maupun penggelarannya,” ujarnya.
Palapa Ring merupakan megaproyek pembangunan tulang punggung (backbone) serat optik yang diinisiasi oleh Pemerintah (Cq. Menkominfo), terdiri dari 35.280 kilometer serat optik bawah laut (submarine cable) dan 21.708 kilometer serat optik bawah tanah (inland cable). Kabel backbone yang terdiri dari 7 cincin (ring) melingkupi 33 provinsi dan 460 kabupaten di Kawasan Timur Indonesia.
Telkom memandang penundaan peresmian dimulainya proyek Palapa Ring sebagai peluang untuk lebih menyempurnakan dan mereview kembali keseluruhan pelaksanaan proyek tersebut sehingga seluruh proses tidak ada yang tertinggal. Mengenai waktu peresmian proyek Mataram Kupang Cable System tersebut, Telkom akan mengikuti jadwal yang ditetapkan oleh Pemerintah. “Dalam hal event ini, Telkom dalam posisi ikut saja, artinya kapan saja Pemerintah berkeinginan memulai, kami siap,” tegas Eddy Kurnia.
Mataram-Kupang Cable System merupakan bagian dari proyek pembangunan backbone di KTI yang mencakup Mataram-Kupang, Manado-Sorong, dan Fakfak-Makassar. Proyek Mataram Kupang Cable System merupakan inisiatif Telkom untuk mendukung percepatan pembangunan di Kawasan Timur Indonesia (KTI) yang diharapkan selesai akhir September 2010.
Backbone serat optik Mataram Kupang (Mataram Kupang Cable System), memiliki 6 Landing Point di kota Mataram, Sumbawa Besar, Raba, Waingapu dan Kupang, serta 810 Km darat dengan 15 node di kota Mataram, Pringgabaya, Newmont, Taliwang, Sumbawa Besar, Ampang, Dompu, Raba, Labuhan Bajo, Ruteng, Bajawa, Ende, Maumere, Waingapu, dan Kupang.
Percepatan pembangunan backbone Mataram Kupang didorong oleh perubahan mendasar pada layanan Telkom. “Bila pada masa lalu layanan Telkom lebih banyak berbasis voice, maka dewasa ini telah berubah menjadi TIME (Telecommunication, Information, Media dan Edutainment),” jelas Edy Kurnia. Ia meyakini KTI sebagaimana wilayah lain di Indonesia sangat memerlukan layanan TIME untuk lebih memajukan wilayahnya.

BAB III

3.1Kesimpulan

Telkom memandang penundaan peresmian dimulainya proyek Palapa Ring sebagai peluang untuk lebih menyempurnakan dan mereview kembali keseluruhan pelaksanaan proyek tersebut sehingga seluruh proses tidak ada yang tertinggal. Mengenai waktu peresmian proyek Mataram Kupang Cable System tersebut, Telkom akan mengikuti jadwal yang ditetapkan oleh Pemerintah. “Dalam hal event ini, Telkom dalam posisi ikut saja, artinya kapan saja Pemerintah berkeinginan memulai, kami siap,” tegas Eddy Kurnia.
Percepatan pembangunan backbone Mataram Kupang didorong oleh perubahan mendasar pada layanan Telkom. “Bila pada masa lalu layanan Telkom lebih banyak berbasis voice, maka dewasa ini telah berubah menjadi TIME (Telecommunication, Information, Media dan Edutainment),” jelas Edy Kurnia. Ia meyakini KTI sebagaimana wilayah lain di Indonesia sangat memerlukan layanan TIME untuk lebih memajukan wilayahnya.

3.2Saran

Penundaan peresmian yang dilakukan Telkom hanya dikarenakan belum adanya jadwal kosong Presiden Susilo Bambang Yudhoyono, namun walaupun dilakukan penundaan tentu saja diharapkan tidak merubah tujuan awal dari Telkom tersebut dan tidak mengurangi kualitas pelayanan yang diberikan Telkom kepada para konsumen agar tidak timbul kekecewaan dimata konsumen.

SELASA, 15 SEPTEMBER 2009

Tugas 1, tgl 15 September 2009


1. Saya sangat tidak setuju dengan bisnis money game, karena hal tersebut memiliki kemungkinan yang besar untuk membuat orang lain rugi dan dapat membentuk pola kehidupan masyarakat yang malas.

2. Menurut saya, Tarigan terlalu lemah karena pihaknya tidak bisa malakukan tindakan atas praktik money game yang beroperasi di Indonesia. seharusnya Tarigan dapat bertindak tegas dengan membuat UU dimana apabila ada praktik money game akan dikenakan sanksi bagi semua pihak yang terkait.

3. Bisnis money game dapat tumbuh subur di Indonesia karena masyarakat Indonesia telah terbentuk pola kehidupan yang malas dimana tanpa bekerja dapat memperoleh penghasilan dan masyarakat Indonesia terlalu menganut prinsip ekonomi.

4. Ya, bisnis money game ini harus dilarang karena dapat merugikan orang lain walaupun ada sudut pandang yang menyatakan bahwa "bisnis sebagai profesi yang luhur". Namun, dalam bisnis sebaiknya kita tidak merugikan pihak lain karena tiap individu pasti menginginkan keuntungan dalam berbisnis.

5. Menurut pandangan saya prinsip etika bisnis 'what is legal is ethical' (asal tidak melanggar hukum ya etis) kurang bisa diterapkan, hal ini karena hukum bagaimana yang dimaksud dan belum tentu hukum dapat mewakili seluruh pendapat/ pandangan dari segala sudut.

0 komentar



Dampak positif dan negatif dalam perkembangan teknologi informasi
Seiring dengan perkembangan jaman, teknologi informasi pun ikut berkembang dengan pesatnya. Dengan perkembangannya tersebut, berbagai macam kegiatan atau pekerjaan manusia pun sudah dapat digantikan dengan mesin-mesin otomotis. Pada awalnya manusia harus mengeluarkan kemampuan fisiknya yang cukup besar untuk melakukan kegiatan atau pekerjaannya tersebut, tetapi sekarang sudah tidak lagi. Perkembangan teknologi informasi sudah sangat diakui memberikan manffat yang besar bagi kehidupan manusia.
Perkembangan iptek dianggap sebagai solusi dari permasalahn yang ada, bahkan banyak orang memuja teknologi informasi sebagai media yang akan membebaskan mereka dari segala permasalahan yang muncul di dunia ini. Teknologi informasi diyakini akan member umat manusia kesenangan, kebahagiaan dan kesejahteraan. Sumbangan teknologi informasi terhadap peradaban dan kesejahteraan manusia tidaklah dapat dipungkiri lagi, namun manusia tidak bisa pula menipu diri akan kenyataan bahwa teknologi informasi mendatangkan banyak masalah dan berbagai bentuk penyimpangan-penyimpangan bagi manusia. Kalaupun teknologi informasi mampu mengungkap semua tabir rahasia alam dan kehidupan, tidak berarti teknologi informasi sama dengan kebenaran. Sebab teknologi informasi hanya mampu menampilkan kenyataan. Tentu saja teknologi informasi tidak mengenal moral kemanusiaan, oleh karena itu teknologi informasi tidak pernah bisa menjadi standar kebenaran ataupun solusi dari masalah-masalah kemanusiaan.
Dampak positif dan dampak negative dari perkembangan teknologi dilihat dari berbagai bidang:
  1. 1. Bidang Informasi dan komunikasi
Dalam bidang ini telah terjadi kemajuan yang sangat pesat. Dari kemajuan dapat kita rasakan dampak positifnya antara lain:
v  Kita akan lebih cepat mendapatkan informasi-informasi yang akurat dan  terbaru dibumi bagian manapun melalui internet.
v  Kita dapat berkomukasi dengan teman, maupun keluarga yang sangat jauh hanya dengan melalui handphone.
v  Kita mendapatkan layanan bank yang dengan sangat mudah
Disamping keuntungan-keuntungan yang kita peroleh ternyata kemajuan-kemajuan teknologi tersebut dimanfaatkan juga untuk hal-hal negative, antara lain:
v  Pemanfaatan jasa komunikasi oleh jaringan teroris
v  Penggunaan informasi tertentu dan situs tertentu yang terdapat di internet yang bisa disalah gunakan pihak tertentu untuk tujuan tertentu.
v  Kerahasian alat tes semakin terancam melalui internet kita dapat memperoleh informasi tentang tes psikologi, dan bahkan dapat memperoleh layanan tes psikologi secara langsung dari internet.
v  Kecemasan teknologi, selain itu ada kecemasan skala kecil akibat teknologi computer. Kerusakan computer karena terserang virus, kehilangan berbagai file penting dalam computer inilah beberapa contoh stress yang terjadi karena teknologi. Rusaknya modem internet karena disambar petir.

  1. 2. Bidang Ekonomi dan Industri
Dalam bidang ekonomi teknologi berkembang sangat pesat. Dari kemajuan teknologi dapat kita rasakan manfaat positifnya, antara lain:
v  Pertumbuhan ekonomi yang semakin tinggi
v  Terjadinya industrialisasi
v  Produktifitas dunia industry semakin meningkat
Kemajuan teknologi akan meningkatkan kemampuan produktivitas dunia industry baik dari aspek teknologi industry maupun pada aspek jenis produksi. Investasi dan reinvestasi yang berlangsung secara besar-besaran yang akan semakin meningkatkan produktifitas dunia ekonomi. Di masa depan, dampak perkembangan teknologi di dunia industry akan semakin penting. Tanda-tanda telah menunjukkan bahwa akan segera muncul teknologi bisnis yang memungkinkan konsumen secara individual melakukan kontak langsung dengan pabrik sehingga pelayanan dapat dilaksanakan secara langsung dan selera individu dapat dipenuhi, dan yang lebih penting konsumen tidak perlu pergi ke toko.
  1. 3. Bidang Sosial dan Budaya
Akibat kemajuan teknologi bisa kita lihat:
v  Perbedaan kepribadian pria dan wanita. Banyak pakar yang berpendapat bahwa kini semakin besar porsi wanita yang memegang posisi sebagai pemimpin, baik dalam dunia pemerintahan maupun bisnis.
v  Meningkatnya rasa percaya diri kemajuan ekonomi di Negara-negara asia melahirkan fenomena yang menarik. Perkembangan dan kemajuan ekonomi telah meningkatkan rasa percaya diri dan ketahanan diri sebgai suatu bangsa akan semakin kokoh. Bangsa-bangsa barat tidak lagi dapat melecehkan bangsa-bangsa asia.
v  Tekanan, kompetisi yang tajam di berbagai aspek kehidupan sebagai konsekuensi globalisasi, akan melahirkan generasi yang disiplin, tekun dan pekerja keras meskipun demikian kemajuan teknologi akan berpengaruh negative pada aspek budaya.
  1. Kemerosotan moral dikalangan warga masyarakat,khususnya di kalangan remaja dan pelajar. Kemajuan kehidupan ekonomi yang terlalu menekankan pada upaya pemenuhan berbagai keinginan material, telah menyebabkan sebagian warga masyarakat menjadi “kaya dalam materi tetapi miskin dalam rohani”.
  2. Pola interaksi antar manusia yang berubah kehadiran computer pada kebanyakan rumah tangga golongan menengah ke atas telah merubah pola interaksi keluarga. Computer yang disambungkan dengan telepon telah membuka peluang bagi siapa saja untuk berhubungan dengan dunia luar. Program internet relay chatting (IRC), internet dan e-mail telah membuat orang asing dengan kehidupannya sendiri. Selain itu tersedianya berbagai warung internet telah memberi peluang kepada banyak oaring yang tidak memiliki computer dan saluran internet sendiri untuk berkomunikasi dengan orang lain melalui internet. Kini semakin banyak orang yang menghabiskan waktunya sendirian dengan computer. Melalui program internet relay chatting anak-anak bisa asik mengobrol dengan teman dan orang asing kapan saja.

  1. 4. Bidang Pendidikan
Teknologi mempunyai peran yang sangat penting dalam bidang pendidikan antara lain:
v  Munculnya media massa, khususnya media elektronik sebagai sumber ilmu dan pusat pendidikan. Dampak dari hal ini adalah guru bukannya satu-satunya sumber ilmu pengetahuan.
v  Munculnya metode-metode pembelajaran yang baru, yang memudahkan siswa dan guru dalam proses pembelajaran. Dengan kemajuan teknologi terciptalah metode-metode baru yang membuat siswa mampu memahami materi-materi yang abstrak, karena materi tersebut dengan bantuan teknologi bisa dibuat abstrak.
v  System pembelajaran tidak harus melalui tatap muka.
Dengan kemajuan teknologi proses pembelajaran tidak harus mempertemukan siswa dengan guru, tetapi bisa juga menggunakan jasa pos internet dan lain-lain. Disamping itu juga muncul dampak negative dalam proses pendidikan antara lain:
v  Kerahasiaan alat tes semakin terancam program tes intelegensi seperti tes Raven, Differential Aptitudes Test dapat diakses melalui compact disk. Implikasi dari permasalahan ini adalah tes psikologi yang ada akan mudah sekali bocor dan pengembangan tes psikologi harus berpacu dengan kecepatan pembocoran melalui internet tersebut.
v  Penyalah gunaan pengetahuan bagi orang-orang tertentu untuk melakukan tindakan criminal. Kita tahu bahwa kemajuan di bidang pendidikan juga mencetak generasi yang berpengetahuan tinggi tetapi mempunyai moral yang rendah. Contohnya dengan ilmu computer yang tinggi maka orang akan berusaha menerobos system perbangkan dan lain-lain.



KESIMPULAN
Perkembangan teknologi merupakan sesuatu yang tidak bisa kita hindari dalam kehidupan ini, karena kemajuan teknologi informasi akan berjalan sesuai dengan kemajuan ilmu pengetahuan. Perkembangan teknologi informasi akan terus berkembang karena manusia tidak pernah merasa puas akan apa yang sudah ada sekarang . Setiap inovasi diciptakan untuk memberikan manfaat positif bagi kehidupan manusia. Memberikan banyak kemudahan, serta sebagai cara baru dalam melakukan aktifitas manusia. Khusus dalam bidang teknologi informasi masyarakat sudah dapat menikmati banyak manfaat yang dibawa oleh inovasi-inovasi yang telah dihasilkan dalam perkembangan teknologi informasi. Namun manusia tidak bisa menipu diri sendiri akan kenyataan bahwa teknologi informasi mendatangkan berbagai efek negatif bagi manusia.
Oleh karena itu untuk mencegah atau mengurangi akibat negatif kemajuan teknologi informasi tersebut, pemerintah di suatu negara harus membuat peraturan perundang-undangan atau melalui suatu konvensi internasional yang membahas tentang etika yang harus dipatuhi oleh pengguna teknologi informasi.

THIS IS ME: Manfaat Komputer Di segala Bidang

0 komentar

1 komentar

MANFAAT KOMPUTER di Segala Bidang
•Bidang Pendidikan

Penggunaan komputer sebagai alat pembelajaran dikenali sebagai
CBE (Computer Based Education). Menurut pendapatRob ert
Taylor, peranan komputer dalam pendidikan dibagi menjadi 3
bagian yaituTUTOR, TOOL danTUTEE. Sebagai TUTOR,
komputer berperanan sebagai pengajar melalui pendekatan
pengajaran berbantukan komputer. Sebagai TOOL, komputer
menjadi alat untuk memudahkan proses pengajaran dan
pembelajaran seperti konteks pengajaran berintergrasikan
komputer. Komputer juga dugunakan untuk melakukan pengolahan
data proses pembelajaran, seperti pengolahan data nilai siswa,
penjadwalan, beasiswa, dan sebagainya. Sebagai TUTEE komputer
berperanan sebagai alat yang diajar, dan bisa melakukan Tanya
jawab atau dialog dengan komputer yang biasa disebut dengan CAI
(Computer Assist Instruction).


•Bidang Industri dan Manufaktur
Di bidang industri, komputer dipergunakan untuk mengontrol mesin-
mesin produksi dengan ketepatan tinggi, misalnya CNC (Computer
Numerical Contor) pengawasan numeric atau perhitungan, CAM
(Computer Aided Manufacture), CAD (Computer Aided Design),
yaitu untuk merancang bentuk (desain) sebuah produk yang akan
dikeluarkan pada sebuah industri atau pabrik, misal sebuah mesin
serba guna dalam industri metal. Banyak pula mesin-mesin dalam
industri garmen dilengkapi dengan kontrol komputer, misalnya
melakukan pewarnaan, membuat border, dan sebagainnya. Selain
itu industri modern saat ini juga memanfaatkan robot yang secara
otomatis melakukan kerja-kerja tertentu dalam sebuah industri yang
dikontrol oleh komputer yang tidak mungkin dikerjakan manusia.
Contohnya tangan robot dikontrol oleh komputer digunakan untuk
memasang komponen-komponen renik dan chip-chip pada
motherboard komputer, memasang komponen-komponen pada
perangakat elektornik seperti televisi, radio/tape, dan lain
sebagainya. Bahkan merakit kendaraan, mobil, motor, atau alat-alat
berat lain telah dikontrol oleh komputer.

Bidang Bisnis dan Perbankan

Di bidang bisnis baik perdagangan barang maupun jasa komputer
akan sangat penting untuk kegiatan transaksi baik rutin, periodik,
maupun insidentil dan menyediakan informasi dengan cepat dan
tepat.Sistem Informasi Manajemen (SIM) / Management Information
system (MIS), merupakan sistem informasi yang sudah banyak
diterapkan pada perusahaan yang bergerak bidang perdagangan
barang dan jasa baik pada perusahaan besar, menengah, bahkan
perusahaan kecil. Di perusahaan dagang seperti department store,
telah dipergunakan mesin cash register (mesin kasir) yang
dilengkapi dengan kontrol komputer sehingga mesin tersebut dapat
dikontrol oleh pihak manajer hanya dari ruangan kerjanya secara
cepat dan tepat, untuk scanning barcode kode barang dagangan,
menghitung rugi laba, inventori dan sebagainya.
Di bidang perbankan, telah memperkenalkan solusi core banking,
seperti Finacle, yang memberikan solusi bagi bank yang ingin
melakukan layanan finansial. Penghitungan keuangan, bunga,
layanan keuangan seperti e-banking, e-cash, ATM, dan sebagainya
merupakan contoh konkrit yang selama ini banyak digunakan di
perbankan.

Bidang Teknik dan Ilmu Pengetahuan

Komputer sangat bermanfaat untuk perhitungan-
perhitungan yang sulit dan membutuhkan presisi tinggi
yang tidak mungkin dilakukan oleh manusia. Ini biasanya
digunakan untuk keperluan penelitian dan riset. Para ahli
biasanya akan mengadakan simulasi dengan komputer
sebelum menguji coba sesungguhnya dari hasil
temuannya, misalnya membuat model reaktor nuklir,
membuat model-model atom dan molekul. Komputer
juga bisa digunakan untuk bidang ilmu pengetahuan
alam misalnya mempelajari keadaan struktur tanah,
keadaan angin, cuaca, dan sebagainya.
Dalam bidang bioteknologi, peralatan-peralatan kultur
telah banyak yang dilengkapi dengan kontrol komputer
untuk mengusahakan ketelitian kerja pada ruang steril.
Pada bidang teknik sipil komputer digunakan untuk
menghitung presisi dan kekuatan kunstruksi bangunan,
bidang arsitektur komputer digunakan untuk
mensimulasi gambar-gambar ruang secara tiga dimensi.

•Bidang Pemerintahan
Hampir setiap perkantoran suatu instansi pemerintahan telah menggunakan
komputer. Penggunaannya mulai sekedar untuk mengolah data administrasi
tata usaha, pelayanan masyarakat (public services), pengolahan dan
dokumentasi data penduduk, perencanaan, statistika, pengambilan
keputusan, dan lain sebagainya.
E-Government adalah penggunaan teknologi informasi yang dapat
meningkatkan hubungan antara Pemerintah dan pihak-pihak lain.
Penggunaan teknologi informasi ini kemudian menghasilkan hubungan
bentuk baru seperti: G2C (Government to Citizen), G2B (Government to
Business Enterprises), dan G2G (inter-agency relationship). Bahkan saat ini
dengan adanya e-government, komputer memiliki peran yang sangat
penting bagi pemerintah untuk melakukan sosialisasi berbagai kebijakan,
melakukan pemberdayaan masyarakat, termasuk kerjasama antar
pemerintah, mayarakat, dan pelaku bisnis, memperkenalkan potensi
wilayah dan pariwisata, dan sebagainya.
Dimungkinkan bahwa teknologi informasi dalam masa yang akan datang
akan digunakan untuk pengambilan keputusan politik, misalnya untuk
pemilihan umum (E-voting) Selain itu masyarakat bisa menyampaikan
aspirasi secara langsung kepada para eksekutif dan legislative pemerintah
melalui e-mail atau elektronik forum melalui web yang dibangun pemerintah
setempa

0 komentar


Happy Valentine

0 komentar

Selamat hari Kasih Sayang

0 komentar

mari kita melihat kemasa yg akan datang...
dan gag perlu mengingat apa yg telah berlalu.....