First semesters often ask what tools the more experienced students use to create lab reports, presentations, research papers and diagrams. Although there are numerous tools available not all of them are suited for use in a university environment so it is hard and takes quite a lot of time to pick the tools you are comfortable to work with. So I compiled a list of tools I use for various tasks which may take some time to master but the results you get with them are often worth the effort.
1. yED - A versatile editor to create wonderful flowcharts
Engineers are slaves of numbers. This is a fact which is widely known and accepted. The problem is that engineers are often subordinate to people managing the development but having no idea of how to make decisions based on those numbers ( We engineers also call them "businessmen" ). To translate between this strange world of people in suits and our numerical world we often make use of diagrams and presentation. yED is by the time writing the most versatile and beautiful editor for diagrams, flowcharts and therelike I came across. It offers a lot of options including manual alignment (boxes snap to horizontal/vertical axes) or automatic alignment of the whole chart. The software has a huge drawback though: It is a Windows only software so a big sorry to all you Linux / BSD users out there.
2. Jekyll - Creating safe and static websites in a blink
Jekyll is a tool serving the purpose of compiling Markdown to static webpages which can then be deployed to the server of your choice. It is the brainchild of Tom Preston-Werner and has been written in Ruby so it is likely that you run the tool on Linux just as many other things as Linux is the operating system of choice for scripting languages. Jekyll doesn't rely on any databases or updated to patch security holes as its output is clean and static HTML. The tool uses the Liquid templating engine which is a very easy engine to work with. It also doesn't rely on evaluating code fragments in template files which makes it very secure to work with as no code has to be executed during compilation and rendering of the final webpages. A very cool thing is its blog awareness: Users will write Markdown styled posts which will be rendered by kramdown, then run through the Liquid template engine which will be provided with the post title, the post date, the post status (draft/published), post categories and many more. There's even support for pagination through Jekylls built-in plugin system. Albeit Jekyll is at the time of writing still under developmend its userbase is steadily growing, mainly due to Github adopting Jekyll for its Github Pages service providing static webpages to Github users. This ensures a steady development progress and continued support thoughout its entire lifespan. I like to use it because it gives me full control over what I publish while not having to cut back on comfort and security as - again - Jekyll produces static HTML pages. Write, run, upload, be happy.
3. Remark - Beautiful and portable presentations
Remark parses all Markdown written in the textarea and modifies the documents DOM to add divs with slides to it (it even parses and highlights code). This will make a portable presentation which will run on every browser excluding the Internet Explorer (who would have thought otherwise?). Remark also gives you slide notes which can be toggled with [CTRL]+[P] and a dual screen mode with [CTRL]+[C] to have the presentation displayed on the beamer and your slidenotes (including elapsed time!) on your computers display. Since remark does not rely on anything more than a browser it is a highly portable and non-proprietary format to create, store and publish your presentations without having to go through the pain of creating PDFs which won't work properly or look different on screen than the presentation. Just look at the remark website which itself is a remark presentation.
4. Sublime Text 3 - Challenge your editorial skills
When it comes to editing code and text there is nothing better than the Sublime Text editor. Currently in its third major version it runs on various platforms such as Windows, Linux and OS X and offers plenty of tools to make editing an entertaining process. I use it mainly because I fell in love with its beautiful syntax highlighting and awesome but customizeable default theme. It also offers a plugin interface so you can dock either a SSH/SFTP or local directory tree next to your editor window or a more subtle plugin like sublime-jekyll which allows to create new posts with YAML front matter within two keystrokes and adds syntax detection for YAML, Jekyll variables and therelike. Another cool thing about Sublime is the minified overview of the document you have next to your editing window. It allows you to scroll through the document and thus acts as a visual scrollbar making it possible to quickly find the code you have been looking for. As I do not own a desktop computer anymore but a dockingstation with two monitors attached I also found the split editing feature very remarkable. Sublime even has a builtin project environment which consists of two files: A project file and a workspace file. Both are intended to be checked in to revision control systems and will be read upon opening the project. The feature therefore allows you to have different workspaces with different plugins enabled on different projects which makes perfect sense for a multi-language editor. Oh, and did I mention everything is customizeable?
5. Git - Software revisioning made easy
How often did we save our projects in folders named "Project" and desperately needed a copy so we copied that folder and renamed the copy "Project_test" or even worse, "Project (1)"? How often did we copy code partially working from the test folder to our production folder thinking "it's just a quick and dirty thing - Will delete the folder later" and ended up not knowing anymore where we started and what code in which state is in what folder? for me it happened way too often, but i guess my wild years are over and I started to become more organized which eventually led to my code being more organized too. And this was the time I learned to like git alot. There are numerous revision control systems out there: SVN, git, Vesta, CVS, Mercurial, Bazaar and many many more. Now, I've looked at all those systems and eventually found git as the one and only revision control software I want to use. Just as there are a lot of RCS in the wild there are a lot of blog posts discussing the differences between all those systems so I don't want to go into detail here. I eventually had to choose either SVN or git which in the end resulted in me using git with github.
Now git is free and open source but not very comfortable to use. When it comes to software revisioning you really want to see who did what in a graphical representation rather than reading a lot of text and trying to figure out which revision number led to which merge and from where did that merge from that branch come. I use git-scm for that purpose because it gives me the
gitk --all & command which opens a window listing all the branches, commitmessages and displays the overall commitflow in a graphical manner. If you have your own server you may want to have a look at Gitlab, which runs on the server and allows you to monitor and control the state of your git repositories from the web.
6. Qt Creator - User Interfaces on the fly
Iam mostly a hardware engineer so I don't have to deal with software abstracting the hardware layer. But once in a while there is something I really need to test which needs a bit more than a few lines of C or Python code such as a tool to control the brightness of a LED using a slider. One could use Python with GTK but since GTK is only a graphical toolkit it does not free one from the limitations of C or Python. I have found my personal holy grail for UI development in using the Qt framework for C++. It opens up many possibilities for the rapid development of applications to test things like the example mentioned above. It supports INI files, graph drawing, string handling, events, IPC, networking and a lot more. Qt is also able to parse UI files which are basically XML files you can either make manually or with the Qt Creator, the standard Qt IDE. The framework uses signals and slots to convey messages such as "the button has been pressed" or "Our server received a new client request" and features a metacompiler to break the Qt specific expressions down to metaobjects - basically CPP code - which can then be parsed by a native compiler. This enables Qt to run on many platforms such as Windows, Linux and OS X as each operating system uses a native compiler to create executables. This is especially helpful when it comes to porting the application to an embedded system: With a few changes (if you didn't use #IFDEF WIN32 macros) or none at all your program will run on every embedded linux platform you can compile the libraries for. For many distributions there are precompiled shared libraries already available. It's worth to check it out!