Skip to content

Instantly share code, notes, and snippets.

@ArtemAvramenko
ArtemAvramenko / GetAnsiEncodingByLCID.cs
Created April 24, 2023 18:30
Get ANSI Encoding by LCID in .NET Framework
using System.Runtime.InteropServices;
using System.Text;
namespace App.Encoding
{
class Program
{
[DllImport("kernel32.dll")]
static extern int GetSystemDefaultLCID();
@ArtemAvramenko
ArtemAvramenko / regex-validated-strings.ts
Last active August 7, 2024 19:34
Regex-validated strings in TypeScript
const isDevMode = () => true;
type ValidatedString<T extends string> = string & {
[K in keyof string] : K extends `as${string}String` ? never : string[K]
} & {
readonly __format: T
};
/*
eslint-disable
@ArtemAvramenko
ArtemAvramenko / ExtractZip.cs
Last active April 5, 2023 20:34
Extract zip file with backslashes in .NET C#
private void ExtractZip(string zipPath, string folderPath)
{
using var zip = ZipFile.Open(zipPath, ZipArchiveMode.Read);
foreach (var entry in zip.Entries)
{
var correctPath = entry.FullName.Replace("\\", "/");
var extractedFileInfo = new FileInfo(Path.Combine(folderPath, correctPath));
var entryDirectory = extractedFileInfo.Directory!.FullName;
if (!Directory.Exists(entryDirectory))
{
@ArtemAvramenko
ArtemAvramenko / parseTime.js
Last active March 7, 2023 10:27
Parses text as time in JavaScript
function parseTime(s, pmByDefault) {
const match = (s || '').toLowerCase().match(/^[^0-9]*([0-9]+)([^0-9]*([0-9]*)(.*))$/);
if (!match) {
return null;
}
let mins = 0;
let hours = 0;
if (match[3]) { // strings like '12:34'
@ArtemAvramenko
ArtemAvramenko / mask-email.js
Last active February 8, 2023 10:01
Masks email with asterisks/bullets in Node.js
/** Masks email, e.g. [email protected] as j•••e@g•••m **/
function maskEmail(email) {
function mask(segment) {
const hider = '•••';
let result = '';
if (segment) {
result = segment[0] + hider;
if (segment.length > 2) {
result += segment[segment.length - 1];
@ArtemAvramenko
ArtemAvramenko / GetAllFiles.cs
Last active May 26, 2023 20:05
Get all files in all subfolders by regexp mask in C#
private const string BaseDir = @"C:\Users\username\Desktop\dir";
private static readonly Regex _files = new(
@".*\.(xml)$",
RegexOptions.IgnoreCase | RegexOptions.Compiled);
private static readonly Regex _ignoredDir = new(
"^(node_modules|bin|obj)$",
RegexOptions.IgnoreCase | RegexOptions.Compiled);
@ArtemAvramenko
ArtemAvramenko / ignoreWhitespaces.js
Last active January 23, 2024 09:25
Ignoring whitespaces in Javascript RegExp patterns
/**
* ignores comments and whitespaces in regexp patterns,
* similar to RegexOptions.IgnorePatternWhitespace in C#
* or Pattern.COMMENTS in Java.
* @example
* // returns /[a-z][0-9]+/i
* new RegExp(ignoreWhitespaces`
* [a-z] # any latin letter
* [0-9]+ # any number
* `, 'i');
@ArtemAvramenko
ArtemAvramenko / truncate-object.js
Created October 18, 2022 11:07
Truncates long strings and arrays in object. It is useful for logging
const truncateObject = o => {
if (!o) {
return o;
}
if (typeof o === 'string') {
return o.substring(0, 64);
}
if (Array.isArray(o)) {
return o.slice(0, 5).map(x => truncateObject(x));
}
@ArtemAvramenko
ArtemAvramenko / gravatar.sql
Created February 8, 2022 11:15
T/SQL Generate Gravatar url from email
SELECT GravatarUrl =
'https://www.gravatar.com/avatar/' +
LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', '[email protected]'), 2)) +
'?s=48&d=https%3A%2F%2Fmyserver.test%2Fdefault.png'
@ArtemAvramenko
ArtemAvramenko / GetUniqueStringValue.cs
Created October 7, 2021 12:21
Get unique array of letters in C#
public static string GetUniqueStringValue(int size)
{
var data = new byte[size];
using var crypto = RandomNumberGenerator.Create();
crypto.GetBytes(data);
for (var i = 0; i < size; i++)
{
data[i] = (byte)('a' + data[i] % 26);
}
return Encoding.ASCII.GetString(data);