Skip to content

Instantly share code, notes, and snippets.

View arinal's full-sized avatar

Dicky Arinal arinal

  • Disney+
  • Greater Manchester Area
View GitHub Profile
@arinal
arinal / gentags.sh
Created July 22, 2015 18:23
Generating TAGS file.
gcc -M $* | sed -e 's/[\\ ]/\n/g' | sed -e '/^$/d' -e '/\.o:[ \t]*$/d' | xargs etags -a
@arinal
arinal / LightID.java
Last active September 3, 2023 16:56
Super lightweight ID generator
import java.security.SecureRandom;
@Deprecated
public class LightID implements Cloneable {
private static SecureRandom Random = new SecureRandom();
private long id;
public LightID() {
id = Random.nextLong();

Emulator

Unicorn.js adalah emulator untuk berbagai arsitektur CPU seperti ARM, x86, MIPS, etc. Uniknya, ini jalan 100% di javascript. Pertanyaan yang sering timbul adalah bukannya emulator itu harus 'low-level' dan harus dibikin pake C? Jawabannya tidak.

Ingat-ingat pelajaran organisasi komputer tentang cara kerja CPU:

  • Komputer terdiri dari CPU dan memori.
  • Memori itu ada nomornya (alamat), kemudian isinya adalah angka 8-bit, alias integer dengan interval 0 sampai 255.
  • Memori itu isinya bisa instruksi, bisa data.

Penjelasan sederhana tentang emulator

Unicorn.js adalah emulator untuk berbagai arsitektur CPU seperti ARM, x86, MIPS, etc. Uniknya, unicorn.js jalan 100% di javascript. Pertanyaan yang sering timbul adalah bukannya emulator itu harus 'low-level' dan harus dibikin pake C? Jawabannya tidak. Poin-poin penting tentang cara kerja CPU:

  • Komputer terdiri dari CPU dan memori.
  • Memori itu ada nomornya (alamat), kemudian isinya adalah angka 8-bit, alias integer dengan interval 0 sampai 255.
  • Memori itu isinya bisa instruksi, bisa data.
  • Di dalam CPU ada register, yaitu sebuah memori juga namun memiliki fungsi khusus.
@arinal
arinal / git-new.sh
Created October 9, 2018 14:47
Get all log messages in current tag
git-new() {
current_tag="$(git tag -l | tail -1)"
git log --pretty=oneline --pretty=format:%s "$current_tag"..."master" | grep -E '#'
}
@arinal
arinal / lift.scala
Last active July 23, 2019 01:04
Lifting monad transformer
import scala.concurrent.ExecutionContext.Implicits.global
def lift [A](n: A) : OptionT[Future, A] = lift(n.some)
def lift [A](optA: Option[A]) : OptionT[Future, A] = OptionT(Future.successful(optA))
def lift [A](f: Future[Option[A]]): OptionT[Future, A] = OptionT(f)
def lift1[A](f: Future[A]) : OptionT[Future, A] = f.liftM[OptionT]
override def run(args: List[String]): IO[ExitCode] = {
recurr[IO](5, List.empty)
.flatMap { ns =>
Iterant.fromList(ns)
}
.take(2)
.map(println)
.toListL
.map(_ => ExitCode.Success)
}
@arinal
arinal / KinesisSource.scala
Last active August 14, 2019 14:24
Kinesis related
import java.net.URI
import cats.effect.{Async, Timer}
import monix.tail.Iterant
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider
import software.amazon.awssdk.core.SdkSystemSetting
import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient
import software.amazon.awssdk.http.{Protocol, SdkHttpConfigurationOption}
import software.amazon.awssdk.regions.Region
import software.amazon.awssdk.services.kinesis.model._
@arinal
arinal / MonadHell.scala
Last active September 10, 2019 14:42
Monad Hell
package example
import cats.data.ReaderT
import cats.data.StateT
import cats.mtl.MonadState
import cats.Monad
import cats.mtl.ApplicativeAsk
import cats.MonadError
import cats.mtl.FunctorRaise
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.