User:Timothee Flutre/Notebook/Postdoc/2012/05/16

From OpenWetWare

(Difference between revisions)
Jump to: navigation, search
m (Typical templates for Python scripts, C++ programs and others)
m (Typical templates for Python scripts, C++ programs and others: rmv redundant spaces in beamer template)
Line 299: Line 299:
  <nowiki>
  <nowiki>
-
% Author: Timothée Flutre                                                                                                                                  
+
% Author: Timothée Flutre
\documentclass{beamer}
\documentclass{beamer}
\usepackage{amsmath}
\usepackage{amsmath}
-
\usepackage{bm} % to have mathematical symbols in bold                                                                                                      
+
\usepackage{bm} % to have mathematical symbols in bold
\usepackage{hyperref}
\usepackage{hyperref}
\hypersetup{colorlinks, linkcolor=black, urlcolor=gray}
\hypersetup{colorlinks, linkcolor=black, urlcolor=gray}
Line 314: Line 314:
\graphicspath{{./figures/}}
\graphicspath{{./figures/}}
-
%-----------------------------------------------------------------------------                                                                              
+
%-----------------------------------------------------------------------------
\setbeamertemplate{caption}[numbered]
\setbeamertemplate{caption}[numbered]
Line 349: Line 349:
}
}
-
%-----------------------------------------------------------------------------                                                                              
+
%-----------------------------------------------------------------------------
\title[Short title]{Long title}
\title[Short title]{Long title}
Line 356: Line 356:
\date{\today}
\date{\today}
-
begin{document}
+
\begin{document}
-
\begin{frame}                                                                                                                                              
+
\begin{frame}
-
\titlepage                                                                                                                                                  
+
\titlepage
-
\end{frame}                                                                                                                                                
+
\end{frame}                                                                                                                      
-
                                                                                                                                                           
+
-
\begin{frame}                                                                                                                                               
+
-
\frametitle{Outline}                                                                                                                                       
+
-
\tableofcontents                                                                                                                                           
+
-
\end{frame}                                                                                                                                                 
+
-
\section{First section}
+
\begin{frame}
 +
\frametitle{Outline}
 +
\tableofcontents
 +
\end{frame}
 +
\section{First section}
\begin{frame}
\begin{frame}
\frametitle{I.1.}
\frametitle{I.1.}
Line 385: Line 384:
\end{frame}
\end{frame}
-
end{document}
+
\end{document}
</nowiki>
</nowiki>

Revision as of 10:50, 17 September 2012

Get PDF | Get log | Regenerate PDF | Export Source
Included files:

{|{{table}} width="800"
|-
|style="background-color: #EEE"|[[Image:owwnotebook_icon.png|128px]] Project name
|style="background-color: #F2F2F2" align="center"|
[[{{#sub:{{FULLPAGENAME}}|0|-11}}|Main project page]]
{{#if:{{#lnpreventry:{{FULLPAGENAME}}}}|[[{{#lnpreventry:{{FULLPAGENAME}}}}{{!}}Previous entry]]      }}{{#if:{{#lnnextentry:{{FULLPAGENAME}}}}|[[{{#lnnextentry:{{FULLPAGENAME}}}}{{!}}Next entry]]}} |- | colspan="2"| ==Typical templates for Python scripts, C++ programs and others== It is always rewarding on the long term to start any piece of computer software with a minimum amount of generic code (verbose, command-line options, help message, license, etc). But it's a pain to write all this every time, right? So below are my typical templates for any Python script, C++ programs and others. * '''Python''': it is assumed that the code below is copied into a file named "MyClass.py". #!/usr/bin/env python # Author: Timothee Flutre # License: GPL-3 # Aim: does this and that # help2man -o MyClass.man ./MyClass.py # groff -mandoc MyClass.man > MyClass.ps import sys import os import getopt import time import datetime import math class MyClass(object): def __init__(self): self.verbose = 1 self.input = "" def help(self): msg = "`%s' does this and that.\n" % os.path.basename(sys.argv[0]) msg += "\n" msg += "Usage: %s [OPTIONS] ...\n" % os.path.basename(sys.argv[0]) msg += "\n" msg += "Options:\n" msg += " -h, --help\tdisplay the help and exit\n" msg += " -V, --version\toutput version information and exit\n" msg += " -v, --verbose\tverbosity level (0/default=1/2/3)\n" msg += " -i\tinput" msg += "\n" msg += "Examples:\n" print msg; sys.stdout.flush() def version(self): msg = "%s 0.1\n" % os.path.basename(sys.argv[0]) msg += "\n" msg += "License GPLv3+: GNU GPL version 3 or later \n" msg += "This is free software; see the source for copying conditions. There is NO\n" msg += "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" print msg; sys.stdout.flush() def setAttributesFromCmdLine(self): try: opts, args = getopt.getopt( sys.argv[1:], "hVv:i:", ["help", "version", "verbose="]) except getopt.GetoptError, err: sys.stderr.write("%s\n" % str(err)) self.help() sys.exit(2) for o, a in opts: if o == "-h" or o == "--help": self.help() sys.exit(0) elif o == "-V" or o == "--version": self.version() sys.exit(0) elif o == "-v" or o == "--verbose": self.verbose = int(a) elif o == "-i": self.input = a else: assert False, "unhandled option" def checkAttributes(self): if self.input == "": msg = "ERROR: missing compulsory option -i" sys.stderr.write("%s\n\n" % msg) self.help() sys.exit(1) if not os.path.exists(self.input): msg = "ERROR: can't find '%s'" % self.input sys.stderr.write("%s\n\n" % msg) self.help() sys.exit(1) def run(self): self.checkAttributes() if self.verbose > 0: msg = "START %s" % time.strftime("%Y-%m-%d %H:%M:%S") startTime = time.time() print msg; sys.stdout.flush() # ... specific code ... if self.verbose > 0: msg = "END %s" % time.strftime("%Y-%m-%d %H:%M:%S") endTime = time.time() runLength = datetime.timedelta(seconds= math.floor(endTime - startTime)) msg += " (%s)" % str(runLength) print msg; sys.stdout.flush() if __name__ == "__main__": i = MyClass() i.setAttributesFromCmdLine() i.run() * '''C++''': it is assumed that the code below is copied into a file named "myprogram.cpp" and that the file "[https://github.com/timflutre/quantgen/blob/master/utils.cpp utils.cpp]" is present in the same directory, along with the corresponding header utils.h. /** \file myprogram.cpp * * `myprogram' does this and that. * Copyright (C) 2011,2012 Timothee Flutre * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * g++ -Wall -g utils.cpp myprogram.cpp -lgsl -lgslcblas -lz -o myprogram * help2man -o myprogram.man ./myprogram * groff -mandoc myprogram.man > myprogram.ps */ #include #include #include #include #include using namespace std; #include "utils.h" /** \brief Display the help on stdout. */ void help (char ** argv) { cout << "`" << argv[0] << "'" << " does this and that." << endl << endl << "Usage: " << argv[0] << " [OPTIONS] ..." << endl << endl << "Options:" << endl << " -h, --help\tdisplay the help and exit" << endl << " -V, --version\toutput version information and exit" << endl << " -v, --verbose\tverbosity level (0/default=1/2/3)" << endl << " -i, --in\tinput" << endl << endl << "Examples:" << endl << " " << argv[0] << " -i " << endl << endl << "Remarks:" << endl << " This is my typical template file for C++." << endl  ; } /** \brief Display version and license information on stdout. */ void version (char ** argv) { cout << argv[0] << " " << __DATE__ << " " << __TIME__ << endl << endl << "Copyright (C) 2011,2012 T. Flutre." << endl << "License GPLv3+: GNU GPL version 3 or later " << endl << "This is free software; see the source for copying conditions. There is NO" << endl << "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." << endl << endl << "Written by T. Flutre." << endl; } /** \brief Parse the command-line arguments and check the values of the * compulsory ones. */ void parseArgs ( int argc, char ** argv, string & input, int & verbose) { int c = 0; while (true) { static struct option long_options[] = { {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'V'}, {"verbose", required_argument, 0, 'v'}, {"input", required_argument, 0, 'i'}, {0, 0, 0, 0} }; int option_index = 0; c = getopt_long (argc, argv, "hVv:i:", long_options, &option_index); if (c == -1) break; switch (c) { case 0: if (long_options[option_index].flag != 0) break; case 'h': help (argv); exit (0); case 'V': version (argv); exit (0); case 'v': verbose = atoi(optarg); break; case 'i': input = optarg; break; case '?': printf ("\n"); help (argv); abort (); default: printf ("\n"); help (argv); abort (); } } if (input.empty()) { printCmdLine (argc, argv); fprintf (stderr, "ERROR: missing compulsory option -i\n\n"); help (argv); exit (1); } if (! doesFileExist (input)) { printCmdLine (argc, argv); fprintf (stderr, "ERROR: can't find '%s'\n\n", input.c_str()); help (argv); exit (1); } } int main (int argc, char ** argv) { string input; int verbose = 1; parseArgs (argc, argv, input, verbose); time_t startRawTime, endRawTime; if (verbose > 0) { time (&startRawTime); cout << "START " << argv[0] << " (" << time2string (startRawTime) << ")" << endl << "compiled -> " << __DATE__ << " " << __TIME__ << endl << flush; printCmdLine (argc, argv); } // ... specific code ... if (verbose > 0) { time (&endRawTime); cout << "END " << argv[0] << " (" << time2string (endRawTime) << ")" << endl << "elapsed -> " << elapsedTime(startRawTime, endRawTime) << endl << "max.mem -> " << getMaxMemUsedByProcess () << " kB" << endl; } return EXIT_SUCCESS; } * '''Latex-Beamer''': it is assumed that the code below is copied into a file named "mypresentation.tex". Several packages are assumed to be already installed. The current directory is also assumed to contain a directory named "figures" in which are saved all picture files included in the presentation. % Author: Timothée Flutre \documentclass{beamer} \usepackage{amsmath} \usepackage{bm} % to have mathematical symbols in bold \usepackage{hyperref} \hypersetup{colorlinks, linkcolor=black, urlcolor=gray} \usepackage{multirow} \usepackage{tikz} \usepackage[francais]{babel} \usepackage[utf8]{inputenc} \graphicspath{{./figures/}} %----------------------------------------------------------------------------- \setbeamertemplate{caption}[numbered] \setbeamerfont{caption}{size=\scriptsize} \setbeamertemplate{navigation symbols}{} \setbeamercolor{alerted text}{fg=purple} \setbeamertemplate{footline} { \leavevmode \hbox{ \hspace*{-0.06cm} \begin{beamercolorbox}[wd=.2\paperwidth,ht=2.25ex,dp=1ex,center]{author in head/foot} \usebeamerfont{author in head/foot}\insertshortauthor \hspace*{1em} \insertshortinstitute \end{beamercolorbox} \begin{beamercolorbox}[wd=.50\paperwidth,ht=2.25ex,dp=1ex,center]{section in head/foot} \usebeamerfont{section in head/foot}\insertshorttitle \end{beamercolorbox} \begin{beamercolorbox}[wd=.27\paperwidth,ht=2.25ex,dp=1ex,right]{section in head/foot}% \usebeamerfont{section in head/foot}\insertshortdate{}\hspace*{2em} \insertframenumber{} / \inserttotalframenumber\hspace*{2ex} \end{beamercolorbox} } \vskip0pt } \AtBeginSection[] { \begin{frame} \frametitle{Outline} \addtocounter{framenumber}{-1} \tableofcontents[currentsection] \end{frame} } %----------------------------------------------------------------------------- \title[Short title]{Long title} \author[T. Flutre]{Timoth\'{e}e Flutre} \institute[Short affiliation]{Long affiliation} \date{\today} \begin{document} \begin{frame} \titlepage \end{frame} \begin{frame} \frametitle{Outline} \tableofcontents \end{frame} \section{First section} \begin{frame} \frametitle{I.1.} \begin{itemize} \item \end{itemize} \end{frame} \section{Second section} \begin{frame} \frametitle{II.1.} \begin{center} %\includegraphics[width=0.95\textwidth,height=0.90\textheight,keepaspectratio=true]{myplot}% \end{center} \end{frame} \end{document} |} __NOTOC__

Personal tools