- Published on
Some tools I found useful
- Authors
- Name
- Jack Youstra
- @jackyoustra
Author's note: it's unclear if this should be a post. I may yet move it, but I'll try and make this page a permalink?
- File and Directory Management
- Git Tools
- GPU Monitoring
- General dev tools
- LLM tools
- Swift tools
- Mobile dev tools
- Web dev tools
- Binary analysis
- Rust creates
- Misc
As a developer and tools enthusiast, I've come across various things that have significantly improved my productivity and / or QoL. This list compiles some of the most useful ones I've encountered, along with brief descriptions and links. Whether you're a seasoned computer user or just starting out, you might find something here to enhance your own toolkit.
File and Directory Management
ripgrep: Grep (a finder) but way better. Respects .gitignore, ignores binary files, and much more!
- multithreaded
rg -tpy foo
limits your search to Python filesrg -z foo
includes contents of compressed files in your search- Regex support
- Unicode support (grep doesn't)
- Common options md (symbolic links, sort, etc)
- Quickly make a tree of filesizes in a directory
- No interactive mode! For that, use ncdu instead
ncdu - interactive du / dust
duf - A better df
bat - A better cat (highlighting and git)
fd - A better find. Stop doing
find . | rg <name>
exa - A better ls.
xsv - Command line csv query engine
hyperfine - Quick command line benchmarking
Jdupes:
- Theory: if you have two files, A and B, and they're both the same, but you don't want to hardlink them because if you change one you don't want it to reflect on the other, you're usually in a tough spot. Some filesystems (notably APFS - the mac file system) support cloning, though, which means that the copy is instead delayed, it's treated as a hardlink until there's a write to the contents of either file, at which point the copy actually happens and there's a write to the second file as the new file
- Jdupes does this in reverse: it scans a file structure, identifies duplicates, and replaces the duplicates with clones.
- It can do this with hardlinks and softlinks on non-cloning filesystems, but I'd discourage it as it isn't a pure space optimization (can change behavior)
- Test if your filesystem supports copy on write by running
cp –reflink=always <trivial> <trivial copy>
. If it fails, no support. If it succeeds, support.
- Test if your filesystem supports copy on write by running
- Not good for reliable performance, but really shouldn't matter
Git Tools
- Gitkracken: a nice git explorer + cool commit graph (ai commit messages now too). Free for students and most repos. Has a vscode extension gitlens
- GitLens
- Clone blobless by default and shallow if you really just need a one-shot: https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/
GPU Monitoring
- Nvidia-smi+: makes a nvidia smi window in xcode (also can do amd gpus)
- Nvtop: better nvidia-smi
General dev tools
- Quicktype: translate any json to parsing code + types, or just types. Supports most languages.
- difftastic - structural diff tool
- mold - faster linker
LLM tools
- LLM visualizer The best LLM visualization tool. I use it to reason about how LLMs work, much easier than grokking math.
- code2prompt: Code repository to prompt. A nice preamble to attach to code queries!
- llm-explorer - a tool for finding useful llms for whatever task you may have.
- Interact with streams as if they were json
- jq allows you to query json on command line too
- Outlines - constrained LLM generation (simple)
- Guidance - constrained LLM generation (complex) (or, if you want to do it manually)
- Ollama - really quickly and easily run models! Can run most open source models at most quantization levels (via llama.cpp)
- Run the server:
OLLAMA_FLASH_ATTENTION=1 OLLAMA_MAX_LOADED_MODELS=0 OLLAMA_NUM_PARALLEL=0 OLLAMA_DEBUG=1 OLLAMA_GRAMMAR=true ./ollama serve
- Pull:
ollama pull llama3:8b-instruct-q8_0
- Make requests
- CLI:
ollama run
(can just chat in terminal) - OpenAI compatible API: just point the openai sdk to localhost:11434
- Slightly different if not localhost, some additional setup required
- CLI:
- Runpod has out of the box support for an ollama client
- Run the server:
- Quicktype -> ollama (a fork thereof): see my blog post for a guide, but you can constrain LLM output to fit a typescript type (or any json schema). Useful for running experiments (for example, my implementation of TAP had no error handling / retry code needed).
- NB: for now, you're going to have to manually build ollama for this. It's not too tricky and you can use neat flags, but the grammar PR hasn't been merged yet, so either build a branch yourself or ask me for mine (be more than happy to do it).
Swift tools
- swift-format - a tool for formatting swift code.
- SwiftFormat - a tool for formatting swift code. I use this one.
- Periphery - identify unused swift code.
- Swift Regex - a tool for working with regex in swift and building them.
- swift-ast-explorer - a tool for exploring the swift abstract syntax tree. Useful for macros!
- Async Channels - go channels, in Swift. Performant.
- DLKit - Very convenient fishhook wrapper to interpose method calls in dylibs.
- Swift Injection - Runtime method replacement in swift. Lots of requirements but VERY fast (per-file compilation times instead of module).
- HotReloading - A more direct version of the prior package.
- swift-url-routing - Typesafe Swift URL router / builder
- SwiftTrace - A runtime tracing tool for Swift. Trace and filter method invocations to see what's going on in the app. Useful for monkey patching.
- UtilityType - TypeScript utility types for Swift.
- SwiftUI-Introspect - Runtime introspection of SwiftUI views.
- lumos - My preferred tool for method swizzling. Not very good, probably shouldn't use this one.
Mobile dev tools
- Expo - an extension of react native that makes it very easy to develop and test cross platform react native apps. IMO, the best way to write a mobile app.
- Flipper - a tool for debugging react native apps.
- Chisel - an lldb environment of useful commands for iOS lldb (such as open a UIImage in preview, print the view hierarchy, etc).
- TCA - A good reducer framework for Apple SDKs.
- Swift Snapshot Testing - Write snapshot tests for swift.
- SnapshotPreviews-iOS - Turn your SwiftUI previews into snapshot tests!
- AccessibilitySnapshot - Snapshot test accessibility
- ViewInspector - Runtime inspection of SwiftUI views
- Prefire - Storybook, but for SwiftUI
- swiftui-navigation-transitions - Custom transitions in SwiftUI
Web dev tools
- wired-elements - a cute components library with a handdrawn look.
Binary analysis
- godbolt - The compiler explorer. A tool for testing and optimizing code with different compilers and different flags. A cool example.
- explore opt pipelines
- view microarchitecture implications on diff arches
- dogbolt - The reverse of godbolt, a decompiler explorer.
- bloaty - a tool for analyzing binary code.
- capa - a first guess at a binary's capabilities.
Rust creates
- serde - a rust library for serializing and deserializing data.
- tokio - a rust runtime for writing concurrent code.
- async-std - a rust runtime for writing concurrent code.
- wgpu - a rust library for writing cross-platform GPU code.
- naga - a universal shader compiler (any sl to any target language).
- bevy - a rust ECS game engine. Really nice community!
- proptest - a rust library for property based testing.
- cargo-watch - a rust library for watching cargo projects and running cargo commands when files change.
- cargo-fuzz - a rust library for fuzz testing.
- llvm-plugin-rs - out of tree llvm plugin framework! Write compiler passes without having to clone and build llvm.
- insta - snapshot testing
- kani - Rust formal verification engine, for times when proptesting and fuzzing won't cut it. Really nice ergonomics!
Misc
- Obsidian Dataview - Turn your markdown notes into searchable databases and query over them.
- Alfred (hackernews plugin)
- Screen
- Bun.sh - if you ever have to run
npm
anything ornpx
anything, just runbun
orbunx
instead. It's much faster. - Turbolizer - a v8 tool for analyzing and optimizing javascript code by looking at the JIT passes.
- d8 - a v8 shell for running javascript and learning about the v8 engine and the optimizations it performs.
- regex101 - a tool for testing regex and building them. I use this one, no particular attachment.
- regexr - another tool for testing regex and building them.
- v86 - Quickly run (small) OSes in the browser
- Ball - A ball that lives in your dock. Quite fun.
- Money stuff - Free fun "weird things in finance" newsletter.