Skip to content

Instantly share code, notes, and snippets.

@havarnov
havarnov / Program.cs
Created December 4, 2025 21:44
Monogame + Box2d.Net - rectangle issue
/*
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>monogame_playground</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
@havarnov
havarnov / Program.cs
Created December 4, 2025 20:38
Program.cs
/*
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>monogame_playground</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
/*
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>monogame_playground</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
@havarnov
havarnov / nested-transaction.cs
Created January 9, 2025 10:19
A minimal example of how nested transaction works in Orleans.
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc;
using Orleans.Concurrency;
using Orleans.Transactions.Abstractions;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOrleans(siloBuilder =>
{
siloBuilder.UseTransactions();
DECLARE @Timestamp AS DATETIMEOFFSET = '2024-03-03T23:05:00.000Z'
--DECLARE @TimeZone AS NVARCHAR(MAX) = 'Central Europe Standard Time';
DECLARE @TimeZone AS NVARCHAR(MAX) = 'GMT Standard Time';
SELECT DATEPART(
ISO_WEEK,
CONVERT(
DATETIMEOFFSET,
SWITCHOFFSET(
@Timestamp,
@havarnov
havarnov / gist:ebfc4d5bd5c52eaa5a4beda0f78b4230
Created January 16, 2024 19:21
Minecraft Bedrock - fly.io
========= run.sh ==========
#!/bin/bash
socat UDP4-LISTEN:23191,fork,reuseaddr,bind=fly-global-services UDP4:127.0.0.1:19132 &
/opt/bedrock-entry.sh &
# Wait for any process to exit
wait -n
type RingBuffer<'a> = private {
buffer: 'a option array
size: int
index: int
}
module RingBuffer =
open System
let create size = {
using AspectCore.Configuration;
using AspectCore.DynamicProxy;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
_ = BenchmarkRunner.Run<Benchmark>();
public class LoggerInterceptor : AbstractInterceptor
{
public override async Task Invoke(AspectContext context, AspectDelegate next)
using System;
using System.Threading.Tasks;
using AspectCore.Configuration;
using AspectCore.DynamicProxy;
using Microsoft.Extensions.Logging;
var loggerFactory = LoggerFactory.Create(c => c.AddSimpleConsole());
var generator = new ProxyGeneratorBuilder()
.Configure(c =>
{
We can't make this file beautiful and searchable because it's too large.
:START_ID,:END_ID,:TYPE
255126,CN_255127,CONDUCTING
255176,CN_255177,CONDUCTING
255268,CN_255269,CONDUCTING
255323,CN_255324,CONDUCTING
255654,CN_255655,CONDUCTING
256051,CN_256052,CONDUCTING
256475,CN_256476,CONDUCTING
256567,CN_256568,CONDUCTING
256613,CN_256614,CONDUCTING