Skip to content

Instantly share code, notes, and snippets.

View pjambet's full-sized avatar

Pierre Jambet pjambet

View GitHub Profile
irb(main):138:0> [256].pack('S') > [15].pack('S')
=> false
irb(main):139:0> [256].pack('S>') > [15].pack('S>')
=> true
require 'benchmark'
require 'securerandom'
require_relative './dict'
RANDOM_BYTES = SecureRandom.bytes(16)
class MyHash
def initialize(pairs)
if pairs.length == 1
@pjambet
pjambet / bench.rb
Last active September 30, 2020 21:13
require 'benchmark'
require 'securerandom'
require_relative './dict'
RANDOM_BYTES = SecureRandom.bytes(16)
def setup_dict(size)
dict = BYORedis::Dict.new
size.times { |i| dict[i.to_s] = i.to_s }
@pjambet
pjambet / client.rb
Last active September 29, 2020 16:30
require 'socket'
socket = TCPSocket.new 'localhost', 2000
socket.write "request"
socket.close
@pjambet
pjambet / gist:718599bc26c2d743afb1d02655344a08
Created September 29, 2020 15:38
ECONNRESET investigations
require 'socket'
# EPIPE, when the socket is closed by the time we try to read, we can read, but writing fails
# ECONNRESET, when the socket is closed by the time we try to write
def process_events(event)
p 'in proccess'
res = event.read_nonblock(1024, exception: false) # => YET THE FUCKING STACKTRACE POINTS HERE WHEN ECONNRESET
p res
event.puts "FUCK YOU puts" # => EPIPE
# p '==--=='
@pjambet
pjambet / notes.md
Created August 27, 2020 18:46
Notes about Redis

Notes

  • dbDictType used as argument to dictCreate in server.c (initServer)
  • Uses dictSdsHash, dictSdsKeyCompare, dictSdsKeyDestructor, dictObjectDestructor
  • dict struct:
    • dictType
    • privdata
    • ht (2 of them)
    • rehashidx
  • iterators
@pjambet
pjambet / anytype_array.rb
Last active August 10, 2020 20:30
A ruby Array, from Scratch, only for Strings
require 'fiddle'
class BYOArray < BasicObject
PTR_SIZE = ::Fiddle::SIZEOF_LONG
def initialize(max_size)
@max_size = max_size
@current_size = 0
@beginning_address = ::Fiddle::Pointer.malloc(PTR_SIZE)
@pjambet
pjambet / railway.scala
Last active July 15, 2020 22:30
ROP Scala Parallel Validation
object Railway {
sealed trait TwoTrack[F]
case class Success[S](data: S) extends TwoTrack[S]
case class Failure[S](message: String) extends TwoTrack[S]
def succeed[S](x: S) = Success(x)
@pjambet
pjambet / rop.scala
Last active July 9, 2020 13:09
ROP in Scala
object Railway {
sealed trait TwoTrack[F]
case class Success[S](data: S) extends TwoTrack[S]
case class Failure[S](message: String) extends TwoTrack[S]
def succeed[S](x: S) = Success(x)
final case class OrderRequest(cardNumber: String)
// ...
val route =
path("order") {
post {
entity(as[OrderRequest]) { orderRequest =>
onComplete(PurchaseService.createPurchase(orderRequest.cardNumber)) {
case Success(Right(result)) =>
complete(StatusCodes.Created, result)
case Success(Left(error)) =>