Skip to content

Instantly share code, notes, and snippets.

@zencd
zencd / DoubleCheckedLocking.java
Last active April 5, 2023 15:12
Double Checked Locking
/** private final DCLValue<Foo> foo = new DCLValue.create();
* Foo result = foo.getOrCreate(syncOn, () -> new Foo());
* Foo result = foo.get(); */
interface DCLValue<T> {
T getOrCreate(Object syncOn, Supplier<T> creator);
T get();
void set(T value);
static <T> DCLValue<T> create() {
return new DCLValueRegular<>();
@zencd
zencd / validator.groovy
Created May 6, 2023 18:36
Pojo Validator
static final Validator VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator()
static void validatePojo(Object pojo) {
def errors = VALIDATOR.validate(pojo);
if (errors.size() > 0) {
log.error("Validation errors for {}: {}", pojo.getClass().getSimpleName(), errors);
throw new RuntimeException("Pojo validation failed - see logs - " + pojo.getClass().getName());
}
}
@zencd
zencd / resolve-field-type-argument.groovy
Created May 6, 2023 18:41
Resolve type argument of a Java generics typed field
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface TestPojo {
String file()
}
@TestPojo(file = "src/test/resources/foo-response.json")
FooResponse fooResponse
// invoke processSpecAnnotations()
@zencd
zencd / temp.txt
Last active May 21, 2024 17:33
Temp gist
this is a <font color="red">gist</font>
to embed [⁦]
@zencd
zencd / bidi.txt
Created May 22, 2024 08:26
bidi example
[⁦]
@zencd
zencd / stopscript.js
Last active May 22, 2024 20:55
Copy steam games to an SG compilation
await (async function() {
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
async function rewriteAllGames(compId, gameIds) {
console.log('gameIds:', gameIds);
var formData = new FormData();
for (let i = 0; i < gameIds.length; i++) {
let gameId = gameIds[i];
formData.append('items[]', 'game/' + gameId);