Computer Tools
Hopefully this is the final post on tools I use on a daily basis to fix various things at home. This is about the tools I have in my laptop which helps me be productive in coding. The first and most powerful tool in my arsenal is caffeine :). Just kidding. That used to be my most powerful tool back when I was still considerably young. I was addicted to coffee, Mountain Dew and Red Bull, and there used to be days when I consumed black coffee every 2 hours or so. Now, on to the serious stuff. I don’t think I will be able to do justice listing out all the tools I have because I have way too many and I am sure I will forget one or the other. Anyway, here it goes.
Programming Languages
Lets start with the programming languages and related tools in the order of how frequently I used them in the recent past. The emphasis on recent past is important because my coding language preference has changed over the years. In the past I have mostly used Java or JavaScript as my primary language for all my major projects. So if you go by the number of lines of code, it would have been Java. However, things have changed a bit in the recent past.
Flutter/Dart: For all UI related projects whether big or small, I use Flutter these days and the underlying programming language is Dart. Dart is easy and feels like coding in Java without the expressiveness and still being more performant. The best part about Flutter is the app can be compiled for Android, iOS, Web, Linux, MacOS and Windows all from one codebase. While it takes some effort to make the code work on all platforms, the effort is very small thanks to plugins.
Android/Java: When I need to write platform specific code for Android I generally use Java. This could be for things like running a background service on the device (like for solar panel project), or to run a music player using media3 or to access cameraX etc. I don’t have any Apple products happily so I don’t need to worry about it. For some reason I am unable to get myself to be interested in learning Kotlin although it is being pushed quite heavily by Android team.
Python/Bash: If I have to write something quick and dirty and if it is not going to be a huge project then I use python. I do sometimes use Bash scripts when something can be easily achieved via a shell script.
C/C++: When it comes to low level programming, nothing beats C/C++. I use it when I need to program micro-controller boards such as Arduino or ESP8266 etc.
HTML/JS: These days I rarely need to write HTML or JS because I mostly do everything in Flutter even for web development. In the past, I have used JS quite extensively along with the Polymer project. I may use HTML if I need something that can be crawled easily by search engines, but I don’t need anything SEO friendly as of now.
Go: I used Golang in one project, just to try it out. I might use it if performance is of utmost importance but otherwise Dart pretty much fits the bill for me including safe concurrency.
Editors
These are some of the editors I routinely use.
Android Studio: I am mostly coding in Android Studio either because I am writing code for an Android device or otherwise writing something in Flutter.
VS Code: If I am not coding for Android or not writing Flutter/Dart code, you can expect me to be using this editor for almost everything else. I write my python/shell scripts as well as any HTML/JS code in VS Code. I even use it with the Platform IO plugin to develop for arduino if the project is large.
Arduino IDE: I use this IDE for smaller Arduino projects if I want to check something quickly.
Nano: Finally, I use nano
for scripts that are no more than a few lines of code. I could never get myself to be proficient with vi
nor have I tried emacs
.
Electronics
I use a few tools that are specific to electronics projects.
EasyEDA: I use it to build circuits for my electronics projects and convert them to PCBs so I can do some soldering on prototype boards.
Tinkercad: When I need to build some Arduino related projects, I use Tinkercad to draw the wiring diagrams. I use it mainly to make an image of connections, so I can post the circuit diagram on my blog.
Falstad: For simulating basic electric circuits I use Falstad
Picoscope: I use the picoscope software to run the frontend for my PicoScope 2205 oscilloscope.
UI/UX
Some tools I use to build UI/UX or mockups in the past. For my personal projects I rarely (if ever) use any UI/UX tools. I just visualize something in my mind and build it :).
Figma: I use it to build some basic UI elements and get a overall design overview.
Pencil: I think this prototyping tool is not maintained anymore, but it was very easy to learn and build mockups. I built a fairly complex project mockups (for someone) with in a few days.
Media Tools
Here is a list of media related tools I use to edit audio, video and image files.
GIMP: I do most of my photo editing using GIMP. I probably use like 1% of the software capabilities :). I basically crop, scale and export images for my blog.
Ksnip: When I need to annotate images, I use ksnip. Very simple to use.
Kdenlive: When I was making youtube videos I was using Kdenlive to edit my videos, to add audio overlay etc. Again, I barely scratched the surface of the full software capabilities. Learned just enough to produce some stupidly simple videos.
Avidemux: Avidemux for simple audio, video editing.
Inkscape: A long time ago I learned Inkscape quite a bit, but rarely use it anymore. I made a few icons for some of my projects using this software.
Other Random Tools
Here are some random tools that don’t fall under any category.
Obsidian: This is the latest To-Do / task management tool I am using. I switched to Obsidian from Joplin a few days ago because Joplin was not playing nice with Wayland. Moreover, it depends on python 2.7 (for building) and I don’t want to install it anymore since I upgraded to python 3. Obsidian is very similar to Joplin so I did not have any difficulty transitioning. In the past I’ve used Zenkit, Trello and a few other task management apps that I don’t remember anymore.
GoCD: I have used GoCD for any CI/CD needs. I rarely use it because I am the only one doing the coding and moreover I rarely write unit tests for my personal projects :).
Peripherals
These are things that improve my productivity.
Mechanical keyboard: This was one of the best investments I have made. Typing is now so much more fun and I can never go back to regular membrane keyboard.
Second monitor I wish I had a true second monitor, but I don’t. I use a 10” android tablet as a poor man’s second monitor.
I am sure I must be forgetting some other things, but I guess I will wrap it up for now.