-->
I'm joko purnomo./Cybersecurity Specialist/

I'm joko purnomo./Cybersecurity Specialist/

Hi! My name is Joko Purnomo. I am a Cybersecurity Specialist. I work to design, improve, and install for integrated system (people, material, information, equipment, and energy). Skilled in Cybereason, Group IB, IBM QRadar, and Wazuh to specify, predict, and evaluate optimal system build.

Kunjungi profil

ABOUT ME

Resume

Personal info

Personal info

2

years of experience

3

completed projects

4

Happy customers

1

awards won


My Skills

88%
html
90%
JavaScript
98%
CSS3
68%
React
71%
Java
80%
EDR
75%
SIEM
71%
Ethical Hacking

Certification & Education

  • EC-Council Certified Incident Handler
    2025 - 2028
    EC-Council Certified Incident Handler

    Plan, Record, Triage, Notify, and Contain.

  • Digital Forensics Essentials (DFE) v1
    2023 - 2026
    Digital Forensics Essentials (DFE) v1

    Essential Practices, Principles, and Methodologies.

  • AWS Solution Architect - Associate
    2023 - 2026
    AWS Solution Architect - Associate

    Operational Excellence, Security, Reliability, Performance Efficiency, Cost Optimization, Sustainability.

  • Enigma Camp
    2024
    Enigma Camp

    Java Programming

  • Purwadhika Digital Technology School
    2021
    Purwadhika Digital Technology School

    Fullstack Web Development

  • Institut Teknologi Indonesia
    2013 - 2017
    Institut Teknologi Indonesia

    Industrial Engineering

my portfolio

Works

get in touch

Contact

Contact Details

Feel free to get in touch with us. we always open to discussing new projects, creative ideas or opportunities to be part of your visions.

my products

Product

Cari Blog Ini

Melakukan Strategi Digital Marketing

Ada 12 area yang harus dikuasai oleh seorang digital marketing spesialis strategis, yaitu google ads, facebook ads (termasuk instagram), SMM (social media marketing), youtube marketing, SEO (search engine optimization), content marketing, email marketing, web analytics, messengers (whatsapp, telegram), mobile marketing, conversion optimization, dan customer funnel. Penguasaan dari 12 area tersebut perlu dilewati secara gradual atau perlahan untuk mendapatkan kemampuan memahami kondisi pasar.

Google adsense merupakan platform periklanan yang dibuat oleh google. Tidak dapat dipungkiri sampai tahun 2022 google masih menjadi mesin pencari yang paling banyak dikunjungi oleh masyarakat internet. Karena banyaknya pengunjung maka di sana terbentuk pasar, akibat adanya pasar maka akan terbentuk kebutuhan atau permintaan. Akhirnya permintaan itu disediakan oleh produsen sehingga terjadi ekonomi digital. Banyaknya pengunjung itu juga memberikan kesempatan untuk mengenalkan produk dari setiap perusahaan melalui iklan. Perhatikan cara membuat iklan pada google ads di bawah:

  1. Buat akun google ads di https://ads.google.com/home/
  2. Tentukan tujuan iklan
  3. Buat iklan
  4. Metode pembayaran:
    • Klik pembayaran > info pembayaran
    • Klik tambahkan metode pembayaran
    • Masukan informasi rekening bank
    • Simpan
  5. Pembuatan iklan di google berhasil!

Kalau google terkenal sebagai search engine maka facebook terkenal sebagai social media. Keterkenalan yang ada pada keduanya itu yang memungkinkan adanya iklan, dengan demikian selain ada google adsense maka ada juga facebook adsense. Perhatikan cara membuat iklan pada facebook adsense di bawah:

  1. Buat akun facebook ads di https://business.facebook.com/
  2. Tentukan tujuan iklan
  3. Buat iklan
    • Masuk ke halaman iklan untuk bisnis
    • Buat dan tentukan iklan
      • Anggaran
      • Jam tayang
      • Audiens
  4. Metode pembayaran:
    • Facebook biasanya akan memberikan billing setiap tanggal 21 per bulannya
    • Buka pengaturan pembayaran > tambahkan metode pembayaran
    • Pilih metode yang bisa dilakukan
    • Ikuti instruksinya
  5. Pembuatan iklan di facebook berhasil!

Google dan Facebook merupakan dua raksasa yang menguasai pasar di dunia internet setidaknya hingga 2022. Secara sederhana langkahnya adalah dibuat jenis iklannya apakah teks atau video kemudian di post di Google ads atau Facebook ads, lalu lakukan pembayaran. Namun ada teknik lain seperti SMM atau social media marketing yang memanfaatkan sosial media seperti instagram dan twitter. Penggunaan sosial media perlu dilakukan secara bijak, karena promosi melalui sosial media bisa berdampak kurang baik jika dilakukan tanpa pemahaman etika.

sumber: facebook ads

Selain itu perlu dimanfaatkan youtube untuk membuat sebuah marketing. Caranya dengan memperhatikan kompetitor yang telah membuat youtube marketing kemudian membuat channel yang telah dirancang sebelumnya. Jika perusahaan memiliki website maka ada opsi juga untuk melakukan SEO atau search engine optimization dengan memanfaatkan riset kata kunci. Dengan kata kunci tersebut akan mendukung terbentuknya content marketing. Jika audiens berhasil tertarik, hal pertama yang dilakukan agar audiens mau memberikan informasi tentang dirinya minimal email. Dari pengetahuan email ini bisa didapatkan opsi email marketing.

Terciptanya audiens di website akan mendorong untuk membuat sebuah analisis berbasis website, seperti tombol apa yang biasanya ditekan oleh audiens hingga halaman mana yang paling sering dikunjungi. Ketika audiens mengkliknya alangkah lebih baik dipersiapkan messenger yang tepat. Sampai di sini masih bersifat website teknologi. Perlu dicatat bahwa kebanyakan manusia memegang smartphone yang tentunya memiliki aplikasi di dalamnya. Mobile marketing menjadi hal yang perlu dipertimbangkan. Setelah teknologi website dan mobile dilakukan maka diperlukan evaluasi dalam bentuk conversion optimization dan memahami customer tunnel. Dengan keduanya diharapkan customer dapat bertahan dan kemudian meningkat.




ref:
https://www.w3schools.com/python/default.asp

Teknologi IFSAR

IFSAR merupakan kependekan dari Interferometric Synthetic Aperture RADAR yang termasuk salah satu teknologi di bidang GIS atau Geographic Information System. Dasar utama dari teknologi ini adalah RADAR atau Radio Detection and Ranging. Gelombang radio ditransmisikan sebagai pulse berkekuatan tinggi dari energi gelombang mikro. Antena akan menerima porsi dari transmisi energi dalam bentuk titik-titik dari target, sedangkan prosesor akan mengukur intensitas dan waktu tunggu dari pengembalian sinyal tersebut.

SAR atau Synthetic Aperture RADAR merupakan penggambaran radar yang menggunakan kombinasi geometri yaitu mendeteksi secara langsung dan tidak langsung (not nadir). Selain menggunakan kombinasi geometri SAR juga melakukan pemrosesan sinyal untuk memperbaiki resolusi di luar batasan dari fisik antena aperture. Sistem dari SAR sangatlah kompleks. Dengan 2 meter antenna bisa dibuat secara efektif sintesis 600m antenna.

Interferometric SAR yang merupakan teknik powerful untuk mengembangkan digital data dari sebuah DEM atau digital elevation model serta gambar orthorectified. Secara sederhana Interferometric SAR melakukan 2 objek perekaman, yaitu:

  1. Amplitude: kekuatan dari transmisi yang merefleksi kembali
  2. Phase: waktu tunggu dari kembalinya sinyal atau seberapa panjang waktu yang dibutuhkan sinyal SAR untuk meninggalkan sensor, berinteraksi dengan medan, dan kembali lagi ke perekam

Sedangkan Interferometric SAR sebagai sebuah sistem akan memproduksi:

  1. Magnitude Image: gambar radar dibuat dari amplitudo radar
  2. Interferogram: pixel per pixel berbeda
  3. Coherence Image: mengukur seberapa baik interferometer bekerja
  4. DEM: digital elevation model digenerasi dari fase interferometri

DEM atau digital elevation model yang dihasilkan oleh Interferometric SAR termasuk pada DSM atau digital surface models, DTM atau digital terrain model, dan ORI atau orthorectified radar image. Yang dimaksud DSM itu adalah model topografi termasuk semua fitur seperti bangunan dan pepohonan, sedangakan DTM menghapus semua fitur tersebut termasuk air sehingga hanya menyajikan medannya. Yang dimaksud ORI adalah gambaran hitam putih dari surface bumi yang mengoreksi distorsi pada geometri. Nah, kemudian DSM dan DTM ini dibuat dengan perangkat lunak IES atau interferrometric editing system. IES ini mengedit data yang berupa SRTM atau shuttle radar topography mission yang dikembangkan secara koperasi bersama Boeing atau Autometric.

sumber: anonim

IES memungkinkan untuk melakukan editing secara penuh terhadap objek digital elevation model secara terintegrasi dengan 2 mayor komponen, yaitu:
  1. Interactive Editing Tools
    • Classification editing
    • Edit DSM
    • Edit DTM
    • Quality control
  2. Database
Sebelum melakukan editing dari objek DEM, perlu diklasifikasikan objek tersebut apakah termasuk bareground dan obstructed. Kemudian akan ditinjau secara surface, setelah surface selesai maka akan ditinjau secara terrain. Kedua tinjauan, yaitu surface dan terrain merupakan kunci dari produk DEM. Setelah berhasil maka akan dilakukan penyaringan kualitas atau biasa disebut quality control. Di bagian qulity control ini dilakukan DTM review error kemudian penghalusan gambar. Jika semua telah berhasil kemudian data disimpan ke dalam database. Database ini masih bersifat mentah sehingga untuk membangkitkan DEM diperlukan mesin pembangkit.

Teknologi Interferometric SAR ini banyak diterapkan pada bidang energi, perekayasaan, pemerintahan, manajemen risiko, telekomunikasi, sumber daya air, hingga otomotif.




ref:
intermap

Python Programming

Tujuan dari programming adalah automation. Bahasa pemrograman itu ada 2 jenis, yaitu interpreter dan compiler. Maksud dari interpreter adalah bahasa pemrograman yang dapat di built meskipun masih ada error di dalamnya sehingga biasanya ketahuan ada error saat aplikasi digunakan. Sedangkan maksud dari compiler artinya bahasa yang harus benar terlebih dahulu atau tanpa error baru bisa di built menjadi aplikasi. Python berkategori bahasa pemrograman interpreter. Bahasa python dibuat oleh Guido van Rossum di Belanda yang merupakan kelanjutan dari bahasa ABC. Python ditujukan untuk general purpose sehingga memungkinkan pengembangan web, mobile, dan data science.

Kalau di JavaScript untuk melihat hasil kode dapat menggunakan syntax console.log() sedangkan di Python itu menggunakan print(). Istilah fundamental dalam bahasa Python ada 4, yaitu statements (satu baris kode), variables (penyimpan data), literals (data yang disimpan di dalam variabel), dan operators (pengoperasian data). Mirip seperti bahasa pemrograman high level lainnya variabel dalam Python tidak boleh dibuat sama dengan fungsi bawaan yang ada di Python. Dalam Python ada whitespace sehingga space atau tab itu memiliki makna. Untuk membuat comment dapat menggunakan (#..(comment)) dan ('''.(comment).''').

Khusus pada Python pembuatan variabel hanya boleh mengandung alfabet, angka, dan underscore (_). Seperti JavaScript awalan tidak boleh angka dan juga mengandung case sensitive. Yang penting untuk diketahui dala tipe data Python adalah integer(float), str, dan boolean. Tipe integer maksudnya adalah tipe data yang bersifat diskontinu atau bahasa mudahnya tidak desimal, sedangkan tipe fload adalah tipe data yang bersifat kontinu atau bahasa mudahnya desimal. Pada tipe data str atau string ini mirip dengan yang ada di JavaScript, begitu juga boolean yang mengandung true atau false. 

Di aritmetika ada yang sedikit berbeda antara JavaScript dan Python seperti operator //, di JavaScript operator tersebut tidak ada sedangkan di python operator tersebut bermakna pembagian yang akan menghasilkan nilai integer atau pembulatan. Perhatikan contoh di bawah:

  • print(8/3) -> 2.6666666
  • print(8//3) -> 2
Dengan demikian operator // adalah pembagian dengan pembulatan ke bawah atau floor. Pada comparison atau perbandingan berbeda juga dengan JavaScript yang ada operator ===. Di Python sama dengan maksimum hanya 2. Untuk memudahkan di Python juga ada operator is not dan is.. Perhatikan contoh di bawah:

  • print(8 is not 5) -> True
  • print(8 is 5) -> False

Di logical Python mirip seperti di JavaScript, dan yang paling utama adalah or, and, dan not. Selain itu di python juga menganut konsep assignment, contohnya:

  • angka = 1
  • angka = angka + 1
  • print(angka) -> 2

Pada kondisional statements di Python memiliki bentuk yang berbeda dengan JavaScript, perhatikan contoh:

  • if(6 > 5):
  •     print('Benar')
  • else:
  •     print('Salah')

Sedangkan untuk kondisional yang mengandung else if:

  • if(6 > 5):
  •     print('Benar')
  • elif(6 < 5):
  •     print('Salah')
  • else:
  •     print('Aneh')

Kalau di JavaScript bukan elif melainkan else if. Walaupun demikian memiliki alur yang sama. Dengan demikian perbedaan dua bahasa ini ada pada cara penulisan syntaxnya. Selain di kondisional, perbedaan juga terlihat di looping. Di Python looping ada 2, yaitu for dan while. Perhatikan contoh di bawah:

  • list_karyawan = []
  • for karyawan in list_karyawan:
  •     if(karyawan == 'Ana'):
  •         print('Ana')

Penjelasan dari looping for di atas adalah, untuk karyawan di dalam list karyawan. Jika karyawan itu bernilai string ana maka print ana. Sedangkan format dari while looping adalah:

  • data = 0
  • while data < 10:
  •     print(data+1)
  •     data += 1

Penjelasan dari looping while di atas adalah, selama da lebih kecil dari 10, lakukan cetak data+1 kemudian setiap satu kali looping tambahkan data sebanyak 1. Karena looping ada 2, maka akan menjadi penting pemilihan looping. Dalam prakteknya looping while sebaiknya dihindari karena rentan terjadi looping yang bersifat infinite. Apabila hal ini terjadi kemudian tidak terdeteksi lebih dini maka ini akan terus melakukan programming dan pada akhirnya akan meningkatkan cost.

Selanjutnya di Python struktur data yang paling fundamental untuk diketahui ada 3, yaitu list, tuple, dan dictionary. Berbeda dengan JavaScript yang ada array dan object. List pada Python mirip dengan array pada JavaScript sedangkan dictionary pada Python mirip dengan Object, nah tuple ini yang sama sekali berbeda. Di JavaScript data object tidak akan berubah urutan sedangkan di Python data dictionary mungkin akan berubah urutannya. Oleh sebab itu data dictionary tidak menggunakan indeks tetapi menggunakan kata kunci atau key. Ini yang membedakan antara dictionary pada Python dan object pada JavaScript. Perhatikan contoh di bawah:

  • # data list
  • list = [1, 2, 3, 4]
  • # data tuple
  • tuple = (1, 2, 3, 4)
  • # data dictionary
  • dictionary = {'a' : 1, 'b' : 2, 'c' : 3}

  • print(list[0])
  • print(tuple[0])
  • print(dictionary['a'])

Masing-masing akan menghasilkan 1. Lalu apa perbedaan antara list dan tuple. Bedanya adalah kalau list dapat ditambah dan dikurang, sedangkan tuple sifatnya adalah tetap setelah dideklarasikan. Sampai di sini sudah dipelajari data tipe, aritmatika, comparison, logical, assignment, conditional, looping serta data struktur. Kedelapan itu semua yang memungkinkan terbentuk sebuah function dalam Python. Lagi-lagi fungsi dalam Python memiliki perbedaan dengan fungsi yang ada di JavaScript. Perhatikan contoh di bawah:

  • angka_satu = [1,2,3,4]
  • angka_dua = (1,2,3,4)

  • def pertambahan(a,b):
  •     return angka_satu[a] + angka_dua[b]

  • print(pertambahan(1,3))

sumber: anonim

Lebih lanjut untuk membuat sebuah function biasanya akan dilakukan manipulasi dari data, baik itu tipe data maupun struktur data. Perhatikan daftar dibawah:

  • # data list [1,2,3]
  • .append() -> menambahkan elemen
  • .clear() -> menghapus seluruh elemen
  • .copy() -> menduplikasi seluruh elemen
  • .count() -> menghitung jumlah elemen 
  • .extend() -> menggabungkan list 
  • .index() -> mengetahui index dari sebuah elemen 
  • .insert() -> memasukkan sebuah elemen ke dalam indeks tertentu
  • .pop() -> menghapus elemen berdasarkan indeks tertentu
  • .remove() -> menghapus elemen berdasarkan data tertentu
  • .reverse() -> membalik urutan elemen 
  • .sort() -> mengurutkan elemen 

  • # data tuple ex. (1,2,3)
  • .count() -> menghitung jumlah elemen 
  • .index() -> mengetahui index dari sebuah elemen 

  • # data set ex. {'a', 'b', 'c'}
  • .add() -> menambahkan data ke dalam set 
  • .clear() -> menghapus seluruh elemen
  • .copy() -> menduplikasi seluruh elemen
  • .update() -> menggabungkan elemen 
  • .pop() -> menghilangkan satu elemen secara acak 
  • .remove() -> menghapus elemen berdasarkan data tertentu
  • .union() -> menggabungkan dua data set tanpa duplikasi
  • .isdisjoint() -> hasilnya boolean memeriksa apakah tidak ada elemen yang sama
  • .issubset() -> hasilnya boolean memeriksa apakah x dikandung y
  • .issuperset() -> hasilnya boolean memeriksa apakah y mengandung x
  • .intersection() -> menampilkan elemen yang beririsan
  • .difference() -> menampilkan elemen yang tidak sama dari satu set
  • .symmetric_difference() -> menampilkan elemen yang tidak sama dari dua set

  • # data dictionary ex {'a':1, 'b':2, 'c':3}
  • .clear() -> menghapus seluruh elemen yang ada di data dictionary
  • .copy() -> mengkopi data tanpa mengubah data yang dikopi
  • .keys() -> untuk mendapatkan key apa saja yang ada di sebuah data dictionary
  • .values() -> untuk mendapatkan value apa saja yang ada di sebuah data dictionary
  • .update() -> untuk menambahkan key dan value baru di data dictionary

Selain fitur-fitur di atas ada 3 tips dan trik dalam melakukan manipulasi data, yaitu len(), set(), dan list(). Secara berturut-turut digunakan untuk mengetahui jumlah data, mengubah list menjadi set, dan mengubah set menjadi list. Fitur-fitur sebelumnya digunakan untuk memanipulasi data struktur sedangkan untuk memanipulasi data tipe, khususnya pada tipe data string dapat digunakan fitur:
  • [1:] -> pemotongan data (slicing)
  • operator + -> menggabnungkn string
  • .strip() -> untuk menghilangkan spasi di awal dan di akhir kalimat
  • .lstrip() -> menghilangkan spasi di kiri kalimat
  • .rstrip() -> menghilangkan spasi di kanan kalimat
  • .capitalize() -> merubah elemen pertama menjadi kapital
  • .lower() -> merubah seluruh elemen menjadi huruf kecil
  • .upper() -> merubah seluruh elemen menjadi huruf kapital
  • .split() -> memecah string dengan suatu string ke dalam list
  • .join() -> menggabungkan setiap elemen list dengan string ke dalam string
  • .replace() -> mengganti string dengan string lain
  • .find() -> untuk menemukan index dari data
  • .count() -> menjumlahkan string yang ada di dalam string
  • .startswith() -> hasilnya boolean mengecek awal dari string
  • .endswith() -> hasilnya boolean mengecek akhir dari string

  • # tipe data int(float) ex. 1, 2, 3.56
  • import math
  • math.ceil() -> pembulatan ke atas
  • math.floor() -> pembulatan ke bawah
  • math.fabs() -> mengabsolutkan nilai
  • math.factorial() -> mencari faktorial
  • math.fsum() -> menjumlahkan
  • math.log() -> logaritma
  • math.sqrt() -> akar kuadrat
  • math.copysign()

Setiap function biasanya akan memuat manipulasi data baik itu tipe data maupun data struktur. Nah, function yang dibuat biasanya akan lebih dari satu. Karena banyaknya function maka munculah sebuah paradigma pemrograman yang disebut OOP atau object oriented programming. Di dalam OOP ini ada class yang memiliki serangkaian properti dan fungsi. Ada 3 hal penting dalam penerapan class, yaitu encapsulation (menyembunyikan sebagian detail dengan __ atau dengan kata lain tidak dapat diakses kecuali di dalam class tersebut), inheritance (menurunkan serangkaian fungsi yaitu parent class menurunkan ke child class), dan polymorphism (menggunakan fungsi dengan tujuan sama namun cara berbeda). Perhatikan cara mendefinisikan class di bawah:

  • class Karyawan:
  •     nama_perusahaan = 'ABC'
  •     def __init__(self, nama, usia, pendapatan):
  •         self.nama = nama
  •         self.usia = usia
  •         self.pendapatan = pendapatan
Class di atas memiliki nama Karyawan kemudian ada nama perusahaan yang diinput, yaitu ABC. Selanjutnya dibuat sebuah fungsi inisialisasi dengan parameter self, nama, pendapatan. Parameter self ini digunakan untuk memanggil nantinya di luar fungsi tersebut. Begitu nama diinput misalnya 'Ana' maka self.nama otomatis akan bernilai 'Ana' dan siap dipanggil dengan self.nama. Begitu juga untuk usia dan pendapatan. Untuk membuat objek perhatikan kode di bawah:
  • aksara = Karyawan('Aksara', 25, 8500000)
  • senja = Karyawan('Senja', 28, 12500000)
Dengan kode di atas telah berhasil dibuat sebuah objek aksara yang dimasukkan ke dalam class Karyawan dengan data nama, usia, dan pendapatan. Saat ini class Karyawan hanya memiliki satu fungsi dasar. Fungsi di dalam class Karyawan bisa ditambah, perhatikan contoh di bawah:
  • class Karyawan:
  •     nama_perusahaan = 'ABC'
  •     insentif_lembur = 250000
  •     def __init__(self, nama, usia, pendapatan):
  •         self.nama = nama
  •         self.usia = usia
  •         self.pendapatan = pendapatan
  •         self.pendapatan_tambahan = 0
  •     def lembur(self):
  •         self.pendapatan_tambahan += self.insentif_lembur
  •     def tambahan_proyek(self, insentif_proyek):
  •     self.pendapatan_tambahan += insentif_proyek
  •     def total_pendapatan(self):
  •     return self.pendapatan + self.pendapatan_tambahan

Sekarang sudah ada 3 fungsi baru yaitu lembur, tambah_proyek, dan total_pendapatan. Nah, khusus di fungsi tambah_proyek ada parameter insentif_proyek secara otomatis ada input tambahan. Untuk memanggil fungsi-fungsi tersebut perhatikan contoh di bawah:

  • # Aksara melaksanakan lembur
  • aksara.lembur()
  • # Senja memiliki proyek tambahan
  • senja.tambahan_proyek(2500000)
  • # Cetak pendapatan total Aksara dan Senja
  • print('Pendapatan Total Aksara: ' + str(aksara.total_pendapatan()))
  • print('Pendapatan Total Senja: ' +str(senja.total_pendapatan()))

Untuk memahami konsep class secara komprehensif maka pahami studi kasus di bawah:

  • # Definisikan class Karyawan sebagai parent class
  • class Karyawan:
  •     def __init__(self, nama, usia, pendapatan, insentif_lembur):
  •         self.nama = nama
  •         self.usia = usia 
  •         self.pendapatan = pendapatan 
  •         self.pendapatan_tambahan = 0
  •         self.insentif_lembur = insentif_lembur 
  •     def lembur(self):
  •         self.pendapatan_tambahan += self.insentif_lembur
  •     def tambahan_proyek(self,jumlah_tambahan):
  •         self.pendapatan_tambahan += jumlah_tambahan 
  •     def total_pendapatan(self):
  •         return self.pendapatan + self.pendapatan_tambahan 

  • # Definisikan class TenagaLepas sebagai child class dari class Karyawan 
  • class TenagaLepas(Karyawan):
  •     def __init__(self, nama, usia, pendapatan): 
  •         super().__init__(nama, usia, pendapatan, 0)
  •     def tambahan_proyek(self, nilai_proyek): 
  •         self.pendapatan_tambahan += nilai_proyek * 0.01

  • # Definisikan class AnalisData sebagai child class dari class Karyawan 
  • class AnalisData(Karyawan):
  •     def __init__(self, nama, usia = 21, pendapatan = 6500000, 
  •                  insentif_lembur = 100000):
  •         super().__init__(nama, usia, pendapatan, insentif_lembur) 

  • # Definisikan class IlmuwanData sebagai child class dari class Karyawan
  • class IlmuwanData(Karyawan):
  •     def __init__(self, nama, usia = 25, pendapatan = 12000000, 
  •                  insentif_lembur = 150000):
  •         super().__init__(nama, usia, pendapatan, insentif_lembur) 
  •     def tambahan_proyek(self, nilai_proyek):
  •         self.pendapatan_tambahan += 0.1 * nilai_proyek 

  • # Definisikan class PembersihData sebagai child class dari class TenagaLepas
  • class PembersihData(TenagaLepas):
  •     def __init__(self, nama, usia, pendapatan = 4000000): 
  •         super().__init__(nama, usia, pendapatan)

  • # Definisikan class DokumenterTeknis sebagai child class dari class TenagaLepas
  • class DokumenterTeknis(TenagaLepas):
  •     def __init__(self, nama, usia, pendapatan = 2500000): 
  •         super().__init__(nama, usia, pendapatan)

  • # Definisikan class Perusahaan 
  • class Perusahaan:
  •     def __init__(self, nama, alamat, nomor_telepon): 
  •         self.nama = nama
  •         self.alamat = alamat 
  •         self.nomor_telepon = nomor_telepon 
  •         self.list_karyawan = []
  •     def aktifkan_karyawan(self, karyawan): 
  •         self.list_karyawan.append(karyawan)
  •     def nonaktifkan_karyawan(self, nama_karyawan): 
  •         karyawan_nonaktif = None
  •         for karyawan in self.list_karyawan:
  •             if karyawan.nama == nama_karyawan: 
  •                 karyawan_nonaktif = karyawan 
  •                 break
  •         if karyawan_nonaktif is not None: 
  •             self.list_karyawan.remove(karyawan_nonaktif)
  •     def total_pengeluaran(self): 
  •         pengeluaran = 0
  •         for karyawan in self.list_karyawan:
  •             pengeluaran += karyawan.total_pendapatan() 
  •         return pengeluaran
  •     def cari_karyawan(self, nama_karyawan): 
  •         for karyawan in self.list_karyawan:
  •             if karyawan.nama == nama_karyawan: 
  •                 return karyawan
  •         return None

  • # Create object karyawan sesuai dengan tugasnya masing-masing
  • # seperti yang dinyatakan dalam tabel.
  • ani = PembersihData('Ani', 25)
  • budi = DokumenterTeknis('Budi', 18)
  • cici = IlmuwanData('Cici')
  • didi = IlmuwanData('Didi', 32, 20000000)
  • efi = AnalisData('Efi')
  • febi = AnalisData('Febi', 28, 12000000)
  • # print(ani.total_pendapatan())
  • # print(budi.total_pendapatan())
  • # print(cici.total_pendapatan())
  • # print(didi.total_pendapatan())
  • # print(efi.total_pendapatan())
  • # print(febi.total_pendapatan())
  • # Create object perusahaan
  • perusahaan = Perusahaan('ABC', 'Jl. Jendral Sudirman, Blok 11', '(021) 95812XX')

  • # Aktifkan setiap karyawan yang telah didefinisikan

  • perusahaan.aktifkan_karyawan(ani)
  • perusahaan.aktifkan_karyawan(budi)
  • perusahaan.aktifkan_karyawan(cici)
  • perusahaan.aktifkan_karyawan(didi)
  • perusahaan.aktifkan_karyawan(efi)
  • perusahaan.aktifkan_karyawan(febi)

  • # Cetak keseluruhan total pengeluaran perusahaan
  • print(perusahaan.total_pengeluaran())

Dengan memahami data tipe, aritmatika, comparison, logical, assignment, conditional, looping, data structure, function, dan class maka sudah cukup memiliki dasar dalam memulai penggunaan bahasa Python.




ref:
https://www.w3schools.com/python/default.asp
luqman-hakim

Shoes Specification

Sepatu yang berkualitas tentu melewati proses yang berkualitas. Namun, proses yang berkualitas tidaklah lengkap tanpa pemeriksaan yang juga berkualitas. Sedikitnya ada 8 tahap pemeriksaan sepatu di FRI atau final random inspection, yaitu:

  1. Bandingkan MCS dengan sepatu produksi
    • MCS merupakan kependekan dari manufacturing confirmation sample yang merupakan contoh dari sepatu hasil development oleh developer. Secara sederhana MCS ini dibandingkan secara langsung dengan sepatu hasil produksi.
  2. Pengecekan size label
    • Size label biasanya berada di baling tongue, pastikan size label telah sesuai dengan karton dari sepatu tersebut.
  3. Pengecekan bagian dalam sepatu
    • Pemeriksaan bagian dalam biasanya dilakukan untuk memastikan tidak ada barang terlarang yang masuk seperti peniti, atau barang yang bisa melukai kaki.
  4. Pengecekan outsole
    • Outsole merupakan bagian bawah sepatu yang bersentuhan langsung dengan lantai. Pastikan outsole tidak terjadi kelunturan atau warna yang berbeda.
  5. Pengecekan lateral dan medial sepatu
    • Medial merupakan sisi lengkung yang mengarah ke dalam sepatu sedangkan lateral merupakan sisi lengkung yang mengarah ke luar sepatu.
  6. Pengecekan bagian upper sepatu
    • Upper biasanya adalah bagian yang di sewing, pastikan tidak kotor.
  7. Pengecekan wobbling
    • Tetakkan sepatu di atas meja datar dan pastikan bahwa sepatu tidak mengalami wobbling.
  8. Pengecekan bonding
    • Lakukan penekanan pada area tempel antara upper dan bottom. Pastikan tidak ada yang open bonding.
sumber: https://pixabay.com/id/vectors/sepatu-olahraga-pakaian-pasangan-29282/

Sepatu memiliki proses yang sangat panjang dan tentunya sepatu bersifat padat karya berbeda dengan produk otomotif yang bisa dilakukan secara terkomputerisasi. Karena sifatnya yang padat karya akan membuat human faktor membesar. Pada sisi yang lain karena banyaknya sentuhan manusia tentu kualitas yang dihasilkan berbeda dengan sentuhan mesin. Biasanya 3 masalah terbesar dari produksi sepatu adalah open bonding, over cement, dan unpairing.

Open bonding terjadi karena beberapa faktor, seperti chemical yang tidak dicampur dengan presisi, chamber yang kotor, operator cementing yang kurang teliti, hingga marking last yang tidak baik. Sedangkan over cement seringkali terjadi karena saat attaching yang terlalu kuat dan cementing yang kurang rata. Nah, unpairing terjadi biasanya lebih ke lasting dan sewing. Tiga faktor tersebut yang sering secara berulang terjadi kembali.




ref:
manufactur

Perhitungan Produk

Produk berbeda dengan jasa, produk dapat dirasakan secara fisik sedangkan jasa dirasakan secara psikis. Orang yang membeli produk disebut dengan customer sedangkan orang yang membeli jasa disebut client. Berdasarkan waktunya produk dibedakan menjadi 2, yaitu produk sekali pakai dan produk lebih dari sekali pakai. Perhatikan hirarki di bawah:

  • Produk sekali pakai
    • Short expired
    • Long expired
  • Produk lebih dari sekali pakai
    • Buy
      • Own maintenance
      • Delegation maintenance
        • Subscribe
        • Unsubscribe
    • Rent
      • Own maintenance
      • Delegation maintenance
        • Subscribe
        • Unsubscribe
sumber: https://pixabay.com/id/photos/memuat-belanja-toko-toko-kelontong-2060616/

Produk sekali pakai terbagi menjadi 2, yaitu short expired dan long expired. Contoh produk sekali pakai short expired adalah makanan tradisional seperti tempe yang mampu bertahan selama 2-3 hari, sedangkan contoh produk sekali pakai long expired adalah biskuit kaleng yang mampu bertahan hingga 3 tahun. Semua produk tersebut dipakai sekali habis. Produk kategori sekali pakai ini tentu dibeli dan tidak mungkin disewa sebab ia habis dalam sekali pakai. Berbeda dengan produk lebih dari sekali pakai yang memungkinkan adanya sewa.

Produk lebih dari sekali pakai terbagi menjadi 2, yaitu buy dan rent. Masing-masing jenis itu akan memiliki perawatan dan terbagi lagi menjadi 2, yaitu own maintenance dan delegation maintenance. Dan pada delegation maintenance akan terbagi menjadi 2, yaitu subscribe dan unsubscribe. Perhatikan contohnya di bawah:

  • Buy-own maintenance: meja, kursi, dan lemari
  • Buy-delegation maintenance-subscribe: motor dan mobil
  • Buy-delegation maintenance-unsubscribe: kulkas dan televisi
  • Rent-own maintenance: tenda camping
  • Rent-delegation maintenance-subscribe: pulsa dan internet
  • Rent-delegation maintenance-unsubscribe: hotel

Dengan demikian ada 8 jenis produk yang dijual seorang sales yang perlu diperhitungkan seorang sales. Sekarang akan dilakukan perhitungan untuk membandingkan beberapa jenis sales:

  1. Sales tisu (tingkat kemudahan: 4.931)
    • Target: 2.000 tissue/bulan
    • Harga per tisu: Rp10.000,00-
    • Omset: Rp20.000.000,00-
    • Gaji: Rp3.900.000,00-
      • Produk kategori: sekali pakai-long expired (1/7)
      • Produktivitas untuk karyawan: 19.5%
      • Brand: nice, paseo, tessa, livi, green, dan 5 lainnya (10)
      • Kelas masyarakat: menengan-atas (177)
  2. Sales mobil (tingkat kemudahan: 0.036)
    • Target: 8 mobil/bulan
    • Harga per mobil: Rp200.000.000,00-
    • Omset: Rp1.600.000.000,00-
    • Gaji: Rp4.250.000,00-
      • Produk kategori: buy-delegation maintenance-subscribe (1/3650)
      • Produktivitas untuk karyawan: 0.27%
      • Brand: honda, suzuki, toyota, mitshubisi, nissan, datsun, isuzu, mercedez-benz, dan 27 lainnya (35)
      • Kelas masyarakat: atas (14)
  3. Sales rumah (tingkat kemudahan: 0.004)
    • Target: 17 rumah/bulan
    • Harga per rumah: Rp500.000.000,00-
    • Omset: Rp7.000.000.000,00-
    • Gaji: Rp3.500.000,00-
      • Produk kategori: buy-delegation maintenance-unsubscribe (1/9125)
      • Produktivitas untuk karyawan: 0.05%
      • Brand: ciputra, sinarmas, podomoro, jaya, iniland, lippo, adhi, bsd, pakuwon, summarecon, alam sutera, pp, dan 51 lainnya (63)
      • Kelas masyarakat: atas (14)
  4. Sales pegadaian (tingkat kemudahan: 1.538)
    • Target: 90 nasabah/bulan
    • Administrasi per nasabah: Rp200.000,00-
    • Omset: Rp18.000.000,00-
    • Gaji: Rp5.000.000,00-
      • Produk kategori: rent-own maintenance (1/365)
      • Produktivitas untuk karyawan: 27.8%
      • Brand: pegadaian, gadai nusantara, gadai pinjam, gadai prioritas, dan 70 lainnya (74)
      • Kelas masyarakat: bawah-atas (273)
  5. Sales internet (tingkat kemudahan: 74.15)
    • Target: 5 instalasi/bulan
    • Harga per instalasi: Rp300.000,00-
    • Omset: Rp1.500.000,00- > satu tahun > Rp18.000.000,00-
    • Gaji: Rp2.500.000,00-
      • Produk kategori: buy-delegation maintenance-subscribe (1/365)
      • Produktivitas untuk karyawan: 13.9%
      • Brand: indihome, first media, biznet, myrepublic, mnc, oxygen, gig, dan 4 lainnya (11)
      • Kelas masyarakat: menengah-atas (177)
  6. Sales rokok (tingkat kemudahan: 41.383)
    • Target: 1.200 bungkus/bulan
    • Harga per bungkus: Rp21.000,00-
    • Omset: Rp25.200.000,00-
    • Gaji: Rp3.300.000,00-
      • Produk kategori: sekali pakai-long expired (1/7)
      • Produktivitas untuk karyawan: 13.1%
      • Brand: djarum, sampoerna, dji sam soe, gudang garam, la, surya, halim, bentoel, dan 73 lainnya (81)
      • Kelas masyarakat: bawah-atas (273)

Seller adalah orang yang bekerja dibidang sales. Seorang seller bisa menjadi sumber keberhasilan dari perusahaan karena kemampuannya menjual produk. Sebaliknya jika seorang seller tumpul dalam melakukan penjualan maka ia justru akan membuat perusahaan terpuruk.




ref:
rajawali-anugrah-resources

Pemasangan JavaScript di HTML

Setelah struktur dari HTML terbuat maka untuk membuat halaman menjadi lebih interaktif dapat dilakukan pemasangan JavaScript. Secara sederhana ada 2 fungsi yang biasa digunakan, yaitu .value dan .innerHTML. Cara kerjanya adalah client akan memberikan inputan, kemudian inputan itu akan dibawa oleh syntax .value dengan id tertentu, selanjutnya nilai tersebut akan diolah di dalam JavaScript. Setelah hasil didapatkan dari JavaScript maka akan disisipkan ke tag yang ada di HTML dengan syntax .innerHTML dengan id tertentu. JavaScript bekerja di sisi pengguna atau client side. Hal ini memungkinkan JavaScript di sisipkan di dokumen HTML.

Seperti bahasa pemrograman kebanyakan, di JavaScript juga teradapat aturan untuk menulis variabel, yaitu dimulai dengan huruf atau underscore (_), tidak dapat mengandung spasi (white space), nama variabel yang terdiri atas dua kata dibuat camelCase, dan tidak dapat mengandung karakter spesial ( seperti @). Di ES6 tidak direkomendasikan menggunakan var karena adanya hoisting atau penulisan nilai sebelum pendeklarasian variabel. Sebagai gantinya lebih direkomendasikan penggunaan let atau const. 

Sekarang akan coba diterapkan pada struktur HTML yang sudah dibuat sebelumnya. Pada kasus ini akan dipasang JavaScript untuk menghitung nilai rata-rata dari matematika, fisika, dan kimia. Ikuti langkah di bawah:

  1. Perhatikan pada syntax di bawah pada file HTML yang sudah dibuat sebelumnya:
    • <label>Masukan nilai matematika</label>
    • <input type="text"><br>
    • <label>Masukan nilai fisika</label>
    • <input type="text"><br>
    • <label>Masukan nilai biologi</label>
    • <input type="text"><br>
    • <input type="button" value="Rata-Rata" >
  2. Kemudian berikan id pada setiap input untuk dapat diambil nilainya nanti, perhatikan kode di bawah:
    • <label>Masukan nilai matematika</label>
    • <input type="text" id="matematika"><br>
    • <label>Masukan nilai fisika</label>
    • <input type="text" id="fisika"><br>
    • <label>Masukan nilai biologi</label>
    • <input type="text" id="biologi"><br>
    • <input type="button" value="Rata-Rata" id="rataan">
  3. Di atas tag </body> buat tag baru yaitu <script></script>
  4. Sekarang akan diambil trigger dari button jika ditekan oleh client, gunakan syntax di bawah:
    • let button = document.getElementById("rataan")

    • function rumus (){

    • }

    • button.addEventListener("click", rumus)
  5. Sekarang fokus pada pembuatan function dengan nama rumus ()
  6. Ambil setiap nilai yang diinput oleh client pada kolom matematika, fisika, dan biologi sesui id yang ditetapkan, perhatikan syntax di bawah:
    • let button = document.getElementById("rataan")

    • function rumus (){
    •        let matematika = document.getElementById("matematika").value
    •        let fisika = document.getElementById("fisika").value
    •        let biologi = document.getElementById("biologi").value
    • }

    • button.addEventListener("click", rumus)
  7. Buat rumus rata-rata di bawahnya, perhatikan syntax:
    • let button = document.getElementById("rataan")

    • function rumus (){
    •        let matematika = document.getElementById("matematika").value
    •        let fisika = document.getElementById("fisika").value
    •        let biologi = document.getElementById("biologi").value

    •        let rataan = (Number(matematika)+Number(fisika)+Number(biologi))/3
    • }

    • button.addEventListener("click", rumus)
  8. Kemudian hasil yang ditampung pada variabel rataan akan di sisipkan di file HTML dengan id="hasil", perhatikan syntax di bawah:
    • let button = document.getElementById("rataan")

    • function rumus (){
    •        let matematika = document.getElementById("matematika").value
    •        let fisika = document.getElementById("fisika").value
    •        let biologi = document.getElementById("biologi").value

    •        let rataan = (Number(matematika)+Number(fisika)+Number(biologi))/3

    •        document.getElementById("hasil").innerHTML = rataan
    • }

    • button.addEventListener("click", rumus)
  9. Untuk menampilkan hasilnya buat sebuah tag kembali di file HTML dengan id="hasil", perhatikan syntax di bawah:
    • <label>Masukan nilai matematika</label>
    • <input type="text" id="matematika"><br>
    • <label>Masukan nilai fisika</label>
    • <input type="text" id="fisika"><br>
    • <label>Masukan nilai biologi</label>
    • <input type="text" id="biologi"><br>
    • <input type="button" value="Rata-Rata" id="rataan">
    • <h3 id="hasil"></h3>
  10. Simpan file dan coba jalankan di browser
  11. Pemasangan JavaScript di HTML berhasil!
sumber: anonim

Sederhana cara kerja dari JavaScript yaitu ambil nilai dari HTML yang telah diinput oleh client dengan .value, kemudian olah nilai tersebut dengan aritmetika yang ada di JavaScript, hingga didapatkan hasil yang diharapkan baru dikirim kembali ke file HTML dengan .innerHTML. Untuk mengatur posisi bisa dilakukan denga css flexible box. Walaupun sebelumnya diketahui ada teknik floating di css, tetapi itu tidak cukup praktis karena perlu pengaturan yang detail. Nah, disinilah kelebihan dari flexible box yang memberikan ukuran secara otomatis dan mampu beradaptasi dengan ukuran container. Ada 4 hal yang perlu dipahami, yaitu:

  1. Flex container : elemen yang menampung flex item (div yang menampung div)
  2. Flex grow : pengaturan flex item untuk menyesuaikan ruang container yang kosong
  3. Flex direction : mengubah arah keluarnya flex item (horizontal atau vertikal)
  4. Flex basis : mirip seperti flex grow, hanya saja ukurannya bisa lebih detail (misal dalam %)
Selain DOM atau document object model, JavaScript melakukan pengontrolan website melalui BOM atau browser object model. Untuk menerapkan DOM biasanya digunakan text editor semacam VS Code, sedangankan untuk menerpakan BOM bisa dilakukan langsung melalui browser dengan klik kanan inspect dan pilih tab console. Kembali perlu diingat bahwa document website bekerja dari baris atas ke bawah sehingga urutan proses sangat berpengaruh terhadap berjalan tidaknya konsep DOM dan BOM. Di dalam DOM juga dikenal istilah DOM tree, yaitu struktur yang analog dengan cabang pada batang pohon. Jika ujung dari batang disebut daun maka DOM tree ujungnya disebut node. Nah, front end developer akan banyak bergulat dengan DOM dan BOM untuk membentuk website yang menarik.

Untuk memanfaatkan BOM, seperti mengetahui tipe data dan inputan, bisa menggunakan alert atau prompt atau console.log dengan syntax typeof. Secara default BOM akan menangkap sebuah inputan sebagai string, sehingga jika yang diinput oleh client berupa angka misalnya, maka akan tetap terbaca sebagai string. Untuk mengatasi hal tersebut bisa dilakukan cast atau parse ke tipe data tertentu. Place holder juga bisa dimasukkan ke dalam kotak input pada prompt dengan koma, contohnya prompt('Masukan Nama', 'Misalnya: Jokourno'). Dengan demikian anggota BOM yang perlu diketahui oleh seorang Front End Developer adalah alert, prompt, dan console.

Pemanfaatan DOM menggunakan syntax document. Dengan syntax tersebut sudah bisa didapatkan struktur mulai dari tag HTML, head, body, dst. Nah, document sebagai objek itu memiliki banyak cabang atau node yang akan diakses dengan method seperti id, name, classname, tagname, dan selector. Untuk menyisipkan sesuatu di document bisa digunakan 2 syntax, yaitu .innerHTML (untuk menyisipkan elemen) dan .innerText (untuk menyisipkan teks). Menjadi penting juga bagaimana cara membaca data melalui console yang ada di browser. Misalnya tag h1 yang ada di dokumen berjumlah 4 maka otomatis kalau dipanggil dengan getElementByTagName akan ada 0, 1, 2,3 indeks. Sedangkan untuk mengubah style melalui console di browser bisa menggunakan style.property.

Dengan memanfaatkan inspect atau console yang ada di browser dapat lebih mudah dipahami bagaimana cara kerja dari method appendChild() dan insertBefore(). Metode appendChild() digunakan untuk menambahkan elemen di bagian akhir sebuah elemen, sedangkan insertBefore() digunakan untuk menambahkan elemen di bagian awal sebuah elemen. Kedua method tersebut banyak digunakan untuk proses event tertentu, misalnya saat client mengisi inputan dan mengklik tombol. Di JavaScript sedikitnya ada 5 kategori event, yaitu:

  1. Window events
    • onload : setelah halaman diunduh
    • onpageshow : halaman kembali diunduh
    • onresize : halaman diubah ukurannya
  2. Form events
    • onreset : ketika client menekan tombol reset
    • onsubmit : ketika client menekan tombol submit
  3. Keyboard events
    • onkeydown : ketika client menekan tombol keyboard
    • onkeypress : ketika client menahan tekanan tombol keyboard
    • onkeyup : ketika client melepas tekanan tombol keyboard
  4. Clipboard events
    • oncopy : ketika client melakukan copy
    • oncut : ketika client melakukan cut
    • onpaste : ketika client melakukan paste
  5. Mouse events
    • onclick : ketika client mengklik mouse 1 kali
    • ondblclick : ketika client mengklik mouse 2 kali berturut-turut
    • onmouseover : ketika client mengempatkan kursor di atas elemen
Inline event handler secara dasar digunakan untuk mengani event, namun inline event handler memiliki keterbatasan yaitu tidak dapat menambahkan 1 atau lebih fungsi sebagai event handler. Nah, untuk dapat menambahkan 1 atau lebih fungsi sebagai event handler perlu digunakan method addEventListener(). Penggunaan method event tentu tidak lepas dari kekurangan. Bubbling dan capturing menjadi fenomena yang perlu dipahami sebab dapat menimbulkan bug pada berkas HTML. Secara sederhana fenomena bubbling adalah eksekusi dari child menuju parent element sedangkan caputring sebaliknya yaitu dari parent ke child element.

Lebih lanjut perlu diketahui tentang web storage atau penyimpanan di web. Dengan adanya web storage maka memungkinkan web diakses secara offline. Tujuan dari web storage sendiri adalah untuk meminimalkan akses berulang ke database. Ada 2 jenis web storage, yaitu local storage (tidak hilang jika halaman web ditutup) dan session storage (data hilang jika halaman web ditutup). Keduanya baik local storage dan session storage menggunakan method setItem() untuk membuat item sedangkan untuk mendapatkan nilai menggunakan method getItem(). Karena web storage baik itu local maupun session menyimpan data dalam format key-value maka web storage dimungkinkan untuk menyimpan data dalam bentuk JSON. Menyimpan dalam bentuk JSON memerlukan method JSON.parse(). Selain itu terkadang perlu dilakukan pengubahan data objek menjadi string menggunakan method JSON.stringify().




ref:
https://www.w3schools.com/jsref/dom_obj_document.asp

Perbaikan CSS di HTML

Kalau HTML merupakan markup language sedangkan CSS merupakan style language. CSS merupakan kependekan dari cascading style sheet yang digunakan agar struktur yang telah dibuat oleh HTML lebih nyaman dilihat oleh pelanggan. Dalam melakukan perbaikan dari tampilan HTML ada 2 jenis pendekatan yaitu responsive design dan adaptive design. Pendekatan tersebut tentu memiliki kelebihan dan kekurangannya masing-masing. Pada responsive design kekurangan yang paling terlihat adalah waktu memuat design tersebut yang lebih lama atau tidak efisien, sedangkan adaprive design memiliki kekurangan yaitu kemungkinan adanya konten yang rusak. Nah, dari berbagai selector tersebut dimungkinkan adanya kombinasi:

  1. Adjacent Sibling Selector (+)
    • Menggabungkan elemen, misalnya h1 + p {}
  2. General Sibling Selector (~)
    • Mengurutkan elemen, misalnya h1 ~ p {} , artinya elemen p diterapkan setelah h1 dilewati
  3. Child Selector (>)
    • Elemen di dalam elemen, misalnya div > p {} , artinya hanya elemen p yang berada di dalam elemen div
  4. Descendant Selector(spasi)
    • Elemen di dalam elemen namun lebih luas, misalnya div p {}, artinya elemen p yang berada di dalam div baik itu dibungkus elemen lain
  5. Pseudo Selector
    • Pseudo-class
      • Menerapkan styling jika elemen di arahkan kursor atau di klik kursor atau sebelum di klik kursor, misalnya a : visited {} atau a : hover {}, setelah elemen a di klik maka akan diterapkan styling atau ketika kursor diarahkan ke elemen a maka akan diterapkan styling
    • Pseudo-element
      • Menerapkan styling pada awal dan/atau akhir elemen, misalnya p::before {content: '"'}, pada elemen p di awalnya akan diterpkan styling " (tanda petik dua).

Konsep dalam styling sedikitnya ada 3, yaitu inheritance (elemen utama yang di styling maka elemen yang ada di dalamnya akan mengikuti), grouping selector (pilihan yang akan memilih semua selama sama), dan rule order (selector dan description). Selector basic ada 5 jenis, yaitu type selector (menggunakan elemen), class selector (menggunakan nama class (.)), id selector (menggunakan nama id (#)), attribute selector (menggunakan attribute misalnya a[href]), dan universal selector (seluruh elemen (*)). 

Yang paling esensial dari CSS adalah memahami box model, perhatikan gambar di bawah:

sumber: anonim

Setiap konten akan dibungkus oleh 3 lapis, yaitu padding-(top, right, bottom, left), border- (style, width, color), dan margin-(top, right, bottom, left). Sekarang akan coba diperbaiki file HTML yang sebelumnya sudah dibuat, ikuti langkah di bawah:

  1. Buat tag <style></style> di atas tag body pada file HTML
  2. Gunakan selector all (*) untuk membuat semua dokumen berada dalam box, perhatikan syntax:
    • <style>
    • *{
    •        box-sizing: border-box;
    • }
    • </style>
  3. Khusus di body gunakan font family, perhatikan syntax:
    • <style>
    • *{
    •        box-sizing: border-box;
    • }
    • body{
    •        font-family: Arial, Helvetica, sans-serif;
    • }
    • </style>
  4. Pada bagian header lakukan pengaturan untuk warna latar belakang, padding, perataan teks, ukuran font, dan warna huruf, perhatikan syntax:
    • <style>
    • *{
    •        box-sizing: border-box;
    • }
    • body{
    •        font-family: Arial, Helvetica, sans-serif;
    • }
    • header{
    •        background-color: #666;
    •        padding: 30px;
    •        text-align: center;
    •        font-size: 35px;
    •        color: white;
    • }
    • </style>
  5. Pada bagian section lakukan pengaturan untuk tampilannya menggunakan flex agar bisa otomatis turun boxnya jika terjadi layar yang berkurang, perhatikan syntax:
    • <style>
    • *{
    •        box-sizing: border-box;
    • }
    • body{
    •        font-family: Arial, Helvetica, sans-serif;
    • }
    • header{
    •        background-color: #666;
    •        padding: 30px;
    •        text-align: center;
    •        font-size: 35px;
    •        color: white;
    • }
    • section{
    •        display: -webkit-flex;
    •        display: flex;
    • }
    • </style>
  6. Pada bagian nav lakukan pengaturan flexible box, background color, dan padding, perhatikan syntax:
    • <style>
    • *{
    •        box-sizing: border-box;
    • }
    • body{
    •        font-family: Arial, Helvetica, sans-serif;
    • }
    • header{
    •        background-color: #666;
    •        padding: 30px;
    •        text-align: center;
    •        font-size: 35px;
    •        color: white;
    • }
    • section{
    •        display: -webkit-flex;
    •        display: flex;
    • }
    • nav{
    •        -webkit-flex: 1;
    •        -ms-flex: 1;
    •        flex: 1;
    •        background: #ccc;
    •        padding: 20px;
    • }
    • </style>
  7. Pada bagian article lakukan pengaturan flexible box, background color, dan padding, gunakan syntax:
    • <style>
    • *{
    •        box-sizing: border-box;
    • }
    • body{
    •        font-family: Arial, Helvetica, sans-serif;
    • }
    • header{
    •        background-color: #666;
    •        padding: 30px;
    •        text-align: center;
    •        font-size: 35px;
    •        color: white;
    • }
    • section{
    •        display: -webkit-flex;
    •        display: flex;
    • }
    • nav{
    •        -webkit-flex: 1;
    •        -ms-flex: 1;
    •        flex: 1;
    •        background: #ccc;
    •        padding: 20px;
    • }
    • article{
    •        -webkit-flex: 3;
    •        -ms-flex: 3;
    •        flex: 3;
    •        background-color: #f1f1f1
    •        padding: 10px
    • }
    • </style>
  8. Pada bagian footer lakukan pengaturan background color, padding, perataan teks, dan warna teks, perhatikan syntax:
    • <style>
    • *{
    •        box-sizing: border-box;
    • }
    • body{
    •        font-family: Arial, Helvetica, sans-serif;
    • }
    • header{
    •        background-color: #666;
    •        padding: 30px;
    •        text-align: center;
    •        font-size: 35px;
    •        color: white;
    • }
    • section{
    •        display: -webkit-flex;
    •        display: flex;
    • }
    • nav{
    •        -webkit-flex: 1;
    •        -ms-flex: 1;
    •        flex: 1;
    •        background: #ccc;
    •        padding: 20px;
    • }
    • article{
    •        -webkit-flex: 3;
    •        -ms-flex: 3;
    •        flex: 3;
    •        background-color: #f1f1f1
    •        padding: 10px
    • }
    • footer{
    •        background-color: #777;
    •        padding: 10px;
    •        text-align: center;
    •        color: white;
    • }
    • </style>
  9. Kemudian khusus pada navigation dan article lakukan responsive layout, perhatikan syntax:
    • <style>
    • *{
    •        box-sizing: border-box;
    • }
    • body{
    •        font-family: Arial, Helvetica, sans-serif;
    • }
    • header{
    •        background-color: #666;
    •        padding: 30px;
    •        text-align: center;
    •        font-size: 35px;
    •        color: white;
    • }
    • section{
    •        display: -webkit-flex;
    •        display: flex;
    • }
    • nav{
    •        -webkit-flex: 1;
    •        -ms-flex: 1;
    •        flex: 1;
    •        background: #ccc;
    •        padding: 20px;
    • }
    • article{
    •        -webkit-flex: 3;
    •        -ms-flex: 3;
    •        flex: 3;
    •        background-color: #f1f1f1
    •        padding: 10px
    • }
    • footer{
    •        background-color: #777;
    •        padding: 10px;
    •        text-align: center;
    •        color: white;
    • }
    • @media (max-width: 600px){
    •        section {
    •            -webkit-flex-direction: column;
    •            flex-direction: column;
    •        }
    • }
    • </style>
  10. Perbaikan dengan CSS berhasil dilakukan! (perhatikan gambar di bawah)

sumber: anonim

Perbaikan CSS ini masih dalam satu file HTML dengan tag <style></style>, untuk menerapkan perbaikan CSS bisa dilakukan melalui 3 cara, yaitu inline, internal atau embedded, dan eksternal. Cara di atas adalah perbaikan dengan internal atau embedded. Perbaikan inline dilakukan per baris kode dengan menyisipkan syntax style="", sedangkan perbaikan dengan eksternal dilakukan dengan membuat file .css kemudian dilakukan import di dalam tag <head></head> dengan syntax misalnya <link rel="stylesheet" href="styles.css">.

Cara kerja perbaikan dengan CSS itu melalui selector yang terdiri atas selector all(*), selector element (elemennya misalnya body{}), selector id (#), dan selector class (.). Seperti namanya selector all dengan syntax * digunakan untuk memilih seluruh dokumen HTML. Selector element akan memilih elemen tertentu yang ada di dalam body, misalnya elemen h1, h2, h3 dan p. Nah, disetiap element itu dimungkinkan untuk membuat id dan class, perbedaannya kalau id itu tidak boleh namanya sama pada element yang berbeda sedangkan class boleh. Lalu selector tersebut dibuat declaration atau semacam keterangan akan diperlakukan apa. Nah, kumpulan dari selector dan declaration yang telah lengkap disebut rules.

Text dan font dalam styling di CSS dibedakan. Ada 7 styling font, yaitu:

  1. font-family : menetapkan jenis font
  2. font-size : menetapkan size font (ada relative dan absolute unit)
  3. font-weight : menetapkan ketebalan font (bold yang spesifik)
  4. font-style : menetapkan tipe font (bold, italic dsb)
  5. font-variant : menggunakan gaya small caps (huruf kapital yang ditulis kecil dan merapat)
  6. font : shorthand dari font
  7. google font : pergi ke https://fonts.google.com/ > select this style > copy di bagian embed di dalam elemen style > terapkan sesuai nama font-nya
Sedangkan styling text ada 8, yaitu:
  1. line-height : mengatur jarak antargaris text atas dan bawah
  2. text-indent : mengatur jarak pada garis pertama di paragraf
  3. text-align : mengatur perataan text
  4. text-decoration : mengatur dekorasi teks seperti ada garis bawah
  5. text-transform : mengubah teks seperti menjadi kapital semua
  6. letter-spacing : mengatur jarak antarhuruf
  7. word-spacing : mengatur jarak antarkata
  8. text-shadow : memberikan bayangan pada teks
Baik text dan font jika tidak diberi warna akan terasa membosankan. Untuk menghindarinya maka ada styling warna secara numeric, name, dan opacity. Dalam memberi warna pada teks langsung diarahkan saja ke elemennya, sedangkan untuk memberi background maka menggunakan background-color. Berbicara background-color tentu tidak lepas dari konsep box di CSS. Sedikitnya ada 4 elemen dari box, yaitu content, padding (jarak antara konten dan border), margin (jarak antara border dan elemen diluarnya), dan border (garis yang membatasi). Sedangkan untuk dimensinya mirip yang lain menggunakan width dan height. 

Ukuran pada CSS ada 2 tipe, yaitu absolute dan relative. Ukuran absolute tidak akan berbuah jika ukuran layar berubah sedangkan ukuran relative akan melakukan perubahan sesuai proporsi dari layar. Ada 6 jenis ukuran absolute, yaitu cm (centimeter), mm (milimeter), in (inches), px (pixels), pt (points), pc (picas). Sedangakan untuk ukuran relative ada 9 jenis, yaitu em, ex, ch, rem, vw, vh, vmin, vmax, dan %. Penerapan ukuran ini akan dipertimbangkan untuk membuat desain dengan pendekatan responsive maupun pendekatan adaptif.

Agar konten tidak mudah untuk di copy paste bisa digunakan syntax di bawah:

  • <style>
  •     BODY {
  •     user-select:none;
  •     -moz-user-select:none;
  •     -ms-user-select:none;
  •     -khtml-user-select:none;
  •     -webkit-user-select:none
  •     }
  • </style>

Anatomi dari CSS hanya ada 3, yaitu selector, property, dan value. Biasanya untuk memudahkan dalam perbaikan CSS maka dalam perancangan HTML akan dibuat dengan tag <div></div>. Tag tersebut merupakan sebuah box yang untuk melihatnya digunakan style="border: 2px solid black", misalnya. Setiap konten agar lebih mudah akan dibungkus oleh tag div atau box tadi. Nah, kemudian pembuatan box ini masih bersifat manual, untuk membuatnya menjadi lebih flexible maka digunakan flexible box. Perhatikan gambar di bawah:

sumber: anonim

Untuk membuat box A, B, C, D berurut dan berada di tengah container maka digunakan CSS dengan style="display:flex; align-content:center; justify-content:center". Maksud dari align-content:center adalah membuat box A,B,C,D berada di tengah secara vertikal sedangkan maksud dari justify-content:center adalah membuat box A,B,C,D berada di tengah secara horizontal berdasarkan container. Untuk membuat box D turun ke bawah saat layar dikecilkan perlu lagi ditambahkan flex-wrap:wrap;. Styling yang mungkin dilakukan pada box, yaitu box-shadow : memberikan bayangan serta border-radius : membuat sudut bundar.

Untuk gambar atau foto styling yang biasa dilakukan adalah ukuran dan posisi. Agar ukurannya proporsional digunakan object-fit : cover; dan object-position : center, misalnya. Ada text, ada font, ada box, dan ada gambar maka itu semua sudah cukup untuk membuat artikel di dalam cards. Biasanya dalam elemen <article> dibuat class kemudian dengan menggunakan class selector dibuat styling minimal box-shadow dan border-radius. Posisi dari cards kadang perlu diatur dengan positioning seperti: 

  1. Relative positioning : akan mendorong bagian lainnya
  2. Absolute positioning : memungkinkan terjadinya tumpang tindih
  3. Fixed positioning : posisi absolute yang relatif dengan jendela browser
Ketiganya disebut non-static flow sehingga bisa diterapkan top, left, right, dan bottom. Terakit positioning ada juga properti float yang memungkinkan penempatan elemen di sebelah kiri (left) atau di sebelah kanan (right). Dengan floating bisa dibentuk teks mengelilingi dari gambar atau text wrapping. Namun, saat menggunakan floating maka elemen akan dikeluarkan dari induk elemennya. Untuk mengatasinya bisa menggunakan properti clear dan overflow: auto;. Properti clear bisa diterapkan sesuai float yang digunakan. Jika floatnya left maka clearnya juga left, begitu sebaliknya. Sedangkan untuk float yang menerapkan left sekaligus right maka clearnya bisa menggunakan both. Cara yang lebih praktis bisa menggunakan properti overflow dengan nilai auto, sudah cukup tanpa perlu pengaturan lain. 

Dengan menggunakan floating dan positioning maka dimungkinkan terbuat halaman yang repsonsif. Namun, perlu tambahan dengan menggunakan meta tag view port, perhatikan kode di bawah:

  • <meta name="viewport" content="width=device-width, initial-scale=1">

Selain meta tag view port ada juga media query untuk menyesuaikan device, misalnya @media screen and (max-width: 600px) {}. Jika pada website diterapkan navigasi, untuk mempermudahnya saat dibuka melalui device yang lebih kecil bisa diterapkan properti position dengan value sticky. Sampai sini sudah cukup dipelajari styling dengan css, yaitu:

  1. Content
    • Text
    • Font
    • Image
    • Color
  2. Box
    • Padding
    • Border
    • Margin
  3. Responsive
    • Floating
    • Positioning
    • View port
    • Media query

Bagi pemula potensi adanya kesalahan dalam pembuatan styling di css itu sangat besar, apalagi besarnya file dari css akan mempengaruhi kecepatan dari website. Namun, hal ini bisa diatasi dengan mengunjungi situs https://jigsaw.w3.org/css-validator/ (cek sesalahan) dan https://www.minifier.org/ (cek ukuran file).




ref:
https://www.w3schools.com/css/

Jokourno

Jokourno is focus for providing efficient and fair solutions for all

Dasar Arsitektur Teknologi Informasi

Dahulu untuk seseorang bertemu dengan keluarganya di tempat yang jauh maka diperlukan perjalanan yang panjang, bahkan melewati lautan dan padang pasir. Selanjutnya ada kemudahan karena munculnya teknologi seperti kendaraan bermotor dan pesawat. Namun itu semua masih membutuhkan waktu yang seringkali menjadi penghambat. Dewasa ini dengan perkembangan teknologi informasi seseorang dapat langsung bertukar informasi secara real-time melalui video conference. Dengan adanya kemajuan tersebut membuat setiap perkumpulan berlomba-lomba membuat sistem teknologi informasi yang memanjakan pelanggannya. Sayangnya terkadang pembuatan sistem teknologi informasi tersebut mengabaikan arsitektur yang dipersyaratkan. sumber: https://pixabay.com/illustrations/video-conference-webinar-5352757/ Untuk membuat sistem informasi yang baik diperlukan pemahaman setidaknya 2 hal yaitu software dan hardware. Keduanya tentu saja memiliki arsitektur tersendiri seperti object oriented programming, functional progr...

Perancangan Machine Learning

Pemrograman dibuat untuk menyelesaikan permasalahan. Dalam pemrograman konvensional akan dibuat deretan kode yang memecah masalah tersebut menjadi solusi yang lebih kecil. Sayangnya ketika masalah itu begitu kompleks maka deretan kode yang diperlukan akan sangat banyak. Pada kondisi inilah machine learning dimungkinkan sebagai solusi. Alih-alih membuat deretan kode yang sangat banyak dari suatu permasalahan konteks, machine learning akan membuat penyelesaian lebih sederhana. Tipe machine learning sendiri ada 4, yaitu supervised, unsupervised, semi-supervised, dan reinforcement. Pada tipe reinforcement, mesin menggunakan teknik pengambilan keputusan terbaik, secara berurutan, untuk memaksimalkan ukuran sukses kehidupan nyata. Ada 4 komponen utama pada mesin tipe reinforcement, yaitu action, agent, environment, dan rewards. Semua itu menggambarkan Marcove Decision Process (MDP). sumber: https://magnitt.com/news/world%E2%80%99s-most-valuable-resource-no-longer-oil-data-21035 Sebagaimana d...

Minuman Cayenne Pepper

source: https://favpng.com/png_view/chilli-with-chicken-cayenne-pepper-chili-pepper-peppers-food-bell-pepper-png/xiXNdS3r Cayenne pepper (Capsicum annuum) adalah jenis cabai yang berasal dari keluarga solanaceae, yang dikenal dengan rasa pedasnya yang kuat. Cabai ini biasanya digunakan sebagai bahan bumbu dalam masakan untuk memberikan rasa pedas dan sedikit rasa manis. Cayenne pepper memiliki bentuk panjang dan tipis dengan warna merah cerah saat matang, namun pada umumnya dapat ditemukan dalam bentuk bubuk yang lebih praktis digunakan dalam masakan sehari-hari. Cayenne pepper mengandung senyawa aktif yang disebut capsaicin, yang memberikan rasa pedas dan memiliki berbagai manfaat kesehatan. Capsaicin diketahui dapat merangsang metabolisme, meningkatkan pembakaran lemak, serta memiliki sifat antiinflamasi dan analgesik. Oleh karena itu, cayenne pepper sering digunakan dalam pengobatan tradisional untuk membantu mengatasi masalah pencernaan, meredakan nyeri otot, dan meningkatkan p...