Ask HN: What tools do you recommend for working on Windows?
I'm a 22 years old hobbyist software developer and sysadmin enthusiast. I've been using linux in all my computers since I was 15 and I mainly program in Go, shell script, and Javascript. I work at a factory and recently for promoted to my first white collar position, so for the first time in my life I work at a computer. The position is production control, nothing to do with software development.
The computers at the company, however, are running Windows. It's very jarring going from 7 straight years of linux to Windows 10. I like creating scripts and tools for myself at home, so using Windows is often painful and feels like a slog. What I wanted to ask you is tools for making my experience less terrible. I recently discovered and started using AutoHotKey which is awesome and I'm sure will be of great use and I've also been trying to get into Excel programming (Excel is an important part of my job). What software would you recommend for someone in my position? The catch is that it must be something that doesn't have an "Install" step. Whenever I try to install anything it asks for an administrator password that I don't have, but things like notepad++ you just grab an .exe and run the program directly with no issues
What I'm missing is things like shell tools, shell scripts, text manipulations tools, rofi/dmenu, pdf tools, a rich text editor that isn't MS Word (I know markdown and html)
Counter-suggestion:
Dive totally into the Windows world.
My background was star-nix, and when i found myself having to use Windows, I always did something like Cygwin, gvim, etc. Which worked fine.
But it necessarily limited my expertise in Windows. Being an expert in Windows, while working in a Windows environment, should make you a more valuable player.
When someone asks you how you do something, you don't want their eyes to glaze over when you say "First you have to install Cygwin." You make yourself a useless resource in their opinion.
Everything that can be done as a user in *nix can be done in Windows, in some Windows way. Be useful to yourself and your colleagues.
I think.
This. With the addition of diving into Powershell. It is quite different than *NIX shells. It is the fabric of Windows in the enterprise and cloud.
I personally use the following:
- MSys2 - unix tools for windows
- wsl - Windows subsystem for linux
- Powershell + Powershell ISE - windows shell + dev tool
- starship - prompt config that also works on Powershell
- scoop - package manager (similar to apt and others) installs to your user directory
- The ultimate windows utility - debloat and installer https://christitus.com/windows-tool/
- my dotfiles
I still prefer POSIX stuff, but this way it is acceptable, especially scoop package manager is the most useful tool to save time installing software without admin permissions.
I use Git bash for Windows. It brings a lot of the linux shell tools/scripting experience to Windows. There is a portable "thumbdrive edition."[1]
Look for the portable versions of other apps.
PowerShell[2] is the built-in scripting language for Windows (better than BATCH scripts).
I pop into gVim for quick text manipulation tasks.
https://sumatrapdfreader.org is the best PDF reader.
I recommend a launcher like https://keypirinha.com or even the MS PowerToys runner.
[1]: https://git-scm.com/download/win
[2]: https://www.wikiwand.com/en/PowerShell
Do Not Use Git Bash.
install proper MSys2 or suffer later.
git bash is distribution of msys2, so to say, with very nad choices so to save money on not hosting a full package repo mirror. just go with msys2 install and don't suffer when you need something as basic as make.
but overall, sorry for you having to work on windows.
Why use msys2 over WSL?
- WSL is virtual machine that runs in a virtual filesystem.
- msys2 is a port of linux tools that run directly in Windows.
- So WSL performance may be lower, especially with file operations.
- Also the integration may not be as intuitive (you have to think about which filesystem the files exist; you can't just open up any file from a Windows app.)
- Also Git bash for windows is faster than msys2 (or at least used to be): https://stackoverflow.com/a/47078501/117030
---
I find Git bash for Windows sufficient for most of my daily dev tasks. If something like make failed to work for some reason, then I might reach for WSL. (So far, I haven't needed to.)
Sorry, I just saw your reply. Seems reasonable. I like the flexibility of knowing that every Linux tool available for mainstream distros is available in WSL, and I don't have to think about compatibility (I run into issues now and again, but most software works just fine). But I guess it makes sense that if you're only using a few tools, and they're all in msys2, then that might be a smoother solution.
Msys2 (mandatory), ahk, rapid environment editor, notepad2, winaero tweaker (bigger fonts, disabling nonsense).
Not sure about "install", but I think all of them can be just copied to your Documents/MyApps folder and run from there and/or associated in explorer.
I also write all my cli tools in typescript. It’s just a matter of copying a project from my template and running yarn link. Now it’s available in PATH as <toolname>, links directly to project folder (no need to “reinstall” on changes).
Learn how to add menu items in explorer https://stackoverflow.com/questions/20449316/how-add-context...
In msys usr/bin, copy at least the following: echo, find, grep, mkdir, sort, bash - into `x${name}`, so you can run xfind, xbash, etc to not clash with windows builtins. You’ll cp more tools later, but these are immediately necessary.
Use a cmd-prolog for bash scripts:
Powertoys FancyZones work better for me than any K/G/tiling wms.For Excel, I used `npm i winax` (COM automation) at my last job. You may find it useful for advanced scripting.
Regarding admin requirements, are you sure your IT will say no if you asked for permission to install things? Most (all?) places have an approval / exception process.
Some recommendations:
Shell: Powershell. It takes some getting used to dealing with objects rather than the "everything is a file/string" world of unix/linux but once you adjust to that, it's wonderful.
Toy programming/scripting: Linqpad. Quickly script tools in C#/.Net.
p.s. On file installation, try winget, or possibly chocolatey. Install via command line, and many of the programs support being installed without admin privileges by installing to the user profile.
Also don't be scared to ask your boss / IT department to install things for you. It's their job to provide you the tools you need.
I'd warn against trying to "hold on" to linux by trying to run everything through emulators or WSL2, it'll just add friction when you want to collaborate with colleagues.
For a rich text editor, go with Notepad++ or VSCode
Regarding the rest though, I would say forget windows and shell scripting, and focus instead on learning your tools.
You said Excel was a big part of your job .. I would start by improving skills here. There are a lot of good formulas and tools that it’s important to be aware of to make your job easier.
If you understand pivot tables and vlookup well enough, then I would suggest learning PowerBI
You can even use the excel sheets as your data sources.
Figure this out and you will blow their minds.
What exactly are you trying to script and manipulate on company computers? (i.e. are you just playing around or trying to write your own programs, or is there some business process you're trying to automate?)
Assuming you're just playing around and not trying to build something for business/professional use:
Can you access Powershell at all (the new-ish and improved Windows terminal)? You can write scripts in it.
If you prefer GNU/Linux apps, you can try a portable build of Cygwin (which lets you run Bash and some utils): https://github.com/MachinaCore/CygwinPortable (edit: or see Git Bash, as posted by Leftium: https://news.ycombinator.com/item?id=41052353)
Also check out Portable Apps: https://portableapps.com/apps
As a last resort, you might be able to put Linux on a USB drive (or disk drive, if it has one) and boot into that, if the BIOS lets you. Some of the Live CDs have a "diskless" mode that won't cause any permanent changes to the system.
There's probably also a lot of online tools that can do some of that inside a web browser (like word processors and PDF editors and text manipulation). You can also run code inside codesandbox/codepen/hosted code space of your choice. Or you can look for portable interpreters for Node (Javascript), maybe Python, Lua, etc.
For window management, Windows has some nice shortcuts built-in (like drag a window to a side to fill half the screen, windows+arrow keys to move things around, or Windows+tab or alt-tab to switch between apps, etc.
----------
On the other hand, if you're actually trying to write something for the company, you should probably talk to your IT department about it and collaborate on a solution. Don't write something bespoke that nobody else can maintain once you're gone (or just promoted). Especially if it's actually tied to some industrial processes!
Everyone does thing is stupidly inefficient ways.
For example, we need technical drawings of parts, the only way is through a web interface that fetches from some remote server and you can only do one at a time. So you will often see people copy pasting (or even typing if they're reading from paper) each item code one by one and printing one by one. Another common thing, we use SAP for most things but Excel is required for some stuff by my direct leader but also higher management and there's a lot of sort of awkward getting things out of SAP and into spreadsheets in the right format. So here some basic data manipulation is needed and you see literally everyone doing everything manually most of the time.
In general, I just want to not be wasteful and do repetitive things manually while using a computer with Windows, which is something I'm not used to
Using tool websites is a bit annoying since so much stuff is just blocked
Assuming credentials there are many ways to browse | fetch files from remote servers that aren't web based - if you can work out a command line that accesses the remote server and logs in then file access in a batch fill or powershell script can follow.
Something in HN: CLI tools for CSV, etc. might click for you: https://news.ycombinator.com/item?id=16784850
I'd look into writing and running your own browser extension for any of the web-based stuff. Javascript is more expressive (I believe) than AHK scripts and can easily manipulate the DOM/HTML to extract and parse data, fill in fields, or even do additional remote logins and fetches -- all without anything your admin has to install.
I don't know if your SAP is a desktop app or a website, but if it's a website, you can probably transform its output (or its AJAX calls) into some other format. Not too sure how you'd get it into and out of Excel after that (maybe via API if there is one, or you can generate a VBscript and use AHK to run it in Excel?)
Just do what the job requires of you and in your off time explore and experiment. You're young and the job you currently have absolutely does not fit your interests and they won't magically have the same youthful exuberance that you do and they most likely won't be aligned with the kind of personal growth that you're looking for.
Doing what you love has the potential to completely kill what you love keep that in mind.
sysinternals suite
https://learn.microsoft.com/en-us/sysinternals/downloads/sys...
A collection of tools that started outside Microsoft and are now very much embraced. Process Monitor does just that, AutoStart shows all the cruft that attaches at startup, to menus, to browsers, etc. FileMonitor .. live and logged file activity, etc.
One for your windows machine at home: PortMaster - it's an "easy use" tiered (free -> paid VPN like additions) variation in the sysInternals TCPView family - monitoring all network connections, tying them back to a process and making accept|deny trivial.
PortMaster requires installion - sysInternals mostly don't, but do report better with admin privileges.
BulkRenameTool is crazy effective if ever you need to organise file names, in a directory, multiple directories, entire subtrees, with or without regular expressions, can add | remove patterns | timestamps, etc. https://www.bulkrenameutility.co.uk/
https://ss64.com/nt/ :: An A-Z Index of Windows CMD commands.
https://ss64.com/ps/ :: An A-Z Index of Windows PowerShell commands
ROBOCOPY:: https://ss64.com/nt/robocopy.html - Windows native Robust File and Folder Copy, in a windows production pipeline this is the tool that can be autostarted to monitor folders and move | copy | backup data | scripts .. useful to move staged data evolution from one machine|location to another.
https://ninite.com/
has a lot of decent tools in one place (select the ones you want, download one exe - run it, it grabs the latest version of everything you selected and installs it with sane options [no toolbars / good location] (I haven't used it in a long time so I am not sure if that's still the case, it gets mentioned here sometimes, so maybe search here about it, get a fresher perspective, i used to use it a lot though.))
https://nakka.com/soft/clcl/index_eng.html - its a clipboard manager you mentioned notepad++ already, it has some useful plugins too
AltDrag - drag and resize windows via hotkey like it's common on Linux
WinCompose - compose key, if you need it. Behaves identically.
Everything - the only usable file search on windows
Process Hacker / Process Explorer - task managers that actually lets you do stuff
Check out the Sysinternals Tools, it brings lots of missing fundamental features to windows.
I heard that knowing Powershell can unlock some kind of superpower, might be worth a look too.
PowerToys.
I think there is a .MSI version laying around somewhere?
Maybe not anymore, I'm not finding it :(
+1 for power toys
https://github.com/microsoft/PowerToys
also, Cygwin if you need it
> What I wanted to ask you is tools for making my experience less terrible.
Notepad helps. Practicing a life of renunciation helps: everything is pain in Windows.
Avoid if at all possible.
Conemu is a good terminal. VSCode is editor of choice. Find and Run Robot for rofi/dmenu replacement. Too bad you can't install WSL...
IME, both conemu and cmder were very slow last time I tried them again. Windows Terminal crashes once a day. Windows 10 builtin terminal is actually decent if you tweak the fonts and other defaults.
Ask your IT about the Windows Subsystem for Linux (WSL), which gives you a familiar environment on a windows machine.
WSL is the only way I can get by. Basically imitate my entire Linux configuration in there; dotfiles and all
flame thrower or hydraulic press should make it tolerable.
maybe boot it from linux on a usb stick so you can continue to use that.
Make sure to go full portable on windows. Portable software on windows means software that doesn't need to be installed (or is installed only once and never again), software that doesn't depend on any other software in windows (except for runtime libraries), and finally, software that is capable of discovering it's own path at runtime and capable of storing its state data somewhere on that same path. This ensures that your portable software root folder can work on any windows straight away. This way you make sure windows will never loose stuff that's important to you. This way you can change computers at will, you can keep working at multiple computers at a time (just by plugging your USB drive or copying your folder). Simply put, by going all portable you make sure windows is just an easily replaceable underlying engine for your software stack. Given windows' and x86's commitment to supporting legacy software, I have my portable drive in use for about 20 years now, happily expanding my software library and surviving at least 10 generations of hardware and windows upgrades without a hitch.
Here is my recipe: Get yourself a fast SSD or USB drive dedicated to your own windows portable library. Format it as one partition. Make the partition occupy drive letter A:. Having a predetermined drive letter that doesn't change helps with software that's not 100% portable but still stores absolute paths instead of relative ones. Now create a single folder on that drive, like, for example "MyPC" or whatever. Inside that folder create 3 subfolders: Programs, Documents, Install. Always put all your portable programs in the "A:\MyPC\Programs\" folder. Always put all your documents in the "A:\MyPC\Documents\" folder. Put driver files and runtime libraries in the "A:\MyPC\Install\" folder. For all three, feel free to create subfolders as needed, either per topic, per group, or however your brain envisions data trees.
You can find plenty of portable windows software in the links provided below.
Few of my favorites for specific tasks:
- my personal auto-run and launch hooks: https://www.dcmembers.com/skwire/download/splat/
- my personal system tray app/doc shortcuts: http://jacquelin.potier.free.fr/QuickWayToFolders/
- my personal desktop icons: https://www.cylog.org/utilities/toolbox.jsp
- system monitoring utilities: https://learn.microsoft.com/en-us/sysinternals/downloads/pro...
https://github.com/LibreHardwareMonitor/LibreHardwareMonitor
- how to keep secret data on a portable drive: https://www.veracrypt.fr/en/Home.html
Find more portable apps in these libraries:
https://portapps.io/
https://portableapps.com/
https://www.portablefreeware.com/