Skip to content

Instantly share code, notes, and snippets.

@jeffque
jeffque / IdentityTest.java
Created August 25, 2025 12:02
Testing whether IdentityMap relies on hashCode somehow
package jeffque;
import java.util.IdentityHashMap;
import java.util.Objects;
public class IdentityTest {
static class SomeValue {
int x;
@jeffque
jeffque / MustBeSingleton.java
Created August 25, 2025 10:58
Singleton, leveraging to classloader
public class MustBeSingleton {
private MustBeSingleton() {
}
public static MustBeSingleton getInstance() {
return SINGLETON_LOADER.singleton;
}
private static class SINGLETON_LOADER {
@jeffque
jeffque / Summation.java
Last active August 23, 2025 11:46
Benchmark de soma de iteração de arraylist vs stream
package jeffque.bench;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.Blackhole;
import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;
@jeffque
jeffque / xml.md
Created May 28, 2025 15:54
BNF grosseira para XML

Aqui uma gramática "livre de contexto" para reconhecer XMLs em geral (sem entrar na especificidade dos XSDs).

A tag de identificação por hora tá sendo ignorada, a que tem a forma <?xml ... ?>, mas seria só adicionar ela.

Para facilitar a escrita da gramática livre de contexto, estou usando aqui uma estratégia de "passagem de parâmetro". Isso facilita a indicação, por exemplo, de tags que se fecham: <p></p>, por exemplo, é derivado de TREE_NODE("p").

Para os casos de passagem de parâmetro, o "tipo" tá indicado. Por exemplo, a produção de TREE_NODE(TAG_NAME ::= IDENTIFICADOR_TAG) indica que o parâmetro TAG_NAME é feito como a produção IDENTIFICADOR_TAG.

#!/usr/bin/env ruby
require "liquid"
require "benchmark/ips"
require "jekyll"
puts "Ruby #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
puts "Liquid #{Liquid::VERSION}"
module Testing
class PostUrlAlways < Liquid::Tag
@jeffque
jeffque / SlowlorrisController.java
Last active January 28, 2025 17:16
A controller that yields a stream of results while computing Ackerman Peter function to check timeout problems in Spring Boot
@RestController
class SlowlorrisController {
@GetMapping(path = "/slowlorris2", produces = "text/plain")
StreamingResponseBody teste2() {
return out -> {
out.write(("COMEÇANDO!!!\n").getBytes(Charset.defaultCharset()));
out.flush();
for (int i = 0; i < 1000; i++) {
out.write(("rodada %d\n".formatted(i)).getBytes(Charset.defaultCharset()));
@jeffque
jeffque / Main.java
Created December 6, 2024 20:41
A simple app to show that visualvm cannot sample CPU usage of virtual threads
package jeffque;
import java.util.Scanner;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.function.Supplier;
public class Main {
@jeffque
jeffque / peano.hs
Created August 29, 2024 01:40
Aritmética de Peano
data Nat = Zero | Suc Nat
inc :: Nat -> Nat
inc x = Suc x
showNat :: Nat -> String
showNat Zero = "Zero"
showNat (Suc v) = "Suc " ++ (show v)
type BinNat = (Nat -> Nat -> Nat)
@jeffque
jeffque / ServeInputStream.java
Created August 23, 2024 12:48
Pequena alternativa para responder como input stream uma coleção de elementos
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.function.Function;
public class ServeInputStream<T> extends InputStream {
private final Iterator<T> iterator;
private final Function<T, byte[]> serializer;
@jeffque
jeffque / mapeamentoHaskell.hs
Last active August 23, 2024 09:58
Uma demonstração da estrutura de dados "mapa"
data Resultado = Vazio | Valor Integer
type Mapeamento = (Integer -> Resultado)
showResultado :: Resultado -> String
showResultado Vazio = "Vazio"
showResultado (Valor v) = "Valor " ++ (show v)
instance Show Resultado where
show = showResultado