Selasa, 30 Juni 2015

Tutorial Upload File ke Linux Server Menggunakan VB .NET

- 0 komentar
Disini saya akan menggunakan aplikasi SFTP yang biasa saya gunakan untuk meremote file yaitu WinSCP.
  1.  Download WinSCP Disini
  2. Install pada komputer
  3. Remote Server menggunakan WinSCP untuk mendapatkan SSH-RSA Key guna otentikasi nantinya. Formatnya seperti di bawah inissh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
  4. Jika sudah login, masuk ke menu “Command” lalu Server/Protocol Information
    Upload File Linux Server VB .NET 1
    lalu copy Server Host Key Fingerprint untuk digunakan bagi konfigurasi di Syntax VB kita.
  5. 1.       Kita pindah ke Visual Studio, buka project lalu masuk ke Tools à Library Package Manager àPackage Manager
    Akan tampil gambar seperti di bawah ini

  6. 1.       Install kembali WinSCP dengan mengetikan “Install-Package WinSCP” (Pastikan koneksi internet berjalan baik dan tunggu hingga selesai)
    Jika telah selesai maka kita tinggal masuk ke coding yang akan digunakan
 Public Function upload_file_to_server(ByVal filename As String)
        Try
            Dim mySessionOptions As New SessionOptions
            With mySessionOptions
                .Protocol = Protocol.Sftp
                .HostName = "HOSTNAME SERVER"
                .UserName = "USER"
                .Password = "PASSWORD"
                'Isikan langkah nomor 4 kesini
                .SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" 
            End With

            Using mySession As Session = New Session
                ' Connect
                mySession.Open(mySessionOptions)

                Dim stamp As String = DateTime.Now.ToString("yyyyMMdd", CultureInfo.InvariantCulture)
                Dim remotePath As String = "/var/www/html/foto/"
                Dim localPath As String = filename

                ' Manual "remote to local" synchronization.

                ' You can achieve the same using:
                ' mySession.SynchronizeDirectories( _
                '     SynchronizationMode.Local, localPath, remotePath, False, False, SynchronizationCriteria.Time, _
                '     New TransferOptions With { .FileMask = fileName }).Check
                If mySession.FileExists(remotePath) Then
                    Dim upload As Boolean
                    If Not File.Exists(localPath) Then
                        Console.WriteLine("File {0} exists, local backup {1} does not", remotePath, localPath)
                        upload = True
                    Else
                        Dim remoteWriteTime As DateTime = mySession.GetFileInfo(remotePath).LastWriteTime
                        Dim localWriteTime As DateTime = File.GetLastWriteTime(localPath)

                        If remoteWriteTime > localWriteTime Then
                            Console.WriteLine( _
                                "File {0} as well as local backup {1} exist, " & _
                                "but remote file is newer ({2}) than local backup ({3})", _
                                remotePath, localPath, remoteWriteTime, localWriteTime)
                            upload = True
                        Else
                            Console.WriteLine( _
                                "File {0} as well as local backup {1} exist, " & _
                                "but remote file is not newer ({2}) than local backup ({3})", _
                                remotePath, localPath, remoteWriteTime, localWriteTime)
                            upload = False
                        End If
                    End If

                    If upload Then
                        Dim myTransferOptions As New TransferOptions
                        myTransferOptions.TransferMode = TransferMode.Binary
                        Dim transferResult As TransferOperationResult
                        transferResult = mySession.PutFiles(filename, remotePath, False, myTransferOptions)
                        transferResult.Check()
                        MsgBox("Upload berhasil.", MsgBoxStyle.Information, "Server Information")
                    End If
                Else
                    MsgBox("File {0} Belum Ada.", MsgBoxStyle.Exclamation, "Peringatan")
                    Console.WriteLine("File {0} Belum Ada.", remotePath)
                End If
            End Using

            Return 0
        Catch ex As Exception
            Console.WriteLine("Error: {0}", ex)
            MsgBox(ex.Message)
            Return 1
        End Try
    End Function


[Continue reading...]

Sabtu, 21 Juli 2012

Struktur Data Non-Linear (Tree & Graph)

- 1 komentar

TREE
Tree ialah Kumpulan node yang saling terhubung satu sama lain dalam suatu kesatuan yang membentuk layakya struktur sebuah pohon. Struktur pohon adalah suatu cara merepresentasikan suatu struktur hirarki (one-to-many) secara grafis yang mirip sebuah pohon, walaupun pohon tersebut hanya tampak sebagai kumpulan node-node dari atas ke bawah. Suatu struktur data yang tidak linier yang menggambarkan hubungan yang hirarkis (one-to-many) dan tidak linier antara elemen-elemennya.

 
NODE ROOT
Node root dalam sebuah tree adalah suatu node yang memiliki hiarki tertinggi dan dapat juga memiliki node-node anak. Semua node dapat ditelusuri dari node root tersebut.
Contoh penggunaan struktur pohon :
- Silsilah keluarga
- Hasil pertandingan yang berbentuk turnamen
- Struktur organisasi dari sebuah perusahaan

 
ISTILAH DALAM TREE

 













Contoh Tree
Datanya ialah : MASR


Ancestor (R) = S,M
Descendandt (S) = R
Parent (A) = M
Child (M) = A,S
Sibling (A) = S
Size = 4
Height = 3
Root = M

Deklarasi simpul tree :
Strcut simpulpohon{
   Simpulpohon *induk;
  Simpulpohon *kiri;
  Simpulpohon *kanan;
  Char kata[20];    //Tipe data bisa disesuaikan
};

Kunjungan :
Pre-order, in-order, dan post-order traversal
Pre-order, in-order, dan post-order traversal mengunjungi setiap simpul dalam sebuah pohon dengan pengunjungan secara berulang-ulang pada sub pohon kiri dan kanan dari akarnya. Jika akarnya dikunjungi sebelum sub pohonnya, ini merupakan preoder. Jika akarnya dikunjungi sesudah sub pohonnya, ini dinamakan postorder dan jika akarnya dikunjungi di antara sub pohonnya, dinamakan inorder. In-order traversal sangat berguna dalam pohon biner terurut, dimana traversal ini mengunjungi simpul dalam urutan yang meningkat.
Kita contohkan kembali menggunakan contoh tree yang diatas,
Datanya ialah : MASR
 
 
Jika Pre-order maka data ketika dibaca yaitu : MASR
Jika Post-Order maka data dibaca : ARSM
Jika In-Order maka  data dibaca : AMRS

Download Program C++,Tree ,3 All-In-One Kunjungan . Selamat Mencoba !!!
Untuk Selanjutnya Graph masih belajar :)


Sumber : Antonius Rachmat C, S.Kom,  Ibu Yuli, Wikipedia
[Continue reading...]

Struktur Data Linear (Linked List Linear)

- 0 komentar

Struktur Data Linear ialah data yang dipresentasikan berhubungan dengan data lainnya dengan teratur (lurus) sehingga membentuk barisan antara data satu dengan data lainnya.
Linked List ialah suatu record data yang dihubungkan satu dengan lainnya menggunakan pointer.


Fungsi-fungsi yang dapat dipakai dalam operasi linked list adalah:
1.      Fungsi menambah simpul di belakang. Langkah-langkahnya:
a.       membuat simpul baru kemudian diisi info baru.
b.      simpul paling akhir dihubungkan ke simpul baru.
c.       penunjuk pointer akhir diarahkan ke simpul simpul baru.
2.      Fungsi menambah simpul di depan. Langkah-langkahnya:
a.       membuat simpul baru, kemudian diisi info baru.
b.      simpul baru dihubungkan ke simpul awal.
c.       penunjuk pointer awal diarahkan ke simpul baru.
3.      Fungsi menyisipkan simpul di tengah. Langkah-langkahnya:
a.       membuat simpul bantu, kemudian diisi info baru.
b.      menentukan di mana simpul baru akan ditambahkan, yaitu dengan menempatkan pointer bantu pada suatu tempat.
c.       pointer baru dihubungkan ke simpul setelah simpul yang ditunjuk oleh pointer bantu, kemudian penunjuk pointer bantu diarahkan ke simpul baru.
4.      Fungsi menghapus simpul di depan. Langkah-langkahnya:
a.       simpul bantu diarahkan pada simpul awal.
b.      simpul awal diarahkan ke simpul berikutnya.
c.       menghapus simpul bantu.
5.      Fungsi menghapus simpul di tengah. Langkah-langkahnya:
a.       meletakkan pointer bantu di sebelah kiri simpul yang akan dihapus.
b.      simpul yang akan dihapus ditunjuk oleh pointer lain, misalnya pointer hapus.
c.       pointer bantu diarahkan ke simpul yang ditunjuk oleh hapus, kemudian simpul hapus dihapus.
6.      Fungsi menghapus simpul di belakang. Langkah-langkahnya:
a.       meletakkan pointer bantu di sebelah kiri simpul yang akan dihapus.
b.      simpul yang akan dihapus ditunjuk oleh pointer lain, misalnya pointer hapus.
c.       pointer bantu, diarahkan ke simpul yang ditunjuk oleh hapus, kemudian simpul hapus dihapus.
7.      Fungsi mencetak list dengan membaca maju. Langkah-langkahnya:
a.       mengatur agar pointer bantu menunjuk simpul yang ditunjuk oleh pointer awal.
b.      setelah isi simpul dibaca dan dicetak, pointer bantu digerakkan ke kanan untuk membaca simpul berikutnya.
c.       proses ini diulang sampai pointer bantu sama dengan pointer akhir.
8.      Fungsi mencetak list dengan membaca mundur. Langkah-langkahnya:
a.       mengatur agar pointer bantu menunjuk simpul yang ditunjuk oleh pointer akhir.
b.      setelah pointer bantu menunjuk simpul akhir, baru dicetak.
c.       proses pencetakan dilanjutkan dengan mencetak isi simpul di sebelah kiri simpul akhir.
d.      proses selesai jika isi simpul paling awal telah selesai dicetak.
9.      Fungsi mencari data pada list. Langkah-langkahnya:
a.       data yang dicari disimpan dalam suatu variabel, misalkan elemen.
b.      membuat pointer bantu sama dengan pointer awal.
c.       isi simpul yang ditunjuk oleh pointer bantu dibandingkan dengan elemen. Jika sama, berarti data yang dicari ditemukan. Jika belum sama, maka pointer bantu dipindahkan ke simpul di sebelah kanannya dan proses perbandingan diulang. Proses ini diulang sampai data yang dicari ditemukan atau sampai pada simpul akhir

1. Single Linked List Non Circular

Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnya. Untuk pembentukan node baru, mulanya pointer next dan prev akan menunjuk ke nilai NULL.  Selanjutnya pointer prev akan menunjuk ke node sebelumnya, dan pointer next akan menunjuk ke node selanjutnya pada list.

Deklasari simpul :
Struct simpul{
    int angka;
    simpul *berikut;
            };

             a.     Tambah Depan
Prinsipnya ketika data baru datang atau akan ditambahkan maka head atau awal akan menunjuk pada data baru tersebut dan data baru tersebut menunjuk pada data yang lama. Sehingga data lama akan menjadi di bawah data baru.

void tambahdepan(int x)
{
 struct titik *baru;
 baru=new titik;
 baru->angka=x;
 baru->berikut=awal;
 awal=baru;
}

     b.   Tambah Belakang
Pada prinsipnya sama dengan antrian, siapa yang masuk dialah yang akan keluar terlebih dulu. Maka data lama akan tetap menjadi awal bagi data baru, sehingga data pertama kali masuk akan terus menjadi awal dan data baru akan terus menjadi setelah data sebelumnya.

void tambahbelakang(int x) {
 struct simpul *baru;
 baru=new simpul;
 baru->angka=x;
 if(awal==NULL){
  awal=baru;}
 else{
 akhir->berikut=baru; }
 akhir=baru;
 akhir->berikut=NULL;
 }

      c.   Tambah List di tengah
Tambah list ditengah ini berguna ketika kita telah menginputkan data ternyata terdapat data yang terlewat untuk diinputkan dan harus berada diantara data yang telah di inputkan. Untuk memudahkan pemahamannya saya akan memberikan langsung dengan pengisian datanya. Yang pertama terdapat fungsi sisip_isi() ini berfungsi untuk menginputkan data dan fungsi sisip_list(simpul *first, int x, int posisi) untuk menentukan data akan disimpan setelah data yang mana sehingga dapat diisi diantara data-data yang lainnya.
void sisip_list(struct simpul *first,int x,int posisi)
{
struct simpul *bantu,*baru;
baru = new simpul;
baru->angka=x;
bantu=first;
do
{
if (posisi!=bantu->angka) {bantu=bantu->berikut;}
}
while (bantu!=NULL && posisi!=bantu->angka);
baru->berikut=bantu->berikut;
bantu->berikut=baru;
}

void sisip_isi_list()
{
int cari;
int ganti;
cout<<"\nBilangan : "; cin>>ganti;
cout<<"\nDisipkan setelah : ";
cin>>cari;
sisip_list(awal,ganti,cari);
}

     d.   Hapus Tengah
Tidak jauh beda dengan isi list di tengah, kita membutuhkan 2 fungsi yang pertama untuk mengiput data yang akan dihapus dan fungsi yang akan menghapus list. Fungsi carihapus() akan menjadi fungsi untuk membawa parameter atau nilai yang akan dihapus sementara fungsi hapustengah(int info) akan menghapus data yang sesuai dengan isi dari info yang dibawa oleh fungsi carihapus().

void hapustengah(int info)
{
titik *bantu,*hapus;
bantu=awal;
while ((info!=bantu->berikut->angka) && (bantu->berikut!=NULL))
 {
  bantu=bantu->berikut;
 }
  hapus=bantu->berikut;
  bantu->berikut=hapus->berikut;
  delete hapus;

}

void carihapus()
{
int cari;
clrscr();
tampillist();
cout<<"\nData yang akan dihapus, Bilangan :";
cin>>cari;
hapustengah(cari);
cout<<"\nData menjadi :";
tampillist();

}


     e.  Hapus Depan
Hapus di depan sebenarnya sangat simple karena kita bisa langsung menghapus *awal, namun disela itu sebelum tugas kita menghapus *awal kita harus mengganti *awal dengan pointer berikutnya sehingga ketika ditampilkan, data masih akan terlihat.

Void hapusdepan()
{
Simpul *hapus;
Hapus=awal;
Awal=hapus->berikut;
Delete hapus;
}
  

     f.   Hapus Belakang
Tidak jauh beda dengan hapus depan, namu hapus belakang membutuhkan looping untuk mengetahui bahwa dia adalah simpul paling terakhir.

Void hapusbelakang()
{
Simpul *hapus, *bantu;
Bantu=awal;
                While(bantu->berikut->berikut!=NULL){
                                bantu=bantu->berikut;
                }
hapus=bantu->berikut;
bantu->berikut=NULL;
delete hapus;
}


    g. Hapus Semua
Hapus semua merupakan cara penghapusan paling sederhana, kita hanya menentukan kapan *hapus berisi null dan disitulah dia berhenti.

void hapus()
{
simpul *hapus;
hapus=awal;
while(hapus!=NULL){
 awal=hapus->berikut;
delete hapus;
hapus=awal;
}




2. Single Linked list Circular 
 Single Linked List yang pointer nextnya menunjuk pada dirinya sendiri. Jika Single Linked List tersebut terdiri dari beberapa node, maka pointer next pada node terakhir akan menunjuk ke node terdepannya.
Deklarasi simpul :
struct simpul{
     int angka;
     simpul *berikut;
};

       a.       Tambah Depan
 Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Untuk menghubungkan node terakhir dengan node terdepan dibutuhkan pointer bantu.

void tambahdepan(int x)
{
simpul *baru, *bantu;
baru = new simpul;
baru->angka=x;
baru->berikut=baru;
if(awal==NULL){
 awal=baru;
 awal->berikut=awal;
 }
else{
bantu=awal;
while(bantu->berikut!=awal){
  bantu=bantu->berikut;
  }
baru->berikut=awal;
awal=baru;
bantu->berikut=awal;
}
}
      b.      Tambah Belakang
Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk mengetahui data terbelakang, kemudian dikaitkan dengan data baru. Untuk mengetahui data terbelakang perlu digunakan perulangan.
void tambahbelakang(int x)
{
simpul *baru, *bantu;
baru = new simpul;
baru->angka=x;
baru->berikut=baru;
if(awal==NULL){
 awal=baru;
 awal->berikut=awal;
 }
else{
bantu=awal;
while(bantu->berikut!=awal){
  bantu=bantu->berikut;
  }
bantu->berikut=baru;
awal=baru;
baru->berikut=awal;
}
}



1.       3. Double Linked List Circular
          Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnya. Untuk pembentukan node baru, mulanya pointer next dan prev akan menunjuk ke dirinya sendiri.  Jika sudah lebih dari satu node, maka pointer prev akan menunjuk ke node sebelumnya, dan pointer next akan menunjuk ke node sesudahnya.
Deklarasi simpul :
Struct simpul{
      int angka;
      simpul *next;
      simpul *prev;
};
 
a.           a.  Tambahdepan
Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Dibutuhkan pointer bantu yang digunakan untuk menunjuk node terakhir (head->prev) yang akan digunakan untuk mengikat list dengan node terdepan.

void tambahdepan(int x){
simpul *baru, *bantu;
baru = new simpul;
baru->angka = x;
baru->next = baru;
baru->prev = baru;
if(awal==NULL){
awal=baru;
awal->next =awal;
awal->prev = awal;
}
else {
bantu = awal->prev;
baru->next = awal;
awal->prev = baru;
awal = baru;
awal->prev = bantu;
bantu->next = awal;
}
}

b         b. Tambah Belakang
Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk mengetahui data terbelakang, namun tidak diperlukan loop karena untuk mengetahui node terbelakang hanya perlu menunjuk pada head->prev saja. Kemudian dikaitkan dengan data baru. Untuk mengetahui data terbelakang perlu digunakan perulangan.

void tambahbelakang (int x){
simpul *baru,*bantu;
baru = new simpul;
baru->data = x;
baru->next = baru;
baru->prev = baru;
if(awal==NULL){
awal=baru;
awal->next = awal;
awal->prev = awal;
}
else {
bantu=awal->prev;
bantu->next = baru;
baru->prev = bantu;
baru->next = awal;
awal->prev = baru;
}
}
1.       4. Double Linked List Non-Circular

Double Linked List Non Circular adalah linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer yang menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev), serta sebuah field yang berisi data untuk node tersebut.
Deklarasi simpul :
Struct simpul{
     Int angka;
        simpul *next;
               simpul *prev;
};
 
a.       Tambah depan
Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan.

void tambahdepan(int x)
{
titik *baru;
baru=new simpul;
baru->nilai=x;
baru->next=NULL;
baru->prev=NULL;
if(awal==NULL){
        awal=baru;
        awal->next=NULL;
        awal->prev=NULL;
        }
        else{
        baru->next=awal;
        awal->prev=baru;
        awal=baru;
        }
}


b.      Tambah belakang
Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk mengetahui data terbelakang, kemudian dikaitkan dengan data baru. Untuk mengetahui data terbelakang perlu digunakan perulangan.

void tambahbelakang(int x)
{
titik *baru, *bantu;
baru=new simpul;
baru->nilai=x;
baru->next=NULL;
baru->prev=NULL;
if(awal==NULL){
        awal=baru;
        awal->next=NULL;
        awal->prev=NULL;
        }
        else{
        bantu=head;
while(bantu->next!=NULL){
bantu=bantu->next;
}
        bantu->next=baru;
        baru->prev=bantu;
        }
}


Download Contoh Program C++ nya Tambah Depan, Tambah Belakang, Tambah Tengah, dan Hapus All-In-One.
Selanjutnya Mengenai Struktur Data Non-Linear !!!
  


Sumber : Antonius Rachmat C, S.Kom,  Ibu Yuli
 
[Continue reading...]
 
Copyright © . Kumpulan Tutorial Sederhana - Posts · Comments
Theme Template by BTDesigner · Powered by Blogger