- dining philosophers problem - many threads accessing the same memory lead to problems like deadlock / livelock
- locks? hard to think about, don’t compose, priority inversion
- thread-safe hash table doesn’t mean you can atomically move an entry from one hash table to another
- transactions in memory! ACI from ACID (memory isn’t durable)
- transactional memory does compose!
- but wait, rolling back a transaction can get really expensive, how is this a benefit?
- only allowed to perform operations that can be rolled back / undone
- Haskell already does this in the type system, non-issue there
- optimistic concurrency
- no work completed while waiting for a lock
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Edit this configuration file to define what should be installed on | |
# your system. Help is available in the configuration.nix(5) man page | |
# and in the NixOS manual (accessible by running ‘nixos-help’). | |
{ config, pkgs, ... }: | |
{ | |
imports = | |
[ # Include the results of the hardware scan. | |
./hardware-configuration.nix |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[root@nixos:~]# nixos-rebuild switch | |
building Nix... | |
building the system configuration... | |
Warning: do not know how to make this configuration bootable; please enable a boot loader. | |
activating the configuration... | |
setting up /etc... | |
setting up tmpfiles |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# LANGUAGE OverloadedStrings #-} | |
module Main where | |
import Control.Applicative | |
import Data.Attoparsec.Text hiding (take) | |
import Data.Maybe | |
import Data.Monoid | |
import qualified Data.Sequence as S | |
import qualified Data.Text.IO as TIO | |
main :: IO () |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# for long running commands | |
function try () { | |
tally $* && fin || die; # cargo install tally, replacement for time | |
} | |
function play_sound () { | |
aplay -N -q $HOME/.bin/$1.au | |
} | |
function fin () { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[alias] | |
# Checkout a pull request branch on an upstream project. It | |
# handles PRs that get rebased as well. | |
# | |
# git pr 3 | |
pr = "!f() { git checkout master; git branch -D pr/$1 || true; git fetch origin refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f" | |
dpr = "!f() { git checkout develop; git branch -D pr/$1 || true; git fetch upstream refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f" | |
pur = "!f() { git checkout master; git branch -D pr/$1 || true; git fetch upstream refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# LANGUAGE OverloadedStrings #-} | |
module Main where | |
import Data.Text (Text) | |
import qualified Data.Text as T | |
import qualified Data.Text.IO as TIO | |
import Data.Attoparsec.Text | |
main :: IO () | |
main = do input <- TIO.readFile "input3.txt" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#+name: layout | |
#+RESULTS: layout-calc | |
| q | w | e | r | t | y | u | i | o | p | | |
| | a | s | d | f | g | h | j | k | | | |
| | z | x | c | v | b | n | m | | | | |
#+name: layout-calc | |
#+BEGIN_SRC emacs-lisp :var table=layout | |
(message table) | |
#+END_SRC |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; Added by Package.el. This must come before configurations of | |
;; installed packages. Don't delete this line. If you don't want it, | |
;; just comment it out by adding a semicolon to the start of the line. | |
;; You may delete these explanatory comments. | |
(package-initialize) | |
;; make sure use-package is installed | |
(require 'package) | |
(add-to-list 'package-archives | |
'("melpa" . "https://melpa.org/packages/") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
Pablo buys popsicles for his friends. | |
The store sells single popsicles for$1 each, 3-popsicle boxes for$2, and 5-popsicle boxes for$3. | |
What is the greatest number of popsicles that Pablo can buy with$8? | |
""" | |
from z3 import * | |
box1pop, box3pop, box5pop =Ints('box1pop box3pop box5pop') | |
pop_total=Int('pop_total') | |
cost_total=Int('cost_total') |