Linux Productivity Tools (2019) [pdf]
usenix.org
usenix.org
1. Xournal to annotate PDFs (aka sign contracts without printing them and scanning them back).
2. LibreOffice of course for most document related work
3. OBS Studio for recording webcam videos along with screen sharing
4. Audacity for audio editing (heck, I used this even when I was on Mac OS X)
5. Technically I've tried video editing with OpenShot, but do find myself back at Final Cut Pro X on my now 6 year old Macbook Pro for that for now
6. pdfsandwich and Tesseract OCR for OCR/turning PDFs into searchable files
7. Chrome/Firefox are both first class and run all the modern day web application stuff
8. Tons and tons and tons of command line stuff that Linux is well known for
9. QEMU/KVM for hosting arbitrary virtual machines with almost native performance
10. GnuCash for double entry accounting for personal and volunteer society finances. I used GnuCash for a while to run the S Corp accounting when we were on Freshbooks and Harvest, but we've since graduated to QuickBooks Online for better invoicing and CPA office professional services support.
11. GIMP for photo editing
12. Inkscape for messing around with vector graphics
Once you get past locating the tools to do your job. Linux has everything.
if possible, including capturing footage form the screen (screen casts).
> 5. Technically I've tried video editing with OpenShot, but do find myself back at Final Cut Pro X on my now 6 year old Macbook Pro for that for now
Have you tried Kdenlive lately?
(I say this as a professional mathematician, who lives his life in LaTeX. It's fantastic for writing math, and trusting that all the kerning etc. will be handled properly. However, when I want any formatting tricks, even after 25 years I still have to turn to my local TeX guru, who more often than not says "you don't really want to do that with TeX.")
Yes, exactly! As I said:
> if you try to trick it into doing something that someone out there hasn't already written a package for.
There's an incredible package library out there, rivalling CPAN, and I love TeX and won't speak against it; but, if you try to step outside the package library (or even if you try to compose packages in sensible-seeming ways), as is very easy to do if you try to view TeX as a general-purpose typesetter, it rapidly becomes clear that there's a lot of magic going on that those packages hide away (more or less neatly, depending on their maturity), and that is hard to reproduce on your own, or add to.
5. You should try [1] "Kdenlive", it has it's quirks (as all linux tools do) but it's probably the best open-source Linux video editor out there.
But you now get Davinci Resolve for free on Linux. It blows the FOSS competition out of the water, being a software with probably millions of dev hours funded by Hollywood studios behind it. Blackmagic decided to go the way of providing the basic tool for free in order to build user base amongst hobby video editors, and it's not a bad move IMO.
Happy to see the recommendations here for video editors on Linux, will give some of them a try.
I wanted to annotate some text and OpenShot doesn't really work well for that as I can't place the text freely and am limited to a few templates.
Kdenlive does support MP4 as source assets, Resolve free only does ProRes MOVs and such. It's just an extra step with ffmpeg but still.
I wish that there was a better video editing alternative for a non-mac... Openshot and the others I tried crash too much (Openshot crashed for me today while trying to do simple trim)
I use arch linux, so whatever the latest version released on that.
this is why opensource that is just a cargo cult to copying even the bad decisions of commercial software harms more than help.
id be fine tasting a nice indian meal made with vegetables. but instead I get gnome changing the side of the window close buttons (while at the same time removing the options dialog to change it back) just because the designer du jour liked copying osx instead of windows. it's fake-meat all over again.
And even ignoring that detail, the side the window buttons are on is entirely made up. Windows isn't the real OS with OSX as the fake windows clone. The gnome philosophy is to support a minimal number of configurations but to make sure they are all tested and work perfect. Other DEs allow full customizability but I have found them to be buggy.
How many desktop environments actually let you switch the window button side? I haven't seen one, and if you know one, why are you using gnome instead of it?
KDE does. And Gnome used to.
In the end, though, KDE is "just like Linux" in the philosophy of "you don't like it? change it!"
Gnome tweaks -> Window titlebars
How exactly do you think a comment like this contributes to the discussion? Someone posted a list of tools they use. You reply with this. The world would be better off without this type of information-free negativity.
But TFA focused on fundamental command line tools and shells, not office productivity apps.
I boot Win10 for Steam games, Fusion360 and AutoCAD.
Their drivers on Windows aren't that great, either.
and 13. Krita for digital painting
Care to share any details about pdfsandwich and tesseract? As in, do you have some scripts to glue it all together?
But you know what bothers me? Virt-manager is mature and feature-complete, and RedHat has discontinued it in favour of cockpit.
Cockpit is cool and I like it, but it's not as complete as virt-manager.
https://blog.agchapman.com/configuring-gnome-boxes-vms-using...
Scribus also available for Linux as AppImage.[1]
I switched from Xournal to Xournal++ four weeks ago and it's been a blessing.
And this is what covered by "Linux Productivity Tools" slides.
Checkout Olive video editor.[0]
Will check it out. For PDFs I mostly use Master PDF Editor
2. LibreOffice of course for most document related work
For me LibreOffice is a bad nightmare. I use the commercial Softmaker.
6. pdfsandwich and Tesseract OCR for OCR/turning PDFs into searchable files
Good luck with that. My results with Tesseract were always abysmal. I use ABBYY Finereader with wine. I would pay for a native Linux version. They have a Linux command line tool that has a biblical price tag.
12. Inkscape for messing around with vector graphics
Inkscape is good. I wish they would still develop Xara XL
What I am missing in your List:
Recoll. Find Stuff on your computer. One of my most important tools.
https://cplx.vm.uni-freiburg.de/scantools/
Easy to install and use and works great.
[1] https://www.ghacks.net/2018/02/13/using-libreoffice-as-a-pdf...
my tiny tip to contribute:
for those who could never be bothered to remember the ctrl-commands for traversing words, but are familiar with `vi`-style movements: you can go one step above the suggestion in this deck with `set -o vi`.
Highly recommended if you use Vim regularly (and you can define the same escape key(s) for your terminal and vim instance). For me that was one of the biggest productivity boosts when doing editing and command line work.
YMMV, of course.
Like others, I use vi over emacs, but prefer emacs Readline bindings ... to a point. Full true editor at the shell is quite handy.
find / -name \*bashrc\*
locate bashrc
Faster because reading from a single binary cache file, updated nightly, rather than opening every directory inode under /. To force an immediate synchronous update of the cache: sudo updatedbAll in all, the idea is good, but I'm almost sure there are better implementations (even Windows has tools like 'Everything' which use a database but which gets continuously updated).
No, not instant, YMMV. On my mid-range laptop with SATA SSD:
$ time sudo updatedb
real 0m0.501s
user 0m0.247s
sys 0m0.218sAlong with ripgrep, I think GNU Parallel (covered in the slides) and htop (briefly discussed) are great additions to any Unix development environment.
The rest of the standard utilities have stood the test of time surprisingly well. But top is a bit wonky, xargs has many pitfalls and, as I said, ripgrep is great for speeding up some find-grep workflows.
Also, I recommend using fd as a replacement for find. It’s API is a bit easier to grok imo, and it’s similarly blazing fast.
fd/rg/fzf are the core tools I end up using most frequently, working in a big monorepo.
- Webstorm + Phpstorm: Amazing tools for web development
- Sublime text for simple text editing
- Meld for graphical diffs between files and directories. Very useful.
- Signal client: Using it more and more recently
- Spotify: That's not productivity though :)
- Joplin for markdown formatted note taking
- KeepassCX + FF extension: Works decently for password management. Though there's no solution for FF mobile as far as I know.
- Reaper for professional audio production (never liked audacity and ardour). There's also Bitwig which is more like Ableton live but quite expensive.
- Gimp: I use it but I don't like the user experience.
- Inkscape works pretty well for anything vector based
- Libreoffice: I tend to use calc regularly
- Darktable for raw image editing
- Arduino
- Figma for digital design (web-based, so not really linux)
- Nextcloud as file storage and for synching contacts and calendars.
- Zoom for video conferencing (need to try jitsi again though)
Not sure what mobile platform you use, but on Android I have been very happy with Keepass2Android (https://github.com/PhilippC/keepass2android). It uses the android password-manager API so you get autofill (or at least a quick-access button) on login fields in both apps and websites.
Edit: It also supports a lot of methods for syncing the keepass database between devices, I point it to a directory that's managed by Syncthing and it works pretty flawlessly.
Joplin is very good and has basic things like ctrl+f for finding withing a document that Standard Notes lack, but end to end encryption is baked in to SN where as it's somewhat trickier to set up in Joplin. Both are solid recommendations to check out though.
http://www.ivarch.com/programs/pv.shtml
It's basically "cat", but with a progress bar. Also useful for measuring IO speed and volume (e.g. decompression: `pv -c largefile | gzip | pv -c > /dev/null` )
[1]: screaming picked up by mic; detected maniacal CTRL-C'ing as immediate as it is futile; permanent loss of peer relationship to the project's cloud (indicating subsequent reformatting and/or booting-off-tall-building)
Tangent: although the portability and consistency of PDFs is nice, I'd love a browser extension that gave me a nicer view of slides that were exported as a PDF. I find there's something more satisfying about discrete pagination vs continuous scroll for these types of things.
cat /tmp/foo.json | python -m json.tool
https://docs.python.org/3/library/json.html#module-json.tool
It's a very flexible tool for filtering, querying and manipulating JSON data, but when run with no arguments, it performs a no-op transformation that just pretty-prints its input.
impossible to understate the value in: not frequently fucking up your ability to run the critical/mundane/everyday/musclememory commands you've come to rely on after maybe 100+ invocations/week as far back as you can remember just because someone you've never met wanted to bump the .ruby-version in your java monorepo
I’ve unfortunately often seen coworkers spend half an hour painstakingly crafting and debugging a jq query, that could have been cobbled together in a few minutes with grep and sed.
I think the issue is that jq’s interface makes it really hard to “narrow in” on the right solution, whereas grep is much more forgiving.
Or 'jq', if you include the binary name.
Hardly "bloated".
jq is something i've hated learning but powerful beyond tying grep and awk together.
jq is a tool, and like every tool, requires some upfront learning. Once mastered its much more productive than the grep/awk/friends solution.
Take this example JSON
<pre> { "code": 42, "items": [ { "type":"color", "name":"red", "rgb": [120, 2, 2 ]}, { "type":"color", "name":"green", "rgb": [2, 120, 2]} ] } </pre>
for instance, to grab the rgb field for the color green... jq -r '.items | .[] | select(.name=="green") | .rgb
I am implementing XPath in a tool called Xidel.
There the syntax for the example is much simpler: xidel - -e '?items ?* [?name="green"] ?rgb'
Depends what kabacha means with bloated. The XPath syntax is more verbose, but less cryptic
$ firefox --new-window somefile.json
The viewer does however suffer from poor scaling with file size. $ python3 -m json.tool test.json> Characters saved with "<"? 3. > Hours lost with accidental ">"? unbounded.
Preface: I'm confident on the shell & with my keyboard: I've been using shell redirects for a couple decades, learned touch-typing up to around 80WPM, and used to note-take math lectures live in latex. Yes, I have noclobber enabled. But...
I can't promise myself I'm on a machine configured that way OR that I won't typo this one on a file that really matters.
I kinda use of `cat` as a `immutability-please` command: it _creates_ a barrier/seam between this file and whatever I'm doing with it, such that I'm _guaranteed_ nothing downstream will mutate it (as long as everything only works on stdio).
In a kinda similar way: by starting with `cat x |` (or even just `cat x`, frequently!), the rest of that compound command is _input source independent_ (and even _ignorant_!) -- if I want to hook it up later to a `curl example.com/xyz.json`, I don't need to split it into separate commands/introduce temp files/etc. This is especially because I find myself doing a _really_ quick scan of the entire file ("did it return the actual object this time or just `{}`?"), then piling on transforms from there.
Something about doing `cat x | head` and then kill-wording to fill in `next-thing` feels faster and more consistent than `head x` and then `next-thing x`, maybe because the filenames are often much longer than the commands? Maybe I need a "go to start of line, forward-kill one word" hotkey?
tl;dr: i'm playing psychological games with myself and TBH not sure I'm coming out ahead.
grep <file -opts 'regex'
I think I still have the “wrong” preference, but I appreciate learning some new stuff!
https://www.freedesktop.org/software/systemd/man/os-release....
Biggest problem is that you don't even know they're there. You don't even know to look, what to look for. I seem to always stumble my way ass backwards into them, and then, be somewhat irritated that I didn't know them before.
Thanks for the deck, OP.
> GNU parallel is a shell tool for executing jobs in parallel using one or more computers. The typical input is a list of files, a list of hosts, a list of users, a list of URLs, or a list of tables.
Related, but I found https://micro-editor.github.io/ which tries to use shortcuts you'd expect in native Mac apps.
EDIT: I am god now
zsh: bindkey -v
bash: set -o vi
I'm on PopOS.
Coming from a Mac environment, I can't remember what the tool was that I used previously but I think it was purchased by Evernote. Flameshot has been excellent as a replacement.
What about wayland?
I highly recommend Green Clip: https://github.com/erebe/greenclip
You can assign custom shortcut keys to pull it up and it can fuzzy search through your clipboard items.
Just one of million better alternatives like https://www.pyinvoke.org/
Makefiles need to be allowed to die so we can clear ourself of this absurd legacy cruft.
Make is great. Learn it an use it. Its limitations are well-known, but easy-enough to work around. Fixing them properly requires lots and lots of complexity, and you get bazel when you try. And it's way overkill for all but the biggest projects, which is why Make has been so successful.
Eg. a tool like "PDF Mod" is a gem I struggle to remember the name of when I set up a new computer — quick and easy way to assemble/extract PDF pages :) It's long unmaintained it seems, though.
For those expecting the same, this is mostly "GNU terminal tools" (+ python, tmux and a few other tidbits), so applies to pretty much any modern GNU system (including non-Linux systems, and I am pretty sure homebrew on Mac has all of these).
It also doesn't seem to be in the full video playlist from the conference: https://www.youtube.com/playlist?list=PLbRoZ5Rrl5ldJR-XU4xQx...
Command tagging wasn't really explained in the deck. I had to read this archived web page for an explanation:
https://web.archive.org/web/20191216131445/https://www.ostec...
I can't recommend fish-shell highly enough for anyone spending significant time in the CLI. It can't completely replace bash et al, but it's not really meant to. Just install it and give it a try and you'll get addicted pretty quickly.
http://tug.ctan.org/macros/latex/contrib/animate/animate.pdf
Notice that, while this is just a silly example, animations are very useful in serious technical presentations. For example, in research about image or video processing, you often want to alternate automatically (without user interaction) between the "before" and "after" images, or along a few frames of a video sequence.
You could argue that we shouln't be using pdf for making slides in the first place, and maybe you are true. But if I want beautiful math typography (which is even more important than animations), all other options are sadly not up to par.
Why not give open source stuff a go?
- xournal - pdf editor
- calibre - epub
- keybase - slack replacement
- cherrytree - notes
- anki - study
- shutter - screenshots
- zoiper - voip calls
- kazam - video snippets (screen recording)
- remmina
- vsc
command line
grep -nr, locate, ncdu, htop, ipython, vim, ssh, tsp, tail, less, youtube-dl ;-)
All of it? A very small chunk of these slides are even about bash scripts. Most of it is about standard unix commands and pipe and redirection operators.
And did you read the slides? It's not about bash scripting, it's about using the command line competently and proficiently.
That was what Perl was created for, but pretty much failed.
find -> fd
grep -> ripgrep
wget/curl -> httpie
awk/sed are just horrible to learn for beginners, would advise to just pick up python instead via xonsh[1] or pyp[2]
How about we don't teach new users these legacy tools and we can finally progress a little?
1 - http://xon.sh
Because HTTPie is written in python it has some disadvantages compared to curl or wget: it's not as performant, it's dependent on the Python interpreter, and less portable. If these don't matter to you, than you should use HTTPie. But it's not a strict improvement, so it's not something I can recommend to everyone, because some people will care about these things. Ripgrep and fd on the other hand I can recommend to everyone without any worry.
The only performance that matters in http requests is async support. You can have 1000 pararel curl processes and will still be dusted by a single async python process.
You can think of it as a spectrum ranging from incomparable to strictly better. So you can't say that one should use Python over grep for example; you can't even compare the two because that doesn't make sense. They aren't even in the same space. Ripgrep however is a strict improvement over grep, it is faster, more featureful, safer, and has no downsides (with the exception of age, as I've mentioned).
I think HTTPie is very close to the end of the spectrum of being a strict improvement, but it's held back by various little things that don't matter to many but still matter.
curl
curl --header "Content-Type: application/json" -d '{"some": "content"}' <host>/<resource>
httpie http <host>/<resource> some=contentThat doesn't seem fair. The two are entirely different. I found Awk very friendly and easy to learn, and use it every day for all kinds of things, in one-liners and in scripts. The AWK Programming Language is masterfully written, a joy to read, as are Arnold Robbins' books. Even the man page is short and very readable.