ea5db41722
Maybe this is my recency bias writing, but "Being Popular" may be one of my favorite Paul Graham essays that I've read. "Being Popular" outlines Paul Graham's ideas about what an ideal programming language would look like. This essay took me 1-2 hours to read, but it was worth the time. Here are some quotes that I enjoyed (not sorted in any meaningful order): "A friend of mine rarely does anything the first time someone asks him. He knows that people sometimes ask for things that they turn out not to want. To avoid wasting his time, he waits till the third or fourth time he's asked to do something; by then, whoever's asking him may be fairly annoyed, but at least they probably really do want whatever they're asking for." "In this particular case there is a way to finesse our way out of the problem. If we treat data structures as if they were functions on indexes, we could write (a x y) instead, which is even shorter than the Perl form. Similar tricks may shorten other types of expressions." "The latest hot language, Python, is a watered-down Lisp with infix syntax and no macros." "Hackers would think a lot more highly of Lisp if Common Lisp had powerful string libraries and good OS support." "I think language designers would do better to consider their target user to be a genius who will need to do things they never anticipated, rather than a bumbler who needs to be protected from himself." Some take-aways: - Let's refer to Python as "Diet Lisp" from now until the end of time. - Fight to keep your user-base small for as long as you can. Only fools want large user bases. - Rich Hickey definitely read this article; he took some ideas with him; he left some ideas behind. - Focus language design efforts around defining rich standard libraries, especially for string manipulation. - Worry little about supporting backwards compatibility; design a language that can and is often rewritten. - Shift the burden of optimizing code performance to the user by designing a powerful runtime profiler that is tightly integrated into the language runtime. - Minimize the costs users face when experimenting: ensure that your language is interactive; ensure users can create REPLs quickly. - Support OS-level libraries (think about Go). - Maximize introspection and hackability. What a useful read! |
||
---|---|---|
advent-of-code | ||
blog | ||
clojure | ||
configs | ||
deploy | ||
emacs | ||
fish | ||
go | ||
gopkgs | ||
haskell-file | ||
java | ||
lisp | ||
monzo_ynab | ||
nixos | ||
org | ||
scratch | ||
third_party | ||
tools | ||
travel_hitlist | ||
.envrc | ||
.gitignore | ||
default.nix | ||
elisp-conventions.md | ||
keybindings.md | ||
Makefile | ||
README.md | ||
shell.nix | ||
snippets.md | ||
utils.nix |
briefcase
Welcome to my briefcase: my monorepo.
I'm attempting to amass a collection of packages that span a variety of languages while minimizing the costs of sharing the code. This also includes configuration for things like emacs, tmux, ssh, and other tools.
Installation (Deprecated)
The installation instructions here are deprecated. I'd like to manage packaging and installing with Nix, but that is only partially supported at the moment.
wpgtk and gvcci
$ apti python-pip3
$ gclone deviantfero/wpgtk
$ cd ..
$ gclone FabriceCastel/gvcci
- TODO: Integrate Emacs themes into wpgtk.
- TODO: Integrate Vim themes into wpgtk.
- TODO: add these to the install script
$ ln -s ~/Dropbox/.password-store ~/.password-store
$ ln -s ~/Dropbox/bin ~/bin
$ import_gpg $DOTFILES/configs/shared/gpg/.gnupg/exported
- Clipmenu
Clipmenu is a service to store a history of copied strings.
Install it as:
$ cd ~/programming && g clone cdown/clipmenu
- TODO: Include
~/.config/systemd/user
inconfigs/shared
. - TODO: Obviate installation.
Ensure that it runs on startup:
$ cd ~/programming/clipmenu
$ cp clipmenu clipmenud clipdel ~/bin # You may not need to do this step.
$ vim init/clipmenud.service
# Change the ExecStart line to point to ~/bin/clipmenud
$ cp init/clipmenud.service ~/.config/systemd/user/clipmenud.service
$ systemctl --user start clipmenud
$ systemctl --user enable clipmenud # This step may be optional.
$ reboot
$ systemctl --user status clipmenud # Verify installation worked.
- Install Dropbox
$ cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
$ crontab -e # add the following line...
@reboot ~/.dropbox-dist/dropboxd 2>&1 >/tmp/dropbox.log
$ reboot # 1/3 verify installation
$ pgrep dropbox # 2/3 verify installation
$ dropbox.py status # 3/3 verify installation
- Authorize computer to access GitHub
$ ssh-keygen -t rsa -b 4096 -C 'wpcarro@gmail.com'
$ eval $(ssh-agent -s)
$ ssh-add ~/.ssh/id_rsa
$ xclip -sel clip <~/.ssh/id_rsa.pub
$ browse github.com # paste ssh public key in settings
- Install Vundle, nix-env
$ ln -s ~/Dropbox/Vundle.vim ~/.config/nvim/bundle/Vundle.vim
$ cat ~/Dropbox/install_nix.sh | sh
$ for p in $(cat nix-env.txt); do
> nix-env -i "$p"
> done
- Install dotfiles
- TODO: include steps 2-4 in the
make install
command.
Missing the following dependencies:
stow
neovim
bat
exa
fasd
opam
ghcup
ripgrep
fzf
fd
hub
pass
$ cd ~/Dropbox/dotfiles
$ DOTFILES="$(pwd)" make install
- Install Node dependencies
For now, this deserves its own section since it isn't automated.
$ gclone tj/n # clone repo
$ sudo make install # build from source
$ n stable # install the stable version of node
- TODO: support dependencies like terminal themes
SSHFS
TODO: add explanation about unison
, rsync
, etc.
SSHFS enables seamless file transfers from your local machine to a remote machine.
Usage
Assuming your remote machine is configured in your ~/.ssh/config
(see above),
you can mount your remote machine's home directory on your local machine like
so:
$ mkdir ~/ec2
$ sshfs ec2:/home/ubuntu ~/ec2 -o reconnect,follow_symlinks
Now your remote machine's home directory can be accessed using the ~/ec2
directory. This directory can be treated as if it were an ordinary local
directory. To illustrate how easy it is to use, let's install Vundle
onto our
remote machine.
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/ec2/.vim/bundle/Vundle.vim
Voila! We now have Vundle
installed on our ec2 instance without needing to
manually SSH into that machine.
GnuPG
To install GPG run the following:
$ import_gpg
TODO: create a job that runs this periodically.
$ export_gpg
Reference
- sec: secret key
- pub: public key
- ssb: secret sub-key
- sub: public sub-key
Terminals and Fonts
Any terminal or font I choose should pass the following checks:
$ test_true_color
$ test_16_colors
$ test_text_formatting
$ test_unicode
$ test_emojis
Ligatures
If using a font with ligature (e.g. Hasklig) assert that your terminal also support ligatures.