Rabu, 24 November 2021

Mengenal Penggunaan Perintah $ bash –init-file

Mungkin pembaca pernah (penasaran) melakukan perintah $ bash –help, dan belum tahu kegunaanya


user@localhost ~ $ bash --help
GNU bash, version 4.3.42(1)-release-(i686-redhat-linux-gnu)
Usage:	bash [GNU long option] [option] ...
		bash [GNU long option] [option] script-file ...
GNU long options:
	--debug
	--debugger
	--dump-po-strings
	--dump-strings
	--help
	--init-file
	--login
	--noediting
	--noprofile
	--norc
	--posix
	--rcfile
	--rpm-requires
	--restricted
	--verbose
	--version
Shell options:
	-ilrsD or -c command or -O shopt_option		(invocation only)
	-abefhkmnptuvxBCHP or -o option
Type `bash -c "help set"' for more information about shell options.
Type `bash -c help' for more information about shell builtin commands.


Adapun kegunaan pilihan –init-file adalah membuat interaktif baru disertai (membuat) pengaturan-pengaturan sebagai default untuk interaktif baru tersebut.


Jika pembaca masih belum paham/yakin betul apa itu interaktif (pada terminal Linux), bahwa (secara sederha) interaktif adalah penggunaan terminal yang sifatnya digunakan untuk melakukan/memasukkan perintah untuk berkomunikasi dengan sistem komputer, istilah lainnya adalah (program) interpreter.

Untuk lebih jelasnya, pelajari contoh berikut dalam membuat interaksi baru menggunakan pilihan –init-file.

Buat file untuk init:


#nama file: tes-init.sh

echo -e "\n\n[[ Selamat datang di interaksi baru... ]]\n\n"
PS1="Masukkan Perintah >> "
TES_VARIABEL="Ok.. anda memanggil saya"

# Pada interaksi ini anda tidak diizinkan atau tidak bisa menginput-
# angka 3, 5, 7
bind '"3":""'
bind '"5":""'
bind '"7":""'

kemudian jalankan/eksekusi file-init.sh tersebut dengan perintah:


user@localhost ~ $ bash –init-file tes-init.sh 
 


 

Ya, itu adalah (shell) interaktif di dalam interaktif, dimana intraksi pertama (pada dasarnya) tidak mempunyai hubungan pemberian nilai ke interaksi kedua, misalnya nilai variabel pada shell interaksi pertama, tidak bisa diambil di interaksi kedua, begitu juga sebaliknya. Interaksi pertama dengan kedua seperti ruang berbeda, meski dalam satu tampilan jendela terminal, sebagaimana pada contoh gambar diatas. Semacam menjalankan interaksi python d terminal.

Semoga bermanfaat


Minggu, 14 November 2021

Cara Menemukan Posisi Huruf/Karakter Dan Mengambil (beberapa) Karakter/Huruf Berdasarkan Posisi Pada Pemrogaman Bash

 Pembahasan mengenai mendapatkan posisi huruf (atau karakter) maupun mendapatkan (satu atau sekumpulan) karakter (atau huruf) dalam pembelajaran berbahasa inggris istilahnya “Substring Extraction”, secara bahasa (yang mungkin bisa dipahami secara awam) adalah menggali atau mengeluarkan apa yang didalam substring (sebuah atau serangkaian huruf/karakter yang merupakan sebuah nilai).

Rumus:
${string:position}
Contoh 1 :

user@localhost ~ $ string=abcABC123ABCabc
user@localhost ~ $ echo ${string:0}
abcABC123ABCabc
user@localhost ~ $ echo ${string:1}
bcABC123ABCabc
user@localhost ~ $ echo ${string:7}
23ABCabc
user@localhost ~ $ echo ${string:7:3}
23A
user@localhost ~ $ echo ${string:-4}
abcABC123ABCabc
user@localhost ~ $ echo ${string:(-4)}
Cabc
user@localhost ~ $ echo ${string: -4}
Cabc

Uraian:

Saat mengekstrak substring dengan cara diatas, maka perlu diketahui bahwa tiap karakter/huruf pada subtring mempunyai index, dan index pertama dimulai dari 0

a --> index ke 0
b --> index ke 1
c --> index ke 2
A --> index ke 3
B --> index ke 4
C --> index ke 5
1 --> index ke 6
…
…
…
c --> index ke 14
Jadi jumlah karakter ada 15 (14+1).
${string:0} menampilkan karakter dari index 0 (“a” awal) sampai index akhir (“c” akhir)
${string:1} menampilkan karakter dari index 1 (“b” awal) sampai index akhir (“c” akhir)
${string:7:3} menampilkan 3 karakter dari index 7, jadi berakhir di index 9
${string:-4} akan terbaca secara default (terambil semua nilai string)
${string:(-4)} menampilkan 4 karakter dari belakang (index terakhir)

${string: -4} sama dengan “(-4)” diatas, dan teliti lagi bahwa tidak sama dengan yang tanpa tanda kurung diatas. Disini antara “:” dan “-” terdapat spasi, sedangkan yang diatas tanpa spasi.

Cara ini juga bisa digunakan pada parameter $* atau $@, seperti:
echo ${*:2}
echo ${@:2}
echo ${*:2:3}

Selain cara diatas, terdapat cara lain dengan menggunakan “expr”. Penggunaan expr untuk mengekstrak bisa lebih luas lagi.

Rumus: expr substr $string $position $length
Contoh 2 :

user@localhost ~ $ string=abcABC123ABCabc
user@localhost ~ $ echo `expr substr $string 1 2`
ab
user@localhost ~ $ echo `expr substr $string 4 3`
ABC

Uraian:

Perhatikan perbedaan pengindexan dengan Contoh 1, jika pada Conroh 1 index pertama dimulai dari 0, sedangkan disini dimulai dari 1. Dengan expr bisa juga mengunakan regular expression untuk mencocokkan karakter dalam string.

Rumus:
expr match "$string" '\($substring\)' atau expr match "$string" '.*\($substring\)'
expr "$string" : '\($substring\)' atau expr "$string" : '.*\($substring\)'

Contoh 3 :

user@localhost ~ $ string=abcABC123ABCabc
user@localhost ~ $ echo `expr match "$string" '\(.[b-c]*[A-Z]..[0-9]\)'`
abcABC1
user@localhost ~ $ echo `expr "$string" : '\(.[b-c]*[A-Z]..[0-9]\)'`
abcABC1
user@localhost ~ $ echo `expr "$string" : '\(.......\)'`
abcABC1
user@localhost ~ $ echo `expr match "$string" '.*\([A-C][A-C][A-C][a-c]*\)'`
ABCabc
user@localhost ~ $ echo `expr "$string" : '.*\(......\)'`
ABCabc 


Semoga bermanfaat

Sabtu, 11 September 2021

Mengenal Penggunaan Property Children Pada Gambas

Children yang secara bahasa artinya “Anak”, merupakan Object Class Control yang menjadi properti dari Class Object induknya (Parent). Sedangkan Object induk/parent merupakan Class Object Container yang bisa berupa Form, HBox, Vbox, Panel, GridView, dll yang dapat menampung object-object lain yang menjadi anaknya/children seperti Label, TextBox, GridView, DirBox, bahkan object container itu sendiri.



Bisa dibilang bahwa property Children merupakan sebuah Class Object yang merujuk ke Class Object lain, artinya bekerja sebagai pointer yang menunjuk ke lokasi suatu object. Properti Children digunakan untuk mengambil dan memanipulasi nilai dari suatu Object dari “Anak” Parent/Induk. Contoh:  

' Gambas class file  

Public Sub Form_Open()  

Print VBox1.Children.Count  

Print VBox1.Children[2].Name  

Print Object.GetProperty(VBox1.Children[0], "Text")  

Print Object.GetProperty(VBox1.Children[2], "Text")  

If Object.GetProperty(VBox1.Children[1], "Text") = "Sawot" Then

'Merubah yang awalnya Text Children[0]/RadioButton1 = 

'"Jemblem" menjadi "Onde-Onde"  

Object.SetProperty(VBox1.Children[0], "Text", "Onde-Onde")  

Endif  

End 

Hasil: 

3 

TextBox1 

Jemblem 

Lupis Semoga dapat dipahami


 

Kamis, 19 Agustus 2021

Mengenal Collection, Objek Serupa Array Dengan Kata Kunci (Key/Index?) Bebas/Fleksibel ~Tutorial Gambas

Objek Class Collection bisa menjadi alternatif penampung data yang cara kerjanya mirip dengan Array yang nilai-nilai/data-data (yang ditampung) bisa dipanggil menggunakan Loop seperti For, While, Repeat, dll berdasarkan kata kunci (key) tiap-tiap data (tergantung karakter kata kunci yang digunakan). 
Dua perbadaan mendasar antara Array dan Collection
Array:
- Bisa 3 dimensi
- Index (yang menjadi kata kunci) berupa urutan angka (terurut) dengan tipe data Short atau Integer
Collection:
- Hanya satu dimensi
- Tidak mengunakan index (urutan) angka integrer atau short, melainkan berdasar kata kunci dengan tipe data string

Contoh:
 ' Gambas module file

Public Dino As Collection = ["sn": "senen", "sl": "seloso", "rb": "rebo"]
Private Ongko As New Collection


Public Sub Main()

Dim Datae As String
Dim No As Short
Dim Panganan As New Collection

Print "---- Contoh Pertama"
Print Dino["rb"]
For Each Datae In Dino
Print Dino.Key & " --> " & Datae
Next
Print Dino.Length & " (Jumlah data pertama Dino)" 'Ada 3
Dino.Add("Jumat", "jm") 'Menambah data
For Each Datae In Dino
Print Dino.Key & " --> " & Datae
Next
Print Dino.Length & " (Jumlah data kedua Dino)" 'Ada 4
Dino.Remove("sn") 'Menghapus
For Each Datae In Dino
Print Dino.Key & " --> " & Datae
Next
Print Dino.Length & " (Jumlah data ketiga Dino)" 'Ada 3
'Cek apakah ada data koleksi dengan Datae tersebut
If Dino.Exist("sb") Then
Print "Ada"
Else
Print "tidak Ada"
Endif
Print "\n"

Print "------ Contoh kedua"
Print Ongko.Length & " (Jumlah data pertama Ongko)" 'ada 0
Ongko = ["1": "siji", "2": "loro", "3": "telu"]
For No = 3 DownTo 1
Print Ongko[No] & " --> " & No
Next
Print Ongko.Length & "(Jumlah data kedua Ongko)"
Print Ongko.Count
Ongko.Clear 'mebersihkan/menghapus semua data
Print Ongko.Length & "(Jumlah data ketiga Ongko)\n\n"

Print "------ Contoh kedua"
Panganan.Add("sego pecel", "sg")
Print Panganan.Count
Print Panganan["sg"]
Panganan = ["gd": "gado-gado", "r": "rawon"]
'Data sego pecel hilang ditimpa 2 data baru diatas
For Each Datae In Panganan
Print Panganan.Key & " --> " & Datae
Next
Print Panganan.Length

End
Catatan: 
Perhatikan saat pendeklarasian variabel/objek “Dino”, “Ongko” dan “Panganan”, yang Ongko dan Panganan menggunakan “As New” sedangkan yang Dino tidak. Namun Dino diberi data secara langsung saat pendeklarasian maka sudah dianggap membuat objek baru, sehingga tidak perlu menulis “New” saat pendeklarasian.As New” peruntukkan (variabel) objek baru yang merujuk pada Class seperti Collection, TextBox, ValueBox, dkk, sedangkan yang tanpa “New” untuk membuat variabel biasa dg type data String, Integer, Short, Float, Variant, dkk.

 

Kamis, 18 Juni 2020

Macam-Macam (Bentuk) Perulangan Pada Gambas (Do, For, Repeat, While, Loop, Each, Until, Wend, Next, Break, Continue)


Ada tiga bentuk perulangan pada Pemrogaman Gambas berdasarkan jenis perintahnya, yaitu : Do, For, Repeat, While.

*** Perulangan Do ***
Perintah perulangan Do diakhiri dengan Loop.
Pada dasarnya perulangan Do strutukrnya sama dengan While dan Repeat.

Contoh menggunakan While:

Public Sub Main()

 Dim a As Integer = 1

 Do While a <= 5
    Print "Ngopi Mbak"; a
    Inc a
 Loop
End

Hasil:
Ngopi Mbak 1
Ngopi Mbak 2
Ngopi Mbak 3
Ngopi Mbak 4
Ngopi Mbak 5
Contoh mirip perulangan Repeat

Public Sub Main()

 Dim b As Integer
 b = 3
 Do
    Print "Nasi Goreng"; b
    Inc b
 Loop Until b = 6
End

Hasil:
Nasi Goreng 3
Nasi Goreng 4
Nasi Goreng 5
Nasi Goreng 6

*** Perulangan For ***
Perintah perulangan For diakhiri dengan perintah Next.

For – To – Next
Merupakan perulangan meningkat, yakni dari angka kecil ke angka besar.

Public Sub Main()
   Dim n As Byte
   For n = 5 To 10
     Print “Ke-” & n
   Next

End

Hasil:
Ke-5
Ke-6
Ke-7
Ke-8
Ke-9
Ke-10

For – DownTo – Next
Merupakan perulangan menurun, yakni dari angka besar ke angka kecil.

Public Sub Main()
   Dim z As Byte
   For z = 6 DownTo 2
     Print “Angka-” & z
  Next

End

Hasil:
Angka-6
Angka-5
Angka-4
Angka-3
Angka-2

Peringatan!
Perlu diketahui dan hati-hati saat menggunakan perulangan For-DownTo jika angka terkecilnya adalah Nol, maka akan terjadi perulangan terus-menerus jika tidak ada kondisi yang menghentikannya.

Public Sub Main()
   Dim s As Byte
   For s = 3 DownTo 0
     Print s
     ‘Perintah menghentikan perulangan
     If s = 0 Then Break
   Next

End

Hasil:
3
2
1
0


For – Each – Next
Merupakan perulangan untuk yang umumnya untuk menampilkan data array.

Public Sub Main()

   Dim n As Short
   Dim nama As String[] = ["Wagimin", "Paijo", "Wiwik", "Sulastri"]
   For Each nama
     Print "Nama ke-" & n & ": " & nama[n]
     Inc n
   Next

End

Hasil:
Nama ke-0: Wagimin
Nama ke-1: Paijo
Nama ke-2: Wiwik
Nama ke-3: Sulastri

Nb: “n” digunakan sebagai index array.


*** Perulangan Repat ***
Perintah perulangan Repeat diakhiri dengan Until
Pada perulangan ini, kontrol/ekspresi diletakkan di akhir

Public Sub Main()

   Dim t As Integer
   Repeat
     Print Timer
   Until Timer > 10

End


*** Perulangan While ***
Perintah perulangan While diakhiri dengan Wend.

Public Sub Main()
 
 Dim a As Integer

 a = 1

 While a <= 10
    Print "Assalamualaikum"; a
    Inc a
 Wend
End

 *** Perulangan Procedure ***
Merupakan perulangan klasik yang menggunakan procedure untuk melakukan perulangan
Public Sub Main()
   Prosedurku(0)
End


Private Sub Prosedurku(Angka As Byte)
   If Angka < 4 Then
      Print "Angka ke-" & Angka
      Inc Angka
      Prosedurku(Angka)
   Endif
End
*** Catatan ***
Dalam perulangan juga terdapat kontrol berupa perintah Break untuk menghentikan perulangan, dan Continue untuk mengabaikan. *tidak berlaku untuk perulangan procedure.

Contoh Break:

Public Sub Main()

 Dim v As Short
 For v = 0 To 10
      Print "Bismillaahirrohmanirrokhiim " & v
      If v = 3 Then Break
   Next

End
Hasil:
Bismillaahirrohmanirrokhiim 0
Bismillaahirrohmanirrokhiim 1
Bismillaahirrohmanirrokhiim 2
Bismillaahirrohmanirrokhiim 3
Contoh Continue
Public Sub Main()

 Dim v As Short
 For v = 2 To 5
      If v = 3 Then Continue
      Print "Alhamdulillaah " & v
   Next

End
Hasil:
Alhamdulillaah 2
Alhamdulillaah 4
Alhamdulillaah 5
Perhatikan bahwa angka 3 diatas hilang
Nb: Letak perintah Break/Continue (sebelum/sesudah Print) berpengaruh pada hasil.


Semoga bermanfaat.

Senin, 27 April 2020

Kejanggalan Event ComboBox_Click Dipengaruhi Oleh Penentuan Nilai ComboBox.Text Pada Event Form_Open ~Tutorial Gambas


Hal yang tak terduga yang penulis temukan saat menggunakan object ComboBox untuk tugas tertentu, yaitu dalam satu sisi penulis menentukan nilai list ComboBox pada event Form_Open, lalu menentukan juga nilai yang ditampilkan dari salah satu item tersebut (pada Form_Open). Sedangkan dalam sisi lain penulis juga menulis program pada event ComboBox_Click untuk melakukan tugas tertentu saat data list pada ComboBox dipilih. Diluar dugaan (penulis), code program pada event ComboBox_Click itu juga dijalankan pada penentunan nilai ComboBox pada event Form_Open. Artinya ComboBox_Click dieksekusi saat form dijalankan pertama kali.
Contoh:
Buat Form sperti berikut


Code pada Class:

' Gambas class file

Public Sub Form_Open()

   ComboBox1.List = ["f", "r", "g", "y"]
   ComboBox1.Text = "g"
   'disini nilai ComboBox1_Click sudah dijalankan

   'ditandai dengan terisinya nilai pada TextBox1.Text

End

Public Sub ComboBox1_Click()

   If ComboBox1.Text = "f" Then
     TextBox1.Text = "f"
   Else If ComboBox1.Text = "r" Then
     TextBox1.Text = "r"
   Else If ComboBox1.Text = "g" Then
     TextBox1.Text = "g"
   Endif

End

hasil dari eksekusi diatas nilai pada TextBox1.Text langsung terisi saat Form pertamakali dieksekusi/ditampilkan. Padahal mestinya TextBox1.Text akan terisi saat ComboBox1 diClick.
Entah ini salah satu bug atau memang dibuat seperti itu. Percobaan ini dilakukan di Gambas 3.8.4

Rabu, 11 Maret 2020

Menyimpan File Gambar Ke Database MySql Tipe Data Blob dan Menampilkannya Kembali ~Tutorial Gambas


Menyimpan file disini sebenarnya bisa berupa berbagai macam file seperti gambar (jpg/jpeg, bmp, gif, dll), pdf, doc, dll. Ada 3 cara yang umum dilakukan oleh pemrogam untuk menyimpan data file ke dalam database, yakni:

Cara 1 : Hanya menyimpan data lokasi/path file.
Cara ini sangat mudah dan hemat memori pada database. Kelemahannya adalah proses banckup memerlukan usaha yang tidak sederhana dalam mengatur/memrogammnya.

Cara 2 : Mengenkrip/encode data file (berdasarkan data biner).
Cara ini biasanya dilakukan oleh pemrogam yang belum tahu cara menyimpan data file (biner) sehingga mengakali dengan cara merubah data biner ke format yang mudah dimasukkan kedalam database (metode encrypt). Biasanya menggunakan enkrip Base64. Cara ini adalah yang paling lambat daripada dua cara disini dalam proses penyimpanan dan menampilkannya kembali.

Cara 3 : Menyimpan file berdasarkan data binarinya.
Cara ini yang biasanya banyak dicari oleh pemrogram pada bahasa program yang dikuasainya. Metode akan lebih lambat dari cara 1 dan lebih cepat dari cara 2. Cara ke 3 inilah akan dibahas pada tutorial ini.

Misal telah dibuat database.
Nama database = tesmasukkanfile
Nama Table = tesblob (hanya punya 1 kolom)
Nama Kolom = gambar (tipe data MEDIUMBLOB)

Contoh modul untuk koneksi ke database dengan nana “Dataku”.

' Gambas module file

Public db As New Connection


Public Function Koneksi() As Boolean

   With db
     .Close
     .Type = "mysql"
     .Host = "localhost"
     .Login = "root"
     .Password = "passwordku"
     .Name = "tesmasukkanfile"
     .Open
   End With
   Return True
   Catch
     Message.Warning("tidak terhubung kedatabase", "Ok")
   Return False

End


Memasukkan file gambar (jpg) ke database MySql

' Gambas module file

Public Sub Main()

   Dim DataGambar As String
   Dataku.Koneksi
   DataGambar = File.Load(System.User.Home &/ "Coba.png")
   ‘Sama dengan /home/pengguna/Coba.png. Boleh juga ambil dari direktori lain
   Dataku.db.Exec("INSERT INTO tesblob VALUES(&1)", DataGambar)

End


Mengembalikan/menampilkan gambar dari database Mysql

' Gambas module file

Public Sub Main()

   Dim Rs As Result
   Dataku.Koneksi
   Rs = Dataku.db.Exec("SELECT gambar FROM tesblob LIMIT 1")
   ‘Data yang diambil diletakkan di /tmp. Boleh juga diletakkan di direktori/folder lain
   File.Save("/tmp/datayangdiambil.png", Rs!gambar)
   ‘Setelah diletakkan di /tmp, kemudian ditampilkan
   Desktop.Open("/tmp/datayangdiambil.png", True)
   ‘Menghapus file data gambar tersebut
   Kill "/tmp/datayangdiambil.png"

End


Mudah-mudahan dapat dipahami.