Skip to content

Instantly share code, notes, and snippets.

View Dissimilis's full-sized avatar

Marius Dissimilis

  • @Pubfinity
  • Vilnius, Lithuania
View GitHub Profile
@Dissimilis
Dissimilis / directory_backup.sh
Last active July 3, 2023 11:22
Bash script to backup directory while keeping only X backups
#!/bin/bash
# Check if the input directory, output directory, and filename prefix are provided
if [ "$#" -ne 4 ]; then
echo "Makes backup of <input_directory> keeping last <retention> number of backups in <output directory>"
echo "Usage: $0 <input_directory> <output_directory> <filename_prefix> <retention>"
exit 1
fi
input_dir="$1"
@Dissimilis
Dissimilis / v.cs
Last active December 23, 2021 08:29
private static void Main(string[] args)
{
//string input = "34409157850";
//Console.WriteLine(ValidateControlDigit(input));
string filePath = "C:\\test\\natids.txt";
ReadFileValidateNationalID(filePath);
}
public static void ReadFileValidateNationalID(string filePath)
{
@Dissimilis
Dissimilis / HosCalculator.cs
Created September 23, 2021 13:22
Truck drivers hours of service calculator
void Main()
{
var rules = new List<BreakRule>();
rules.Add(new BreakRule {DrivingLimit = 8, Break = 0.5m, Remaining = 4});
rules.Add(new BreakRule {DrivingLimit = 11, Break = 10m, Remaining = 8});
rules.Add(new BreakRule {DrivingLimit = 60, Break = 34m, Remaining = 30});
CalculateTruckDrivingTime(39, rules).Dump();
@Dissimilis
Dissimilis / limitedQueue.cs
Created May 20, 2020 13:05
Queue with capacity limit
/// <summary>
/// Queue with limit (last items are removed when limit is reached)
/// </summary>
/// <typeparam name="T"></typeparam>
public class LimitedQueue<T> : ConcurrentQueue<T>
{
private object _syncRoot = new object();
private int? _maxCapacity;
@Dissimilis
Dissimilis / ForcedHmacSha512CryptoProvider.cs
Created May 13, 2020 07:16
ForcedHmacSha512CryptoProvider
/// <summary>
/// This class is required to force accepting JWT signed only with HS512 algorithm
/// Startup.cs:
/// var key = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("123")) {CryptoProviderFactory = new CryptoProviderFactory() { CustomCryptoProvider = new ForcedHmacSha512CryptoProvider() }};
/// </summary>
public class ForcedHmacSha512CryptoProvider : ICryptoProvider
{
public bool IsSupportedAlgorithm(string algorithm, params object[] args)
{
//2 args - Request to create SignatureProvider
@Dissimilis
Dissimilis / NationalIdValidator.cs
Last active November 30, 2021 09:45
Lithuanian national id validator in C# .NET. Lietuviško asmens kodo validavimas.
//Fastest c# nationalid validator with birthdate extraction
public static class NationalIdValidator
{
public static bool ValidateNationalId(string nationalId, out DateTime? birthdate)
{
birthdate = null;
if (nationalId.Length != 11 || !long.TryParse(nationalId, out long nid))
return false;
return ValidateNationalId(nid, out birthdate);
}
@Dissimilis
Dissimilis / gilded_rose_simple.cs
Created December 9, 2019 14:10
gilded_rose_simple
using System.Collections.Generic;
namespace csharp
{
public class GildedRose
{
IList<Item> Items;
public GildedRose(IList<Item> Items)
{
this.Items = Items;
@Dissimilis
Dissimilis / Program.cs
Created January 4, 2018 18:47
Console output sticky lines
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main()
{
@Dissimilis
Dissimilis / CircularBufferCounter.cs
Created November 18, 2016 16:25
Simple circular buffer counter per time
/*
This is stripped version of https://gist.github.com/Dissimilis/b1e848524c841c1617b0
It is not thread safe to only some extent, but we don't care in this use case
*/
public class CircularBufferCounter
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct SecondCount
{
public SecondCount(long ticks, int count)
@Dissimilis
Dissimilis / ReverseProxyMiddleware.cs
Created November 12, 2016 18:48
Removes reverse proxy headers from request. Replaces connection IP and request IsHttps properties from CloudFlare headers.
using System;
using System.Net;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Primitives;
namespace X
{