ReoTex: Beautiful Reo in LaTeX!
While I was writing my pre-thesis I needed a systematic way of drawing Reo channels and connectors like those I could find in some Reo-related papers.
Since my searches for an available LaTeX package, that would allow me to produce such drawings, was unfruitful, I decided to create my own (my first) package for LaTeX.

You can find it here bundled with good documentation! Or you can Google for 'reotex'.

Hope this may be useful to anyone other than me.
Drawing Automata in LaTeX
Yesterday I was looking for a simple and functional way of drawing automata in LaTeX. I could easily draw it in OmniGraffle or code it in Dot, and export it into an image and include in my LaTeX document. But I wanted to do it directly in LaTeX, in order to keep a consistency between the font and the typesetting.

I Googled for "automata+latex" and several results popped up. From all of them, I highlight the following:
  1. Vaucanson-G - I have a lot of good things to say about this package: the syntax is easy, the output automata are pretty neat and beautiful, the manual is clear and the examples provided are easy to understand. However, this package is NOT compatible with pdflatex which happens to be the command I use to typeset my documents, and I did not wanted to use another one.
  2. Graphviz - I actually used this easy to install package before I found the one I sticked to. This package is a lightweight port of the Graphviz capabilities to LaTeX. The workflow is simple: (i) write the Dot graph (ii)  typeset the document. During typesetting it produces a PDF file with the drawn graph, and includes it in the document. The output is smooth and fits beautifully in the document. However, Dot/Graphviz is not able to produce a subscript text for a label (even using the HTML-label) and the text rendering is not the same LaTeX uses. Since I wanted to subscript text and also wanted the text to be the same as the default in LaTeX math mode, I searched for other packages.
  3. Dot2Tex - This is another package based on Dot/Graphviz. I did not installed it and, consequently, did not tried it. The installation uses python and seems easy to follow. It takes advantage of the TikZ (pre-installed) LaTeX package, and allows to use the math mode to write node names and labels. The output is neat and beautiful. Nevertheless, I needed something more straightforward to install and use.
  4. PGF+TikZ - I found this package through a friend who had used it to typeset beautiful automata in his PhD thesis. The link I provide points to the download page. The installation was really simple (at least in my MacOS X environment with a Tex Live installation):
    • Unziped the downloaded file;
    • Copied the script, source and tex folders into a pgf folder created in /usr/local/texlive/texmf-local/tex/latex/
    • runned the command sudo mktexlsr
Then, to define an automata I included this in the preamble:
\usetikzlibrary{arrows, automata}

And coded the automata... for instance:

\begin{tikzpicture}[shorten >=1pt,node distance=4cm, auto]
\node[state, initial, accepting] (p) {$p$};
\node[state] (q) [right of = p] {$q(x)$};
(p) edge [bend left] node {$\{A\}, x=d_A$} (q)
(q) edge  node {$\{B\}, d_B=x$} (p);

The syntax is simple and the manual provided is very good to start doing more complex things. The output is astonishing and fits amazingly in the content of the document. The math environment can be used to write node names and labels.... 

Basically this package is an umbrella for an extensive list of libraries allowing to create any kind of graphs (automata, graphs, electric circuits, mind-maps, etc.) and completely different things (calendars, background images, etc.)!

Well, this is a little survey on LaTeX packages that can be used to typeset automata and graphs in general. I will stick to the PGF+TikZ package since it enables the drawing of a myriad of beautiful and really useful things for computer science research.
What about Software Architectures?
Software Architecture is a topic within Software Engineering concerned with the design of a system. It embodies the definition of the structure and the planned organization and integration of components which make part of the software system.

The architecture of a system is also concerned with the way the components interact with each other. By interaction it is meant the way the components communicate (interchange data) between them and also the restrictions in such communication. Connectors (also referred to as the glue code — code to connect the components) are the abstractions used to define such interaction. 

There may be used architectural languages to describe the architecture and also to take advantage of their tool support for architectural analysis. These languages are commonly known as Architecture Description Languages (ADLs). Some examples of ADLs are ACME, ArchJava, Wright and Rapide to mention but a few. 

Well, this is just my own basic definition based on definitions of other researchers (citations were omited). I would be glad if you have a different (or more complete) point of view about what a Software Architecture is!