Research Workflow
Latex Workflow
Here is a list of some useful Latex workflow tips for getting started.
- MiKTeX: standard Windows latex environment, this is what I normally use
- TeXnicCenter: good, basic Windows latex editor
- JabRef: good BibTex file and citation manager
- Overleaf: good cloud paper editor, like Google docs for Latex
- ShareLatex: another cloud tex editor, probably overleaf is ideal
- Lyx: a pretty good WYSIWYG / GUI editor for Latex, I've used it once or twice
- TeX StackExchange: lists of questions and answers
- Version Control and Latex
- Latex Templates (get templates for papers from the organization (IEEE templates, ACM templates, Springer, etc.), but this has good ones for homeworks, notes, etc.)
Latex with Word and Vice-Versa
It is sometimes useful to be able to use Latex files in Word, and vice-versa. For example, to utilize a bibtex bibliography within a Word document. There are many tools to facilitate this, but the best ones I've used are:
- Pandoc: conversion between lots of document formats (including good support for e.g., converting from Latex to Word)
- Bibtex4Word: allows use of Bibtex bibliographies in Word, have successfully used it with complex bibliographies (hundreds of citations).
- text2bib: converts from plain text bibliographies (e.g., copied from Word) to Bibtex. Not perfect, but the best service I've found so far. (Note: looks like pandoc may do this too, but I haven't tried it yet.)
- BibWord: another BibTex-for-Word plugin, have not tried.
Paper / Thesis / Writing / Research Advice and Workflow
General Research Advice in Engineering and CS
- Nick Feamster: How to Do Great Research Blog
- Eric Feron: How do you recognize you have a worthwhile PhD thesis?
- Michael Ernst: Writing a technical paper
- Gernot Heiser: Tips and Guidance for Students Writing Papers and Reports
- Jason Eisner: Write the Paper First
- Lyn Dupre: BUGS in Writing, Revised Edition: A Guide to Debugging Your Prose
- Justin Zobel: Writing for Computer Science
- Vanderbilt Writing Studio: You must schedule an appointment to have anything you want me to read reviewed by the writing center first. If you do not, I probably will not read it, or will give up after correcting the first few serious English or grammatical errors.
- Vanderbilt Writing Studio Resources
- Glasman-Deal Hilary: Science Research Writing: A Guide for Non-Native Speakers of English
- Vanderbilt Thesis and Dissertation Guidelines: format guidelines plus the approved Word and LaTeX templates.
How to peer review
Version Control Workflow
Here is a list of some useful version workflow resources and tips. The main tip is: USE VERSION CONTROL (for everything: Latex papers, code, modeling, etc.). It takes a little time to get set up, but saves you countless time in the long run. If you are going to work with our group, you must know how to use version control or learn quickly, otherwise you will not continue working with us, as it's too difficult to collaborate with people who do not know how to use these important tools. Typically, we are using Mercurial on Bitbucket, and for me on Windows, I typically use TortoiseHG. Here are some tutorials:
- http://hgbook.red-bean.com/read/
- http://hginit.com/01.html
- http://mercurial.selenic.com/wiki/Tutorial
- Git Tutorial on Atlassian
- Atlassian Bitbucket Tutorial
- http://mercurial.selenic.com/wiki/BeginnersGuides
- http://tortoisehg.bitbucket.org/manual/1.1/quick.html
- Bitbucket: good, free repository hosting site, with private personal and unlimited academic repositories; supports both Git and Mercurial
- GitHub: another good site with private repositories, supports Git
- Google Code: supports Git, Mercurial, and Subversion (SVN), but does not allow private repositories
- SourceTree, TortoiseHG, TortoiseGit, and TortoiseSVN: GUI interfaces for Mercurial, Git, and SVN
- Comparison of Mercurial and Git (a.k.a., the modern Vim vs. emacs debate)
- TortoiseHG Mercurial Subrepository Setup
- Mercurial Subrepository Setup
Embedded Systems Design Tools
- MathWorks Simulink/Stateflow: we use these tools quite extensively, so please get familiar with them.
- Stateflow C/C++ Code Generation and Combining C Functions in Stateflow: SLSF can be used to generate code to run on target hardware platforms. This is a good tutorial of how to combine C/C++ code with Stateflow diagrams, and some functions to facilitate this in simulation are available, and how to use code generation.
Vanderbilt, VUSE, and ISIS Software
Hybrid Systems Verification Tools
There are a large number of verification tools for various classes of hybrid systems. A huge list of verification tools is available at GitHub. The following are recent tools, typically still under active development that we use often:
- SpaceEx: supports hybrid automata with affine (linear) differential equations, guards, assignments/resets, invariants, etc. and uses primarily a support function encoding. Generally scalable and currently the most stable tool.
- dReal and dReach: supports nonlinear systems and uses an SMT-encoding
- Flow*: supports nonlinear systems and uses a Taylor model encoding
- HyCreate: supports nonlinear systems and uses a hyperbox/hypercube encoding and a technique known as mixed face-lifting
- C2E2: supports nonlinear systems and uses a simulation-based verification approach by bloating simulation results
- Passel: supports networks of rectangular hybrid automata and symmetry-reduction methods as well as parameterized verification, using an SMT-encoding
- HyST: supports translation of hybrid automaton models between tools, as unfortunately almost no current tools (other than SpaceEx) support standardized interchange formats developed for this purpose like HSIF and CIF.
Books and Other Useful References
This is a list of useful resources, particularly for those getting started in hybrid systems and cyber-physical systems.
- Alur: Principles of Cyber-Physical Systems
- Tabuada: Verification and Control of Hybrid Systems, A Symbolic Approach
- Lee and Seshia: Introduction to Embedded Systems: A Cyber-Physical Systems Approach
- Astrom and Murray: Feedback Systems: An Introduction for Scientists and Engineers
- Aho and Ullman: Foundations of Computer Science
- Nipkow and Klein: Concrete Semantics
- Ian Mitchell: Integrated Systems Design: Introduction to Formal Verification, 2009
Virtual Machines and Linux
Typically I use VMWare and Ubuntu 64-bit. It's becoming less common for 32-bit applications to be available for Ubuntu, so 64-bit is generally needed as many applications require it.
- VMWare Player
- VMWare Extensions: allows better integration with host operating system, such as sharing files between host and guest OSes
- Ubuntu
Static/Dynamic Analysis Development Workflow
Here is a list of some useful static analysis and dynamic analysis tips and tools, primarily for C development. The main tip is: USE STATIC/DYNAMIC ANALYSIS AND ASSERTIONS.
- Frama C: free and open-source static analyzer for C
- CppCheck: free and open-source static analyzer for C and C++
- Lint: free and open-source basic static analyzer for C and C++ that is integrated in *NIX
- Gimpel PC-Lint: commercial version of Lint
- List of Static Analyzers for C
- MISRA C Compliance Tools: some static analysis tools are set up to check compliance with various development standards, e.g., MISRA C, DO-178, etc.
Hardware Workflow
Here is a list of some useful hardware/software we've been using.
- KiCAD PCB and Schematic Layout for PCB Design
- Youtube Making the Beaglebone Black: fun video of hardware manufacturing
- Beaglebone Black
- List of single-board computers
- Xenomai Real-Time Linux Extensions