Skip to content

Instantly share code, notes, and snippets.

View altbodhi's full-sized avatar
🏠
Working from home

altbodhi

🏠
Working from home
View GitHub Profile
@altbodhi
altbodhi / githubEvents.fsx
Created June 21, 2023 12:58
Скрипт на F# для получения событий репозитария
(*
Для запуска на виднос выполнить команду:
dotnet fsi --exec githubEvents.fsx
*)
#r "nuget: FSharp.Data"
open FSharp.Data
let [<Literal>] url = "https://api.github.com/networks/radzenhq/radzen-blazor/events"
type Events = JsonProvider<url>
@altbodhi
altbodhi / xfce_fsharp_wallpaper.fsx
Last active March 4, 2023 13:07
F# script for xfce wallpaper picture of day
#r "nuget: FSharp.Data, 5.0.2"
open System
open System.Diagnostics
open FSharp.Data
open System.IO
let [<Literal>] feedUrl = "https://peapix.com/bing/feed"
type BingoImage = JsonProvider<feedUrl>
let out = Path.Combine(__SOURCE_DIRECTORY__, "bing")
@altbodhi
altbodhi / big_file_sort_in_csharp.cs
Created August 22, 2022 02:55
Very simple code for sorting big text file in csharp
/*
2_000_000 => 16 sec
5_ => 32
10_ => 1:10
20_ => 2:58
40_ => 13:44 file size = 2.5 Gb
*/
using System.IO;
using System.Diagnostics;
using System.IO;
using System.Diagnostics;
using static System.Console;
var sw = Stopwatch.StartNew();
var alf = get_alf();
do_it(2_000_000);
sw.Stop();
WriteLine(sw.Elapsed); // <= 00:00:13.4216229 it is very fast! fantasctic!
char[] get_alf()
@altbodhi
altbodhi / stupid_file_sort_in_fsharp.fsx
Created August 19, 2022 01:48
Реализация тестового задания на примере https://github.com/podkolzzzin/Stream.Profiling
open System
open System.IO
let num () = Random.Shared.Next(0, 10_000)
let alf =
[| ' ' |]
|> Array.append [| 'A' .. 'Z' |]
|> Array.append [| 'a' .. 'z' |]
@altbodhi
altbodhi / micro_bench.n
Created July 14, 2022 02:39
Compare two equivalent of skip loop function with different paradigm: imperative and functional
using System;
using System.Console;
using System.Collections.Generic;
using System.Diagnostics;
def skip_loop(counter, skip, max, idx, lst) {
if (idx > max) lst
else
if ( counter >= skip )
skip_loop(1, skip, max, idx + 1, idx :: lst)
@altbodhi
altbodhi / skip_loop.n
Created July 13, 2022 13:07
The skip loop with Nemerle.
using System.Console;
def skip_loop(counter, skip, max, idx, lst) {
if (idx >= max) lst
else
if ( counter >= skip )
skip_loop(1, skip, max, idx + 1, idx :: lst)
else
skip_loop(counter + 1, skip, max, idx + 1, lst)
}
@altbodhi
altbodhi / app.nproj
Created July 6, 2022 07:08
minimal proj file for nemerle under dotnet core
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<NoStdLib>True</NoStdLib>
<OutputType>exe</OutputType>
<OutputPath>bin</OutputPath>
<TargetFrameworkIdentifier>.NETCoreApp</TargetFrameworkIdentifier>
<TargetFrameworkVersion>6.0</TargetFrameworkVersion>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
@altbodhi
altbodhi / ConsoleUtils.fsx
Created February 9, 2022 03:53
Модульный подход к разработке на примере программы на языке F#
let color col =
let old = System.Console.ForegroundColor
System.Console.ForegroundColor <- col
{ new System.IDisposable with
member it.Dispose() = System.Console.ForegroundColor <- old }
let red () = color System.ConsoleColor.Red
let cyan () = color System.ConsoleColor.Cyan
let green () = color System.ConsoleColor.Green
type State =
| Ping
| Pong
type Command = | Send
type Event = | Received
let apply item =
function