Dynamic Link Library, Programming, Rekayasa Perangkat Lunak, Software Engineering

Konsep Shared Resource & Thread Dalam Pemrograman

MUTABLE

merupakan inisiasi obyek dalam program komputer yang dapat diubah isi datanya.

IMMUTABLE

merupakan kebalikan dari IMMUTABLE dimana obyek yang dibangkitkan dalam sebuah program komputer tidak dapat diubah lagi isi datanya.

Dalam object oriented programming seperti Java, penggunaan tipe data String  perlu diperhatikan karena sifatnya immutable. Ketika mengisi variabel nama = “Teknik Informatika” disaat itulah sebuah obyek dibangkitkan, namun ketika ingin mengisi kembali variabel nama = “Pemrograman” maka dibangkitkan lagi sebuah obyek yang sama tetapi akan disimpan pada memori yang berbeda dari variabel sebelumnya. Sehingga apabila semakin banyak hal seperti itu dalam program komputer, dapat mengakibatkan performa komputasi yang dilakukan semakin meningkat dan memakai resource yang lebih besar.

THREAD SAFE

merupakan konsep penggunaan resource komputer ketika ada 1 resource yang sedang digunakan pada satu waktu dan tidak memberikan hasil yang berbeda.

NON THREAD SAFE

merupakan kebalikan dari Thread Safe, yaitu ketika terdapat 2 thread yang sedang berjalan dalam 1 resource dan menghasilkan nilai yang dapat berbeda, hal ini bergantung pada thread mana yang menggunakan resource yang dipakai.

Machine Learning, Natural Language Processing, Natural Language Toolkit, Programming, Python, Web Server

MENGGUNAKAN PUSTAKA PYTHON UNTUK PENGOLAHAN TEKS BERBAHASA INDONESIA

  1. INSTALASI PTYHON-PIP PADA SISTEM OPERASI LINUX
    Buka terminal command line lalu ketik perintah sudo apt-get install python-pip
  1. INSTALASI PUSTAKA SASTRAWI
    Ketik perintah berikut sudo pip install sastrawi
  1. BUAT SEBUAH FILE MISALNYA BERNAMA STEMMER.PYTekan CTRL+X lalu pilih Y untuk menyimpan
  2. Kompilasi file menggunakan perintah python filename.py akan diperoleh hasil berikut

 

C++, Dynamic Link Library, PHP, Programming, Ubuntu Server, Web Server

Membuat Ekstensi PHP pada Web Server Apache Menggunakan Pemrograman C++

instalasi pustaka phpcpp pada sistem operasi ubuntu

buat sebuah file bernama MakeFile

#
#	Makefile template
#
#	This is an example Makefile that can be used by anyone who is building
#	his or her own PHP extensions using the PHP-CPP library. 
#
#	In the top part of this file we have included variables that can be
#	altered to fit your configuration, near the bottom the instructions and
#	dependencies for the compiler are defined. The deeper you get into this
#	file, the less likely it is that you will have to change anything in it.
#

#
#	Name of your extension
#
#	This is the name of your extension. Based on this extension name, the
#	name of the library file (name.so) and the name of the config file (name.ini)
#	are automatically generated
#

NAME				=	my_extension


#
#	Php.ini directories
#
#	In the past, PHP used a single php.ini configuration file. Today, most
#	PHP installations use a conf.d directory that holds a set of config files,
#	one for each extension. Use this variable to specify this directory.
#

INI_DIR				=	/etc/php5/conf.d


#
#	The extension dirs
#
#	This is normally a directory like /usr/lib/php5/20121221 (based on the 
#	PHP version that you use. We make use of the command line 'php-config' 
#	instruction to find out what the extension directory is, you can override
#	this with a different fixed directory
#

EXTENSION_DIR		=	$(shell php-config --extension-dir)


#
#	The name of the extension and the name of the .ini file
#
#	These two variables are based on the name of the extension. We simply add
#	a certain extension to them (.so or .ini)
#

EXTENSION 			=	${NAME}.so
INI 				=	${NAME}.ini


#
#	Compiler
#
#	By default, the GNU C++ compiler is used. If you want to use a different
#	compiler, you can change that here. You can change this for both the 
#	compiler (the program that turns the c++ files into object files) and for
#	the linker (the program that links all object files into the single .so
#	library file. By default, g++ (the GNU C++ compiler) is used for both.
#

COMPILER			=	g++
LINKER				=	g++


#
#	Compiler and linker flags
#
#	This variable holds the flags that are passed to the compiler. By default, 
# 	we include the -O2 flag. This flag tells the compiler to optimize the code, 
#	but it makes debugging more difficult. So if you're debugging your application, 
#	you probably want to remove this -O2 flag. At the same time, you can then 
#	add the -g flag to instruct the compiler to include debug information in
#	the library (but this will make the final libphpcpp.so file much bigger, so
#	you want to leave that flag out on production servers).
#
#	If your extension depends on other libraries (and it does at least depend on
#	one: the PHP-CPP library), you should update the LINKER_DEPENDENCIES variable
#	with a list of all flags that should be passed to the linker.
#

COMPILER_FLAGS		=	-Wall -c -O2 -std=c++11 -fpic -o
LINKER_FLAGS		=	-shared
LINKER_DEPENDENCIES	=	-lphpcpp


#
#	Command to remove files, copy files and create directories.
#
#	I've never encountered a *nix environment in which these commands do not work. 
#	So you can probably leave this as it is
#

RM					=	rm -f
CP					=	cp -f
MKDIR				=	mkdir -p


#
#	All source files are simply all *.cpp files found in the current directory
#
#	A builtin Makefile macro is used to scan the current directory and find 
#	all source files. The object files are all compiled versions of the source
#	file, with the .cpp extension being replaced by .o.
#

SOURCES				=	$(wildcard *.cpp)
OBJECTS				=	$(SOURCES:%.cpp=%.o)


#
#	From here the build instructions start
#

all:					${OBJECTS} ${EXTENSION}

${EXTENSION}:			${OBJECTS}
						${LINKER} ${LINKER_FLAGS} -o $@ ${OBJECTS} ${LINKER_DEPENDENCIES}

${OBJECTS}:
						${COMPILER} ${COMPILER_FLAGS} $@ ${@:%.o=%.cpp}

install:		
						${CP} ${EXTENSION} ${EXTENSION_DIR}
						${CP} ${INI} ${INI_DIR}
				
clean:
						${RM} ${EXTENSION} ${OBJECTS}


buat sebuah .ini file bernama filename.ini lalu isi dengan script berikut

extension=my_extension.so

buat sebuah file bernama filename.cpp lalu isi dengan script berikut

#include <phpcpp.h>
#include <stdlib.h>

Php::Value myFunction()
{
   return "Hello from extension";
}

/**
 *  tell the compiler that the get_module is a pure C function
 */
extern "C" {
    
    /**
     *  Function that is called by PHP right after the PHP process
     *  has started, and that returns an address of an internal PHP
     *  strucure with all the details and features of your extension
     *
     *  @return void*   a pointer to an address that is understood by PHP
     */
    PHPCPP_EXPORT void *get_module() 
    {
        // static(!) Php::Extension object that should stay in memory
        // for the entire duration of the process (that's why it's static)
        static Php::Extension extension("my_extension", "1.0");
        
        // @todo    add your own functions, classes, namespaces to the extension
	extension.add("myFunction",myFunction);
        
        // return the extension
        return extension;
    }
}

buka kembali terminal command line lalu masuk pada direktori tempat dimana script-script diatas disimpan, gunakan kembali perintah make && sudo make install untuk proses kompilasi atau building menjadi ekstensi web server nantinya.

hasil dari proses kompilasi script diatas akan menghasilkan file .so seperti berikut

setelah itu daftarkan file .so yang sudah dibuild sebelumnya pada konfigurasi php.ini,

restart apache dengan perintah sudo service apache2 restart atau sudo /etc/init.d/apache2 restart, kemudian cek status server untuk melihat apakah ekstensi telah terpasang, berikut adalah hasil pemasangan ekstensi pada web server apache, akan muncul pada informasi status server.

Codeigniter, Machine Learning, Mathematic, PHP, Programming, SQL, Ubuntu Server, Web Server

Pengenalan Case Based Reasoning Menggunakan Pemrograman PHP

Case based reasoning atau penalaran berbasis kasus merupakan salah satu teknik pemecahan masalah berdasarkan pengalaman-pengalaman pada masa lalu. Pengalaman yang pernah terjadi di masa lampau tersebut disimpan dalam tempat yang disebut dengan “Basis Kasus”. Continue reading “Pengenalan Case Based Reasoning Menggunakan Pemrograman PHP”

Algorithm, C++, Dynamic Link Library, Programming, Visual Studio

Membangun Custom Execution Engine (CEE) Memanfaatkan External Library [Part 2]

Melanjutkan tulisan sebelumnya https://sirojulmiftakh.wordpress.com/2017/03/31/membangun-custom-execution-engine-cee-memanfaatkan-external-library-part-1/ kali ini akan dilanjutkan tentang bagaimana mengintegrasikan pustaka DLL yang telah dibuild sebelumnya. Continue reading “Membangun Custom Execution Engine (CEE) Memanfaatkan External Library [Part 2]”

Algorithm, C++, Dynamic Link Library, Programming, Visual Studio

Membangun Custom Execution Engine (CEE) Memanfaatkan External Library [Part 1]

Terkadang, kita menemukan beberapa aplikasi yang membutuhkan file eksternal seperti pustaka DLL (Dynamic Link Library) untuk menjalankan aplikasinya.

Bagaimana cara membuat eksternal library tersebut?

Pada tulisan ini, akan dilakukan percobaan membuat sebuah pustaka DLL untuk mendukung kebutuhan jalannya sebuah aplikasi.

Kebutuhan percobaan :
– Visual Studio IDE
– C++ Programming Language
– Niat untuk mencoba 🙂 Continue reading “Membangun Custom Execution Engine (CEE) Memanfaatkan External Library [Part 1]”

Algorithm, Codeigniter, Mathematic, PHP, Programming, SQL

Algoritma Fuzzifikasi Tsukamoto Untuk Prediksi Hasil Produksi Menggunakan 4 Aturan Prediksi

Algoritma FIS (Fuzzy Inference System) adalah salah satu algoritma yang digunakan untuk pengambilan keputusan. Contoh yang dibahas kali ini adalah mengenai penentuan nilai kinerja karyawan berdasarkan inputan yang ada.
Algoritma ini memiliki beberapa tipe teknik perhitungan yang digunakan, dan salah satu tipe yang digunakan adalah tipe yang ditemukan oleh Tsukamoto, oleh karena itu tipe ini dinamakan tipe Tsukamoto / Fuzzy Tsukamoto. Continue reading “Algoritma Fuzzifikasi Tsukamoto Untuk Prediksi Hasil Produksi Menggunakan 4 Aturan Prediksi”

Algorithm, Machine Learning, Programming, Python

Implementasi Sederhana Algoritma K-Nearest Neighbor Bahasa Pemrograman Python

Algoritma K-Nearest Neighbor merupakan metode klasifikasi yang mengelompokan data baru berdasarkan jarak data baru itu kebeberapa data/tetangga (neighbord) terdekat (Santoso, 2007) [1].

Klasifikasi adalah proses penemuan model (atau fungsi) yang menggambarkan dan membedakan kelas data atau konsep yang bertujuan agar bisa digunakan untuk memprediksi kelas dari objek yang label kelasnya tidak diketahui (Kamber, 2006).

Klasifikasi data terdiri dari 2 langkah proses. Pertama adalah learning (fase training), dimana algoritma klasifikasi dibuat untuk menganalisa data training lalu direpresentasikan dalam bentuk rule klasifikasi. Proses kedua adalah klasifikasi, dimana data tes digunakan untuk memperkirakan akurasi dari rule klasifikasi (Kamber, 2006).

Proses klasifikasi didasarkan pada empat komponen (Gorunescu, 2011):

  1. Kelas

    Variabel dependen yang berupa kategorikal yang merepresentasikan „label‟ yang terdapat pada objek. Contohnya: resiko penyakit jantung, resiko kredit, customer loyalty, jenis gempa.

  2. Predictor

    Variabel independen yang direpresentasikan oleh karakteristik (atribut) data. Contohnya: merokok, minum alkohol, tekanan darah, tabungan, aset, gaji.

  3. Training dataset

    Satu set data yang berisi nilai dari kedua komponen di atas yang digunakan untuk menentukan kelas yang cocok berdasarkan predictor.

  4. Testing dataset

    Berisi data baru yang akan diklasifikasikan oleh model yang telah dibuat dan akurasi klasifikasi dievaluasi.

LOAD DATASET


import csv
import random
import math
import operator

def loadDataset(filename, split, trainingSet=[] , testSet=[]):
with open(filename, 'rb') as csvfile:
lines = csv.reader(csvfile)
dataset = list(lines)
for x in range(len(dataset)-1):
for y in range(4):
dataset[x][y] = float(dataset[x][y])
if random.random() < split:
trainingSet.append(dataset[x])
else:
testSet.append(dataset[x])

def main():
# prepare data
trainingSet=[]
testSet=[]
split = 0.67
loadDataset('iris.data', split, trainingSet, testSet)
print 'Train set: ' + repr(len(trainingSet))
print 'Test set: ' + repr(len(testSet))

# generate predictions

main()

Ketika program diatas dieksekusi (docs: https://www.python.org/doc/) maka akan ditampilkan jumlah data set dan data train yang digunakan dari sekian jumlah data yang disiapkan.

MENCARI OBJEK TERDEKAT

Pada tahap ini, dilakukan perhitungan jarak terdekat dari setiap objek menggunakan Euclidean Distance [2]


import csv
import random
import math
import operator

def loadDataset(filename, split, trainingSet=[] , testSet=[]):
with open(filename, 'rb') as csvfile:
lines = csv.reader(csvfile)
dataset = list(lines)
for x in range(len(dataset)-1):
for y in range(4):
dataset[x][y] = float(dataset[x][y])
if random.random() < split:
trainingSet.append(dataset[x])
else:
testSet.append(dataset[x])

def euclideanDistance(instance1, instance2, length):
distance = 0
for x in range(length):
distance += pow((instance1[x] - instance2[x]), 2)
return math.sqrt(distance)

def getNeighbors(trainingSet, testInstance, k):
distances = []
length = len(testInstance)-1
for x in range(len(trainingSet)):
dist = euclideanDistance(testInstance, trainingSet[x], length)
distances.append((trainingSet[x], dist))
distances.sort(key=operator.itemgetter(1))
neighbors = []
for x in range(k):
neighbors.append(distances[x][0])
return neighbors

def main():
# prepare data
trainingSet=[]
testSet=[]
split = 0.67
loadDataset('iris.data', split, trainingSet, testSet)
print 'Train set: ' + repr(len(trainingSet))
print 'Test set: ' + repr(len(testSet))

# generate predictions
predictions=[]
k = 3
for x in range(len(testSet)):
neighbors = getNeighbors(trainingSet, testSet[x], k)
print(neighbors)

main()

MENGHITUNG AKURASI

import csv
import random
import math
import operator

def loadDataset(filename, split, trainingSet=[] , testSet=[]):
with open(filename, 'rb') as csvfile:
lines = csv.reader(csvfile)
dataset = list(lines)
for x in range(len(dataset)-1):
for y in range(4):
dataset[x][y] = float(dataset[x][y])
if random.random() < split:
trainingSet.append(dataset[x])
else:
testSet.append(dataset[x])

def euclideanDistance(instance1, instance2, length):
distance = 0
for x in range(length):
distance += pow((instance1[x] - instance2[x]), 2)
return math.sqrt(distance)

def getNeighbors(trainingSet, testInstance, k):
distances = []
length = len(testInstance)-1
for x in range(len(trainingSet)):
dist = euclideanDistance(testInstance, trainingSet[x], length)
distances.append((trainingSet[x], dist))
distances.sort(key=operator.itemgetter(1))
neighbors = []
for x in range(k):
neighbors.append(distances[x][0])
return neighbors

def getResponse(neighbors):
classVotes = {}
for x in range(len(neighbors)):
response = neighbors[x][-1]
if response in classVotes:
classVotes[response] += 1
else:
classVotes[response] = 1
sortedVotes = sorted(classVotes.iteritems(), key=operator.itemgetter(1), reverse=True)
return sortedVotes[0][0]

def getAccuracy(testSet, predictions):
correct = 0
for x in range(len(testSet)):
if testSet[x][-1] == predictions[x]:
correct += 1
return (correct/float(len(testSet))) * 100.0

def main():
# prepare data
trainingSet=[]
testSet=[]
split = 0.67
loadDataset('iris.data', split, trainingSet, testSet)
print 'Train set: ' + repr(len(trainingSet))
print 'Test set: ' + repr(len(testSet))

# generate predictions
predictions=[]
k = 3
for x in range(len(testSet)):
neighbors = getNeighbors(trainingSet, testSet[x], k)
result = getResponse(neighbors)
predictions.append(result)
print('RESULT: predicted=' + repr(result) + ', actual=' + repr(testSet[x][-1]))
accuracy = getAccuracy(testSet, predictions)
print 'PREDICT: ', accuracy

Referensi :

[1] http://jurnal.unpand.ac.id/index.php/NT/article/download/350/344

[2] https://blogs.itb.ac.id/anugraha/2014/09/10/teori-pengukuran-jarak/

Linux, Penetration Testing, PHP, Programming, SQL, SQL Injection, Web Server

Memanfaatkan Celah Keamanan SQL Injeksi Pada Aplikasi Web

Pada tulisan ini, saya mencoba melakukan pengujian celah keamanan suatu aplikasi web dengan memanfaatkan celah keamanan sql atau yang sering disebut dengan sql injection. Pada intinya, memanfaatkan kesalahan pada penulisan query pada aplikasi tersebut.

Salah satu contoh target yang diambil adalah situs yang diambil secara acak memanfaatkan google dork, langsung saja kita coba lakukan injeksi pada url aplikasi dengan menambahkan parameter seperti berikut : Continue reading “Memanfaatkan Celah Keamanan SQL Injeksi Pada Aplikasi Web”

Linux, Networking, Programming, Ubuntu Server

Exploitasi Hak Akses User Ubuntu 15.04

Exploitasi hak akses yang dimaksud ialah meningkatkan level akses user pada sistem operasi linux yang dalam artikel ini diuji coba pada sistem operasi Ubuntu 15.04-64 bit. Seseorang yang berhasil masuk ke dalam sistem linux atau iseng-iseng ingin memperoleh hak akses user sebagai root, administrator, atau superuser. Continue reading “Exploitasi Hak Akses User Ubuntu 15.04”