Here are some tools that I recommend or use. Since this website revolves around optical design, I assume that the majority uses Windows. Hence, this page is written with that in mind. Hopefully something in here can be useful for others.
Many tools involve using the command line, so consider checking the article on improving the command line on Windows. Most of the mentioned programs are either already on your system or can be installed via Scoop or WinGet on Windows.
Optical Design
I list the programs that I have experience with or that I actively use for designing optics. There will be many programs that are not in this list. This doesn’t mean that they are bad or that I don’t like them, I just don’t have the experience with them, so I don’t find it sensible to write about them. I think most programs in this list will hardly be news or surprise anyone. Still, it would be strange not to have this section on this website:
- Ansys Zemax OpticStudio. One of the most famous programs for optical design. It’s pretty solid and can be used for developing highly complex imaging and ullumination optical systems. I would say that it can be a cost-effective solution, especially for cases when you need some non-sequential capabilities. I would also recommend it to anyone who wants a more “modern” feel from the program and prefers working with GUI rather than with the CLI. Nowadays Ansys provides a free student version with limited capabilities, which is great (although the installation process was somewhat non-intuitive last time I tried i). It can be found here.
- CODE V. Also considered famous and an industry standard. May be preferable if you are designing sequential systems and require more extensive command-line capabilities. I find CODE V better suited when one needs to account for thermalization of the system (especially the thermal expansion of the mounts). I also find its Wavefront differential tolerancing useful in many cases, although your mileage may vary depending on what optical system you have, as described in Juergens, R. C., & Wood, H. J. (2007, September).
- LightTools. Useful for designing complex illumination systems or for simulating imaging systems non-sequentially.
- KDP2 (archive link). This program and its source code are completely free. It is a very unique and interesting project. Although obviously not as polished or feature-rich as the commercial programs, it allows you to test some ideas and study its source code. I find that modern commercial programs may work “too well”, especially if you are still starting to learn optical design. KDP2 can be useful in the latter case.
- Winlens. By now Winlens can be considered discontinued, since you are not even able to buy the paid version anymore. However, the free version may be useful for educational purposes or for some very basic predesign tasks.
Syncing & Backups
I prefer to minimize my reliance on third-party services, hence I do not use cloud providers. This is especially important, if you are dealing with confidential data (as you tend to do when you are designing optics). Here are the tools I use for syncing and backing up my data:
- Syncthing. I use it to sync important files between all my devices. My phone acts as the device which is always on - synchronizing it with my PC/laptop whenever they are online. This eliminates any reliance on a third-party (if you wish to be extra careful, make sure to disable relaying in the Syncthing settings). However, there is no “cloud” and all the files are stored on your devices. I use this only for the most important data, to which I need access 24/7. For all the rest I just use backups.
- restic on Windows and Borg on Linux. What I use for creating backups. Backups are conceptually different from just copying your files somewhere, since you can have multiple snapshots and roll back to a previous one if something is wrong with a newer backup. In some way one may find similiarity with git.
- rsync (or cwRsync on Windows via Scoop). It is a useful tool for synchronizing files between either local folders or with remote locations. It may be considered as an alternative to Syncthing. I use it to sync various files with my VPS. For example, I update this website on my personal machine and just push the data to the VPS via rsync.
- Robocopy. If the goal is to sync files between folders on a Windows machine locally, I prefer to use Robocopy instead of rsync. For example, I use Robocopy when I copy my backups and files to an external hard drive.
- git. A programming tool, which is used for source code management (SCM). In optical design tasks it is useful for your optical design projects that use text-based files such as .zmx for Ansys Zemax OpticStudio or .seq for CODE V. I make repositories for my optical design projects, since it allows to easily roll changes back or compare the new designs with the older ones. Note that git is independent of GitHub or GitLab. You can have a repository both locally or remotely without using any of these services.
- M-DISC. Obviously (external) HDDs & SSDs are the main choice for backing up your data. However, I find it useful to also back up some of the most important data on M-DISCs, since they are highly unlikely to degrade and lose data, especially if stored in a reasonable environment. Burning data to a disc might seem as an antiquated technology by now, but it is reliable. And if you work in the field of optics, it seems appropriate to back up some of your data in an optical storage medium.
- Multipar. When backing up data, you might want to account for a scenario in which part of the data gets damaged. This program is based on the Parchive redundant file format. It means that if some part of your data gets damaged, you may still be able to recover it. I find it very useful for the cases when I write data on M-DISCs.
Archiving
People tend to think that if they can find something online, then it will always remain within their reach. This is a dangerous misconception. Videos, presentations, entire websites just disappear without a trace. It happens more often than you think. An example from the field of optical design - when Prof. Dr. Herbert Gross retired, all his lectures and exercises on optical design were completely wiped out from the website of the Friedrich-Schiller University of Jena. A very useful resource just evaporated and can be found only on hard drives of those who archived it. Here are some tools that are useful for archiving:
- Wget. Can be used to save web pages. Useful for archiving relatively small websites. An example of a command line use, which saves this entire website locally is given below:
wget --mirror --page-requisites --convert-links --adjust-extension --compression=auto --reject-regex "/search|/rss" https://optics-design.com
- yt-dlp. This is a useful command-line tool for saving audio/video from YouTube, but it works on other websites as well. It can be used to archive entire YouTube channels - just provide the channel link to the command. Also install ffmpeg for converting/supporting all the available formats.
- Kiwix. This is an offline browser. Using Kiwix it is possible to download archives of large websites (such as Wikipedia or Project Gutenberg) and browse them offline.
- archive.is. This online tool is useful if you want to save a snapshot of the webpage and have a reliable source of how the website looked at that moment. I tend to provide the archive links to the websites I reference in the articles. This way the reader sees how the page looked at that time.
Productivity
Various tools I use every day to make certain tasks easier:
- WSL. Windows Subsystem for Linux can be a good compromise if you need some Linux tools but can’t boot into it for whatever reasons. I find it especially useful in optical engineering, since most optical design programs are for Windows.
- Zotero. I use it for reading articles, taking notes and reference management. Depending on your use case you may or may not be interested in their subscription for syncing libraries. I just use Syncthing for that, since I am not sharing my library with anyone else.
- Obsidian. I find Obsidian useful for creating knowledgebases, for example for optical design. Since the notes you write will be in markdown, you can easily migrate to another service later down the line. You can also combine it with Zotero and put the Zotero links into your markdown files in Obsidian.
- GNU Emacs, Org Mode and Orgzly Revived. Although Obsidian can be used for everyday notes, I personally do not find it very convenient. For just quick note taking I prefer to use the Org Mode in Emacs. Emacs has been around for a long time and is a pretty complicated program. But I think it is worth learning. I like this tutorial series by DistroTube, since it goes through all the necessary basics. If you are using WSL, you might also be interested in Taskwarrior for managing tasks. I like having everything synced with my phone, so Taskwarrior is not suited for my use case.
- Neovim. I use it as my main IDE, whenever I write any programs. It is minimal, fast and can be made as complex as you wish it to be. It uses keyboard shortcuts extensively and I would argue that learning them is a highly useful skill, since vim keyboard shortcuts are used in a multitude other programs (can also be used in Emacs using its evil mode).
- AutoHotkey. Allows setting up complex keyboard shortcuts for any application on Windows.
- Microsoft PowerToys. MS Powertoys has a lot of various features in it, which may be useful from time to time. Personally I just use the FancyZones module which allows to effectively set the tiling of various windows on all of my screens.
- Anki. There is often the debate whether one should focus on memorizing things or understanding them. I think at the end of the day one has to do both. You can make your personal cards in Anki to help you memorize whatever you need. This will be useful for streamlining the optical design process.
Privacy
I think that valuing your privacy is important. It becomes even more so when you deal with confidential data. Here are some selected tools that can be helpful:
- GPG. GNU Privacy Guard is an extensive and well-known tool, which can be used for various encryption-related tasks such as file, email and messaging encryption. For example, the Contact section contains my public PGP key, which can be used by me to verify my identity or by anyone else to encrypt any file/email addressed to me. GPG uses the OpenPGP standard. I think that understanding the basics of PGP is crucial for navigating the modern internet landscape. Some more information on how PGP works can be found in this article from Proton (archive link).
- KeePassXC or Bitwarden. Password managers help to randomize and keep all your passwords secure. KeePassXC is for local use (can be synced with Syncthing), while Btiwarden offers the ability to sync across devices. Both have their use cases.
- ffsend. Allows to (relatively) securely share files with other people. I would still encrypt the files using GPG beforehand and not use it for any highly sensitive data.
- SimpleLogin. There exist scenarios where you do not wish to use your main email address. Email aliases provide a robust alternative - you can make aliases for your account with a click of a button. If you are fine with sharing your email address but wish to still keep some unique identifier for the website/service, subaddressing can be a viable alternative - most email providers support it (but you should always check with both external and internal email addresses of your provider/organization).
- Yubikeys. Two-factor authentication (2FA) is good for securing your accounts. However, there are various scenarios where you might not prefer to use an app on the phone for the 2FA. Yubikeys provide a completely separate hardware key, independent of your smartphone. They can also be used to store your PGP keys (archive link). Just make sure to get at least two of them - if you get only one and lose it, you will have a bad time restoring the access to all your accounts.
- Have I been Pwned?. This websate can be used to check if your email address has been in a data breach. If you pay for a Bitwarden subscription (archive link), there is also a service within your vault to check for email/password breaches.