Archive for the ‘programming’ Category


Assalamu’alaikum Wr. Wb.

Diagram Sync Data ke server slave

Diagram Sync Data ke server slave

alamat server slave di ralat di http://appscenter.aio.co.id/weatherlogger/

alamat master logger di http://weatherlogger.ap.ngrok.io/

Oke saya lanjutkan. remind lagi ini adalah seri berantai dari posting berikut ya

  1. https://tarecha.wordpress.com/2015/10/26/project-raspberry-pi/
  2. https://tarecha.wordpress.com/2017/06/05/project-weather-logger-part-1/
  3. https://tarecha.wordpress.com/2017/06/26/project-weather-logger-part-2-tambahan-sensor-tekanan-udara/
  4. https://tarecha.wordpress.com/2017/07/01/project-weather-logger-part-3-komunikasi-udp/
  5. https://tarecha.wordpress.com/2017/07/15/project-weather-logger-part-4-simpan-di-server-mysql/
  6. https://tarecha.wordpress.com/2017/07/24/project-weather-logger-part-5-view-data-dan-export/
  7. https://tarecha.wordpress.com/2017/07/25/project-weather-logger-part-6-plot-graphic/
  8. https://tarecha.wordpress.com/2017/07/29/project-weather-logger-part-7-ngrok-http-tunneling/
  9. https://tarecha.wordpress.com/2017/08/27/project-weather-logger-part-8-ganti-sensor-bme280/

 

sepertinya ini part terahir ya. selanjutnya cman tambahan2 fitur saja mungkin, seperti mbandingkan suhu malang sama pasuruan atau membandingkan suhu dalam 3 hari terakhir. cman improvement di PHP nya saja.

Big Picture System

Big Picture System

tentu masih ingat gambar ini kan di part sebelumnya. ya tujuan ada synconize data adalah mengatasi ketebatasan koneksi internet yang baru bisa jalan saat tehtering internet melalui smartphone dilakukan. dan ketika master logger raspberry pi tidak konek internet sehingga tidak bisa diakses langsung menggunakan ngrok http tunelling. user bisa akses ke slave server. tentu kombinasinya itu multi site, jadi berapapun master logger raspberry pi / windows yang ada bisa di sync datanya ke slave server. slave server ini pun bisa lebih dari 1, bisa 2, bisa 3. tapi sih cukup 1 saja saya rasa sudah lebih dari cukup

Jika Anda kritis dengan skema yang saya buat kira2 akan menanyakan hal seperti ini

  1. Mengapa menggunakan port 80 baik pada socket untuk komunikasi dengan node mcu maupun save datanya menggunakan php yang juga jalan di port 80 ?
  2. mengapa simpan datanya tidak langsung pakai mysql yang nembak langsung ke database, lebih efisien daripada masih harus bikin program php nya

Ok saya akan coba jawab

  1. Port 80 adalah port open yang sangat jarang sekali oleh administrator jaringan di blok ( klo di blok gk bisa buka kompas youtube ataupun gmail ) jadi karena “port yang pasti dibuka” maka saya gunakan port 80 untuk komunikasi nya. meski agak aneh kirim data UDP ke node mcu pakai port 80.
  2. Jarang sekali ada web hosting yang membuka port 3306 untuk akses MySQL secara langsung, saya berfikir kedepan gimana kalau saya taruh di webhosting yang murah atau bahkan webhosting gratisan ? setahu saya mereka gk buka port 3306 nya. Jadi saya pakai program PHP untuk save datanya karena dia jalan di port 80 yang pasti open dan bisa ditaruh di webhosting shared biasa. contohnya slave server http://appscenter.aio.co.id/weatherlogger/ s    ini hanya diopen port 80 nya saja karena ini adalah webserver yang bisa diakses dari luar :-). soal keamanan juga. sebenarnya saya numpang ke server saya sendiri he he . tapi insyaAllah aman kok.

 

kode lengkapnya saya upload di https://github.com/tarecha/weatherlogger karena saya gk bisa pakai git, biasanya pakai svn tortoise, ah ribet jadi diupload biasa pakai file .zip

file sync.py

import socket
import sys
import datetime
import time
import urllib2
import urllib

 

urlsourcegetsync = "http://localhost/getsync.php"
urlsourceupdatestatus = "http://localhost/updatestatussync.php"
urldestinationinsertdata = "http://isikan alamat slave server/insertdata.php"
key = "12345"
updateflag = 'sync1'
limit = '20'
sleeptime = 1
sleeptimeerror = 5
i=0
while 1:
         
        try :
                print '# '+str(i)
                datagetupdate={}
                datagetupdate['k']= key
                datagetupdate['sync'] = updateflag
                datagetupdate['limit'] = limit
                dataformaturl = urllib.urlencode(datagetupdate)                    
                requesttoserver = urllib2.urlopen(urlsourcegetsync,dataformaturl,timeout=5)
                datarowall=requesttoserver.read()
                             
                if(datarowall[0]!='i'): #jika kembalian ada i nya maka gagal kalau tidak maka lanjut
                        datarow = datarowall.split("#")
                        datarow.pop() #hapus last row karena isinya kosong (/r/n/r/n) new line                        
                        print 'ada data baru'
                        #print datarowall
                        #print datarowall
                        #print datarow
                        for valuetosync in datarow:
                                
                                datasync={}
                                datasync=valuetosync.split(",")
                                data={}
                                data['k']= key
                                data['iddata'] = datasync[0]
                                data['idnode'] = datasync[1]
                                data['hum'] = datasync[2]
                                data['temp'] = datasync[3]
                                data['press'] =  datasync[4]                                
                                data['waktu'] = datasync[5]                                
                                if updateflag=='sync1':
                                        data['sync1'] = '1'
                                else:
                                        data['sync1'] = '0'
                                if updateflag=='sync2':
                                        data['sync2'] = '1'
                                else:
                                        data['sync2'] = '0'
                                #print data
                                dataformaturl = urllib.urlencode(data)                                
                                requesttoserver = urllib2.urlopen(urldestinationinsertdata,dataformaturl,timeout=5)               
                                
                                infosavephp = requesttoserver.read().split("#")
                                time.sleep(sleeptime) 
                                
                                #print '=========================================================================='  
                                if(infosavephp[0]=='i')and(infosavephp[1]=='Berhasil Insert'):
                                        print 'Informasi : Sync ke Slave Server : ID '+infosavephp[2]
                                        #updatestatus
                                        dataupdatestatus={}
                                        dataupdatestatus['k']=key
                                        dataupdatestatus['iddata']=infosavephp[2]
                                        dataupdatestatus['sync']=updateflag
                                        dataformaturl = urllib.urlencode(dataupdatestatus)
                                        requesttoserver = urllib2.urlopen(urlsourceupdatestatus,dataformaturl,timeout=5)
                                        infosavephp = requesttoserver.read().split("#")                                       
                                        print 'Informasi : '+infosavephp[1]+ ' ke master logger'
                                else:
                                        print 'update status sync gagal '
                                        print infosavephp
                                
                                
                                     
                                        
                else: #kembalian getsync.php
                        print 'tidak ada data baru'
                        
                time.sleep(sleeptime)                        
                 
        except urllib2.HTTPError:
                print 'Tidak konek server untuk sync'
                sleep(sleeptimeerror) 
        except urllib2.URLError:
                print 'Tidak konek server untuk sync'
                time.sleep(sleeptimeerror) 
                
        except socket.error:
                print 'Tidak konek node'
                #tidak pernah exit karena kalau tidak konek dilewati dan ngulang
                #5 detik kemudian
                #sys.exit()
                time.sleep(sleeptimeerror) 
        except Exception as e:
                print 'Error Message '+ str(e)
                print('Error on line {}'.format(sys.exc_info()[-1].tb_lineno), type(e).__name__, e)
                print "General Error Unexpected error:", sys.exc_info()[0]
                time.sleep(sleeptimeerror) 
        i+=1
        
       


Sync Data

Sync Data

 

ini dari cara kerjanya adalah .

selama koneksi ada maka dia akan sync data, ketika tidak ada ya tetep jalan cman gk sync data karena gk konek. ketika ada koneksi maka list data yang belum di sync kana disync secara berurutan.

sekian kira2.

nanti akan saya buatkan resume dalam bahasa inggris sekalian di ikutkan dalam project hackster.io.

 

Terima Kasih

Wassalamu’alikum Wr. Wb.

Iklan

SD Angkasa

SD Angkasa

 

http://tarechaspasial.ngrok.io/VisualisasiRadius.aspx

Yey…. Skripsi saya hidup lagi,…. saya udah bilang kan kalau saya mau menghidupkan lagi… udah hidup… bisa diakses di

http://tarechaspasial.ngrok.io/VisualisasiRadius.aspx

ada di server di rumah saya. dan ini bisa diakses kalau server rumah hidup dan dan koneksinya jalan.

btw ini visual dari SD Angkasa.. .tahu sd angkasa dimana ? dekat rumah he he ….

 

 


coba akses http://tarechaspasial.ngrok.io/

Oke week end project kali ini saya menghidupkan kembali skripsi saya agar bisa dimanfaatkan. eman kan kalau hanya nganggur gk kepakai. jadi saya gunakan lagi windows server 2008 32 bit. mau compile ulang 64 bit gk berhasil2. ya udah yang bisa dulu saja. setelah di setup di vm ware lalu saya aktifkan ngrok. http tunneling. pokoknya gitu deh. istilahnya teknis banget. lagi pula saya tidak sedang ingin nulis teknis.

oh ya ini bisa diakses lewat http://tarechaspasial.ngrok.io/ kalau komputer saya , jaringan, dan vm nya nyala sih, agak lambat kalau mau diakses. tapi lumayan lah. semoga bisa bermanfaat.

ada yang mau beli aplikasi ini ? Nasa Mungkin, Google Earth… ah nanti dlu.. yang penting bisa bermanfaat.

Visualisasi Gunung Semeru

Visualisasi Gunung Semeru

Virtual Maching dan HTTP Tunneling

Virtual Machine dan HTTP Tunnelin


failed

failed

 

seperti yang saya posting di halaman berikut https://tarecha.wordpress.com/publikasi-ilmiah/

mengenai skripsi saya, saya mencoba untuk menghidupkannya lagi di sistem 64 bit ( sebelumnya 32 bit sehingga memorynya terbatas ) namun mengalami kendala. siapa tahu nanti dibeli Google he he amiiiiin . ini kan dekat banget dengan Google Earth. jadi saya sudah ikuti ini http://www.mathworks.com/help/compiler_sdk/dotnet/advanced-configuration-of-a-webfigure.html?searchHighlight=webfigure

namun belum berhasil di tutorialnya

class="programlisting"><add assembly="WebFiguresService,
Version=2.14.0.0,
Culture=neutral,
PublicKeyToken=E1D84A0DA19DB86F"/>

 

sedangkan di web.config saya di matlab 2016a versinya 2.16.0.0 , masih harus cari2 nih gmana solusinya, mungkin tutorialnya masih versi lama dan belum update. bila ada yang tahu mohon info ya. saya juga udah tanya di community matlabnya.

<?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
    <connectionStrings>
        <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
    </connectionStrings>
    <system.web>
    <httpRuntime maxRequestLength="4000" maxQueryStringLength="5000" />
     <httpHandlers>
   <!--<add path="__WebFigures.ashx" verb="GET" type="MathWorks.MATLAB.NET.WebFigures.Service.Handlers.Factories.Http.WebFigureHttpHandlerFactory" validate="false" />-->
  </httpHandlers>
  <compilation debug="true" targetFramework="4.0">
            <assemblies>
                <add assembly="WebFiguresService, Version=2.16.0.0, Culture=neutral, PublicKeyToken=E1D84A0DA19DB86F"/>
                <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
                <add assembly="MWArray, Version=2.16.0.0, Culture=neutral, PublicKeyToken=E1D84A0DA19DB86F"/>
        <remove assembly="Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
      </assemblies></compilation>
        <authentication mode="Forms">
            <forms loginUrl="~/Account/Login.aspx" timeout="2880"/>
        </authentication>
        <membership>
            <providers>
                <clear/>
                <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/>
            </providers>
        </membership>
        <profile>
            <providers>
                <clear/>
                <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
            </providers>
        </profile>
        <roleManager enabled="false">
            <providers>
                <clear/>
                <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/"/>
                <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/"/>
            </providers>
        </roleManager>
    </system.web>
  <appSettings>
    <add key="PageInspector:ServerCodeMappingSupport" value="Disabled" />
  </appSettings>
    <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
        <modules runAllManagedModulesForAllRequests="true"/>
    <handlers>
      <add name="WebFigures" path="__WebFigures.ashx" verb="GET" type="MathWorks.MATLAB.NET.WebFigures.Service.Handlers.Factories.Http.WebFigureHttpHandlerFactory"/>
    </handlers>
  
  </system.webServer>
</configuration>


Assalamu’alaikum Wr. Wb.

hmmm udah 2 hari gk masuk kerja, sebelumnya 1 minggu gk masuk karena DB. saya paksain kerja dan ikut panitia famday… akhirnya jatuh sakit lagi >.< ada banya acara, habis famday ke nikahannya Pak Todi. terus mulai sakit habis transfer knowledge dengan HO dan SKB… karena AC nya terlalu dingin dan mulai batuk2..,, lupa kalau tidak saya matikan. oh ya tulisan ini menyambung yang ini ya https://tarecha.wordpress.com/2016/04/23/core-switch-l3-hp-procurve-5406/

tulisan ini tidak ada di buku ya. ini berdasarkan pengalaman. saya share ilmu dan pengetahuan yang saya miliki agar bisa jadi amal jariah yang pahalanya mengalir ;-), info sensitif sudah saya blur he he

 

Bersama Harimau

Bersama Harimau

Harimaunya lucu, tapi agak takut klo nggigit

 

Nikahan Pak TOdi

Nikahan Pak TOdi

hmmm foto nikahan…. kita kapan ? ^_^

Jadi kita punya 2 server radius, keduannya jalan bareng. bukan fail over. jadi ketika kita daftarkan MAC perangkat untuk autentikasi kita setting di 2 server tersebut. di HP Procurve ini jalan loadbalancing atau round robin tidak ada yang utama ataupun backup ( fail over) tergantung server mana loadnya yang lebih rendah. jadi harus daftarkan MAC di kedua server. namun kita harus mengedit file users.conf satu per satu di server kemudian restart servernya. masalahkan adalah ketika file di kedua server tidak sama akan menimbulkan masalah. misal di server A udah terdaftar dan di server B belum, ketika autentikasi lari ke server B karena loadnya lebih rendah makan akan dapat VLAN Guest.  file users.conf berisi daftar MAC dan dimasukkan ke VLAN berapa.

Edit file users.conf

Edit file users.conf

kemudian remote server satu per satu kemudian restart servicenya

restart service freeradius

restart service freeradius

 

cara diatas cukup mereportkan karena 2 kali kerja untuk itu saya pakai aplikasi win merge dan remote service menggunakan cmd

jadi daripada kita 2 kali remote server maka idenya adalah mengedit filenya di PC yang kita gunakan lalu restart servicenya di pc kita dengan catatan harus admin di servernya.

kita share dlu folder di masing2 server, di map folder lalu dibuka dengan win merge

win merge

win merge sebelah kanan adalah file users.conf dari server A di sebelah kiri dari server B

tinggal kita ketik di sebelah kiri lalu klik refresh (F5) akan muncul baris mana yang beda dengan blok kuning. lalu klik

all right copy semua ke kanan

all right copy semua ke kanan

semua akan tercopy ke kanan. lalu save. oh ya secara otomatis free radius akan membuat file users.conf.bak untuk backup

backup default free radius

backup default free radius

namun hanya menyimpan save an terakhir. bila dirasa riskan maka bisa ditambahi di fasilitas winmergenya biar setiap save bikin backup. karena kalau salah edit file ini bisa error dan bisa saja 1 jaringan yang terautentikasi jadi down

berikut settingnya

klik tanda kunci inggirs

klik tanda kunci inggirs

jadi setiap kali save akan bikin backup.

akan ada banyak backup . urutkan aja berdasarkan tanggal

backup dari winmerge

backup dari winmerge

 

lalu restart servicenya menggunakan ini lalu save .bat

script remote restart service

script remote restart service

bila hasilnya ada pendingnya, ulangi saja hingga hasilnya 1 stopend , lalu 4 running

Start pending stop pending

Start pending stop pending

saya tidak terlalu paham, kemungkinan ketika perintah itu dijalankan servicenya sedang berjalan. jadi nunggu prosesnya selesai baru dia akan stop atau start secara normal. tapi demi kepastian di ulangi lagi saja hingga statusnya sempurna 1 stoped dan 4 running .

 

ok

ok

 

dengan cara ini keuntungan yang diperoleh

  1. lebih praktis edit di satu tempat yang sama
  2. otomatis terbackup ketika save
  3. terhindar dari kesalahan bila file tidak sama / identik
  4. remote service tidak perlu remote servernya

 

demikian yang bisa saya share, semoga bermanfaat

Wassalamu’alaikum Wr. Wb.

 

Big Data

Posted: 22 Maret 2016 in Diskusi, programming

Assalamu’alaikum.

saya mau nuliskan resume untuk Kuliah Tamu Big data kemarin. untuk file presentasinya berikut Big Data for National Industry , file tersebut di share oleh Pemateri sehingga bisa didownload di link berikut http://bit.ly/BigDataUIN2016 . Tulisan saya bersumber dari materi Beliau.

Seminar Big Data UIN

Seminar Big Data UIN

saya buat resume nya sebagai berikut ya

Summary Seminar Big Data

21 Maret 2016

Oleh : Mochamad Agung Tarecha

 

Skema Sederhana BIG DATA

Skema Sederhana

Skema Sederhana

Sederhananya BIG DATA adalah proses pengumpulan data yang diproses sedemikian rupa sehingga dapat divisualisasikan agar human friendly yang kemudian digunakan sebagai dasar untuk pengambilan keputusan. Pengambilan keputusan ini tergantung culture perusahaan, apakah management (manusia), ataukah berpegang teguh pada data. Bila menggunakan data (apa kata data) maka bisa diproses lagi menjadi Sistem Pendukung Keputusan. Big Data digunakan bila pengambilan keputusan berdasarkan data. Sebenarnya hanya statistika sederhana namun proses dari awal pengumpulan data hingga visualisasinya menggunakan teknologi-teknologi aplikatif.

Misal menghitung customer life time value, setelah membeli produk X pada hari 1, berapa hari lagi customer membeli produk yang sama ? dalam setahun berapa kali beli produk X ? semakin lama semakin sering atau semakin jarang sehingga dalam setahun bisa sama sekali tidak membeli produk X ? bagaimana visualisasi datanya ? data-data tersebut dapat divisualisasikan kemudian dapat digunakan dalam pengambilan keputusan dari Big Data tersebut.

Namun tetap ada kelemahan dalam BIG DATA yaitu tidak semua data dapat di capture, misal sebuah produk Y memasang iklan baliho besar, dan terdapat kenaikan penjualan, berapa orang yang membeli produk Y karena melihat dan tertarik dengan baliho yang dipasang ? berapa orang yang harusnya membeli produk tersebut setelah melihat baliho sehingga biaya pemasangan baliho dapat tertutupi oleh laba penjualan produk sedangkan siapa yang membeli produk setelah melihat baliho tidak dapat di trace. Bisa diakali menggunakan kupon, sehingga dapat di trace pembelian berdasarkan baliho iklan yang dipasang. Namun hal tersebut tidak dapat diterapkan pada semua jenis produk.

Apa itu Big Data ?

Sebenarnya istilah “Big Data” hanyalah buzzwords. Istilah yang paling mendekati adalah Big Data è Data Driver

Apa itu Data Driven ?

Tools. Ability, and culture that acts on data. Dengan bahasa sederhananya bagaimana ketersediaan data diolah menggunakan tools dan digunakan sebagai pendukung pengambilan keputusan. Pada dasarnya bagaimana kultur, ketersediaan data, dan peralatan merupakan komponen Big Data.

Five V on Big Data merupakan penyusun dasar Big Data

  1. Volume è Data at Rest. Data umumnya berukuran sangat besar untuk disimpan. Dan tidak fit untuk di analisis dalam satu memory server
  2. Velocity èData in Motion. Data bergerak cepat mendekati near-time / real time
  3. Value èSetiap data bernilai dan berhubungan / berelasi
  4. Variety è Data in Many Forms. Data memiliki banyak bentuk, terstruktur maupun tidak terstruktur, teks, gambar, dan lain sebagainya,
  5. Veracity è Data in Doubt. Kebanyakan data tidak konsiten, membingungkan, dan tidak meyakinkan.
Gartner's hype Cycle

Gartner’s hype Cycle

Menurut Gartner’s Hype Cycle ternyata Big Data tidak seperti yang ekspektasikan, sebenarnya BIG DATA bukanlah hal yang wah sekali.

Big Data mayoritas yang dibutuhkan adalah analisa, dan mayoritas analisa berbasis Bussines Intelligence (BI), dan mayoritas yang dibutuhkan dalam BI adalah Data Gorvernance / tata kelola data yang baik, dan mayoritas yang dibutuhkan untuk tata kelola data yang baik adalah Data Engineering, dan mayoritas Data Engineering adalah use case yang spesifik berdasarkan kasus tertentu (tidak bisa dipukul rata satu teknik untuk semua masalah yang ada).

Sebenarnya BIG DATA tidak selalu membutuhkan Machine Learning, bisa diselesaikan dengan model statistika sederhana.

DATA DRIVEN

Dari tiga bagian utama data driven yang telah disebutkan di awal yaitu Mindset / Culture, Ability, dan Tools beriku resumenya

  1. Culture
  • Data : Bagaimana budaya mengolah data yang benar, berkualitas, dapat diakses.
  • People : Siapa yang mendesign metrics, ekstrak data, dan menganalisanya
  • Principles : Eksperimen berkelanjutan dan improvement, analisis
  1. Ability
  • Kemampuan bagaimana mengolah data menggunakan metode-metode yang ada diperlukan seperti Matematika statistik, visualisasi data penting agar mengentahui prespektif dari data, programming, data engineering, dan skill bisnis (terkait penggambilan keputusan)
  1. Tools
  • Tools dibutuhkan untuk mengolah data tersebut. Untuk memilihnya kita perlu mendefinisikan dahulu seperti pengolahan batch atau streaming, seberapa banyak data, seberapa cepat, menggunakan visualisasi data.
Leading Tools

Leading Tools

 

Semoga Bermanfaat.
Wassalamu’alaikum.

 


Prinsip – prinsip pemprograman SOLID

Oke kali ini saya akan share sedikit tentang prinsip-prinsip pemprograman.

saya berikan tutorialnya namun cuman komen sedikit saja. selebihnya silahkan baca sendiri ya.

tenang mungkin awal2 merasa bingung. tapi tenang saja. saya sendiri tidak memahaminya secara instan, butuh waktu setidaknya 3 bulan lebih untuk memahaminya bagi saya.
prinsip2 ini saya peroleh waktu bekerja di PT. Magic Softasia System http://www.magicsoft-asia.com/ , saya bekerja disini sewaktu kuliah, pas ada program PKL di kampus ya sudah sekalian saya “PKL” di tempat kerja saya, sangat efisien , dapat ilmu, dapat tambahan uang jajan he he . saya share kan nanti di bagian akhir.

Saya dibimbing oleh Pak I Made Ciptayasa yang sangat mahir dalam pemprograman, terima kasih Pak Sudah membimbing saya.

Prinsip pemprograman ini bisa disebut SOLID Principles silahkan buka link berikut tutorial mudahnya http://www.blackwasp.co.uk/SOLIDPrinciples.aspx

berikut tutorialnya https://dl.dropboxusercontent.com/u/80151151/paradigma.rar

 

oke anggap anda sudah bisa dasar2 pemprograman, lalu pernahkah berfikir ketika anda coding semakin lama semakin bertambah banyak, lalu dikemudian hari diperbaiki dengan menambah modul2 baru sehingga banyak sekali yang dirubah ? ya itulah, kalau coding hanya insert update delete view tabel itu mudah, tapi bagaimana membuat sebuah code program tidak ruwet dikemudian hari itu hal yang penting.

  1. Single Responsiblity Principle ( “S” dari SOLID) => Satu class harus punya satu tujuan, jangan anda tempatkan dalam 1 class banyak method yang berbeda meskipun method tersebut memiliki 1 tujuan yang sama atau saling berhubungan. Pastikan 1 kelas memiliki tanggung jawab tunggal,  namun bukan berarti 1 class berisi 1 method, hal ini berguna bila kemudian hari kode berkembang perubahan nya tidak menimbulkan bug tumbuh. Dengan 1 class 1 tanggungjawab / tujuan makan ketika berubah drastis. silahkan baca link berikut sebagai contoh http://www.blackwasp.co.uk/SRP.aspx\
  2. Open Close Principle ( “O” dari SOLID) =>Code harus terbukan untuk penambahan, tapi tertutup untuk modifikasi. misal anda punya modul begini
    int modul=1;
    if (modul==1)
    {
          modul_buka();
    }
    else if (modul==2)
    {
         modul_tutup();
    }
    else if (modul==3)
    {
         modul_pindah();
    } 
    
    

    ketika modul bertambah misal modul_diam() tentu Anda akan menambahkan if then baru untuk menampungnya kan ? if (modul==4) dan seterusnya. Dalam prinsip Open Close Principle , kode harus open dalam extension (penambahan) namun tertutup dalam modifikasi. Sehingga ketika menambah modul kita tidak merubah if then nya. untuk itu dibutuhkan Dependency Injector.silahkan lihat link berikut http://www.blackwasp.co.uk/OCP.aspx , untuk dependency injectornya bisa dilihat di link berikut http://www.blackwasp.co.uk/DependencyInjection.aspx

  3. Liskov Substitution Principle ( “L” dari SOLID) => definisi mudahnya “sebuah fungsi yang menggunakan kelas dasar dapat menggunakan kelas turunannya tanpa mengetahui bagaimana kelas turunan tersebut” . jadi ketika kelas turunannya berubah atau diganti makan fungsi yang menggunakan kelas diatas nya (kelas induk / superclass) tidak terpengaruh. contohnya anda punya fungsi yang menggunakan method dari kelas turunan dari superclass tersebut, ketika kelas turunannya berubah tentu fungsi tersebut harus berubah / diedit bukan ? 🙂 jadi dengan LSP ini anda menggunakan kelas bapaknya tapi menggunakan method anaknya, ketika anaknya berubah fungsi anda tidak terpengaruh untuk dirubah juga. lebih jelasnya silahkan baca http://www.blackwasp.co.uk/LSP.aspx
  4. Interface Segregation Principle ( “I” dari SOLID) => misal Anda punya class dengan banyak properti (variabel) , ada lebih dari satu kelas yang menggunakannya kelas dengan banyak properti tersebit namun banyak kelas yang menggunakannya itu tidak menggunakan semua. anda punya kelas contact dengan 4 properti (nama, alamat, email , telpon)  lalu digunakan oleh kelas pengirim email  hanya nama dan email, sedangkan kelas telpon cuman menggunakan nama dan telpon. tentu kelas email tidak membutuhkan properti telpon, sedangkan kelas telpon tidak membutuhkan properti email. dengan ISP maka menggunakan Interface untuk memisahkan mana yang digunakan oleh masing2 class . lebih jelasnya silahkan baca http://www.blackwasp.co.uk/ISP.aspx
  5.  Dependency Inversion Principle ( “D” dari SOLID) => modul tingkat tinggi (bapak) tidak bergantung pada modul tingkat rendah (anak). keduanya bergantung pada abstraksi. abstraksinya tidak bergantung pada rincian, tapi rincianlah yang bergantung pada abstraksi. jadi antar class tidak kaku dan saling tergantung karena bila ada penambahan misalnya, kelas yang berhubungan akan berubah juga. berikut silahkan baca di http://www.blackwasp.co.uk/DIP.aspx

ini laporan PKL saya, ada lengkap beserta programnya juga. saya terapkan di MultiDatabase Library yang intinya kita bisa ganti2 database tanpa merubah code 🙂  pakai Visual Studio 2010 : LAPORAN PKL LENGKAP

berikut versi pdf nya

 

dan terakhir … correct me if I’m wrong ^_^
semoga bermanfaat