Ask HN: What are some tools you wish you had while doing your day to day work?
An example:
-> As a software developer, I've come across the need to work with CSV-"like" files several times in my career (at several different jobs), for different reasons.
And it was most frustrating when they had like 100 columns or so. Having to change column 63 at line 58 is not something you do easily in Notepad++. Import to Excel was my way to go, but since the file was not a standard CSV file (e.g. also had sections like an .INI file) it was time consuming: first just select a subsection from the file, save to a different file, import to Excel, modify, paste back, etc. Maybe it was not the best approach, but that's not the point I'm making.
Not having found an existing tool (maybe my problem was too specific) I eventually made a small desktop application which I would use to edit the files directly. The interface was similar to Excel (grid of cells); It was simple and tailored to what I needed.
But maybe you are not a software developer and don't have the "luxury" of building it yourself.
So, would you share your experience of similar situations?
If the solutions to your problems are relatively easy to implement, then someone can create a tool for the job, making your life easier. And on the off chance that these tools are useful and will be wanted by more people (with similar problems) these "tools" can turn into a more general "product", thus a win-win situation in the end.
What i'm saying:
- There are already talented people working in their spare time on e.g. open-source projects (no shortage of people wanting to tackle the problem, if it is reasonable) - The shortcoming is that domain specific problems, which people are facing, are not visible enough (except to them).
If this question should get enough attention and answers, the next step would be to structure the answers into a git repository/website.
[+] [-] piinbinary|5 years ago|reply
* Tell me where in package (or module) X it calls functions that can eventually reach function Y in package Z (that is, there is a possible stack trace starting in X that leads to Y.
* Recursively expand the tree of callers of this function.
* Show me where the value passed to this function are created.
* List what packages have functions that can get called when I call function X.
* Given two functions A and B, what functions can result in calls to both? (This is sort-of the greatest common denominator of possible stacks leading to A and B)
(It seems like this must surely exist, but I have yet to find it)
I also want better tools for tracing what a system does when running. For example:
* Say I have a test over some deterministic code, and I make a small change to that code. I'd like to be able to run that test before and after, and get a diff of where the computation was the same vs. where it was different.
* When debugging, I'd like to be able to ask questions about the history, like what set this field on this model to the current value? (With debuggers I've used, you have to know these questions in advance and set up things to watch - you can't ask those questions after the fact)
* List all packages that had a line of code run while running this test.
edit: formatting
[+] [-] afiori|5 years ago|reply
There are many things I do not like about ocaml build ecosystem but the last time I looked into it this was the default structure of test; is was possible to assert stuff in unit test, but you were "forced" to output something and then promote it to valid output; the next time the unit test are run the build tool check for diffs and you can choose whether the new output is wrong of whether it should be promoted to correct output.
I found it extremely flexible, expecially if you make an API change that would require to update dozens/hundreds of tests
[+] [-] nscalf|5 years ago|reply
[+] [-] armagon|5 years ago|reply
Right now, for working purposes (as a software engineer), I'm a disembodied head that can move a pointer, type words, and voice chat. Our bodies were never designed to sit in chairs 8 hours a day for forty years. The very idea of needing to spend free time exercising just to keep your body from falling apart is, well, preposterous.
(It's been a long time since I've watched it, but I think this talks a bit about the idea: https://vimeo.com/115154289 - "The Humane Representation of Thought")
[+] [-] tra3|5 years ago|reply
[0]: https://writings.stephenwolfram.com/2019/02/seeking-the-prod...
[+] [-] beforeolives|5 years ago|reply
Your body wasn't designed to do anything. It's the result of random mutations that survived better than other random mutations.
> The very idea of needing to spend free time exercising just to keep your body from falling apart is, well, preposterous.
A somewhat sedentary job with the option to take breaks to move around and exercise outside of that is still vastly preferable to any other combination. Non-sedentary jobs and manual labor will break and wear down your body in different ways, they aren't some ideal to aspire to.
[+] [-] yoz-y|5 years ago|reply
It would be nice to have some sort of simple peripheral that would allow to translate simple body movement and maybe breath patterns (multiple games have a button to hold breath) into controls. I know that VR is a thing but I think there is quite some space between here and there.
For office style work one idea would be to have an extended desktop with parallax.
[+] [-] wackro|5 years ago|reply
We're always going to need to do exercise though. There's no way knowledge work could ever e.g. raise your pulse, use your strength + agility etc. We are hunter gatherers removed from our original environment.
I can imagine software development becoming like something out of Minority Report and that's just about it.
[+] [-] globular-toast|5 years ago|reply
[+] [-] fiftyacorn|5 years ago|reply
[+] [-] alpaca128|5 years ago|reply
One example for docs I enjoy is the reference for the Rust standard library. It still could use a few more examples here and there but overall it's among the best I know, together with tailwindCSS' website which is also great.
Don't be like the devs of that one JS animation library which locked further examples behind the registration form for another web platform, failing to mention those hidden examples are more or less a copy-pasted variation with slightly different numbers.
And I haven't thought about it very deeply yet but I'd like a tool or maybe lightweight processing language that lets me quickly visualise debug output and similar data. Often it feels like the main time sink at chasing certain bugs is how I either have to look at the raw data and numbers and try to see a pattern, or more or less start a whole side project to properly process and visualise it. Possibly I'm just missing something obvious or overlooked the usefulness of a neat tool at first glance.
[+] [-] izolate|5 years ago|reply
Suggestion: have you considered learning to use Vim? I imagine most Vim users are reading your example wondering what the big deal is.
Not to take away from the spirit of your post, though. You have valid questions.
[+] [-] craftydev|5 years ago|reply
[+] [-] wcarss|5 years ago|reply
Navigating in general is easier, sure, but... do you have a trick to share perhaps?
[+] [-] sgarrity|5 years ago|reply
(I know there are a few do-it-yourself options for these, but I'd much rather throw a bit of money at it rather than time).
[+] [-] dole|5 years ago|reply
Tested it without the headset in a Teams meeting and mutes within the meeting and displays status as such, doesn't just mute system mic volume. Edit: seems to work the same in Zoom as well.
The dongle itself is model ENC010 and looks to cost around U$50.
[+] [-] fwsgonzo|5 years ago|reply
[+] [-] screye|5 years ago|reply
2. Jupyter lab, but that's as good as VSCode/Pycharm (VS code's jupyter extension is still very lacking. Something like Spyder that's not really a notebook would also work fine)
3. A real Inking->Structure app. Come on. There is money in this. Someone do this. Something that is exportable to any of draw.io/Visio/etc.
[+] [-] dglass|5 years ago|reply
[+] [-] softwaredoug|5 years ago|reply
[+] [-] mettamage|5 years ago|reply
Vim is easy if you type vimtutor in the command line and follow the tutorial for the next 30 min. After that, it will always feel like a simple notepad, at least to me it did.
For actual coding I tend to use VS Code. I might give IntelliJ a try again if I can manage to get a free trial again.
[+] [-] moystard|5 years ago|reply
Ten years ago, this same frustration led me to release Fraise, a fork of Smultron, for quickly editing files.
I now use vim with a terminal to quickly edit a document, as I find most modern editors to be too slow to start (Visual Studio & co.).
[+] [-] yumraj|5 years ago|reply
The best feature is that it keeps unsaved files even after quits. I have an instance of vscode with about 80 unsaved documents till now. Hopefully vscode won’t introduce a bug in an update that will wipe these.
[+] [-] codegeek|5 years ago|reply
[+] [-] 41ice|5 years ago|reply
[+] [-] happybday|5 years ago|reply
As an example, I'm looking into a bug which I know is related to file X. I would like to see the most recent change which affects files within distance 5 from X. Or, of all the commits between point 1 and point 2 in the git history, I would like to see the ones which changed files the closest to X.
In another context, for every commit in a release, I want to see how big the n-neighbourhood of the commit is for different values of n, in the same way I can currently see how many files were changed by that commit (the 0-neighbourhood). In all these cases I would want to look at the path of connections between files and what symbols it is based on.
In an ideal world, the 'change distance' and 'change neighborhood' concepts would actually reflect the semantics of what was changed and how it could affect other classes etc. So a whitespace change would have empty neighborhoods since the code in no other file could have been affected. But even with a naive interpretation that any change to a file affects all the linked files would be very useful.
[+] [-] mden|5 years ago|reply
Table stakes:
Bonus features:[+] [-] khaledh|5 years ago|reply
Design Mode:
Implementation Mode:[+] [-] thecupisblue|5 years ago|reply
[+] [-] unknown|5 years ago|reply
[deleted]
[+] [-] runjake|5 years ago|reply
I do what you mentioned all day, every day. I don't like the idea of "a more general product" because that's the power of the tools I use, they are small tools designed to do one or a few things only, but I can chain them together to do complex things. And if one of my small tools doesn't work for a particular task, I can swap it out with or write another small tool.
With your "CSV-like" example, I'd probably do something like grep with a regex to check a line and see if it has more than $x commas, and if it does process the line, if it doesn't ignore it and move on to the next.
I am about to head to a meeting, but something like this:
https://unix.stackexchange.com/questions/249071/check-if-a-s...
[+] [-] deviance|5 years ago|reply
But! If you look at it from the perspective of someone who is a non-software developer (e.g. scientist, accountant, graphic designer, etc.) who just wants to do a specific task, it makes more sense to have dedicated tools for the job. Even if those tools, under the hood, are a combination of smaller tools, the end user should not be concerned with anything other than his/her field of expertise.
With my question I was trying to get some insight into people's (who are not necessarily software devs) workflows and how we can improve those workflows (if we can).
The question applies to software development as well: someone who is specialized, say in compilers (broadly speaking), for example, can help the workflow of many who don't have the time / resources to do it themselves. It comes to mind a feature that someone posted above: "List what packages have functions that can get called when I call function X".
[+] [-] giantg2|5 years ago|reply
[+] [-] sombremesa|5 years ago|reply
[+] [-] armagon|5 years ago|reply
In my current web development work, using the aforementioned tools, where it isn't just one thing calling the next, but there's a huge amount of indirection and message passing, I have to spend a ton of time figuring out what set of events occurred, and where, and why, to figure out why I got the result I got.
[+] [-] afiori|5 years ago|reply
[+] [-] tuckerpo|5 years ago|reply
[+] [-] fwsgonzo|5 years ago|reply
I have found nothing yet that does this, or even just one of those things. It would be the killer feature of a new terminal emulator - and I see there are lots of them being developed, but none of them have this! And I can guess why: It's because of the maintenance work required to have this feature, and also trying to be multi-platform, multi-desktop and also the work required just to have a working terminal to begin with.
[+] [-] ab071c41|5 years ago|reply
E.g. server01 can go from 3.1 to version 4.0 since foo01 integrates with server01 and foo01 supports 3.1 and 4.0.
I have been poking around at graph databases for this, but I'm also looking for something better than wiki pages.
[+] [-] wsostt|5 years ago|reply
I'm interested in this type of system for my current job and I can't find anything on the market.
[+] [-] buescher|5 years ago|reply
[+] [-] bostonsre|5 years ago|reply
[+] [-] motohagiography|5 years ago|reply
- A universal calendar I can merge across client accounts. As a consultant, I have customers in gsuite, o365, and my personal one and relationship management means manually synching my calendars between them.
- A virtual machine for android phones to sandbox identities and apps into, as I'm not interested in letting a client's MDM near my BYOD mobile.
- A userspace version of Paralells with a linux image that runs on enterprise client's locked down windows thinkpads.
- a Cypher-like graph query language that operates as an abstraction over spreadsheets.
- an excel plugin that de-dups rows and generates Sankey diagrams from selected columns.
[+] [-] morjom|5 years ago|reply
[1]- https://f-droid.org/en/packages/net.typeblog.shelter/
[2]- https://f-droid.org/en/packages/eu.faircode.netguard/
[3]- https://lemmy.ml/post/54596
[+] [-] bromanko|5 years ago|reply
[+] [-] klmadfejno|5 years ago|reply
Sikuli got close, but something with a little more AI behind it to get a sort of "fuzzy" macro recording.
[+] [-] wcarss|5 years ago|reply
1 - https://www.autohotkey.com/
[+] [-] DanielDe|5 years ago|reply
And you can save macros for later use or just create a one-off "Scratch" macro as described here [2].
[1] https://www.keysmith.app/ [2] https://www.keysmith.app/guides/creating-and-running-macros
[+] [-] jayant_kaushik|5 years ago|reply
[+] [-] nwienert|5 years ago|reply
- A really nice TypeScript shell scripting setup. I'd like to see Duktape or JavascriptCore used, combine with esbuild/swc, Actually Potable Executable, and ShellJS. Basically, give me a single binary that runs cross platform, so I can write my scripts using TS. Anything to save me from having to continue googling weird bash edge-cases constantly.