Good design and implementation are necessary but not sufficient prerequisites for successfully re... more Good design and implementation are necessary but not sufficient prerequisites for successfully reusing object-oriented frameworks. Although not always recognized, good documentation is crucial for effective framework reuse, and often hard, costly, and tiresome, coming with many issues, especially when we are not aware of the key problems and respective ways of addressing them. Based on existing literature, case studies and lessons learned, the authors have been mining proven solutions to recurrent problems of documenting object-oriented frameworks, and writing them in pattern form, as patterns are a very effective way of communicating expertise and best practices. This paper presents a small set of patterns addressing problems related to the framework documentation itself, here seen as an autonomous and tangible product independent of the process used to create it. The patterns aim at helping non-experts on cost-effectively documenting object-oriented frameworks. In concrete, these patterns provide guidance on choosing the kinds of documents to produce, how to relate them, and which contents to include. Although the focus is more on the documents themselves, rather than on the process and tools to produce them, some guidelines are also presented in the paper to help on applying the patterns to a specific framework.
ABSTRACT Good documentation benefits every software development project, especially large ones, b... more ABSTRACT Good documentation benefits every software development project, especially large ones, but it can be hard, costly, and tiresome to produce when not supported by appropriate tools and methods. The documentation of a software system uses different artifacts, ...
A Secção de Informática do DEEC em reunião de 13/2/2002 resolveu iniciar a discussão sobre a Coor... more A Secção de Informática do DEEC em reunião de 13/2/2002 resolveu iniciar a discussão sobre a Coordenação Curricular na área da Informática, sem ultrapassar o âmbito das suas competências. Foram consideradas as disciplinas a cargo da Secção de Informática de acordo com a afectação de disciplinas a Secções do DEEC aprovada na reunião de 20/03/2002 do Conselho de Departamento do DEEC. Tendo ficado encarregado de lançar as ideias para a discussão, Eugénio Oliveira efectuou várias reuniões com Correia Lopes, Cristina Ribeiro e Pascoal Faria. Posteriormente, a Secção de Informática do DEEC em reunião de 6/3/2002 nomeou uma equipa de trabalho com um responsável por cada sub-área da secção, encarregado de detalhar a informação sobre as disciplinas da sub-área, analisar as dependências com outras disciplinas da sub-área ou fora dela e produzir um conjunto de comentários e recomendações, e um coordenador encarregado de manter a informação em base de dados por forma a produzir relatórios com informação útil à Coordenação Curricular. Esta é a última versão do relatório (18/07/2013, 11:14:46), 40 páginas numa fonte de tamanho 11pt e pode ser impressa a partir daqui.
Good design and implementation are necessary but not sufficient prerequisites for successfully re... more Good design and implementation are necessary but not sufficient prerequisites for successfully reusing object-oriented frameworks. Although not always recognized, good documentation is crucial for effective framework reuse, and often hard, costly, and tiresome, coming with many issues, especially when we are not aware of the key problems and respective ways of addressing them. Based on existing literature, case studies and lessons learned, the authors have been mining proven solutions to recurrent problems of documenting object-oriented frameworks, and writing them in pattern form, as patterns are a very effective way of communicating expertise and best practices. This paper presents a small set of patterns addressing problems related to the framework documentation itself, here seen as an autonomous and tangible product independent of the process used to create it. The patterns aim at helping non-experts on cost-effectively documenting object-oriented frameworks. In concrete, these patterns provide guidance on choosing the kinds of documents to produce, how to relate them, and which contents to include. Although the focus is more on the documents themselves, rather than on the process and tools to produce them, some guidelines are also presented in the paper to help on applying the patterns to a specific framework.
Good quality documentation is crucial for the effective reuse of object-oriented frameworks, and ... more Good quality documentation is crucial for the effective reuse of object-oriented frameworks, and must be adaptable to the needs of different audiences. To satisfy these needs, framework documentation combines several kinds of documents and contents, resulting in hard, costly and tiresome to produce, specially when not supported by appropriate tools and methods. This paper presents XSDoc 3 , an extensible infrastructure based on a WikiWikiWeb engine that supports the creation, integration, publishing and presentation of framework documentation. XSDoc helps on creating and annotating framework documents, on integrating different kinds of contents (text, models and source code), and provides a simple and economic cooperative web-based documentation environment that can be used standalone in a web-browser, or in an integrated development environment. A small example shows how easy it is to use XSDoc for producing part of a document for JUnit testing framework.
This work involved human subjects or animals in its research. Approval of all ethical and experim... more This work involved human subjects or animals in its research. Approval of all ethical and experimental procedures and protocols was granted by Comissão de Ética do INPE Application No. CE-01/2015.
Communications in Computer and Information Science, 2020
Successful software systems tend to grow considerably, ending up suffering from essential complex... more Successful software systems tend to grow considerably, ending up suffering from essential complexity, and very hard to understand as a whole. Software visualization techniques have been explored as one approach to ease software understanding. This work presents a novel approach and environment for software development that explores the use of liveness and virtual reality (VR) as a way to shorten the feedback loop between developers and their software systems in an interactive and immersive way. As a proof-of-concept, the authors developed a prototype that uses a visual city metaphor and allows developers to visit and dive into the system, in a live way. To assess the usability and viability of the approach, the authors carried on experiments to evaluate the effectiveness of the approach, and how to best support a live approach for software development.
Good design and implementation are necessary but not sufficient pre-requisites for the successful... more Good design and implementation are necessary but not sufficient pre-requisites for the successful reuse of object-oriented frameworks. Although not always recognized, good documentation is crucial for effective framework reuse, and comes with many issues. Defining and writing good quality documentation for a framework is often hard, costly, and tiresome, especially when not aware of its key problems and good solutions for them. This document contributes two patterns to the work in progress of writing a pattern language that describe proven solutions to recurrent problems of documenting objectoriented frameworks. The patterns aim at helping non-experts on cost-effectively documenting object-oriented frameworks. The two initial patterns here presented address the problems of guiding the readers on the documentation and introducing the framework, respectively the patterns “DOCUMENTATION ROADMAP” and “FRAMEWORK OVERVIEW”.
Proceedings of the 14th International Conference on Evaluation of Novel Approaches to Software Engineering, 2019
Any software system that has a considerable growing number of features will suffer from essential... more Any software system that has a considerable growing number of features will suffer from essential complexity, which makes the understanding of the software artifacts increasingly costly and time-consuming. A common approach for reducing the software understanding complexity is to use software visualizations techniques. There are already several approaches for visualizing software, as well as for extracting the information needed for those visualizations. This paper presents a novel approach to tackle the software complexity, delving into the common approaches for extracting information about software artifacts and common software visualization metaphors, allowing users to dive into the software system in a live way using virtual reality (VR). Experiments were carried out in order to validate the correct extraction of metadata from the software artifact and the corresponding VR visualization. With this work, we intend to present a starting point towards a Live Software Development approach.
Software development is a social activity. Teams of developers join together to coordinate their ... more Software development is a social activity. Teams of developers join together to coordinate their efforts to produce software systems. This effort encompasses the development of a shared understanding surrounding multiple artifacts throughout the process. Frameworks are a powerful technique for large-scale reuse, but their complexity often makes them hard to understand and learn how to use. Developers resort to their colleagues for help and insight, at the expense of time and intrusion, as documentation is often outdated and incomplete. This paper presents a study on the state-of-the art on program comprehension, framework understanding and collaborative software environments, proposing a set of requirements for developing tools to improve the understanding of frameworks in a collaborative way.
A Secção de Informática do DEEC em reunião de 13/2/2002 resolveu iniciar a discussão sobre a Coor... more A Secção de Informática do DEEC em reunião de 13/2/2002 resolveu iniciar a discussão sobre a Coordenação Curricular na área da Informática, sem ultrapassar o âmbito das suas competências. Foram consideradas as disciplinas a cargo da Secção de Informática de acordo com a afectação de disciplinas a Secções do DEEC aprovada na reunião de 20/03/2002 do Conselho de Departamento do DEEC. Tendo ficado encarregado de lançar as ideias para a discussão, Eugénio Oliveira efectuou várias reuniões com Correia Lopes, Cristina Ribeiro e Pascoal Faria. Posteriormente, a Secção de Informática do DEEC em reunião de 6/3/2002 nomeou uma equipa de trabalho com um responsável por cada sub-área da secção, encarregado de detalhar a informação sobre as disciplinas da sub-área, analisar as dependências com outras disciplinas da sub-área ou fora dela e produzir um conjunto de comentários e recomendações, e um coordenador encarregado de manter a informação em base de dados por forma a produzir relatórios com informação útil à Coordenação Curricular. Esta é a última versão do relatório (18/07/2013, 11:14:46), 40 páginas numa fonte de tamanho 11pt e pode ser impressa a partir daqui.
PLoP 2006 - PLoP Pattern Languages of Programs 2006 Conference Proceedings, 2006
Good design and implementation are necessary but not sufficient prerequisites for the successful ... more Good design and implementation are necessary but not sufficient prerequisites for the successful reuse of object-oriented frameworks. Although not always recognized, good documentation is crucial for effective framework reuse but comes with many issues. Writing good quality documentation for a framework is often hard, costly, and tiresome, especially when not aware of its key problems and the best ways to address them. This document presents two of a set of related patterns that describe proven solutions to help non-experts on solving recurrent problems of documenting object-oriented frameworks. The patterns here presented address the problems of describing the customization points of the framework and how such customization is supported, respectively the patterns "CUSTOMIZATION POINTS" and "DESIGN INTERNALS".
Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics), 2011
Good design and implementation are necessary but not sufficient prerequisites for successfully re... more Good design and implementation are necessary but not sufficient prerequisites for successfully reusing object-oriented frameworks. Although not always recognized, good documentation is crucial for effective framework reuse, and often hard, costly, and tiresome, coming with many issues, especially when we are not aware of the key problems and respective ways of addressing them. Based on existing literature, case studies and lessons learned, the authors have been mining proven solutions to recurrent problems of documenting object-oriented frameworks, and writing them in pattern form, as patterns are a very effective way of communicating expertise and best practices. This paper presents a small set of patterns addressing problems related to the framework documentation itself, here seen as an autonomous and tangible product independent of the process used to create it. The patterns aim at helping non-experts on cost-effectively documenting object-oriented frameworks. In concrete, these patterns provide guidance on choosing the kinds of documents to produce, how to relate them, and which contents to include. Although the focus is more on the documents themselves, rather than on the process and tools to produce them, some guidelines are also presented in the paper to help on applying the patterns to a specific framework.
Proceedings of the 4th International Symposium on Wikis, 2008
Wikis are popular tools commonly used to support distributed collaborative work. Wikis can be see... more Wikis are popular tools commonly used to support distributed collaborative work. Wikis can be seen as virtual scrapbooks that anyone can edit without having any specific technical know-how. The Wikipedia is a flagship example of a real-word application of wikis. Due to the large scale of Wikipedia it's difficult to easily grasp much of the information that is stored in this wiki. We address one particular aspect of this issue by looking at the revision history of each article. Plotting the revision activity in a timeline we expose the complete article's history in a easily understandable format. We present WikiChanges, a web-based application designed to plot an article's revision timeline in real time. WikiChanges also includes a web browser extension that incorporates activity sparklines in the real Wikipedia. Finally, we introduce a revisions summarization task that addresses the need to understand what occurred during a given set of revisions. We present a first approach to this task using tag clouds to present the revisions made.
We present an approach to analyse the application of tactics in architectural patterns. We define... more We present an approach to analyse the application of tactics in architectural patterns. We define and illustrate the approach by resorting to Archery, a language for specifying, analysing and verifying architectural patterns. The approach consists of characterising the design principles of an architectural pattern as constraints, expressed in the language, and then, establishing a refinement relation based on their satisfaction. The application of tactics preserving refinement preserves the original design principles expressed themselves as constraints for the architectural pattern. The paper's focus on fault-tolerance tactics, and identifies a set of requirements for a semantic framework characterising them. Model transformations to represent their application are discussed and illustrated through two case studies.
2009 Fourth International Conference on Software Engineering Advances, 2009
This thesis was typeset on an Apple ® MacBook ® running Mac OS ® X 10.6.4 using the free L A T E ... more This thesis was typeset on an Apple ® MacBook ® running Mac OS ® X 10.6.4 using the free L A T E X typesetting system, originally developed by Leslie Lamport based on T E X created by Donald Knuth. The body text is set in Latin Modern, a Computer Modern derived font originally designed by Donald Knuth. Other fonts include Sans and Typewriter from the Computer Modern family, and Courier, a monospaced font originally designed by Howard Kettler at IBM and later redrawn by Adrian Frutiger. This colophon has exactly seventy five (75) words, excluding all numbers and symbols.
Good design and implementation are necessary but not sufficient prerequisites for successfully re... more Good design and implementation are necessary but not sufficient prerequisites for successfully reusing object-oriented frameworks. Although not always recognized, good documentation is crucial for effective framework reuse, and often hard, costly, and tiresome, coming with many issues, especially when we are not aware of the key problems and respective ways of addressing them. Based on existing literature, case studies and lessons learned, the authors have been mining proven solutions to recurrent problems of documenting object-oriented frameworks, and writing them in pattern form, as patterns are a very effective way of communicating expertise and best practices. This paper presents a small set of patterns addressing problems related to the framework documentation itself, here seen as an autonomous and tangible product independent of the process used to create it. The patterns aim at helping non-experts on cost-effectively documenting object-oriented frameworks. In concrete, these patterns provide guidance on choosing the kinds of documents to produce, how to relate them, and which contents to include. Although the focus is more on the documents themselves, rather than on the process and tools to produce them, some guidelines are also presented in the paper to help on applying the patterns to a specific framework.
ABSTRACT Good documentation benefits every software development project, especially large ones, b... more ABSTRACT Good documentation benefits every software development project, especially large ones, but it can be hard, costly, and tiresome to produce when not supported by appropriate tools and methods. The documentation of a software system uses different artifacts, ...
A Secção de Informática do DEEC em reunião de 13/2/2002 resolveu iniciar a discussão sobre a Coor... more A Secção de Informática do DEEC em reunião de 13/2/2002 resolveu iniciar a discussão sobre a Coordenação Curricular na área da Informática, sem ultrapassar o âmbito das suas competências. Foram consideradas as disciplinas a cargo da Secção de Informática de acordo com a afectação de disciplinas a Secções do DEEC aprovada na reunião de 20/03/2002 do Conselho de Departamento do DEEC. Tendo ficado encarregado de lançar as ideias para a discussão, Eugénio Oliveira efectuou várias reuniões com Correia Lopes, Cristina Ribeiro e Pascoal Faria. Posteriormente, a Secção de Informática do DEEC em reunião de 6/3/2002 nomeou uma equipa de trabalho com um responsável por cada sub-área da secção, encarregado de detalhar a informação sobre as disciplinas da sub-área, analisar as dependências com outras disciplinas da sub-área ou fora dela e produzir um conjunto de comentários e recomendações, e um coordenador encarregado de manter a informação em base de dados por forma a produzir relatórios com informação útil à Coordenação Curricular. Esta é a última versão do relatório (18/07/2013, 11:14:46), 40 páginas numa fonte de tamanho 11pt e pode ser impressa a partir daqui.
Good design and implementation are necessary but not sufficient prerequisites for successfully re... more Good design and implementation are necessary but not sufficient prerequisites for successfully reusing object-oriented frameworks. Although not always recognized, good documentation is crucial for effective framework reuse, and often hard, costly, and tiresome, coming with many issues, especially when we are not aware of the key problems and respective ways of addressing them. Based on existing literature, case studies and lessons learned, the authors have been mining proven solutions to recurrent problems of documenting object-oriented frameworks, and writing them in pattern form, as patterns are a very effective way of communicating expertise and best practices. This paper presents a small set of patterns addressing problems related to the framework documentation itself, here seen as an autonomous and tangible product independent of the process used to create it. The patterns aim at helping non-experts on cost-effectively documenting object-oriented frameworks. In concrete, these patterns provide guidance on choosing the kinds of documents to produce, how to relate them, and which contents to include. Although the focus is more on the documents themselves, rather than on the process and tools to produce them, some guidelines are also presented in the paper to help on applying the patterns to a specific framework.
Good quality documentation is crucial for the effective reuse of object-oriented frameworks, and ... more Good quality documentation is crucial for the effective reuse of object-oriented frameworks, and must be adaptable to the needs of different audiences. To satisfy these needs, framework documentation combines several kinds of documents and contents, resulting in hard, costly and tiresome to produce, specially when not supported by appropriate tools and methods. This paper presents XSDoc 3 , an extensible infrastructure based on a WikiWikiWeb engine that supports the creation, integration, publishing and presentation of framework documentation. XSDoc helps on creating and annotating framework documents, on integrating different kinds of contents (text, models and source code), and provides a simple and economic cooperative web-based documentation environment that can be used standalone in a web-browser, or in an integrated development environment. A small example shows how easy it is to use XSDoc for producing part of a document for JUnit testing framework.
This work involved human subjects or animals in its research. Approval of all ethical and experim... more This work involved human subjects or animals in its research. Approval of all ethical and experimental procedures and protocols was granted by Comissão de Ética do INPE Application No. CE-01/2015.
Communications in Computer and Information Science, 2020
Successful software systems tend to grow considerably, ending up suffering from essential complex... more Successful software systems tend to grow considerably, ending up suffering from essential complexity, and very hard to understand as a whole. Software visualization techniques have been explored as one approach to ease software understanding. This work presents a novel approach and environment for software development that explores the use of liveness and virtual reality (VR) as a way to shorten the feedback loop between developers and their software systems in an interactive and immersive way. As a proof-of-concept, the authors developed a prototype that uses a visual city metaphor and allows developers to visit and dive into the system, in a live way. To assess the usability and viability of the approach, the authors carried on experiments to evaluate the effectiveness of the approach, and how to best support a live approach for software development.
Good design and implementation are necessary but not sufficient pre-requisites for the successful... more Good design and implementation are necessary but not sufficient pre-requisites for the successful reuse of object-oriented frameworks. Although not always recognized, good documentation is crucial for effective framework reuse, and comes with many issues. Defining and writing good quality documentation for a framework is often hard, costly, and tiresome, especially when not aware of its key problems and good solutions for them. This document contributes two patterns to the work in progress of writing a pattern language that describe proven solutions to recurrent problems of documenting objectoriented frameworks. The patterns aim at helping non-experts on cost-effectively documenting object-oriented frameworks. The two initial patterns here presented address the problems of guiding the readers on the documentation and introducing the framework, respectively the patterns “DOCUMENTATION ROADMAP” and “FRAMEWORK OVERVIEW”.
Proceedings of the 14th International Conference on Evaluation of Novel Approaches to Software Engineering, 2019
Any software system that has a considerable growing number of features will suffer from essential... more Any software system that has a considerable growing number of features will suffer from essential complexity, which makes the understanding of the software artifacts increasingly costly and time-consuming. A common approach for reducing the software understanding complexity is to use software visualizations techniques. There are already several approaches for visualizing software, as well as for extracting the information needed for those visualizations. This paper presents a novel approach to tackle the software complexity, delving into the common approaches for extracting information about software artifacts and common software visualization metaphors, allowing users to dive into the software system in a live way using virtual reality (VR). Experiments were carried out in order to validate the correct extraction of metadata from the software artifact and the corresponding VR visualization. With this work, we intend to present a starting point towards a Live Software Development approach.
Software development is a social activity. Teams of developers join together to coordinate their ... more Software development is a social activity. Teams of developers join together to coordinate their efforts to produce software systems. This effort encompasses the development of a shared understanding surrounding multiple artifacts throughout the process. Frameworks are a powerful technique for large-scale reuse, but their complexity often makes them hard to understand and learn how to use. Developers resort to their colleagues for help and insight, at the expense of time and intrusion, as documentation is often outdated and incomplete. This paper presents a study on the state-of-the art on program comprehension, framework understanding and collaborative software environments, proposing a set of requirements for developing tools to improve the understanding of frameworks in a collaborative way.
A Secção de Informática do DEEC em reunião de 13/2/2002 resolveu iniciar a discussão sobre a Coor... more A Secção de Informática do DEEC em reunião de 13/2/2002 resolveu iniciar a discussão sobre a Coordenação Curricular na área da Informática, sem ultrapassar o âmbito das suas competências. Foram consideradas as disciplinas a cargo da Secção de Informática de acordo com a afectação de disciplinas a Secções do DEEC aprovada na reunião de 20/03/2002 do Conselho de Departamento do DEEC. Tendo ficado encarregado de lançar as ideias para a discussão, Eugénio Oliveira efectuou várias reuniões com Correia Lopes, Cristina Ribeiro e Pascoal Faria. Posteriormente, a Secção de Informática do DEEC em reunião de 6/3/2002 nomeou uma equipa de trabalho com um responsável por cada sub-área da secção, encarregado de detalhar a informação sobre as disciplinas da sub-área, analisar as dependências com outras disciplinas da sub-área ou fora dela e produzir um conjunto de comentários e recomendações, e um coordenador encarregado de manter a informação em base de dados por forma a produzir relatórios com informação útil à Coordenação Curricular. Esta é a última versão do relatório (18/07/2013, 11:14:46), 40 páginas numa fonte de tamanho 11pt e pode ser impressa a partir daqui.
PLoP 2006 - PLoP Pattern Languages of Programs 2006 Conference Proceedings, 2006
Good design and implementation are necessary but not sufficient prerequisites for the successful ... more Good design and implementation are necessary but not sufficient prerequisites for the successful reuse of object-oriented frameworks. Although not always recognized, good documentation is crucial for effective framework reuse but comes with many issues. Writing good quality documentation for a framework is often hard, costly, and tiresome, especially when not aware of its key problems and the best ways to address them. This document presents two of a set of related patterns that describe proven solutions to help non-experts on solving recurrent problems of documenting object-oriented frameworks. The patterns here presented address the problems of describing the customization points of the framework and how such customization is supported, respectively the patterns "CUSTOMIZATION POINTS" and "DESIGN INTERNALS".
Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics), 2011
Good design and implementation are necessary but not sufficient prerequisites for successfully re... more Good design and implementation are necessary but not sufficient prerequisites for successfully reusing object-oriented frameworks. Although not always recognized, good documentation is crucial for effective framework reuse, and often hard, costly, and tiresome, coming with many issues, especially when we are not aware of the key problems and respective ways of addressing them. Based on existing literature, case studies and lessons learned, the authors have been mining proven solutions to recurrent problems of documenting object-oriented frameworks, and writing them in pattern form, as patterns are a very effective way of communicating expertise and best practices. This paper presents a small set of patterns addressing problems related to the framework documentation itself, here seen as an autonomous and tangible product independent of the process used to create it. The patterns aim at helping non-experts on cost-effectively documenting object-oriented frameworks. In concrete, these patterns provide guidance on choosing the kinds of documents to produce, how to relate them, and which contents to include. Although the focus is more on the documents themselves, rather than on the process and tools to produce them, some guidelines are also presented in the paper to help on applying the patterns to a specific framework.
Proceedings of the 4th International Symposium on Wikis, 2008
Wikis are popular tools commonly used to support distributed collaborative work. Wikis can be see... more Wikis are popular tools commonly used to support distributed collaborative work. Wikis can be seen as virtual scrapbooks that anyone can edit without having any specific technical know-how. The Wikipedia is a flagship example of a real-word application of wikis. Due to the large scale of Wikipedia it's difficult to easily grasp much of the information that is stored in this wiki. We address one particular aspect of this issue by looking at the revision history of each article. Plotting the revision activity in a timeline we expose the complete article's history in a easily understandable format. We present WikiChanges, a web-based application designed to plot an article's revision timeline in real time. WikiChanges also includes a web browser extension that incorporates activity sparklines in the real Wikipedia. Finally, we introduce a revisions summarization task that addresses the need to understand what occurred during a given set of revisions. We present a first approach to this task using tag clouds to present the revisions made.
We present an approach to analyse the application of tactics in architectural patterns. We define... more We present an approach to analyse the application of tactics in architectural patterns. We define and illustrate the approach by resorting to Archery, a language for specifying, analysing and verifying architectural patterns. The approach consists of characterising the design principles of an architectural pattern as constraints, expressed in the language, and then, establishing a refinement relation based on their satisfaction. The application of tactics preserving refinement preserves the original design principles expressed themselves as constraints for the architectural pattern. The paper's focus on fault-tolerance tactics, and identifies a set of requirements for a semantic framework characterising them. Model transformations to represent their application are discussed and illustrated through two case studies.
2009 Fourth International Conference on Software Engineering Advances, 2009
This thesis was typeset on an Apple ® MacBook ® running Mac OS ® X 10.6.4 using the free L A T E ... more This thesis was typeset on an Apple ® MacBook ® running Mac OS ® X 10.6.4 using the free L A T E X typesetting system, originally developed by Leslie Lamport based on T E X created by Donald Knuth. The body text is set in Latin Modern, a Computer Modern derived font originally designed by Donald Knuth. Other fonts include Sans and Typewriter from the Computer Modern family, and Courier, a monospaced font originally designed by Howard Kettler at IBM and later redrawn by Adrian Frutiger. This colophon has exactly seventy five (75) words, excluding all numbers and symbols.
Uploads
Papers by ademar aguiar