Little boy questioned his mother, he asked what he can be in the future..with a sad smile, she tells him he can be anything he wants to be.... Boy said he’d become (an) astronaut and fly out into space crews around the universe he wanted to see the stars and also see other planets in outer space------------- "Why don’t we just keep dreaming, let’s keep our mind with dream and faith, as long as we wish we can make it come true, how old you are never forget your dream and keep dreaming "
Showing posts with label Programming. Show all posts
Showing posts with label Programming. Show all posts

Saturday, 5 January 2019

Python : Fungsi dan Operasi dasar Pandas (Bagian 1)

Pandas (python data analysis liblary)

Pandas adalah salah satu liblary paling populer untuk data science, pandas memudahkan kita untuk mengolah data data berbentuk tabular yang tersimpan dalam baris dan kolom.
Pandas bersifat open source, menyediakan kinerja tinggi, struktur data yang kuat digunakan sebagai alat analisis data untuk bahasa pemrograman Python.
Dengan panda kita dapat dengan mudah merubah data (CSV, excel, JSON atau SQL) menjadi sebuah object data yang terdiri dari baris dan kolom yang disebut dengan DataFrame.
Fitur :
  • DataFrame Object untuk manipulasi data dengan pengindeksan terintegrasi.
  • Alat untuk membaca dan menulis data antara struktur data dalam memori dan berbagai format file.
  • Penyelarasan data dan penanganan terpadu pada kehilangan data.
  • Membentuk kembali dan memutar set data.
  • Seleksi berbasis label, pengindeksan fantastis, dan melakukan subset kumpulan data besar.
  • Penyisipan dan penghapusan kolom struktur data.
  • Memungkinkan operasi split-apply-combine pada Data set.
  • Menghubugkan dan menggabungkan Data set.
  • Pengindeksan hierarki untuk bekerja dengan data dimensi tinggi dalam struktur data dimensi rendah.
  • Fungsionalitas seri waktu: Pembuatan rentang tanggal dan konversi frekuensi.
  • Menyediakan penyaringan data (sorting dan filtering).

Nama pandas berasal dari istilah "panel data" yang merujuk pada istilah ekonometrik untuk set data multidimensi terstruktur. bukan diambil dari nama hewan asal negeri tirai bambu panda, apalagi dari merk minuman liang teh cap panda.

Requirement :

Saya sarankan menggunakan Anaconda Navigator, paket all-in-one dengan sistem antarmuka grafis (GUI) desktop yang mencakup tautan ke semua aplikasi termasuk dalam distribusi ini adalah Python, RStudio, iPython, Jupyter Notebook, JupyterLab, Spyder, Lem, dan Orange. Didalamnya sudah terdapat lebih dari 1400 liblary, termasuk Pandas, Numpy dan Matplotlib.
Python memiliki IDE bawaan pada paket installasinya yaitu IDLE, akan tetapi untuk lebih memudahkan kita dalam Manipulasi dan analisis data dengan Pandas, saya rekomendasikan anda menggunakan IDE Spyder. IDE yang dirancang khusus untuk seorang engineers dan scientist untuk keperluan analisis.
Spyder disertakan secara default termasuk dalam distribusi Anaconda Python, yang dilengkapi dengan semua yang kita butuhkan untuk memulai menuju Python Data Science.

Oke cukup.. Langsung saja, sebelum kita melakukan analis dan manipulasi data menggunakan pandas, pertama kita perlajari dasar dasar operasi dan fungsi pada pandas.
Enjoy!


1. Membuat Series

Series adalah array satu dimensi yang mampu menampung data jenis apa pun (integer, string, float, objek python, dll.). Label axis/label baris secara kolektif disebut indeks.
Membuat series dari sebuah List
import pandas as pd
import numpy as np

nilai = pd.Series([10,20,30,40,np.nan,50])
print(nilai)
Outputnya :
0    10.0
1   20.0
2    30.0
3    40.0
4     NaN
5    50.0
dtype: float64
Secara default, pandas secara otomatis memberi index pada setiap baris dari series

Thursday, 27 December 2018

Python : Lambda

Lambda, dikenal juga sebagai anonymous functions/fungsi anonim atau one line function, disebut demikian karena lambda berupa kode satu baris yang tidak memiliki nama, lambda hanya memiliki kode untuk dieksekusi. Biasanya, fungsi lambda diimplementasikan untuk melakukan sesuatu yang sangat sederhana, seperti mengalikan angka atau mengekstraksi bagian dari string.
Jika kita menggunakan statemen yang sama secara berulang-ulang dalam kode python, Kita bisa mempertimbangkan untuk menggunakan fungsi lambda ini.

Sintaks dasarnya seperti ini :
lambda argumen : ekspresi

Kita tidak dapat menempatkan statemen apapun dalam ekspresi lambda. Ini berarti kita tidak bisa menambahkan statemen if dalam ekspresi lambda, ataupun deklarasi variabel. 
Kita bisa menghindari pembuatan fungsi python untuk hal yang benar benar sangat sederhana sehingga menghindari kita menulis def namafungsi (parameter) : return (expression).
contoh : 
Function
def kali(x,y) :
    return x*y
Lambda
kali = lambda x,y : x * y

Diatas adalah perbandingan antara function biasa dengan lambda, keduanya memiliki tujuan yang sama yaitu mengalikan 2 buah bilangan akan tetapi implementasinya menjadi lebih sederhana jika memakai fungsi lambda. 
kode kali pada lambda di atas bukanlah sebuah variabel, tapi sebuah label, cara menggunakannya seperti ini :
>>> kali(9,8)
72

>>>kali(10,10)
100

Contoh lain :
Membalik string
>>>reverse = lambda s:s[::-1]
>>>reverse('python')
'nohtyp'
Mengekstrak huruf pertama
>>>huruf_awal = lambda s : s[0]
>>>huruf_awal('python')
'p'
Lambda didalam function
>>>def myfunc(n):
    return lambda a : a * n
>>>doubler = myfunc(3)
>>>doubler(11)
33

Python : Akses database PostgreSQL dengan psycopg

Psycopg adalah adaptor database PostgreSQL paling populer untuk bahasa pemrograman Python. Psycopg sepenuhnya memenuhi standar DB API 2.0. Versi saat ini adalah 2.0 dan masih terus aktif dikembangkan yang menjanjikan performa cepat dan stabil. Psycopg dirancang untuk aplikasi multi-threaded yang mendukung pembuatan dan penghapusan banyak kursor serta pembuatan fungsi INSERT atau UPDATE secara bersamaan.

Ketika kita ingin menjalankan SQL query SELECT, UPDATE, DELETE atau INSERT kedalam database postgreSQL kita membutuhkan psycopg sebagai penghubung antara bahasa pemrograman Python dengan Database PostgresSQL.

Homepage : http://initd.org/
Github : https://github.com/psycopg/psycopg2

Cara instalasi psycopg pada python :
pip install psycopg2

Sintaks koneksi seperti ini :
import psycopg2

try:
    conn = psycopg2.connect('''user=username 
                               password=password
                               dbname=namadatabase
                               host=127.0.0.1 
                               port=5432''')
print ("Berhasil terkoneksi")
except:
    print ("Tidak dapat terkoneksi dengan database")

Sintaks diatas akan mengimpor adaptor dan mencoba untuk terhubung ke database. Jika koneksi gagal, maka akan menampilkan eksepsi "Tidak dapat terkoneksi dengan database".

Kemudian kita perlu mendefinisikan cursor :
cur = conn.cursor()

Seletah cursor terdefinisi, kita sudah bisa melakukan eksekusi query dengan cara :
cur.execute('sql query')

cur.execute("""SELECT * from users""")
Kemudian kita perlu menyimpan result-set hasil eksekusi query kedalam variabel, contoh variabel record
record = cur.fetchall()

**kelebihan dari psycopg adalah result set hasil query secara otomatis dikonversi kedalam varible tipe list
untuk menampikan hasil query :
for row in record :
    print(row)
karena record adalah variabel dengan tipe data list maka kita bisa menampilkan data berdasarkan index posisi kolom seperti ini :
for row in record :
    print("{}  {} ".format(row[0],row[1]))

Wednesday, 26 December 2018

Python : SQL Query menjadi Excel dengan Pandas

Bahasa Queri (Bahasa Inggris: query language) adalah suatu bahasa komputer yang digunakan untuk melakukan permintaan terhadap basis data dan sistem informasi.



Wikipedia
Seorang database administrator pasti sehari hari berhubungan dengan yang namanya transaksi query database, yang paling banyak kita gunakan adalah SQL Query.
Ketika memerlukan data dari database, kita menggunakan statement SQL SELECT untuk mengambil data dari tabel database dan mengembalikan data ini dalam bentuk tabel hasil. Tabel hasil ini disebut result-set.

Dibawah ini adalah contoh untuk menuliskan, memindahkan hasil query (result-set) kedalam file excel menggunakan python dengan bantuan module 'pandas'. Kode ini merupakan contoh koneksi python dengan database PostgresSQL, akan tetapi fuction untuk menuliskan hasil query ke excel ini dapat digunakan pada database lainnnya seperti SQL server, mySQL, dll.

Pertama, install modul pandas kedalam python, buka command prompt ketikan perintah :
pip install pandas


sql_list_query = "SELECT * from User"

def export_excel (sql_query, namafile,namasheet):
    cursor.execute(sql_query)
    record = cursor.fetchall()
    columns = [desc[0] for desc in cursor.description]
    df = pd.DataFrame(list(record), columns=columns)
    writer = pd.ExcelWriter(namafile)
    df.to_excel(writer, sheet_name=namasheet,index=False)
    writer.save()

import_excel(sql_list_query,'contoh.xlsx','hasil_query')

Penjelasan skrip diatas :
  • sql_list_query adalah variable tipe string yang berisi sintaks query SQL
  • def export_excel (sql_query, namafile,namasheet) adalah fungsi dengan nama export_excel yang berisi tiga parameter inputan yaitu : sql_query (nama variable yang menampung sintaks query SQL), namafile> (nama file excel) dan namasheet (nama sheet excel).
  • cursor.execute(sql_query) dan record = cursor.fetchall() method eksekusi query dan menyimpan hasilnya pada variabel record
  • columns = [desc[0] for desc in cursor.description], men set nama kolom excel dari deskripsi query Sql.
  • df = pd.DataFrame(list(record), columns=columns), membuat dataframe yang datanya diambil dari result-set dengan nama header kolom = variable colomns.
  • writer = pd.ExcelWriter(namafile), inisialisasi fungsi writer
  • df.to_excel(writer, sheet_name=namasheet,index=False),  menulis dataframe kedalam format excel tanpa meyertakan index dataframe.
  • writer.save(), menyimpan file excel,
  • import_excel(sql_list_query,'nama_file_excel.xlsx','nama_sheet') adalah contoh pemanggilan fuction export_excel yang akan menghasilkan file excel dengan nama file = 'contoh.xlsx', nama sheet = 'hasil_query' dari eksekusi query SQL variable sql_list_query.

Sunday, 23 December 2018

Python : *args dan **kwargs

Ketika anda memperlajari kode pada bahasa pemrograman python pasti menemukan variable *args atau **kwargs ini menjadi parameter dari suatu fuction (fungsi) dalam suatu program. dan terheran sebenarnya variable apa ini?!
*args dan **kwargs
Kedua parameter ajaib ini adalah sebuah fungsonal parameter, *args adalah arguments dan **kwargs adalah keyword arguments. dengan kedua parameter tsb kita dapat membuat function yang kita buat dapat menerima sejumlah parameter argumen dan parameter keyword secara arbitrary (sewenang wenang) tanpa menentukan predefined parameter sebelumnya.

Perlu diketahui pada *args dan **kwargs yang paling penting adalah tanda *(asterik) dan ** (asterik ganda). anda bisa saja mengganti nama variablenya, semisal menjadi *var atau **vars.

Contoh :

Function pada python
def komisi (a,b):
    return sum((a,b))*0.05

komisi(40,60)
In [5]: komisi(40,60)
Out[5]: 5.0
function untuk mengembalikan nilai sejumlah 5% dari penjumlahan dua buah nilai. terdapat dua buah parameter a dan b, didalam function tsb terdapat operasi menjulahkan nilai dari dua paramter tsb kemudian dikalikan dengan 0.05, sehingga jika input nilai parameter a = 40 dan b = 60 maka nilai yang dikembalikan fuction adalah 5.0
So far ga ada masalah ya...hehe

Wednesday, 19 December 2018

Python : Mengirim email dengan yagmail 'Yet Another GMAIL/SMPTP Client'



Module yang dapat digunakan untuk mengirim email pada python yang paling sering dipakai adalah kombinasi module smtplib dengan email. Selain itu ternyata ada module email lain yang dapat digunakan dengan sintaks yang lebih sederhana dan lebih mudah dipakai.

Module yagmail yang ditulis dan dikembangkan oleh Pascal van Kooten dibagikan di halaman githubnya : 

https://github.com/kootenpv/yagmailhttps://github.com/kootenpv/yagmail 

Dihalaman tsb dideskripsikan bahwa tujuan dari yagmail adalah 'The goal here is to make it as simple and painless as possible to send emails.' artinya dilarang makan sebelum berdoa

Seberapa sederhana kah sintaks nya? kira kira untuk mengirim email begini sintaks nya : 


import yagmail
yag = yagmail.SMTP()
contents = ['This is the body, and here is just text http://somedomain/image.png',
            'You can find an audio file attached.', '/local/path/song.mp3']
yag.send('to@someone.com', 'subject', contents)

Lebih sederhana lagi begini :
yagmail.SMTP('mygmailusername').send('to@someone.com', 'subject', 'This is the body')

Sunday, 9 December 2018

Python : Kompilasi source code ke bytecode (.py ke .pyc)



Ketika kita menulis kode program dalam bahasa pemrograman python, script yang kita tulis dalam high level language yang artinya bahasa dan perintah yang dimengerti manusia akan disimpan menjadi source file python berekstensi .py, file tsb dapat dibaca dan diubah oleh python intepreter dengan mengubah setiap baris perintah perintah menjadi instruksi instruksi byte code yang dapat dipahami oleh komputer, file byte code tsb disimpan dalam file berekstensi .pyc dan akhirnya dieksekusi oleh python virtual machine.

Proses mengubah dari high level language ke byte code atau kode instruksi komputer tsb dinamakan dengan proses kompliasi (compile).

Mengubah file souces code ke byte code ini memiliki beberapa kelebihan :

  • File source code dan byte code bisa sama sama langsung dieksekusi oleh python intepreter, akan tetapi byte code akan lebih cepat dieksekusi.
  • Proses eksekusi byte code lebih cepat karena tidak ada kompilasi lagi untuk mengubah source code ke byte code.
  • Dari sisi keamanan jauh lebih aman dibandingkan souce code yang masih berupa kode yang bisa dibaca siapa saja. bayangkan ada orang lain yg memiliki akses ke source code anda yang berisi user name, password dan setingan lainnya.  
Cara mengkompilasi file source code (.py) ke file bytecode (.pyc) bisa dilakukan dengan bantuan module 'py_compile'.

Python : String Formatting


String Formatting atau Pemformatan string memungkinkan kita menyuntikkan item ke dalam string daripada kita mencoba menggabungkan string menggunakan koma atau string concatenation. 
Sebagai gambaran, perbandingannya seperti ini :
Nama = 'Budi'
Umur = 25

'Nama saya '+Nama+', umur saya sekarang '+str(Umur)+' Tahun.'  # concatenation

f'Nama saya {Nama}, umur saya sekarang {Umur} Tahun'          # string formatting

Ada tiga cara untuk melakukan pemformatan string.
  • Metode lama menggunakan placeholder menggunakan karakter '%' (modulo)
  • Teknik yang ditingkatkan menggunakan metode string .format ().
  • Metode terbaru, diperkenalkan dengan Python 3.6, menggunakan string literal yang diformat, disebut f-string.

Saturday, 8 December 2018

Python : Input password pada Python dengan getpass()


Ketika program meminta user untuk memasukan password/katasandi tentunya kita tidak ingin password yang sedang kita ketik muncul dilayar.

getpass (), fungsi yang meminta pengguna untuk memasukan kata sandi tanpa menampilkannya. Module getpass menyediakan cara yang aman untuk menangani permintaan kata sandi di mana program berinteraksi dengan pengguna melalui terminal/command prompt.

Contoh penggunaan pada validasi login user
Sintaks nya :


import getpass
userid = 'gani'
passw = 'secret'

uid = input('masukan id anda : ')
pwd = getpass.getpass('masukan password anda : ')
if uid == userid and pwd == passw :
    print('Sukses Login..Selamat datang ', userid)
else :
    print('User ID atau password salah')

Jika dijalankan hasilnya seperti ini :

Done..


Sunday, 12 August 2018

Apa itu Directory Traversal?

Serangan dan ancaman directory traversal memanfaatkan validasi yang tidak benar dari input yang disediakan pengguna, yang memungkinkan aktor ancaman untuk mendapatkan akses yang tidak diinginkan ke sistem file. Jenis eksploit ini memanfaatkan praktik pemrograman yang buruk yang gagal untuk memeriksa input yang disediakan oleh pengguna yang memungkinkan pengguna untuk bergerak melalui struktur direktori di luar batas-batas tingkat direktori halaman web.

Prinsip utama serangan traversal direktori adalah melalui web server. Web server, ketika diinstal, diberikan sebuah direktori root pada server, seperti c: \ Inetpub \ wwwroot. Semua file pada halaman web umumnya terdapat dalam direktori ini dan subdirektorinya. Direktori dalam struktur file di luar direktori "root" ini tidak dimaksudkan untuk diakses.

Ketika seseorang melakukan traversal direktori mencoba mengakses struktur file lainnya dengan memasukkan URL yang dibuat, yang akan memungkinkan akses atau bahkan memungkinkan eksekusi program pada server host. Perhatikan gambar berikut:

URL dibagi menjadi dua bagian. Awalnya, https://drive.google.com, adalah situs sebenarnya yang sedang dikunjungi dan bagaimana akses ke server web diperoleh. Sesampai di sana, sisa fungsi URI seperti struktur direktori di komputer. Dari direktori root web-server, ia masuk ke dalam subdirektori untuk menemukan konten yang ingin ditampilkan di browser. Semuanya terlihat normal di sini.

Bayangkan bagaimana keuntungan dari traversal direktori yang memungkinkan untuk digunakan untuk menjelajahi sistem file lainnya. Tambahkan beberapa karakter yang mungkin anda familiar bagi yang sering menggunakan navigasi baris perintah : 
Perhatikan bahwa bagian pertama yang dikelilingi oleh kotak adalah URL (nomor port juga termasuk) yang menyediakan akses ke situs web. Kali ini, daripada membiarkan halaman mengikuti struktur direktori ke konten pilihan yang kita cari, pengguna bisa saja memasukkan beberapa .. \ secara berurutan ke URL. 

Menavigasi sistem file melalui baris perintah secara efektif memberitahu server web untuk naik satu tingkat direktori. Untuk setiap iterasi dari pola karakter, pengguna mendorong dirinya sendiri lebih jauh melalui sistem file. Mereka akan mencapai c: \ Inetpub \ wwwroot (lokasi halaman web pada server web berbasis Windows) dan dilewatkan ke c: \ Inetpub, dan kemudian c: \ (direktori tingkat atas umum pada web berbasis Windows server). Jika menambahkan lebih banyak karakter ...  daripada direktori yang tersedia untuk dilewati, bukan masalah karena setiap set ekstra akan menuntun pengguna di direktori teratas (karena tidak ada tempat yang lebih tinggi lagi). 

Dalam contoh diatas, bagian terakhir dari alamat adalah boot.ini. File konfigurasi ini berisi teks ASCII, sehingga browser web hanya menampilkan konten kepada pengguna seolah-olah menampilkan halaman web apa pun. Tinjau informasi berharga tentang server web.

Lebih jauh lagi, lihat contoh dibawah ini :
Perhatikan URI : %255c, kode tsb akan di decode ke back-slash. Ini adalah bentuk obfuscation.

Kali ini, pengguna telah melihat-lihat lokasi yang executable (dalam hal ini, command prompt Windows) dan meneruskannya dengan memasukan beberapa argumen. Eksekusi dan output selanjutnya ditampilkan melalui browser. di contoh ini penyerang hanya menjalankan perintah dir, tetapi banyak hal lain yang bisa dia lakukan dengan menjalankan cmd.exe pada target? Apa yang bisa dieksekusi lainnya?

Traversal direktori juga dapat digunakan dengan skrip. Lihat contoh ini di server web berbasis Linux:
Kode ini akan disuntikkan ke skrip situs web dan kemudian diurai. Cookie akan diproses dan browser akan diarahkan ke file /etc/passwd.
Outputnya adalah isi dari /etc/passwd. Beberapa informasi yang sangat berharga dapat dikumpulkan di sini bukan?!.

Traversal direktori dapat menjadi teknik yang sangat berharga terhadap server web yang tidak melakukan tindakan pencegahan yang tepat untuk memvalidasi masukan. Semuanya dapat diakses, mulai dari target sidik jari hingga menemukan akun dan kata sandi, bahkan melakukan eksekusi kode. Aplikasi web-server modern sudah termasuk pengecekan input dan patch untuk mengatasi celah keamanan ini. Oleh karena itu, kerentanan ini jarang terlihat kecuali untuk sistem warisan, yang jarang dimaintenance dan diperbarui.

Jika anda ingin mengeksplore lebih jauh tentang traversal direktori, cobalah gunakan environment yang disediakan pada OWASP Mutillidae.

apa itu Obfuscated JavaScript?

Threat actor / aktor ancaman adalah entitas jahat yang dapat bertanggung jawab pada dampak negatif terhadap postur keamanan keseluruhan dari suatu jaringan. Mereka akan menggunakan berbagai vektor serangan untuk mendapatkan akses tidak sah ke sumber daya jaringan. 

Vektor serangan memungkinkan aktor ancaman untuk mengeksploitasi kerentanan sistem yang diketahui atau tidak dikenal. Jenis-jenis vektor serangan yang digunakan dapat bergantung pada tingkat keterampilan, motivasi dari aktor ancaman, dan target yang mereka pilih. Untuk secara efektif mengenali vektor-vektor serangan ini, seorang analis harus terbiasa dengan dasar-dasar serangan dan bagaimana mereka dilakukan.

Vektor untuk serangan termasuk yang berikut:
  • Web: Serangan umum mencakup :
    • SQL Injection
    • Inklusi file lokal atau traversal direktori
    • Arbitrary code execution
    • Obfuscated web scripting
    • XSS
    • Cross-site forged requests
  • Kerentanan perangkat lunak : Kerentanan perangkat lunak, terutama varian yang dapat memproses kapabilitas jaringan, juga merupakan vektor serangan potensial. Eksploitasi yang ditulis terhadap kerentanan perangkat lunak tersebut mungkin termasuk shellcode.
  • Payload umum : Dalam muatan umum, seorang analis mungkin menemukan bind-shell dan reverse-shell yang akan memungkinkan penyerang untuk mendapatkan akses remote command-line ke target.
  • Pengguna akhir / end user: Pengguna akhir adalah vektor serangan potensial lainnya yang akan dieksploitasi oleh aktor ancaman termotivasi. File dan dokumen yang berisi kode berbahaya yang disematkan dan / atau disamarkan dapat muncul sebagai dokumen terlampir dalam pesan email atau dapat secara tidak sengaja diunduh ke sistem oleh pengguna yang mengklik tautan URL yang ditampilkan dalam pesan. USB thumb drive yang terinfeksi dapat diinstal dengan file berbahaya yang dapat secara otomatis dijalankan setelah dimasukkan ke dalam sistem. Pada tahun 2008, USB flash drive menginfeksi komputer di Stasiun Luar Angkasa Internasional dengan perangkat lunak berbahaya.

Obfuscated JavaScript 

Dalam pengembangan perangkat lunak, obfuscation code (kode yang dikaburkan/ disamarkan) adalah teknik yang digunakan untuk menyamarkan munculnya kode sumber yang berjalan pada suatu sistem. Mengaburkan kode sumber memiliki banyak tujuan dan umumnya digunakan untuk mengurangi ukuran keseluruhan dari kode atau aplikasi perangkat lunak. 

Obfuscated JavaScript merender kode sumber JavaScript ke dalam bentuk yang tidak mudah dibaca, dengan maksud menyamarkan fungsi kode yang dimaksud. Kode JavaScript dijalankan saat runtime oleh browser sistem klien dan tertanam dalam halaman HTML.

JavaScript memungkinkan pengguna untuk berinteraksi dengan formulir atau halaman yang ditampilkan di situs web. Encoding JavaScript adalah metode populer untuk mengaburkan kode sumber JavaScript ke dalam pernyataan yang sulit untuk dibaca atau ditafsirkan. Pengembang web biasanya akan menggunakan kode JavaScript yang dikaburkan sebagai upaya untuk mencegah kode sumber JavaScript mereka dianalisa atau dicuri. Kode JavaScript dapat dengan mudah dilihat selama sesi web dan tujuan mengaburkan kode sumber adalah untuk melindungi kekayaan intelektual pengembang.

Obfuscated JavaScript juga dapat digunakan sebagai sarana untuk menyamarkan kode sumber yang dibuat dengan maksud meruksak sistem. Penyerang sering mengaburkan kode JavaScript mereka untuk menghindari deteksi dan mengeksekusi kode berbahaya di workstation. Aktor ancaman ingin menyamarkan kode jahat sehingga mungkin dengan bebas dieksekusi untuk mencapai tujuan.

Analis harus memahami bahwa tindakan mengaburkan kode sumber JavaScript seharusnya tidak dianggap berbahaya secara otomatis. Namun, analis harus dapat mengenali kompleksitas dan tantangan yang terkait dengan mengidentifikasi vektor serangan yang berlaku ini. Jenis-jenis serangan ini semakin populer dan sulit dideteksi.

Contoh teknik umum yang digunakan untuk mengaburkan kode JavaScript seperti berikut:
  • Secara otomatis mengganti nama variabel menjadi nama acak dan menjadikan kode menjadi lebih sulit dibaca dan sulit dipahami.
  • JavaScript akan mengabaikan ruang putih di dalam kodenya. Pengacakan ruang-putih adalah proses penempatan karakter spasi-putih dan jeda baris di seluruh kode tanpa mengubah fungsinya.
  • Kode sumber yang memodifikasi diri sendiri yang menulis ulang dirinya sendiri saat dieksekusi.
  • Menggunakan kode karakter dan manipulasi string yang dikombinasikan dengan penyalahgunaan ekspresi eval ‘eval ()’.

Friday, 20 October 2017

Mengatasi "Unexpected error from external database driver (1)" ODBC




Mengatasi "Unexpected error from external database driver (1)" ODBC


Selamat siang, melenceng sedikit dari dunia networking
Sharing sedikit tentang masalah yang baru baru ini saya temukan ketika menggunakan fitur ODBC Data Sources di Windows 7/10 khusus nya ketika menggunakan database excel.

Ketika mengakses ODBC Microsoft Excel  saya menemui error "Unexpected error from external database driver (1)". padahal sebelumnya tidak ada masalah dengan database excel.

Saturday, 17 May 2014

IDE (Integrated Development Environment) | Gan~San

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib2eDM6CaN4AyjSii0QaTe8j_kEfE8c7QktPDD4iD-iF3ghAVd10YR6oOGNbS7qdDKJZhM6csM4XNasvLNCgiWc4EZREjVtHFde-PGpT0TGV_zMSyxeHFK-vs4C9vfGFg1GreVEsEl81k/s1600/java+ide%27s.jpg
IDE (Integrated Development Environment) adalah program komputer yang memiliki beberapa fasilitas yang diperlukan dalam pembangunan perangkat lunak. Tujuan dari IDE adalah untuk menyediakan semua utilitas yang diperlukan dalam membangun perangkat lunak.
Sebuah IDE, atau secara bebas dapat diterjemahkan sebagai Lingkungan Pengembangan Terpadu, setidaknya memiliki fasilitas:
  • Editor, yaitu fasilitas untuk menuliskan kode sumber dari perangkat lunak.
  • Compiler, yaitu fasilitas untuk mengecek sintaks dari kode sumber kemudian mengubah dalam bentuk binari yang sesuai dengan bahasa mesin.
  • Linker, yaitu fasilitas untuk menyatukan data binari yang beberapa kode sumber yang dihasilkan compiler sehingga data-data binari tersebut menjadi satu kesatuan dan menjadi suatu program komputer yang siap dieksekusi.
  • Debuger, yaitu fasilitas untuk mengetes jalannya program, untuk mencari bug/kesalahan yang terdapat dalam program.
Sampai tahap tertentu IDE modern dapat membantu memberikan saran yang mempercepat penulisan. Pada saat penulisan kode, IDE juga dapat menunjukan bagian-bagian yang jelas mengandung kesalahan atau keraguan.

Daftar IDE  :

Berikut ini adalah daftar IDE yang biasa dipakai dalam industri teknologi informasi:

  • Basic: MS Visual Basic
  • C: MS Visual C++
  • Delphi: Borland Delphi
  • Java: IntelliJ IDEA, Eclipse, NetBeans
  • Pascal: Turbo Pascal, Lazarus


sumber : http://id.wikipedia.org/wiki/Lingkungan_pengembangan_terpadu

Algoritma Validasi Username dan Password | Gan~San

Mungkin teman teman yang sedang belajar C++ penasaran dengan Algoritma bagaimana suatu algoritma mem- validasi sebuah Username & Password..



Berikut contoh algoritma yang di masukan ke dalam Bahasa C/C++ :

#include<iostream>
#include <conio.h>
using namespace std;

int main()
{
int sah;
int k;
int user,pswd,iuser,ipswd;
user=12345;
pswd=12345;
sah=0;
cout << "----------------------------------------------------------"<<endl;
cout << "|              SELAMAT DATANG DI PROGRAM LOGIN           |"<<endl;
cout << "----------------------------------------------------------"<<endl;
while ((sah==0)&&(k <= 3)){
cout << "\nInputkan Username : "; cin >> iuser;
cout << "\nInputkan Password : "; cin >> ipswd;
if ((iuser == user)&&(ipswd == pswd)){
sah=1;
cout << "\nAnda berhasil masuk\n";
}
else {
if ((iuser != user)||(ipswd != pswd)){
cout << "\nMaaf Password atau Username yang anda inputkan salah\n";
k=k+1;
}}
}
getch(); }

Sekian Terma Kasih :-) Semoga Bermanfaat

Looping pada Algoritma Pemrograman | Gan~San




Pengertian Looping

Looping adalah pengulangan sesuatu atau serangkaian “kerja” dari program. Dalam C++, paling tidak dikenal ada 3 looping.

  •  While 


Perintah while adalah pengulangan yang dilakukan oleh program selama (while) dalam keadaan tertentu. Misalnya saja, ada sebuah kondisi yang mengharuskan program agar melakukan “pekerjaan” tertentu selama keadaan itu terpenuhi (true).

Contoh:
Mencetak angka 1 sampai 1000
#include <iostream>
using namespace std;

int main() {
int i = 1;

kondisi ditetapkan (bahwa selama i lebih kecil atau sama dengan 1000 ada perintah yang diberikan pada program...)
while (i <= 1000) {

perintah untuk mencetak nilai dari i dan kemudian membuat baris baru
cout << i << "\n";
++i;
i = i + 1;
i += 1;


Nah, dari kode di atas kita lihat bahwa selama i lebih kecil atau sama dengan 1000, nilai dari i akan di cetak ke layar. Jadi, hasilnya adalah:

1
2

1000

                
Akan tercetak angka dari 1 sampai 1000 di layar. Perhatikan baik – baik ada sepenggal kode yang diberi komentar “iterasi”. Apakah iterasi itu? Iterasi dalam looping adalah proses yang berpengaruh dalam nilai dari variabel yang ditetapkan sebagai acuan looping. Atau dapat pula dikatakan bahwa, iterasi adalah bagaimana penambahan nilai atau pengurangan dalam perulangan.
            Contohnya seperti nilai dari i di atas. Penulisan yang akan di berikan pada variable i adalah :

++i;

Itu sama saja dengan perintah yang berada di dalam komentar:
 i = i + 1;
Dan 
i += i ;

            Perintah ini berarti bahwa i menambahkan dirinya sendiri dengan 1. Tanda “++” pada i pada bagian depan dari i (prefix), berarti kita langsung menambahkan variabel i dengan 1, tanpa menggunaan terlebih dahulu nilai dari i. Jika kita menggunakan tanda “++” pada bagian akhir dari variabel i (postfix), berarti nilai dari i digunakan terlebih dahulu lalu kemudian ditambahkan dengan 1.
Contoh lain dari hal ini adalah dengan menggunakan pengurangan sebagai pengulangan.
Contoh:

#include <iostream>
using namespace std;
int main () {
int i = 1000;

while (i >= 1) {
cout << i << "\n";

yang digunakan adalah “—-“
--i;

            Hasil yang didapat mungkin saja berbeda, tapi persamaan dari keduanya adalah bahwa terjadi perulangan sebanyak 1000 kali, yaitu:

1000
999

1

            Perlu diketahui bahwa yang terjadi pada perulangan jika sudah mencapai false (dimana kondisinya tidak lagi true melainkan false) adalah perulangan akan segera keluar dan melanjutkan program. Misalnya saja dari program di atas, jika i tidak lagi lebih kecil atau sama dengan 1000 (misalnya 1001), perulangan akan menghasilkan nilai false (kondisi tidak lagi i <= 1000).


  • do...while 

Biasanya ini adalah perintah untuk tetap melakukan sesuatu dalam program sampai kondisinya terpenuhi . Misalnya perintah untuk tetap menampilan sebuah pesan sampai adanya input yang valid dari user.

Contoh:
#include <iostream>
using namecspace std;

int main () {
char yes_no;
lalu beberapa variabel diletakkan di sini...
... (di sini misalnya terdapat kerja dari program)

 disini diletakkan do...while untuk “menunggu” inputan yang
valid dari user.
do {
cout << “masih mau lanjut? (y / n): “;
cin >> yes_no;
} while (yes_no != ‘y’ || yes_no != ‘n’);

if (yes_no == ‘y’)
lakukan terserah apa aja yang anda mau lakukan di sini
 
Else di sini juga anda bisa lakukan apa saja yang anda mau lakukan. Jika kita perhatikan mungkin ada tanda yang di pergunakan dalam kode tersebut. Akan saya coba jelaskan mengenai beberapa operator logika yang terdapat dalam C++.


Operator logika biasanya dipakai dalam perbandingan (kondisi). Mengenai fungsi perbandingan ini akan dibahas dalam bab-bab berikutnya. Operator logika yang biasanya dipakai ada beberapa macam, yaitu:


·    Tanda “&&” (and), operator ini berfungsi jika kedua nilai pembandingnya bernilai true. Contoh: i >= 0 && i <= 1000. Ini berarti penggunaan kondisi dimana kondisi tersebut adalah i lebih besar atau sama dengan 0 dan lebih kecil atau sama dengan 1.000 (0 – 1.000).

·          Tanda “||” (or), operator ini berfungsi jika salah satu dari kedua nilai pembandingnya bernilai true. Contoh: i >= 1000 || i <= 0. Ini berarti penggunaan kondisi dimana kondisi tersebut adalah i lebih besar atau sama dengan 1.000 atau leih kecil atau sama dengan 0 (-1 ke bawah atau 1.001 ke atas).

·          Tanda “!” (not), seperti yang kita lihat terdapat di bagian dari kode di atas adalah merupakan tanda negasi, yang berarti semacam pembalik dari sesuatu. Misalnya seperti yang kita lihat pada potongan kode di atas:

while (yes_no != ‘y’ || yes_no != ‘n’);
Ini kurang lebih dapat dibaca: “ketika yes_no tidak sama dengan ’y’ n atau
yes_no tidak tidak sama dengan ’n’.

      Kembali ke masalah kode di atas, pada bagian “pembuka” kita membuat beberap variabel, salah satunya adalah yes_no yang berfungsi untuk “menampung” nilai atau karakter yang dipilih dari user. Jadi, kita membuat sebuah program yang entah kerjanya baagimana lalu pada bagian akhir dari program tersebut, kita memberikan sebuah pilihan apakah user masih mau lanjut atau tidak. Jika user memasukkan input yang tidak valid misalnya menekan angka 0 atau menekan huruf “t”), maka perintah yang berada dalam blok do…while akan di eksekusi, dan begitu seterusnya jika user masih tidak memasukan input yang valid.




  • For
Ini adalah (mungkin) perulangan yang paling sering dipakai dalam C++. Sintaknya adalah sebagai berikut:
for (inisialisasi; kondisi; iterasi) yang ingin dilakukan...
            Dalam for, anda bisa melakukan inisialisasi, yaitu mendeklarasikan variabel baru dan langsung memasukan nilai di dalamnya, kemudian memberi kondisi dimana perulangan itu akan terus dilakukan, dan pada akhirnya menentukan iterasi. Contoh dari for adalah sebagai berikut:
#include <iostream>
using namespace std;
int main () {
int num_masuk;
cout << "berapa banyak anda mau melakukan perulangan?: ";
cin >> num_masuk;

for (int i = 1; i <= num_masuk; ++i) {
cout << "ini adalah baris ke-“ << i << "\n” ;

            Pada kode di atas, yang akan menjadi input dari user untuk menentukan berapa banyak perulangan akan dilakukan adalah num_masuk, dan variabel yang akan dijadikan patokan dalam perulangan adalah i, di mana i di buat di dalam perintah for dan kemudian langsung di assign (inisialisasi).
            Kondisi yang digunakan adalah kondisi dimana i <= num_masuk yang berarti, jika / selama i lebih kecil atau sama dengan num_masuk maka perulangan akan terus dilakukan. Iteasi yang ditentukan di sini adalah nilai dari i akan ditambah 1 (satu) dalam setiap perulangan (++i).


Contoh program yang sudah di compile dari kode ini adalah:
Namun for juga bisa digunakan sebagai berikut:
for (int i = 1; i <= 10; ++i) {
for (int j = 1; j <= 10; ++j) {
cout << i * j << “\n”;

            Program seperti ini dapat digunakan dalam perhitungan perkalian, misalnya saja hasilnya dapat menjadi sebagai berikut:

Koding untuk program ini adalah:
#include <iostream>
using namespace std;

 int main () untuk berapa banyak baris yang diinginkan...
for (int i = 1;
i <= 10;
++i) jumlah kolom, mengingat bagian ini yang akan dieksekusi lebih lanjut dan sampai selesai daul baru dilanjutkan dengan bagian yang selanjutnya (bagian baris)

for (int j = 1;
j <= 3;
++j) { cout << i << " X " << j << " = " << j * i << "\t";
}

 baris baru, setelah ketiga kolom selesai “dibuat” cout << "\n";
Break dan continue
Ketika melakukan perulangan, ketika sampai batas tertentu kita ingin memberhentikan perulangan tersebut. Untuk itulah, dibuat statement break dan continue.

break
Adalah perintah untuk langsung keluar dari looping (perulangan). Contoh penggunaan statement break adalah:
while (i > 0) { cout << i << “\n”;
if (i == 2) break;
--i;
}

            Sudah bisa tebak apa kira – kira yang akan dihasilkan oleh program ini? Kalau belum, silahkan baca lebih lanjut.
            Program tersebut akan dieksekusi sampai nilai i sama dengan 2. Seharusnya, progrma tersebut akan bejalan sampai dengan nilai i sama dengan 1. Tapi statement break yang diberikan pada kondisi dimana jika nilai i sama dengan 2 maka looping dihentikan, maka ketika nilai i sama dengan 2, nilai i tidak dikurangi lagi (--i;) dan looping keluar. Hasilnya kurang lebih bisa dilihat sama dengan contoh program berikut:

Kodenya adalah sebagai berikut:
#include <iostream>
using namespace std;

int main () {
int baris;
cout << "berapa banyak anda ingin mencetak baris?: ";
cin >> baris;

for (int i = 1; i <= baris; ++i) {
cout << "ok, ini adalah baris yang ke-" << i << "\n";

if (i == (baris - 1))
break;
}
cout << "sorry, hanya bisa sampe di situ doang... :D\n";
}
continue
Nah, ini juga mirip dengan break tadi hanya saja ini kebalikannya. Langsung saja ke contohnya:
for (int i = 1; i <= 20; ++i) {
if (i % 7 == 0)
cout << i << “\n”;
else
continue;
}
            Yang di atas itu adalah (kurang lebih) contoh yang saya pelajari ketika saya belajar C++ juga :D. Itu adlaah kode untuk mencari bilangan kelipatan 7 dari 1 – 20. Fungsi continue diatas adalah, jika bilangan itu tidak habis di bagi 7 (if (i % 7 == 0)), maka lopingnya dilanjutkan terus, tanpa adanya apa – apa yang akan dieksekusi.
            Contoh tampilannya adalah sebagai berikut (kali ini kita akan mencoba mencari dari 1 sampai 100):

Kodenya adalah sebagai berikut:
#include
<iostream>
using namespace std;
int main () {
for (int i = 1;
i <= 100;
++i) {
if (i % 7 == 0)
cout << i << " adalah kelipatan 7!\n";
else
continue;

sumber :  http://pengertiandaninfo.blogspot.com/2013/02/penjelasanpengertian-looping.html