Navigation

    BaliJS
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unsolved
    • Popular
    • Talents
    • Users
    • Groups
    1. Home
    2. alfrcr
    3. Posts

    I Putu Alfred Crosby (@alfrcr)

    99
    Reputation
    130
    Posts
    68
    Profile views
    19
    Followers
    96
    Following
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    Information about I Putu Alfred Crosby

    Angular Dev ReactJS Dev VueJS Dev Problem Solver JS Warrior BaliJS Organizer
    Joined
    Last Online
    Location
    Jakarta Selatan
    Age
    31

    About me

    Data Warehouse Engineer at Gopay. Formerly SWE at Kumparan, Grab, Tokopedia, Urbanhire.

    Posts made by alfrcr

    • Ayo kenalin dirimu!

      @Kadek-Darmayasa dan @recovdot halo selamat datang di forum BaliJS. Jgn lupa join Telegram grup kita jg yah

      posted in Diskusi Umum
    • Ayo kenalin dirimu!

      @krismaputra halo bli, selamat datang. Ditunggu kontribusi nya di komunitas BaliJS 🙏 🙏

      posted in Diskusi Umum
    • Ayo kenalin dirimu!

      @mahend_ halo2 Mahend 🙏 selamat datang, silakan kalo mau bertanya2 atau sharing di forum BaliJS 🙏 🙏

      posted in Diskusi Umum
    • What happend ieu teh?

      @visualstudiocode said in What happend ieu teh?:

      Script php artisan optimize handlin

      kalo liat pesan error nya, di stackoverflow saya nemunya ini sih. https://stackoverflow.com/questions/60814706/invalid-characters-passed-for-attempted-conversion-these-have-been-ignored-pu

      Mungkin ada package yg perlu di update?

      posted in Diskusi Umum
    • What happend ieu teh?

      @visualstudiocode boleh tau versi laravel nya? Mungkin malem ini blm bnyk yg bisa bantu karena udah pda istirahat

      posted in Diskusi Umum
    • Ayo kenalin dirimu!

      @visualstudiocode selamat datang Daffa. Silakan sharing, bertanya atau membantu jawab2 pertanyaan disini.

      Walaupun namanya forumnya BaliJS tp forum ini gak eksklusif hanya utk Bali aja, tp jg utk seluruh warga Indonesia 🤣 🤣

      posted in Diskusi Umum
    • Ayo kenalin dirimu!

      @adibite boleh sharing itu bro

      posted in Diskusi Umum
    • Ayo kenalin dirimu!

      @ttm boleh bgt, malah jangan cuma 1 artikel aja wkkwkw 🤣 Kita di komunitas harus belajar apapun, kita gak tau jg nanti siapa tau diperlukan jg di pekerjaan kita 🤣 🤣

      Menurutku, malah akan bagus kalo kita minimal sedikit tau terminologi2 di ML sbg engineer

      posted in Diskusi Umum
    • Ayo kenalin dirimu!

      @ttm wah menarik bgt, ditunggu sharing2 nya ttg ML bli 🙏

      posted in Diskusi Umum
    • RestAPI dengan Nodejs & MySQL

      Thanks bli @Merta-Yoga Keren dan jelas bgt penjelasannya 😎 😎
      Nunggu episode selanjutnya. Ijin share ke grup telegram dan grup facebook bli 🙏

      posted in Back End
    • Almamater STIKOM Bali?

      @Merta-Yasa salam kenal jg bli 🙏 Semoga betah di forum BaliJS 🙏

      posted in Regional
    • Ayo kenalin dirimu!

      @Merta-Yasa welcome!!! silakan kalo mau bertanya atau sharing di forum bli Merta 🙏 🙏 🤣 🤣

      posted in Diskusi Umum
    • Almamater STIKOM Bali?

      @Merta-Yasa saya di Jaksel bli 🙏 wah harusnya seangkatan @Galang-Kerta tp Galang di kampus STIKOM Jimbaran wkwkw

      posted in Regional
    • Almamater STIKOM Bali?

      @Merta-Yasa wah deket kampus ya wkwkwk. Salam kenal bli 🙏 Aku angkatan 2011

      posted in Regional
    • Almamater STIKOM Bali?

      @Merta-Yasa mantaaaaaps. Domisili mana bli?

      posted in Regional
    • Trik Programing Laptop Super Kentang

      mantap jiwa, jd tinggal beli iPad Pro aja 😆

      posted in Diskusi Umum
    • Memanfaatkan Redis

      redis-tutorial.png
      Redis(remote dictionary service) adalah salah satu database NoSQL yang pasti sering teman-teman dengar. Redis merupakan sebuah penyimpanan struktur data di dalam memory (bisa persistent juga di dalam disk) yang biasa digunakan sebagai database, cache atau message-broker.

      Redis mendukung banyak tipe struktur data seperti: Strings, Lists, Sets, Hashes, Sorted Sets, Geospatial Indexes, dan lain-lain yang teman-teman dapat lihat di halaman resmi redis.

      Kapan kita perlu redis?

      Penggunaan umum redis yang sering kita dengar adalah sebagai cache storage. Namun sebenarnya ada banyak kasus lainnya yang juga bisa kita gunakan, seperti: membuat personalized feed timeline seperti Twitter Timeline, membuat leaderboard, menyimpan session login, sebagai message broker, menghitung jarak geografi dalam radius, atau sebagai queue.

      Yuk kita bahas cases umum tersebut dan struktur data apa yang biasa digunakan.

      Redis sebagai Cache Storage

      Struktur data yang digunakan disini adalah String. Biasanya ketika servis backend melakukan proses yang memakan resource(komputasi) yang besar, ada baiknya proses tersebut dibuatkan mekanisme caching agar pada proses berikutnya tidak perlu melakukan komputasi lagi. Contoh:
      PS: kita akan menggunakan ioredis dalam contoh code

      async function getUser(req, res) {
          const userID = req.params.id;
          const CACHE_KEY = `get:user:${userID}`;
          const cache = await redis.get(CACHE_KEY)
      
          if (cache) {
              return res.json({
                  success: true,
                  data: JSON.parse(getCache)
              })
          }
      
          const user = await User.findBy(userID).get();
          
          await redis.set(CACHE_KEY, JSON.stringify(user))
      
          return res.json({
              success: true,
              data: user
          })
      }
      
      

      Redis sebagai Queue

      Biasanya dalam membuat program kita pasti menemukan sebuah proses membutuhkan waktu yang lama untuk diselesaikan. Contohnya pada kehidupan sehari-hari: Transcoding video pada youtube (setelah upload video di youtube tidak langsung terpublish), mengirim ribuan email newsletter, dan banyak lagi proses-proses yang biasa disebut blocking process.

      Nah, bagaimana cara agar proses tersebut tidak ngeblok proses lainnya? Dengan melempar proses tersebut ke thread yang berbeda dan dikerjakan dibelakang layar secara asynchronous (tidak blocking lagi deh 🐷 ). Di NodeJS queue favorit saya adalah Bull.(*saya enggak lagi promosi)

      Untuk contoh penggunaan code nya saya copas langsung dari README file Bull.

      var Queue = require('bull');
      
      var videoQueue = new Queue('video transcoding', 'redis://127.0.0.1:6379');
      videoQueue.process(function(job, done){
      
        // job.data contains the custom data passed when the job was created
        // job.id contains id of this job.
      
        // transcode video asynchronously and report progress
        job.progress(42);
      
        // call done when finished
        done();
      
        // or give a error if error
        done(new Error('error transcoding'));
      
        // or pass it a result
        done(null, { framerate: 29.5 /* etc... */ });
      
        // If the job throws an unhandled exception it is also handled correctly
        throw new Error('some unexpected error');
      });
      

      Redis sebagai Message Broker

      Kadang ketika kita memiliki service yang begitu banyak (microservice), kita membutuhkan sebuah perantara untuk memberitahu event yang sedang terjadi? Apa maksudnya? Misal kasusnya kaya gini:

      Ketika seorang pelanggan melakukan order,

      1. service order perlu memberitahu service notifikasi untuk mengirim notifikasi ke merchant
      2. service order perlu memberitahu service products untuk mengurangi jumlah stock nya
      3. service order juga perlu memberitahu service payment untuk melakukan pengurangan saldo

      Secara tradisional mungkin kita tinggal hit API dari tiap service, tapi lama-lama terlalu banyak API yang harus di-manage hanya untuk memberitahu user lain untuk melakukan A dan B, belum lagi kita perlu handle untuk failure case misal salah satu server tidak bisa diakses dan sebagainya.

      Saat itulah kita perlu sebuah message-broker atau bahasa sehari-harinya makelar pesan yang bertugas mengirimkan event. Langsung aja ke contoh ya wkwkkwk 😢

      const Redis = require("ioredis");
      const redis = new Redis();
      const pub = new Redis();
      
      const payload = JSON.stringify({
          orderID: 1,
          productIDs: [45,32],
          amount: 425000
      })
      
      pub.publish("order", payload);
      
      // di service backend lainnya
      redis.on("message", function (channel, message) {
          if(channel === "order") {
              console.log(message)
          }
      });
      

      Redis sebagai penghitung jarak Geospatial

      Bagaimana ojek online menentukan hanya driver dalam radius sekian yang boleh mengambil order kita? Ya, kita bisa menggunakan redis untuk menghitung jarak radius posisi driver dengan posisi restaurant atau posisi kita. Langsung ke contoh kode aja yuk.

      // dummy long lat ya guys
      const address = {
          id: 3,
          name: 'Rumah Osby',
          longitude: 0.0, 
          latitude: 0.0,
      }
      
      const store = {
          id: 1,
          name: 'Martabak Ena',
          longitude: 0.0,
          latitude: 0.0,
      }
      
      const geoKey = 'store_distance'
      const sourceMemberName = `${paramCase(store.name)}_${store.id}`
      const targetMemberName = `${paramCase(addr.name)}_${addr.id}`
      
      redis.geoadd(geoKey, store.longitude, store.latitude, sourceMemberName)
      redis.geoadd(geoKey, addr.longitude, addr.latitude, targetMemberName)
      
      const distance = await redis.geodist(geoKey, sourceMemberName, targetMemberName, 'km')
      
      console.log(distance) // 1.3
      

      Akhir kata

      Masih banyak kasus yang bisa kita selesaikan dengan memanfaatkan redis, beberapa yang kita baca diatas barusan adalah beberapa case yang super umum digunakan.

      Pemahaman struktur data sangat penting ketika menggunakan redis agar kita dapat menggunakan redis secara tepat guna. Di dalam dokumentasi redis juga sudah terdapat time-complexity dari setiap operasi redis. Contoh gambar dibawah ini:
      Screen Shot 2020-07-04 at 05.50.19.png

      Dan selalu ingat, redis sangat bagus digunakan untuk leaderboard dan menghitung, serta menyimpan cache. Mari kita belajar mengeksploitasi manfaatkan setiap struktur data yang ada di redis.

      Link terkait:

      • https://www.npmjs.com/package/ioredis
      • https://github.com/OptimalBits/bull
      • http://highscalability.com/blog/2014/9/8/how-twitter-uses-redis-to-scale-105tb-ram-39mm-qps-10000-ins.html
      posted in Database
    • Ayo kenalin dirimu!

      @Adiatma-Kamarudin halo Adi selamat datang!! Semoga betah di forum 🙏🙏

      posted in Diskusi Umum
    • Ayo kenalin dirimu!

      @Wawan-Rahmawan halo Wawan! Selamat datang. Ditunggu sharing2 nya di forum 🙏🙏

      posted in Diskusi Umum
    • Ayo kenalin dirimu!

      @Doni-Wirawan welcome to the club!! Jgn ragu kalo mau nanya2 atau sharing hasil belajar 🙏🙏

      posted in Diskusi Umum
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 1 / 7