Skip to content

Instantly share code, notes, and snippets.

@michalc
michalc / echo.hs
Last active Feb 26, 2017
Simple echo server in Haskell that accepts multiple connections
View echo.hs
import Network.Socket hiding (send, sendTo, recv, recvFrom)
import Network.Socket.ByteString
import Control.Concurrent
port = 4242
incomingBufferSize = 4096
main = do
-- Listen
sock <- socket AF_INET Stream 0
@michalc
michalc / echoDelay.hs
Created Feb 26, 2017
Simple delayed echo server in Haskell that accepts multiple connections
View echoDelay.hs
import Network.Socket hiding (send, sendTo, recv, recvFrom)
import Network.Socket.ByteString
import Control.Concurrent
port = 4242
incomingBufferSize = 4096
delayMicroseconds = 500000
main = do
-- Listen
@michalc
michalc / sudoku.hs
Created Dec 31, 2017
Haskell Sudoku solver
View sudoku.hs
import Control.Lens
import Control.Monad.Loops
import Control.Monad.State.Strict
import Data.List
import Data.List.Split
import Data.Maybe
data SudokuValue = S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9 deriving (Eq, Enum)
instance Show SudokuValue where
show s = show $ fromJust (s `elemIndex` [S1 ..]) + 1
@michalc
michalc / aws_sig_v4_headers_aiohttp_s3_put.py
Created Oct 28, 2018
PUTting an object to S3 using aiohttp and aws_sig_v4_headers
View aws_sig_v4_headers_aiohttp_s3_put.py
import asyncio
import os
import aiohttp
from aws_sig_v4_headers import aws_sig_v4_headers
async def main():
method = 'PUT'
host = 's3-eu-west-1.amazonaws.com'
@michalc
michalc / path_lock_global_exclusive.py
Last active Nov 22, 2018
Path lock using a global exclusive lock
View path_lock_global_exclusive.py
import asyncio
import contextlib
class PathLock():
def __init__(self):
self.lock = asyncio.Lock()
@contextlib.asynccontextmanager
async def __call__(self, read, write):
@michalc
michalc / asyncio_read_write_lock.py
Last active Nov 23, 2018
Python asyncio read-write lock, using a generic first-in-first-out lock
View asyncio_read_write_lock.py
import asyncio
import collections
import contextlib
class Read(asyncio.Future):
@staticmethod
def is_compatible(holds):
return not holds[Write]
class Write(asyncio.Future):
@michalc
michalc / path_lock_local_read_write_ancestor.py
Last active Nov 25, 2018
Path lock using a read/write/ancestor lock on each ancestor path
View path_lock_local_read_write_ancestor.py
import asyncio
import contextlib
import weakref
from fifolock import FifoLock
class ReadAncestor(asyncio.Future):
@staticmethod
def is_compatible(holds):
return not holds[Write]
@michalc
michalc / path_lock_local_read_write.py
Last active Nov 25, 2018
Path lock using a read/write lock on each ancestor path
View path_lock_local_read_write.py
import asyncio
import contextlib
import weakref
from fifolock import FifoLock
class Read(asyncio.Future):
@staticmethod
def is_compatible(holds):
return not holds[Write]
@michalc
michalc / path_lock_global_read_write.py
Last active Nov 25, 2018
Path lock using a global read/write lock
View path_lock_global_read_write.py
import asyncio
import contextlib
from fifolock import FifoLock
class Read(asyncio.Future):
@staticmethod
def is_compatible(holds):
return not holds[Write]
@michalc
michalc / getaddrinfo_via_libc.py
Last active Dec 2, 2018
Own implementation of getaddrinfo by calling libc directly from Python + ctypes, supporting IPv4 and IPv6 (experimental)
View getaddrinfo_via_libc.py
from ctypes import (
byref,
c_char_p, c_uint32, c_uint16, c_ubyte,
CDLL,
POINTER,
pointer,
Structure, Union,
sizeof,
)
import platform
You can’t perform that action at this time.