2017-09-16 21:55:48 bagongkia said:
Selamat malam
2017-09-16 21:55:55 bagongkia said:
Kulgram akan dimulai dalam 5 menit lagi
2017-09-16 21:56:10 zigic said:
Malam min
2017-09-16 21:56:19 gunawan_indra said:
woaa..
2017-09-16 21:56:28 gunawan_indra said:
4mnit lg min
2017-09-16 21:56:36 putraxor said:
π
2017-09-16 21:56:40 albertawe said:
hadir
2017-09-16 21:56:50 ferrwan said:
Selamat Malam Pak @bagongkia
2017-09-16 21:56:52 kolonel_yudisetiawan said:
Hadir.
2017-09-16 21:57:00 bagongkia said:
Bagi yang mengenal rekan-rekan yang belum online, silahkan dibangunkan... Terima Kasih.. ππ
2017-09-16 21:57:02 hendrahuang said:
malam semua
2017-09-16 21:57:06 gunawan_indra said:
udah kek show aja
2017-09-16 21:57:15 Erwin Chandra said:
Hadir
2017-09-16 21:57:25 desdulianto said:
dilarang stiker @gunawan_indra supaya ga mengganggu
2017-09-16 21:57:27 hendrahuang said:
selamat berdebat eh brtanya
2017-09-16 21:57:45 kevinongko said:
Absensi wkwk
2017-09-16 21:58:17 desdulianto said:
boleh warming up dulu
2017-09-16 21:58:22 desdulianto said:
menunggu jam 10
2017-09-16 21:58:30 desdulianto said:
π
2017-09-16 21:58:36 hendrahuang said:
boleh siapin pertanyaan
2017-09-16 21:58:42 putraxor said:
2-2-3-4-5-6-7-8
2017-09-16 21:58:48 desdulianto said:
and our bot is running well
2017-09-16 21:59:00 desdulianto said:
thanks @ferrwan and @Xinvayne and @kevinongko ππΏ
2017-09-16 21:59:07 bertzzie said:
woah
2017-09-16 21:59:10 bertzzie said:
1 min haha
2017-09-16 21:59:21 gunawan_indra said:
wahh pemateri dah datang
2017-09-16 21:59:42 desdulianto said:
silahkan mc @bagongkia boleh dibuka sepertinya acaranya
2017-09-16 21:59:45 bagongkia said:
Selamat datang di kulgram perdana dari @KongkowITMedan
2017-09-16 22:00:01 Mickeel said:
desdulianto: thanks @ferrwan and @Xinvayne and @kevinongko ππΏ
*Sungkem utk botnya
2017-09-16 22:00:06 kevinongko said:
Semua chat ini direcord sama bot, jd jgn tulis yg sensitif ya seperti pin ATM wk
2017-09-16 22:00:28 bagongkia said:
Penyelenggaraan kulgram ini merupakan salah satu bentuk perwujudan visi dan misi @KongkowITMedan dalam berbagi pengalaman seputar dunia IT
2017-09-16 22:00:55 bagongkia said:
Materi kulgram perdana kita kali ini, yaitu Monad: Intro
2017-09-16 22:01:09 bagongkia said:
Pemateri : Pak Alex Xandra Albert Sim alias @bertzzie
2017-09-16 22:01:29 bagongkia said:
Masih 11 members yang online
2017-09-16 22:01:44 bertzzie said:
Ga apa lah, nanti kan bisa baca arsip
2017-09-16 22:01:45 Fran Jaya said:
Iy pak
2017-09-16 22:01:47 bertzzie said:
yuk mulai?
2017-09-16 22:02:10 bagongkia said:
Baik lah kita mulai saja ya...
2017-09-16 22:02:13 adichang said:
sikat lah
2017-09-16 22:02:15 bagongkia said:
Silahkan pak Alex...
2017-09-16 22:02:28 bagongkia said:
ππππππ
2017-09-16 22:02:36 gunawan_indra said:
ππ
2017-09-16 22:02:36 bertzzie said:
Siip thanks @bagongkia
2017-09-16 22:02:41 Boby Christyawan said:
Oke pak
2017-09-16 22:02:59 Fran Jaya said:
Mulai aja pak
2017-09-16 22:03:11 bagongkia said:
setelah pemateri mulai, harap jangan ada yg chat dl ya.. terima kasih
2017-09-16 22:03:13 albertawe said:
π
2017-09-16 22:03:31 bertzzie said:
Untuk awal mulai, saya akan mulai dari yang paling simpel dulu ya, dan akan disingkat aja biar ga terlalu lama juga. Jadi yang bakal kita bahas hari ini:
1. Monad itu bentuknya seperti apa
2. Monad itu kasus umum penggunaan monad seperti apa
2017-09-16 22:04:14 bertzzie said:
Jadi tidak ada bahasan tentang bagaimana membuat monad, dan category theory beserta teman-temannya. Tujuannya supaya yang lain punya gambaran dulu bentuk monad itu seperti apa. Kedepannya kalau lancar, mungkin kita bisa lanjutkan dengan yang beneren full category theory dan functional programming.
2017-09-16 22:05:27 bertzzie said:
Untuk hari ini, saya akan pakai scala sebagai pengantar, dan saya usahakan kasih penjelasan sintaks jika diperlukan. Selama sudah mengerti dasar fungsional (misal: fungsi itu first-class value) dan pemrograman generik (kalau di java misalnya public T someMethod(T value)) harusnya tidak masalah.
2017-09-16 22:05:53 bertzzie said:
So let's start. Mulai dari definisi dulu. Apa itu monad?
2017-09-16 22:06:19 bertzzie said:
Sederhananya, kita bisa anggap monad sebagai pembungkus nilai. Nilai di sini maksudnya adalah satu *value* konkrit dari sebuah data.
2017-09-16 22:06:38 bertzzie said:
Jadi kalau kita punya sebuah variabel seperti ini:
val data = 100
2017-09-16 22:06:55 bertzzie said:
tipe data dari variabel data adalah Integer, dengan *value* 100
2017-09-16 22:07:25 bertzzie said:
Nah, Monad bisa dianggap sebuah tipe data spesial yang *membungkus* nilai kita (yang memiliki tipe data)
2017-09-16 22:08:09 bertzzie said:
Ketika sesuatu dibungkus, pasti dimasukkan ke kotak dan di dalam kotaknya bisa saja ada barang-barang lain kan. Nah monad juga sama. Ketika kita bungkus sebuah nilai, kita bisa menambahkan *konteks* yang akan ikut bersama nilai ini.
2017-09-16 22:09:02 bertzzie said:
Misalnya: kita mengambil sebuah data dari database. Biasanya yang dilakukan adalah kita membuat sebuah fungsi untuk mengambil data, misalnya:
def findUserByID(id: Int): User
2017-09-16 22:09:27 bertzzie said:
fungsi findUserByID ini akan mengembalikan objek dengan tipe data User jika user ditemukan di database.
2017-09-16 22:09:44 bertzzie said:
Pertanyaannya adalah, apa yang terjadi kalau ternyata user dengan ID yang diberikan di parameter tidak ada?
2017-09-16 22:12:11 desdulianto said:
biasanya saya kan kembalikan null
2017-09-16 22:12:18 bertzzie said:
Biasanya ada beberapa pendekatan untuk penanganan error seperti ini. Misalnya:
1. Di bahasa klasik seperti C, akan dikembalikan null jika tidak ada user. Pemanggil fungsi jadi harus mengecek apakah nilai kembalian adalah null, dan menangani kondisi ini manual. Kalau si programmer lupa menangani, akan terjadi error yang berbahaya seperti mengakses memori yang tidak dialokasi.
2. Di bahasa dengan fitur Exception seperti Java, kita bisa melakukan throw dan kembali lagi, pemrosesan error ini diserahkan kepada programmer.
3. Di bahasa seperti lisp atau go, ada fitur pengembalian nilai lebih dari 1 di sebuah fungsi. Tapi kembali lagi, programmer harus menangani.
2017-09-16 22:12:22 Fran Jaya said:
Tidak akan mengembalikan apa apa ,pak,akan null
2017-09-16 22:12:34 bertzzie said:
iya bener dikasi null @desdulianto Fran
2017-09-16 22:13:18 bertzzie said:
Nah problem dengan null ini adalah null sendiri tidak bisa dipastikan ada, dan programmer tidak harus menangani kasus tersebut. Jadi program kita lebih rentan error.
2017-09-16 22:13:52 bertzzie said:
Ketika ada monad, kita bisa melakuka "pembungkusan" nilai yang dikembalikan ini dengan konteks spesifik. Misalnya masih dengan contoh pengambilan user dari database.
2017-09-16 22:14:17 bertzzie said:
Kita bisa memberikan konteks ke data kita, bahwa user ini bisa memiliki kemungkinan ada dan tidak.
2017-09-16 22:14:24 bertzzie said:
Fungsinya jadi seperti ini:
2017-09-16 22:14:39 bertzzie said:
def findUserByID(id: Int): Option[User]
2017-09-16 22:15:13 bertzzie said:
Alih-alih mengembalikan User langsung dan kadang-kadang null, kita berikan satu nilai baru, Option. Option ini bisa memiliki dua nilai: None dan Some
2017-09-16 22:15:33 bertzzie said:
dan Option bisa *membungkus* data di dalamnya, dalam kasus kita User
2017-09-16 22:15:44 bertzzie said:
Jadi bisa saja ada Option[Int] atau Option[String] juga
2017-09-16 22:16:09 bertzzie said:
nah data yang dibungkus si Option ini juga menambahkan konteks: yaitu nilai yang dia bungkus bisa ada dan bisa tidak ada
2017-09-16 22:16:25 bertzzie said:
ketika nilai tidak ada, maka Option akan memiliki nilai None
2017-09-16 22:16:34 bertzzie said:
ketika nilai ada, Option akan memberikan Some
2017-09-16 22:17:06 bertzzie said:
Untungnya apa kalau begini? Sebagai programmer, kita dipaksa oleh compiler untuk melihat dan *acknowledge* keberadaan konteks User
2017-09-16 22:17:28 Willytan434 said:
Untuk menghindari crash?
2017-09-16 22:17:28 bertzzie said:
Jadi sampai satu titik ketika kita mau menggunakan nilai User, kita WAJIB melakukan handling kasus di mana User tidak ditemukan
2017-09-16 22:17:30 feetbo90 said:
l
2017-09-16 22:17:57 bertzzie said:
Willytan434: Untuk menghindari crash?
Iya, jadi lebih berkurang crash nya karena kita dipaksa untuk menanganni kasus di mana user tidak ada
2017-09-16 22:18:15 bertzzie said:
Option ini adalah salah satu contoh monad yang paling sederhana di scala
2017-09-16 22:18:21 bertzzie said:
kalau di haskell, namanya Maybe
2017-09-16 22:18:42 Fran Jaya said:
bertzzie: Jadi sampai satu titik ketika kita mau menggunakan nilai User, kita WAJIB melakukan handling kasus di mana User tidak ditemukan
Pak,saya mau tanya ,bagaimana user tidak ditemukan?
2017-09-16 22:19:30 Willytan434 said:
Fran Jaya: Pak,saya mau tanya ,bagaimana user tidak ditemukan?
Setahu saya nilai tersebut apabila null kita kasih nilai opsional sehingga kita menghindari null , betul ga pak?
2017-09-16 22:19:35 bertzzie said:
Jadi sejauh ini ada 1 hal yang berbeda dari monad dan pemrograman biasa: ketika tidak pakai monad, karena kita tidak dapat konteks apakah user itu ada atau engga, penanganan kasus user tidak ada itu diserahkan ke programmer. Kalau si programmer lupa atau tidak tahu kasus ini ada, maka ya sudah crash saja program nya.
2017-09-16 22:19:42 bagongkia said:
Nanti ada sesi tanya jawab setelah ini ya.. Harap bersabar..
2017-09-16 22:20:02 bertzzie said:
Dengan pakai monad, programmer harus menangani kasus itu.
2017-09-16 22:20:14 bertzzie said:
Bentar ya @Willytan434 Fran abis ini ada penanganannya
2017-09-16 22:21:02 bertzzie said:
Nah jadi karena kita harus menangani kasus ketika user tidak ada ini, pertanyaan selanjutnya adalah, apa yang harus dilakukan untuk menangani kasus user tidak ada ini?
2017-09-16 22:22:29 bertzzie said:
Semua monad wajib punya 2 operasi utama:
1. Identity: operasi untuk membuat sebuah data menjadi monad.
2. Bind: Operasi mengubah sebuah data A menjadi Monad B
2017-09-16 22:22:38 bertzzie said:
Agak bingung ya. Kita lihat langsung saja pemakaiannya π
2017-09-16 22:22:48 bertzzie said:
Identity itu sederhana, membuat monad dari data asal
2017-09-16 22:23:26 bertzzie said:
Kembali ke contoh Option[User] tadi, kalau mau buat monad Option[User] dari sebuah User, kita cukup melakukannya seperti ini:
val user = Option(user)
2017-09-16 22:24:05 bertzzie said:
Option di sini kalau dijadikan fungsi kira-kira begini bentuknya:
def Option[T](data: T): Option[T]
2017-09-16 22:24:24 bertzzie said:
fungsi Option bisa mengambil data dalam tipe apapun, dan akan mengembalikan Option[T]
2017-09-16 22:24:38 bertzzie said:
ini fungsi identitas. Tipe dari variabel user di atas adalah Option[User]
2017-09-16 22:25:13 bertzzie said:
nah operasi kedua, bind atau yang lebih dikenal dengan flatMap di java dan scala, atau operator >>= di haskell
2017-09-16 22:25:50 bertzzie said:
punya aturan sederhana: flatMap adalah pemetaan yang akan melakukan penyederhanaan tipe menjadi bentuk awal
2017-09-16 22:26:46 bertzzie said:
jadi kalau kita punya sebuah fungsi pemetaan map yang mengubah 1 tipe menjadi tipe atau nilai lain:
def map[A, B](f: A => B ): B
2017-09-16 22:27:22 bertzzie said:
atau dengan contoh langsung:
val a = List(1, 2, 3, 4)
val b = a.map(v => v * 2
2017-09-16 22:27:34 bertzzie said:
maka b akan berisi List(2, 4, 6, 8 )
2017-09-16 22:28:00 bertzzie said:
semua nilai a dikali dua dan dimasukkan ke b
2017-09-16 22:28:49 bertzzie said:
nah flatMap memiliki kemiripan dengan map dengan sedikit perbedaan
2017-09-16 22:28:55 bertzzie said:
signature nya seperti ini:
2017-09-16 22:29:02 bertzzie said:
def flatMap[B](f: (A) => U[B]): U[B]
2017-09-16 22:29:25 bertzzie said:
perbedaan utama ada di flatMap menerima A dan menjadikannya Monad U[B]
2017-09-16 22:29:32 bertzzie said:
di mana A bisa jadi monad atau bukan
2017-09-16 22:30:12 bertzzie said:
dengan contoh yang sama:
val a = List(1, 2, 3, 4)
val b = a.map(v => List(v * 2)
di sini b akan bernilai List(List(2), List(4), List(6), List(8))
2017-09-16 22:30:17 bertzzie said:
List[List[Int]]
2017-09-16 22:30:38 bertzzie said:
dengan flatmap, kita menggabungkan kembali List[List[Int]] menjadi List[Int]
2017-09-16 22:31:36 bertzzie said:
jadi dengan flatMap, kita bisa mengubah sebuah monad a menjadi monad b, tanpa kehilnagna konteks si A dan tanpa meningkatkan kompleksitas sampai sampai bisa seperti Option[Option[Option[Data]]]
2017-09-16 22:31:47 bertzzie said:
nah kembali ke findUserByID
2017-09-16 22:32:01 bertzzie said:
bagaimana jika kita ingin memproses data dan menangani kasus di mana user tidak ada?
2017-09-16 22:32:36 bertzzie said:
ketika kita pakai fungsi tadi, misalnya:
val user = findUserByID(10)
user akan bertipe Option[User]
2017-09-16 22:32:44 Fran Jaya said:
Finduserby id null pak?
2017-09-16 22:32:53 bertzzie said:
engga null
2017-09-16 22:32:59 bertzzie said:
tapi misalnya kalau id tidak ada di database
2017-09-16 22:33:09 Fran Jaya said:
Val user=finduserbyid(null)
2017-09-16 22:33:32 bertzzie said:
ya kalau dimasukkan parameter null nanti akan dikembalikan None karena tidak ada user dengan ID null di database
2017-09-16 22:33:37 bertzzie said:
sebenarnya itu bakal compile error juga sih
2017-09-16 22:33:41 bertzzie said:
but that's not the point
2017-09-16 22:33:50 bertzzie said:
bertzzie: ketika kita pakai fungsi tadi, misalnya:
val user = findUserByID(10)
user akan bertipe Option[User]
kembali ke sini
2017-09-16 22:34:11 bertzzie said:
kalau kita punya kode
val user = findUserByID(10)
2017-09-16 22:34:11 kevinongko said:
Fran Jaya: Finduserby id null pak?
Pertanyaan bs di draft dl, nanti ada sesi bertanya, makasi
2017-09-16 22:34:29 bertzzie said:
dan ternyata tidak ada user dengan ID 10 di database
2017-09-16 22:35:19 bertzzie said:
yang pertama adalah kita bisa memproses data seolah-olah user itu ada di database, dengan menggunakan flatMap
2017-09-16 22:35:45 bertzzie said:
misal ingin ambil username nya:
val username = user.flatMap(u => u.userName)
2017-09-16 22:35:58 bertzzie said:
di sini, tipe dari username akan jadi Option[String], bukan lagi Option[User]
2017-09-16 22:36:02 bertzzie said:
kenapa begitu?
2017-09-16 22:36:25 bertzzie said:
karena waktu kita memasukkan fungsi u => u.userName, kita mengembalikan u.userName yang adalah string
2017-09-16 22:36:54 bertzzie said:
dan secara otomatis, sesuai signature flatMap, maka akan dikembalikan dalam bentuk monad lagi, yaitu Option[String]
2017-09-16 22:37:25 bertzzie said:
kalau misalnya kita punya field yang punya konteks lagi, misalnya field yang boleh diisi dan tidak diisi, maka kita bisa:
val anak = user.flatMap(u => u.child)
2017-09-16 22:37:34 bertzzie said:
dengan asumsi User.child itu bertipe Option[User]
2017-09-16 22:37:44 bertzzie said:
maka anak tipenya adalah Option[User] juta
2017-09-16 22:37:56 bertzzie said:
beda dengan kalau kita lakukan:
val anak = user.map(u => u.child)
2017-09-16 22:38:06 bertzzie said:
di sini anak tipenya adalah Option[Option[User]]
2017-09-16 22:38:35 bertzzie said:
nah, dengan adanya monad yang menyimpan konteks ini, ktia bisa melakukan operasi apapun terhadap user, sampai ketika kita mau menggunakan data user nya
2017-09-16 22:40:24 bertzzie said:
ketika mau menggukana data user, kode yang menggunakan data ini *dipaksa* untuk memproses, yaitu misalnya kalau di scala dengan pattern matching:
`user match {
case Some(u) => println(s"User name: ${u.userName}")
case None => println("User not found")
}`
2017-09-16 22:40:57 bertzzie said:
jadi ketika kita sudah benar-benar harus menggunakan, sampai di satu titik kita akan dipaksa untuk menangani kasus ini
2017-09-16 22:41:11 bertzzie said:
tapi ini sudah di luar scope monad, karena penanganan tiap-tiap monad berbeda-beda
2017-09-16 22:42:10 bertzzie said:
Intinya untuk pembahasan kali ini adalah:
Monad itu menyimpan konteks. Konteks ini bentuknya bisa banyak: bisa apakah user ada atau tidak (`Maybe` / Option monad), bisa satu data yang akan ada di masa depan Future monad, bisa apakah fungsi mengalami error Try monad
2017-09-16 22:42:40 bertzzie said:
penanganan terhadap masing-masing monad akan berbeda, tapi pada umumyna akan memerlukan pattern matching
2017-09-16 22:43:00 bertzzie said:
operasi terhadap data yang ada di dalam monad sendiri bisa dilakukan dengan flatMap
2017-09-16 22:43:12 bertzzie said:
Dan kalau jeli, sebenarnya List di scala juga adalah monad
2017-09-16 22:44:05 bertzzie said:
Hari ini begini dulu ya. Nanti next time kita baru bahas apa itu law of monad dan contoh penggunaan monad lain dan bentuk nya untuk yang lebih detail dan abstrak juga
2017-09-16 22:44:14 bertzzie said:
karena ngelihat ini aja pasti uda banyak pertanyaan π
2017-09-16 22:44:22 bertzzie said:
@bagongkia mungkin bisa dimasukkan ke sesi tanya jawab?
2017-09-16 22:44:34 bagongkia said:
Hahaha... Terima kasih pak @bertzzie
2017-09-16 22:44:43 bagongkia said:
Kita lanjutkan ke sesi tanya jawab
2017-09-16 22:44:56 Ng_Wilson said:
πππππ
2017-09-16 22:45:07 bagongkia said:
silahkan yang ingin bertanya, langsung saja...
2017-09-16 22:45:47 desdulianto said:
terima kasih pak @bertzzie , pertanyaan saya nih, untuk monad apakah selalu hasilnya diproses dengan flatMap? atau ada case lain?
2017-09-16 22:46:03 Fran Jaya said:
bagongkia: silahkan yang ingin bertanya, langsung saja...
Pak,saya mau tanya,bagaimana proses ,jika user tidak ditemukan?
2017-09-16 22:46:52 bagongkia said:
Masih ada yang typing... kita tunggu sebentar sblm saya hold pertanyaannya..
2017-09-16 22:46:58 bertzzie said:
desdulianto: terima kasih pak @bertzzie , pertanyaan saya nih, untuk monad apakah selalu hasilnya diproses dengan flatMap? atau ada case lain?
flatMap dan map bisa, dan ini biasanya uda cukup buat hampir semua case sampai data mau digunakan
2017-09-16 22:47:13 adichang said:
question: kapan saja musti pakai monad ? ada sisi negatif nya ga dari monad ini ?
2017-09-16 22:47:15 bertzzie said:
Fran Jaya: Pak,saya mau tanya,bagaimana proses ,jika user tidak ditemukan?
pattern matching. lihat contoh ini di atas:
user match {
case Some(u) => println(s"User name: ${u.userName}")
case None => println("User not found")
}
2017-09-16 22:47:50 bagongkia said:
Oke.. di pause dl ya pertanyaannya...
2017-09-16 22:48:04 kevinongko said:
πππππ
2017-09-16 22:48:23 feetbo90 said:
bertzzie: Intinya untuk pembahasan kali ini adalah:
Monad itu menyimpan konteks. Konteks ini bentuknya bisa banyak: bisa apakah user ada atau tidak (
Maybe
/ Option monad), bisa satu data yang akan ada di masa depan Future monad, bisa apakah fungsi mengalami error Try monad
apakah ada konteks yang lain? kalau yg om bilang itu menyimpan konteks untuk handling error
2017-09-16 22:48:24 Fran Jaya said:
Sip pak
2017-09-16 22:49:17 bertzzie said:
adichang: question: kapan saja musti pakai monad ? ada sisi negatif nya ga dari monad ini ?
dalam pemrograman fungsional yang murni, basically kita ga punya side effect pak, jadi kalau perlu side effect (I/O, threading, dst) harus pakai monad.
ketika ada konteks yang perlu diikutkan dengan data tapi engga mau harus dihandle setiap saat juga bisa pakai monad. misalnya apakah ada exception atau tidak. Ini sekalian jawaban @feetbo90 ya. Contoh konteksnya: ada exception atau tidak, data yang akan datang di masa depan sudah ada atau timeout, dst.
2017-09-16 22:49:30 bertzzie said:
sisi negatifnya ada di maintainability
2017-09-16 22:49:58 bertzzie said:
kalau tanpa disertai fitur bahasa yang kuat, kode yang pakai monad biasanya lebih sulit dibaca dan diproses mata karena kita harus selalu *aware* terhadap konteks kode kita
2017-09-16 22:50:11 bertzzie said:
misalnya, ada kode lengendaris di blibli yang kira-kira bentuknya:
`
2017-09-16 22:51:00 bertzzie said:
yang susah banget dibaca dan diproses
2017-09-16 22:51:46 bertzzie said:
scala bisa menyelesaikan ini dengan sintaks khusus di for (`for` di scala itu bukan looping tapi flatmap) dengan:
for {
xx <- xxxData
x <- xx
} yield {
// proses
2017-09-16 22:51:50 Fran Jaya said:
Pak ,bolehkah,saya minta contoh maybe,jika ditemukan user dan jika tidak ditemukan
2017-09-16 22:52:01 bertzzie said:
Fran Jaya: Pak ,bolehkah,saya minta contoh maybe,jika ditemukan user dan jika tidak ditemukan
user match {
case Some(u) => println(s"User name: ${u.userName}")
case None => println("User not found")
}
2017-09-16 22:52:12 bertzzie said:
jika user ditemukan print Username: nama user
2017-09-16 22:52:19 bertzzie said:
jika tidak ditemukan print User not found
2017-09-16 22:52:25 bertzzie said:
kode itu engga ngerti di mana ya?
2017-09-16 22:53:26 bagongkia said:
Ada tanggapan dari yang lain?
2017-09-16 22:53:46 mattxw said:
Maaf, saya kurang paham bahasanya, user match itu mirip switch gitu ya?
2017-09-16 22:54:02 bertzzie said:
mattxw: Maaf, saya kurang paham bahasanya, user match itu mirip switch gitu ya?
iya, tapi yang di bandingkan itu tipe data, bukan isi data
2017-09-16 22:54:25 bertzzie said:
kalau switch kan yang dibandingkan adalah isi, misalnya
switch (data) {
case 1
case 2
}
2017-09-16 22:54:27 kolonel_yudisetiawan said:
Sesi Q&A nya masih ada kan? Saya mau tanya. Monad ini tersedia di setiap bahasa pemrograman?
2017-09-16 22:54:42 bertzzie said:
kalau ini namanya "pattern matching" (silahkan di google), semua bahasa fungsional punya
2017-09-16 22:54:47 bertzzie said:
untuk ngebandingin tipe data
2017-09-16 22:54:51 Fran Jaya said:
bertzzie: kode itu engga ngerti di mana ya?
Maaf pak,soalnya ada option(user),dan ni termasuk dalam maybe pak?
2017-09-16 22:54:59 bagongkia said:
Pertanyaannya hold dlu ya...
2017-09-16 22:55:24 bagongkia said:
Biar agak terstruktur, nanti saya diberikan kesempatan kepada 5 orang dulu untuk mengajukan pertanyaan
2017-09-16 22:55:37 bertzzie said:
kolonel_yudisetiawan: Sesi Q&A nya masih ada kan? Saya mau tanya. Monad ini tersedia di setiap bahasa pemrograman?
monad ini seperti design pattern, selama kita punya model yang bisa menampugn dan mengekspresikan identity dan flatMap, bisa di bahasa apapun termasuk C dan assembly
2017-09-16 22:56:04 bagongkia said:
silahkan mengajukan diri untuk bertanya dengan command
#ask nama_anda
hold dulu pertanyaannya sampai saya mention
contoh:
#ask Reja
2017-09-16 22:56:14 bertzzie said:
Fran Jaya: Maaf pak,soalnya ada option(user),dan ni termasuk dalam maybe pak?
Option dan Maybe itu sama, cuman beda isitlah karena beda bahasa pemrograman. Option itu punya scala, Maybe punya haskell. penggunaan dan konsepnya sama persis. kaya coca cola dan pepsi
2017-09-16 22:56:52 Fran Jaya said:
Pak ,boleh minta perbedaan antara flatmap.dengan map,kan tadi bapak ada bilang sedilit perbedaan ,boleh minta contoh?
2017-09-16 22:57:03 putraxor said:
π’
2017-09-16 22:57:09 kolonel_yudisetiawan said:
bertzzie: monad ini seperti design pattern, selama kita punya model yang bisa menampugn dan mengekspresikan identity dan flatMap, bisa di bahasa apapun termasuk C dan assembly
Berarti, kalau di Java Android itu kan ada ReactiveX. Di reactiveX itu ada operator FlatMap. Berarti, ReactiveX itu termasuk monad ya?
2017-09-16 22:57:28 kevinongko said:
Halo2 semuanya, tolong gunakan format #ask yg sudah dijelaskan moderator ya
2017-09-16 22:57:37 kevinongko said:
Supaya pemateri bs menjawab satu satu
2017-09-16 22:57:55 kevinongko said:
Hold dl pertanyaanya sampai diberi aba2 dr moderator @bagongkia
2017-09-16 22:58:36 bagongkia said:
start dari sini ikuti aturan yang saya jelaskan ya..
2017-09-16 22:58:39 bagongkia said:
silahkan #ask
2017-09-16 22:58:47 delanobgt said:
#ask irvin
2017-09-16 22:58:57 kolonel_yudisetiawan said:
#ask Berarti, kalau di Java Android itu kan ada ReactiveX. Di reactiveX itu ada operator FlatMap dan Map. Berarti, ReactiveX itu termasuk monad ya?
2017-09-16 22:59:07 kevinongko said:
kolonel_yudisetiawan: #ask Berarti, kalau di Java Android itu kan ada ReactiveX. Di reactiveX itu ada operator FlatMap dan Map. Berarti, ReactiveX itu termasuk monad ya?
Formatnya hanya #ask nama
2017-09-16 22:59:11 Fran Jaya said:
#ask Fran Jaya:
Pak ,boleh minta perbedaan antara flatmap.dengan map,kan tadi bapak ada bilang sedilit perbedaan ,boleh minta contoh?
2017-09-16 22:59:13 kevinongko said:
Pertanyaan disimpan dl
2017-09-16 22:59:24 kevinongko said:
delanobgt: #ask irvin
Seperti ini
2017-09-16 22:59:41 bertzzie said:
Fran Jaya: Pak ,boleh minta perbedaan antara flatmap.dengan map,kan tadi bapak ada bilang sedilit perbedaan ,boleh minta contoh?
map memetakan satu nilai ke nilai lain, flatmap memetakan satu nilai ke *monad*
contoh:
val l = List(1, 2, 3)
l.map(x => List(x * 2)) // hasil: List(List(2), List(4), List(6)) (tipe: List[List[Int]])
val l = List(1, 2, 3)
l.flatMap(x => List(x * 2)) // hasil: List(2, 4, 6) (tipe: List[Int])
perhatikan bedanya cuman ada di apakah tipe akhirnya ada di List[List[Int]] atau List[Int]. Kodenya sm persis cuman 1 map dan 1 flatmap
2017-09-16 23:00:16 bertzzie said:
kolonel_yudisetiawan: #ask Berarti, kalau di Java Android itu kan ada ReactiveX. Di reactiveX itu ada operator FlatMap dan Map. Berarti, ReactiveX itu termasuk monad ya?
ReactiveX bisa support monad karena punya flatmap dan identity. Plus flatmap nya memenuhi syarat 3 hukum monad (yang belum dibahas sekarang π)
2017-09-16 23:01:01 bagongkia said:
Silahkan pertanyaannya Pak Irvin @delanobgt
2017-09-16 23:01:46 delanobgt said:
Selain sbg pengingat error handling, kira2 keuntungan apa lagi ya dri penggunaan monad
2017-09-16 23:01:56 delanobgt said:
*pak
2017-09-16 23:02:06 feetbo90 said:
#ask feetbo
2017-09-16 23:03:03 bertzzie said:
delanobgt: Selain sbg pengingat error handling, kira2 keuntungan apa lagi ya dri penggunaan monad
konteks yang engga hilang dan bisa diproses kapanpun. Misalnya untuk query database bisa dismpan konteks koneksi ke database, jadi ketika nilai sudah atau mau dipakai, bisa di close. Engga ada lagi istilah lupa close connection dan database mati
2017-09-16 23:03:33 bertzzie said:
dan kapan ngeclose nya ada kontrolnya sepenuhnya di tangan kita
2017-09-16 23:03:50 bagongkia said:
tanggapannya pak @delanobgt ???
2017-09-16 23:04:14 delanobgt said:
Oke makasih pak π
2017-09-16 23:04:22 Fran Jaya said:
#ask fran jaya: pak ,boleh minta contoh kasus dan contoh pemahaman future monad?
2017-09-16 23:04:38 bagongkia said:
Kita lanjut ke Pak Iqbal @feetbo90
2017-09-16 23:04:41 bagongkia said:
Silahkan pertanyaannya
2017-09-16 23:04:58 kevinongko said:
Fran Jaya: #ask fran jaya: pak ,boleh minta contoh kasus dan contoh pemahaman future monad?
Antri ya pak dengan format #ask nama makasih
2017-09-16 23:05:12 feetbo90 said:
intinya kita memakai monad akan mengakses atau mengambil data nah jika data ada berarti tdk memakai monad, nah jika data tidak ada kita memakai monad untuk memanipulasi data agar tidak terjadi crash, nah pasti untuk proses I/O akses data internet sudah pasti bisa dipakai kan? tergantung tipe data apakah itu flatmap, list, hashmap dll
2017-09-16 23:05:37 feetbo90 said:
yg dikembalikan oleh monad
2017-09-16 23:05:45 Fran Jaya said:
#ask pak alex
2017-09-16 23:06:34 Fran Jaya said:
#ask pak alex: pak ,boleh minta contoh kasus dan contoh pemahaman future monad?
2017-09-16 23:06:56 kevinongko said:
Fran Jaya: #ask pak alex: pak ,boleh minta contoh kasus dan contoh pemahaman future monad?
Sabar om, tunggu moderator
2017-09-16 23:07:30 bertzzie said:
feetbo90: intinya kita memakai monad akan mengakses atau mengambil data nah jika data ada berarti tdk memakai monad, nah jika data tidak ada kita memakai monad untuk memanipulasi data agar tidak terjadi crash, nah pasti untuk proses I/O akses data internet sudah pasti bisa dipakai kan? tergantung tipe data apakah itu flatmap, list, hashmap dll
engga harus data, itu cuman contoh nya data. konteks bisa juga yang engga berhubungan dengan data, misalnya kalau bikin game bisa ada konteks apakah karakter sedang menjalankan animasi atau konteks status karakter
Untuk akses data internet, konteksnya biasanya yang berhubungan dengan jaringan: status timeout, keberhasilan data, dst
Data yang dibungkus si monad ya kita sendiri yang tentukan. Misalnya kalau dikembalikannya JSON, kita bisa proses JSON nya menjadi objek
2017-09-16 23:08:11 bertzzie said:
Fran Jaya: #ask pak alex: pak ,boleh minta contoh kasus dan contoh pemahaman future monad?
ini butuh sejam lagi kayanya. lain waktu aja ya π tapi bisa coba baca2 soal "Future Monad"
2017-09-16 23:08:13 bertzzie said:
itu keywordnya
2017-09-16 23:08:29 feetbo90 said:
bertzzie: engga harus data, itu cuman contoh nya data. konteks bisa juga yang engga berhubungan dengan data, misalnya kalau bikin game bisa ada konteks apakah karakter sedang menjalankan animasi atau konteks status karakter
Untuk akses data internet, konteksnya biasanya yang berhubungan dengan jaringan: status timeout, keberhasilan data, dst
Data yang dibungkus si monad ya kita sendiri yang tentukan. Misalnya kalau dikembalikannya JSON, kita bisa proses JSON nya menjadi objek
ok terjawab arigatou...
2017-09-16 23:08:33 bagongkia said:
Langsung ditanggapi saja kalo ada tanggapan ya..
2017-09-16 23:08:38 Fran Jaya said:
bertzzie: ini butuh sejam lagi kayanya. lain waktu aja ya π tapi bisa coba baca2 soal "Future Monad"
Ok pak,makasih pak
2017-09-16 23:08:51 bagongkia said:
Silahkan yang masih mau bertanya #ask [nama anda]
2017-09-16 23:09:59 bertzzie said:
Ingat ya kalo yang kita bahas hari ini masih super dangkal, dan belum nyentuh hukum monad (monadic law) juga. Masih hanya supaya ada feeling monad itu kira-kira bentuknya gimana aja. Next time kita dalami lagi. So feel free tanya2
2017-09-16 23:11:04 kolonel_yudisetiawan said:
#ask Yudi Setiawan
2017-09-16 23:11:11 bagongkia said:
Silahkan yudi
2017-09-16 23:12:25 kolonel_yudisetiawan said:
Mau tanya. Masih belum paham tentang Monad. Dampak nyatanya ketika memakai monad dan tidak pakai monad apa ya? Monad ini cuma istilah saja kah atau gimana? Sebab, selama ini saya ReactiveX tapi, baru tau sekarang ada istilah monad.
2017-09-16 23:14:47 putraxor said:
#ask Putra
2017-09-16 23:16:03 bertzzie said:
kolonel_yudisetiawan: Mau tanya. Masih belum paham tentang Monad. Dampak nyatanya ketika memakai monad dan tidak pakai monad apa ya? Monad ini cuma istilah saja kah atau gimana? Sebab, selama ini saya pakai ReactiveX tapi, baru tau sekarang ada istilah monad. Kalau untuk meng-handle data null itu bukannya tinggal dilakukan pengecekan saja ya. Buat apa ada monad kalau cuma untuk meng-handle data null doang. Kan bisa dilakukan pengecekan null seperti biasa. if data != null
Monad ini kalau di dunia OOP bisa dibilang adalah "design pattern". Cuma satu set aturan yang kalau dipenuhi oleh tipe data tertentu, bisa dipakai untuk memudahkan hidup programmer dan bikin program yang lebih high quality karena jarang crash.
Dampak ketika menggunakan monad yang paling terlihat adalah ketika kita punya konteks yang harus diproses (apakah user ada atau tidak, apakah koneksi database masih terbuka atau tidak), sebagai developer kita dipaksa buat melakukan handling ke konteks itu. Kalau engga pakai kan bisa lupa atau engga tau sekalian.
Flatmap juga bisa di-chain (dilakukan pemanggilan berantai) untuk proses data terurut dan simple
2017-09-16 23:16:20 bertzzie said:
Lebih ke masalah maintainability dan reliability initnya @kolonel_yudisetiawan
2017-09-16 23:16:52 kolonel_yudisetiawan said:
Lebih ke masalah penulisan kodenya ya?
2017-09-16 23:17:06 desdulianto said:
Saya sedikit kasi masukan mungkin ya
2017-09-16 23:17:12 bertzzie said:
kolonel_yudisetiawan: Lebih ke masalah penulisan kodenya ya?
iya, maksa developer buat handling kasus tertentu dan detail tertentu
2017-09-16 23:17:18 bertzzie said:
desdulianto: Saya sedikit kasi masukan mungkin ya
silahkan pak π
2017-09-16 23:17:20 bagongkia said:
silahkan pak @desdulianto
2017-09-16 23:17:28 desdulianto said:
tujuannya mungkin lebih ke memaksa dev untuk menghandle jika null tadi
2017-09-16 23:17:49 desdulianto said:
kalau ga pakai monad kan jaidnya tergantung programmernya apakah mau di if x != null atau tidak
2017-09-16 23:18:12 desdulianto said:
sedangkan kalau pakai monad si programmer harus menghandle seluruh jenis data bungkusan si monad
2017-09-16 23:18:26 desdulianto said:
mungkin mirip dengan x? nya di kotlin
2017-09-16 23:18:43 kolonel_yudisetiawan said:
Ouh, pencegahan terjadinya null ya?
2017-09-16 23:18:52 bagongkia said:
Silahkan pertanyaannya pak Putra @putraxor ...
2017-09-16 23:18:56 kolonel_yudisetiawan said:
Dari tadi kek ngomong Kotlin gitu.
2017-09-16 23:19:01 bertzzie said:
iya bener pak @desdulianto. keep in mind kalau ini bukan untuk kasus null aja tapi kaya koneksi database engga di close, animasi karakter mati engga diputer waktu karakter mati, dst
2017-09-16 23:19:12 bertzzie said:
konteks ini bisa banyak dan ga terbatas, sesuai kebutuhan kita
2017-09-16 23:19:19 putraxor said:
Draft pertanyaanya udah ketanya duluan, dan udah terjawab π
2017-09-16 23:19:21 bertzzie said:
kembali lagi, Option itu cuman salah satu jenis monad
2017-09-16 23:19:22 putraxor said:
Untuk pembahasan monad sampai sekarang, khusus di bahasa pemrograman yang udah ada fitur null safety, pendekatan return null lebih less complicated ya pak, karena pada akhirnya programmer juga yang harus handle opsinya
2017-09-16 23:19:31 feetbo90 said:
bertzzie: engga harus data, itu cuman contoh nya data. konteks bisa juga yang engga berhubungan dengan data, misalnya kalau bikin game bisa ada konteks apakah karakter sedang menjalankan animasi atau konteks status karakter
Untuk akses data internet, konteksnya biasanya yang berhubungan dengan jaringan: status timeout, keberhasilan data, dst
Data yang dibungkus si monad ya kita sendiri yang tentukan. Misalnya kalau dikembalikannya JSON, kita bisa proses JSON nya menjadi objek
sama kayak ini penjelasannya
2017-09-16 23:19:51 bagongkia said:
putraxor: Draft pertanyaanya udah ketanya duluan, dan udah terjawab π
gpp... lanjut saja.. haha..
2017-09-16 23:20:09 desdulianto said:
nah bisa dibilang ? nya di kotlin adalah versi monad yang untuk manusia fana yang belum paham monad kali ya βΊοΈ
2017-09-16 23:20:12 bertzzie said:
feetbo90: sama kayak ini penjelasannya
iya, dan handle nya bisa kapanpun jadi kita sendiri nentuin waktu tepatnya kapan. tapi tetep harus dihandle
2017-09-16 23:20:14 desdulianto said:
dipermudah penggunaannya
2017-09-16 23:20:32 bertzzie said:
desdulianto: nah bisa dibilang ? nya di kotlin adalah versi monad yang untuk manusia fana yang belum paham monad kali ya
βΊοΈ
itu bukan monad sih sebenarnya, cuman pendekatan menangani null pointer aja
2017-09-16 23:20:37 bertzzie said:
ada banyak pendekatan lain kok
2017-09-16 23:20:39 kolonel_yudisetiawan said:
desdulianto: nah bisa dibilang ? nya di kotlin adalah versi monad yang untuk manusia fana yang belum paham monad kali ya
βΊοΈ
Now I'm understand. Thanks. Null Safety.
2017-09-16 23:21:09 adichang said:
? itu cuman operator buat cek null atau tidak saja deh
2017-09-16 23:21:15 adichang said:
harusnya bukan monad
2017-09-16 23:21:21 bertzzie said:
again, Option itu cuman satu jenis. Ada Future monad, IO Monad, dst jg
2017-09-16 23:21:25 adichang said:
sintaks sugar aja malah
2017-09-16 23:21:38 bertzzie said:
adichang: ? itu cuman operator buat cek null atau tidak saja deh
iya bukan monad, cuman syntactic sugar
2017-09-16 23:21:41 bagongkia said:
Daftar untuk mengajukan pertanyaan berikutnya.... Format : #ask [nama anda]
2017-09-16 23:22:12 Fran Jaya said:
#ask fran jaya:
Pak,bagaimana mengatasi suatu nilai monad ,apabila nilai bungkusan dalam.monad itu banyak,jika satu per satu diatasi kan memakan waktu yang lama,apakah dengan monad ini,ada cara agar bisa mempercepat pengatasan kasus masalahnya?
2017-09-16 23:22:54 bertzzie said:
Fran Jaya: #ask fran jaya: Pak,bagaimana mengatasi suatu nilai monad ,apabila nilai bungkusan dalam.monad itu banyak,jika satu per satu diatasi kan memakan waktu yang lama,apakah dengan monad ini,ada cara agar bisa mempercepat pengatasan kasus masalahnya?
engga, monad ini cuman pattern, engga ada hubungannya dengan performa
2017-09-16 23:24:01 bagongkia said:
Batas pengajuan pertanyaan sampai jam 23.30 ya...
2017-09-16 23:24:12 desdulianto said:
mc nya udah ngantuk mo tidur ~~~~
2017-09-16 23:24:19 bertzzie said:
eh tapi ingat ya, contoh null safety tadi ya cuman contoh. Monad ini ga ada hubugannya dengan null safety sama sekali
2017-09-16 23:24:27 bertzzie said:
ada banyak pendekatan null safety lain
2017-09-16 23:24:29 bertzzie said:
dan ada banyak jenis lain
2017-09-16 23:24:48 kevinongko said:
format #ask [nama anda] sblm 11.30 PM
2017-09-16 23:24:51 bertzzie said:
inti dari monad itu adalah *pembungkusan nilai* dan operasi *identity* dan *flatmap*
2017-09-16 23:24:56 bertzzie said:
bukan null safety
2017-09-16 23:25:14 kolonel_yudisetiawan said:
Cuma mau bantu. Ini ada sedikit artikel tentang monad di Java.
https://medium.com/@afcastano/monads-for-java-developers-part-1-the-optional-monad-aa6e797b8a6e
2017-09-16 23:25:16 bertzzie said:
bisa coba baca-baca contoh monad lain kaya Future Monad, IO Monad
2017-09-16 23:25:40 feetbo90 said:
bertzzie: bisa coba baca-baca contoh monad lain kaya Future Monad, IO Monad
youp tq ko
2017-09-16 23:26:00 kevinongko said:
5menit lg, format #ask [nama anda]
2017-09-16 23:26:15 Fran Jaya said:
kolonel_yudisetiawan: Cuma mau bantu. Ini ada sedikit artikel tentang monad di Java.
https://medium.com/@afcastano/monads-for-java-developers-part-1-the-optional-monad-aa6e797b8a6e
Ok makasih pak
2017-09-16 23:26:15 putraxor said:
Ok terimakasih atas ilmunya pak Alex, sangat bermanfaat
2017-09-16 23:26:23 bertzzie said:
kolonel_yudisetiawan: Cuma mau bantu. Ini ada sedikit artikel tentang monad di Java.
https://medium.com/@afcastano/monads-for-java-developers-part-1-the-optional-monad-aa6e797b8a6e
ini uda bahas sampai monad law sih, sengaja engga saya bring up karena kejauhan nanti
2017-09-16 23:26:25 bertzzie said:
hahaha
2017-09-16 23:26:36 bertzzie said:
masih mau kasih feel monad itu bentuknya seperti apa aja
2017-09-16 23:26:58 bertzzie said:
putraxor: Ok terimakasih atas ilmunya pak Alex, sangat bermanfaat
sip
2017-09-16 23:27:11 desdulianto said:
terima kasih pak @bertzzie sudah meluangkan waktunya
2017-09-16 23:27:32 bagongkia said:
Masih 3 menit untuk mengajukan pertanyaan sebelum ditutup..
2017-09-16 23:27:32 steven_ch3n said:
makasih Pak @bertzzie utk sharing ilmu nya
2017-09-16 23:27:43 kevinongko said:
last question #ask [nama anda]
2017-09-16 23:28:12 kolonel_yudisetiawan said:
Thanks pak Alex untuk kulgram-nya. Di tunggu next kulgram-nya. πππ
2017-09-16 23:28:27 bertzzie said:
ππ sama sama
2017-09-16 23:28:38 bertzzie said:
pengen ngelanjut monad law sama seluruh category theory kalau bisa
2017-09-16 23:28:44 bertzzie said:
next time lah luang2 lagi haha
2017-09-16 23:29:26 kevinongko said:
1 minit last chance
2017-09-16 23:29:50 Fran Jaya said:
bertzzie: nah, dengan adanya monad yang menyimpan konteks ini, ktia bisa melakukan operasi apapun terhadap user, sampai ketika kita mau menggunakan data user nya
#ask fran jaya: pak saya belum paham yang dimaksud bapak pada kalimat ni?
2017-09-16 23:30:02 bertzzie said:
Fran Jaya: #ask fran jaya: pak saya belum paham yang dimaksud bapak pada kalimat ni?
engga paham yang mana?
2017-09-16 23:30:04 Ng_Wilson said:
terima kasih pak @bertzzie untuk kuliahnya dimalam hari ini.
2017-09-16 23:31:09 Fran Jaya said:
#ask fran jaya: pakai data user
2017-09-16 23:31:42 bertzzie said:
user kan tipenya Option[User], artinya dia monad Option yang membungkus data User
2017-09-16 23:32:01 bertzzie said:
kita bisa pakai data User yang ada di dalam Option ini nanti belakangan
2017-09-16 23:32:07 bertzzie said:
tapi uda bisa dikasi tau mau proses apa aja
2017-09-16 23:32:26 bertzzie said:
misalnya tadi user.flatMap(u => u.userName), ini proses mengambil username nya
2017-09-16 23:32:45 Fran Jaya said:
Ok pak makasih
2017-09-16 23:32:46 bertzzie said:
tapi datanya baru benar-benar dipakai dan diakses waktu
user match { ...
2017-09-16 23:32:54 bertzzie said:
sip
2017-09-16 23:32:57 bagongkia said:
Baiklah... Kita tutup kulgram kali ini...
Terima kasih kepada pak @bertzzie yang telah bersedia meluangkan waktu untuk sharing tentang monad..
2017-09-16 23:33:11 bagongkia said:
Terima kasih juga kepada seluruh peserta yang telah mengikuti kulgram ini
2017-09-16 23:33:21 bagongkia said:
Mohon maaf bila ada hal yang masih kurang dan tidak berkenan dalam kulgram kali ini.
Ke depan @KongkowITMedan akan terus memperbaiki proses kulgram menjadi lebih baik lagi
2017-09-16 23:33:40 Ng_Wilson said:
πππππ
2017-09-16 23:33:40 bagongkia said:
Mohon untuk mengisi form berikut:
2017-09-16 23:33:41 bagongkia said:
https://goo.gl/forms/vE8jAulCDTtHfnr43
2017-09-16 23:34:16 kevinongko said:
bagongkia: Mohon untuk mengisi form berikut:
silakan di isi form feedback, agar kedepan bs lebih baik lg
2017-09-16 23:34:25 bertzzie said:
Thank you guys!
2017-09-16 23:34:36 umaryudi91 said:
Terima kasih pak @bertzzie . Sungkem mastah
2017-09-16 23:34:38 kevinongko said:
mari sama2 doakan pak @bertzzie cepat merit
2017-09-16 23:34:45 kevinongko said:
πππππ
2017-09-16 23:34:52 bagongkia said:
ππππππ
2017-09-16 23:34:59 bertzzie said:
wkwk apa itu
2017-09-16 23:35:08 desdulianto said:
haha, sengaja ya karena mo di publish ke web ya
2017-09-16 23:35:09 bagongkia said:
bagongkia: https://goo.gl/forms/vE8jAulCDTtHfnr43
Diisi ya... Biar next kulgram makin baik ke depan...
2017-09-16 23:35:17 feetbo90 said:
πππππ
2017-09-16 23:35:27 desdulianto said:
terima kasih all, semoga ada manfaat kulgramnya
2017-09-16 23:35:30 ferrwan said:
Terima Kasih ilmunya Pak @bertzzie ππ
2017-09-16 23:35:43 feetbo90 said:
ada disimpan ga ini pak @desdulianto
2017-09-16 23:35:48 feetbo90 said:
?
2017-09-16 23:35:49 desdulianto said:
mohon form diisi supaya bisa menjadi masukan untuk kedepannya
2017-09-16 23:35:57 desdulianto said:
ada @feetbo90 sudah di rekam pakai bot
2017-09-16 23:36:09 desdulianto said:
nanti akan diolah dulu dan dipublish ke web
2017-09-16 23:36:14 xanxiver said:
Thanks untuk sharing2nya pak @bertzzie πππ
2017-09-16 23:36:15 desdulianto said:
nanti kami info ya di group
2017-09-16 23:36:26 bertzzie said:
semoga bermanfaat ya. ingat intinya ini:
inti dari monad itu adalah *pembungkusan nilai* dan operasi *identity* dan *flatmap*
jangan sampai dianggap monad cuman buat option dan null safety. ada banyak jenis monad dan bisa bikin monad dengan konteks sendiri jg π
2017-09-16 23:36:28 feetbo90 said:
desdulianto: nanti akan diolah dulu dan dipublish ke web
πππ
2017-09-16 23:36:51 feetbo90 said:
bertzzie: semoga bermanfaat ya. ingat intinya ini:
inti dari monad itu adalah pembungkusan nilai dan operasi identity dan flatmap
jangan sampai dianggap monad cuman buat option dan null safety. ada banyak jenis monad dan bisa bikin monad dengan konteks sendiri jg π
siaapp, terima kasih ilmunya pak alex
2017-09-16 23:36:56 kolonel_yudisetiawan said:
desdulianto: nanti akan diolah dulu dan dipublish ke web
alamat web-nya apa?
2017-09-16 23:37:04 Fran Jaya said:
Terima kasih pak ,atas ilmunya
2017-09-16 23:37:15 kevinongko said:
kolonel_yudisetiawan: alamat web-nya apa?
nanti akan kita umumkan di grup @kongkowitmedan
2017-09-16 23:37:21 kevinongko said:
bila sudah selesai di record
2017-09-16 23:37:22 desdulianto said:
kolonel_yudisetiawan: alamat web-nya apa?
belum ada pak
2017-09-16 23:37:40 desdulianto said:
haha, karena baru semalam direncakan kulgramnya sebenarnya
2017-09-16 23:37:42 kolonel_yudisetiawan said:
kevinongko: nanti akan kita umumkan di grup @kongkowitmedan
Ok.
2017-09-16 23:38:05 desdulianto said:
tapi semua bagi pembicara yang jauh2 ga bisa ke medan kita bisa undang lah untuk share di kulgram
2017-09-16 23:38:31 desdulianto said:
thanks all, keep learning ππΏ
2017-09-16 23:38:36 desdulianto said:
and goodnight
2017-09-16 23:38:50 bertzzie said:
goodnight!
2017-09-16 23:41:49 gunawan_indra said:
thanks @bertzzie dan @bagongkia
2017-09-16 23:43:59 Fran Jaya said:
Good.night