Showing
11 changed files
with
355 additions
and
309 deletions
File moved
File moved
No preview for this file type
snakes.old/snakes.pdf
0 → 100644
No preview for this file type
snakes.old/snakes.tex
0 → 100644
1 | +\documentclass{beamer} | ||
2 | + | ||
3 | +\usepackage[english]{babel} | ||
4 | +\usepackage[latin1]{inputenc} | ||
5 | +\usepackage[orientation=portrait,size=a0,scale=2]{beamerposter} | ||
6 | +\usepackage{textpos} | ||
7 | +\usepackage{picins} | ||
8 | +\usepackage{url} | ||
9 | +\usepackage{fancyvrb} | ||
10 | +\usepackage{relsize} | ||
11 | + | ||
12 | +\usepackage{tikz} | ||
13 | +\usetikzlibrary{shapes.callouts} | ||
14 | + | ||
15 | +\parindent=0pt | ||
16 | +\setbeamertemplate{navigation symbols}{} | ||
17 | + | ||
18 | +\def\smallskip{\vspace{5mm}} | ||
19 | +\def\medskip{\vspace{10mm}} | ||
20 | +\def\bigskip{\vspace{20mm}} | ||
21 | + | ||
22 | +\colorlet{title}{black!10} | ||
23 | +\colorlet{minor}{black!65} | ||
24 | +\colorlet{snakes}{green!30!black} | ||
25 | +\colorlet{python}{blue!30!black} | ||
26 | +\definecolor{popup}{rgb}{.6,1,.5} | ||
27 | + | ||
28 | +\def\*{\raise-.65ex\hbox{$\smash{ | ||
29 | + \includegraphics[height=1em]{snake-shadow.pdf}}$}} | ||
30 | + | ||
31 | +\def\section#1{\noindent\colorbox{title}{% | ||
32 | + \hbox to \textwidth{\bfseries #1\hfill\strut\*}}\smallskip} | ||
33 | + | ||
34 | +\def\endparitem{\endgraf\egroup} | ||
35 | +\def\>{\par\bgroup | ||
36 | + \let\par=\endparitem | ||
37 | + \leftskip=1.4em\parindent=-1.4em | ||
38 | + \indent\hbox to 1.4em{\hss | ||
39 | + $\smash{\includegraphics[width=1em]{cartoon-python.pdf}}$ | ||
40 | + }\ignorespaces} | ||
41 | +\def\+{\par\bgroup | ||
42 | + \let\par=\endparitem | ||
43 | + \leftskip=2.8em\parindent=-1.4em | ||
44 | + \indent\hbox to 1.4em{\hss | ||
45 | + $\color{snakes}\smash{\bullet}$ | ||
46 | + }\ignorespaces} | ||
47 | + | ||
48 | +\def\PYk #1{{\color{snakes}#1}} | ||
49 | +\def\PYn #1{{\color{python}#1}} | ||
50 | +\def\PYc #1{{\color{minor}#1}} | ||
51 | + | ||
52 | +\begin{document} | ||
53 | +\begin{frame}[fragile]{} | ||
54 | + | ||
55 | +%% | ||
56 | +%% title & logos | ||
57 | +%% | ||
58 | + | ||
59 | +\begin{textblock}{14.4}(.5,.5) | ||
60 | + \parpic{\includegraphics[height=13cm]{logo-snakes}\quad} | ||
61 | + {\Large\bfseries a high-level Petri nets library}\\[15pt] | ||
62 | + {\large Franck Pommereau}\\[30pt] | ||
63 | + \small | ||
64 | + IBISC/COSMO, university of vry/Paris-Saclay\\ | ||
65 | + 23 boulevard de France, 91037 vry Cedex France\\[20pt] | ||
66 | + \url{franck.pommereau@ibisc.univ-evry.fr}\\ | ||
67 | + \url{http://www.ibisc.univ-evry.fr/~fpommereau/SNAKES/} | ||
68 | +\end{textblock} | ||
69 | + | ||
70 | +\begin{textblock}{14.4}(.7,.5) | ||
71 | + \null\hfill | ||
72 | + \begin{tikzpicture}[xscale=4,yscale=4] | ||
73 | + \node at (-2,0) {\includegraphics[width=150mm, height=150mm, | ||
74 | + keepaspectratio=true]{logo-ibisc}}; | ||
75 | + \node at (1,1) {\includegraphics[width=58mm, height=58mm, | ||
76 | + keepaspectratio=true]{logo-ueve}}; | ||
77 | + \node at (1,-1) {\includegraphics[width=65mm, height=65mm, | ||
78 | + keepaspectratio=true]{logo-genopole}}; | ||
79 | + \end{tikzpicture} | ||
80 | +\end{textblock} | ||
81 | + | ||
82 | +%% | ||
83 | +%% left column | ||
84 | +%% | ||
85 | + | ||
86 | +\begin{textblock}{9}(.5,2.85) | ||
87 | +\section{SNAKES in a nutshell} | ||
88 | + | ||
89 | +\tikzstyle{popup}=[draw,rectangle callout,rounded corners=15, | ||
90 | + text width=10cm,align=center,callout pointer width=7mm, | ||
91 | + callout absolute pointer={(70:.5)},fill=popup] | ||
92 | + | ||
93 | +\begin{center} | ||
94 | +\begin{tikzpicture}[scale=12] | ||
95 | + \node at (0,0) {\scalebox{-1}[1]{% | ||
96 | + \includegraphics[scale=3]{oroborus.pdf}}}; | ||
97 | + \node[popup,callout relative pointer={(-70:2)}] at (90:1) | ||
98 | + {SNAKES is a Python library}; | ||
99 | + \node[popup,callout relative pointer={(-150:2)}] at (40:1.4) | ||
100 | + {Define and manipulate Petri nets}; | ||
101 | + \node[popup,callout relative pointer={(170:3)}] at (10:1.3) | ||
102 | + {Very generic Petri net definition}; | ||
103 | + \node[popup,callout relative pointer={(150:4)}] at (-25:1.3) | ||
104 | + {Annotations are Python expressions}; | ||
105 | + \node[popup,callout relative pointer={(80:4)}] at (-90:1) | ||
106 | + {Tokens are Python objects}; | ||
107 | + \node[popup,cloud callout,cloud puffs=15,aspect=2.5,inner sep=-20pt, | ||
108 | + cloud puff arc=120,callout relative pointer={(170:3)}, | ||
109 | + fill=blue!20,rounded corners=0] at (-45:1.7) | ||
110 | + {\small Even SNAKES'\\[-20pt] net objects}; | ||
111 | + \node[popup,callout relative pointer={(50:4.5)}] at (-150:1.2) | ||
112 | + {Fully reflexive for maximal flexibility}; | ||
113 | + \node[popup,cloud callout,cloud puffs=12,aspect=2.6,inner sep=-50pt, | ||
114 | + cloud puff arc=140,callout relative pointer={(50:2)}, | ||
115 | + fill=blue!20,rounded corners=0] at (-130:1.5) | ||
116 | + {\small Inspired\\[-20pt] by Emacs}; | ||
117 | + \node[popup,callout relative pointer={(10:3)}] at (170:1.2) | ||
118 | + {Extensible with plugins}; | ||
119 | + \node at (0,0) {\includegraphics[scale=.5]{python-powered.pdf}}; | ||
120 | +\end{tikzpicture} | ||
121 | +\end{center} | ||
122 | + | ||
123 | +%% | ||
124 | +%% | ||
125 | +%% | ||
126 | + | ||
127 | +\medskip | ||
128 | +\section{Plugins} | ||
129 | + | ||
130 | +\> {\color{snakes}\texttt{gv}}: draw Petri nets using GraphViz | ||
131 | +\> {\color{snakes}\texttt{ops}}: algebras of Petri nets compositions | ||
132 | + {\small\color{minor}(PBC, PNA, M-nets, \dots)} | ||
133 | +\> {\color{snakes}\texttt{pids}}: dynamic processes creation and | ||
134 | + destruction | ||
135 | +\> {\color{snakes}\texttt{labels}}: arbitrary objects annotations | ||
136 | +\> {\color{snakes}\texttt{let}}: variables assignation during computation | ||
137 | +\> \dots {\color{minor}(your plugin here: try, it's easy)} | ||
138 | + | ||
139 | +%% | ||
140 | +%% | ||
141 | +%% | ||
142 | + | ||
143 | +\bigskip | ||
144 | +\section{ABCD for friendly modelling} | ||
145 | + | ||
146 | +\> process algebra with friendly Python-like syntax | ||
147 | +\> embeds full Python | ||
148 | +\> compiler shipped with SNAKES library | ||
149 | +\> generates Petri nets objects | ||
150 | +\> export to pictures or PNML files | ||
151 | +\> simulation and reachability analysis | ||
152 | + | ||
153 | +\vbox to 0pt{\vss\null\hfill | ||
154 | + \includegraphics[width=18cm]{abcd-simul} | ||
155 | + \vspace*{.2\baselineskip}} | ||
156 | +\vspace*{-\baselineskip} | ||
157 | + | ||
158 | +%% | ||
159 | +%% | ||
160 | +%% | ||
161 | + | ||
162 | +\bigskip | ||
163 | +\section{Neco for fast analysis} | ||
164 | + | ||
165 | +\> \L ukasz Fronc's companion tool {\small\color{minor}(available | ||
166 | + separately at \url{https://code.google.com/p/neco-net-compiler/})} | ||
167 | +\> Neco compiles SNAKES Petri nets into fast native code | ||
168 | + \+ optimised marking structure | ||
169 | + \+ per-transition optimised firing | ||
170 | +\> reads PNML, ABCD, or net objects | ||
171 | +\> process-symmetries reductions | ||
172 | +\> state space exploration and LTL model-checking | ||
173 | + {\small\color{minor}(using SPOT)} | ||
174 | +\> awarded at the \emph{model-checking contest\/} 2013 | ||
175 | + {\small\color{minor}(PETRI NETS conf.)} | ||
176 | + | ||
177 | +\vbox to 0pt{\vss\null\hfill | ||
178 | + \begin{tikzpicture} | ||
179 | + \node[inner sep=0pt] (neco) {\includegraphics[width=18cm]{neco.pdf}}; | ||
180 | + \node[below=-6pt] at (neco.south) {\scalebox{2.1}[1]{net | ||
181 | + compiler\hskip 9pt\null}}; | ||
182 | + \end{tikzpicture}\hspace*{-12mm} | ||
183 | + \vspace*{2.8\baselineskip}} | ||
184 | + | ||
185 | +%% | ||
186 | +%% | ||
187 | +%% | ||
188 | + | ||
189 | +\end{textblock} | ||
190 | + | ||
191 | +%% | ||
192 | +%% right column | ||
193 | +%% | ||
194 | + | ||
195 | +\def\section#1{\noindent{\bfseries #1}\smallskip} | ||
196 | + | ||
197 | +\begin{textblock}{5}(10,2.85) | ||
198 | + \begin{tikzpicture} | ||
199 | + \path[fill=title] (0,0) rectangle (40,100); | ||
200 | + \end{tikzpicture} | ||
201 | +\end{textblock} | ||
202 | + | ||
203 | +\begin{textblock}{5}(10.2,3) | ||
204 | + | ||
205 | +%% | ||
206 | +%% | ||
207 | +%% | ||
208 | + | ||
209 | +\section{About SNAKES} | ||
210 | + | ||
211 | +\> free \& open source {\small (GNU LGPL)} | ||
212 | +\> works out of the box | ||
213 | +\> 81.5k lines of portable Python | ||
214 | +\> maintained for 10\texttt{+} years | ||
215 | +\> one permanent developer/user | ||
216 | +\> online documentation has\qquad 300\texttt{+} visitors per month | ||
217 | + | ||
218 | +%% | ||
219 | +%% | ||
220 | +%% | ||
221 | + | ||
222 | +\bigskip | ||
223 | +\section{SNAKES vs GitHub's top 10 Python projects$^*$ | ||
224 | + {\color{minor}\small(on Nov. 2013)}} | ||
225 | + | ||
226 | +\vskip -1ex | ||
227 | +\begin{tikzpicture}[xscale=3.4,yscale=-2.5] | ||
228 | +\tikzstyle{project}=[left,anchor=base east,inner sep=0pt] | ||
229 | +\tikzstyle{bar}=[draw=blue!50!black,fill=blue!50!white, | ||
230 | + anchor=base west,inner sep=0pt,name=bar] | ||
231 | +\tikzstyle{price}=[right,anchor=base west] | ||
232 | +\node[project] at (0,1) {\small django\;}; | ||
233 | +\node[bar,text width=530] at (0,1) {\small\strut}; | ||
234 | +\node[price,anchor=base east] at (bar.base east) | ||
235 | + {\raise -.1ex\hbox{\small\$5.3M (432)}}; | ||
236 | +\node[project] at (0,2) {\small\color{snakes}snakes\;}; | ||
237 | +\node[bar,text width=270] at (0,2) {\small\strut}; | ||
238 | +\begin{scope}[color=snakes] | ||
239 | + \draw[clip] (bar.north west) rectangle (bar.south east) | ||
240 | + node at (bar.center) {\includegraphics[scale=.2]{python-skin}}; | ||
241 | +\end{scope} | ||
242 | +\node[price] at (bar.base east) {\small\$2.7M (2)}; | ||
243 | +\node[project] at (0,3) {\small sick-beard\;}; | ||
244 | +\node[bar,text width=260] at (0,3) {\small\strut}; | ||
245 | +\node[price] at (bar.base east) {\small\$2.6M (110)}; | ||
246 | +\node[project] at (0,4) {\small ipython\;}; | ||
247 | +\node[bar,text width=230] at (0,4) {\small\strut}; | ||
248 | +\node[price] at (bar.base east) {\small\$2.3M (236)}; | ||
249 | +\node[project] at (0,5) {\small boto\;}; | ||
250 | +\node[bar,text width=210] at (0,5) {\small\strut}; | ||
251 | +\node[price] at (bar.base east) {\small\$2.1M (314)}; | ||
252 | +\node[project] at (0,6) {\small reddit\;}; | ||
253 | +\node[bar,text width=150] at (0,6) {\small\strut}; | ||
254 | +\node[price] at (bar.base east) {\small\$1.5M (87)}; | ||
255 | +\node[project] at (0,7) {\small sentry\;}; | ||
256 | +\node[bar,text width=130] at (0,7) {\small\strut}; | ||
257 | +\node[price] at (bar.base east) {\small\$1.3M (166)}; | ||
258 | +\node[project] at (0,8) {\small tornado\;}; | ||
259 | +\node[bar,text width=60] at (0,8) {\small\strut}; | ||
260 | +\node[price] at (bar.base east) {\small\$0.6M (120)}; | ||
261 | +\node[project] at (0,9) {\small requests\;}; | ||
262 | +\node[bar,text width=30] at (0,9) {\small\strut}; | ||
263 | +\node[price] at (bar.base east) {\small\$0.3M (275)}; | ||
264 | +\node[project] at (0,10) {\small flask\;}; | ||
265 | +\node[bar,text width=20] at (0,10) {\small\strut}; | ||
266 | +\node[price] at (bar.base east) {\small\$0.2M (159)}; | ||
267 | +\node[project] at (0,11) {\small httpie\;}; | ||
268 | +\node[bar,text width=10] at (0,11) {\small\strut}; | ||
269 | +\node[price] at (bar.base east) {\small\$0.1M (22)}; | ||
270 | +\end{tikzpicture} | ||
271 | + | ||
272 | +estimated cost to develop {\color{minor}\small(generated using David A. | ||
273 | + Wheeler's ``SLOCCount'')} and number of contributors | ||
274 | + | ||
275 | +\hbox to \textwidth{\null\hfill\color{minor}\small $^*$ 10 most forked | ||
276 | + or followed Python projects} | ||
277 | + | ||
278 | +%% | ||
279 | +%% | ||
280 | +%% | ||
281 | + | ||
282 | +\bigskip | ||
283 | +\section{Using SNAKES out of Python} | ||
284 | + | ||
285 | +\> write a binding in Cython | ||
286 | + | ||
287 | +\begin{Verbatim}[commandchars=\\\{\},fontsize=\small,xleftmargin=1.4em, | ||
288 | + numbers=left,numbersep=30pt] | ||
289 | +\PYc{# this is Cython code} | ||
290 | +\PYk{cdef} \PYk{public} \PYk{int} \PYn{foo} (...): | ||
291 | + \PYc{# Python with SNAKES here} | ||
292 | +\end{Verbatim} | ||
293 | + | ||
294 | +\> Cython compiles to C/C\texttt{++} \qquad with a \texttt{.h} file: | ||
295 | + | ||
296 | +\begin{Verbatim}[commandchars=\\\{\},fontsize=\small,xleftmargin=1.4em, | ||
297 | + numbers=left,numbersep=30pt] | ||
298 | +\PYc{// this is C/C++ code} | ||
299 | +\PYk{extern} \PYk{int} \PYn{foo}(...); | ||
300 | +\end{Verbatim} | ||
301 | + | ||
302 | +\> use this API in your project | ||
303 | + | ||
304 | +%% | ||
305 | +%% | ||
306 | +%% | ||
307 | + | ||
308 | +\bigskip | ||
309 | +\section{Isn't Python slow?} | ||
310 | + | ||
311 | +\> {\color{snakes}no} for handling nets {\small\color{minor}even large | ||
312 | + ones} | ||
313 | +\> {\color{red!30!black}yes} for firing transitions | ||
314 | +\> \raise -.1ex\hbox{\includegraphics[height=.9em]{neco.pdf}} is fast | ||
315 | + at that! {;-)} | ||
316 | + | ||
317 | +%% | ||
318 | +%% | ||
319 | +%% | ||
320 | + | ||
321 | +\end{textblock} | ||
322 | + | ||
323 | +%% | ||
324 | +%% flush top | ||
325 | +%% | ||
326 | + | ||
327 | +\vspace*{150cm} | ||
328 | +\end{frame} | ||
329 | +\end{document} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
No preview for this file type
1 | \documentclass{beamer} | 1 | \documentclass{beamer} |
2 | 2 | ||
3 | \usepackage[english]{babel} | 3 | \usepackage[english]{babel} |
4 | -\usepackage[latin1]{inputenc} | 4 | +\usepackage[utf8]{inputenc} |
5 | -\usepackage[orientation=portrait,size=a0,scale=2]{beamerposter} | 5 | +\usepackage[orientation=portrait,size=a4,scale=2]{beamerposter} |
6 | -\usepackage{textpos} | 6 | +\usepackage[absolute,overlay]{textpos} |
7 | -\usepackage{picins} | ||
8 | \usepackage{url} | 7 | \usepackage{url} |
9 | -\usepackage{fancyvrb} | ||
10 | -\usepackage{relsize} | ||
11 | 8 | ||
12 | \usepackage{tikz} | 9 | \usepackage{tikz} |
13 | -\usetikzlibrary{shapes.callouts} | ||
14 | 10 | ||
15 | \parindent=0pt | 11 | \parindent=0pt |
16 | \setbeamertemplate{navigation symbols}{} | 12 | \setbeamertemplate{navigation symbols}{} |
17 | 13 | ||
18 | -\def\smallskip{\vspace{5mm}} | 14 | +\setlength{\TPHorizModule}{1cm} |
19 | -\def\medskip{\vspace{10mm}} | 15 | +\setlength{\TPVertModule}{1cm} |
20 | -\def\bigskip{\vspace{20mm}} | ||
21 | 16 | ||
22 | -\colorlet{title}{black!10} | 17 | +\def\minor #1{{\small\color{gray}#1}} |
23 | -\colorlet{minor}{black!65} | 18 | +\def\remark #1{\minor{(#1)}} |
24 | -\colorlet{snakes}{green!30!black} | ||
25 | -\colorlet{python}{blue!30!black} | ||
26 | -\definecolor{popup}{rgb}{.6,1,.5} | ||
27 | - | ||
28 | -\def\*{\raise-.65ex\hbox{$\smash{ | ||
29 | - \includegraphics[height=1em]{snake-shadow.pdf}}$}} | ||
30 | - | ||
31 | -\def\section#1{\noindent\colorbox{title}{% | ||
32 | - \hbox to \textwidth{\bfseries #1\hfill\strut\*}}\smallskip} | ||
33 | - | ||
34 | -\def\endparitem{\endgraf\egroup} | ||
35 | -\def\>{\par\bgroup | ||
36 | - \let\par=\endparitem | ||
37 | - \leftskip=1.4em\parindent=-1.4em | ||
38 | - \indent\hbox to 1.4em{\hss | ||
39 | - $\smash{\includegraphics[width=1em]{cartoon-python.pdf}}$ | ||
40 | - }\ignorespaces} | ||
41 | -\def\+{\par\bgroup | ||
42 | - \let\par=\endparitem | ||
43 | - \leftskip=2.8em\parindent=-1.4em | ||
44 | - \indent\hbox to 1.4em{\hss | ||
45 | - $\color{snakes}\smash{\bullet}$ | ||
46 | - }\ignorespaces} | ||
47 | - | ||
48 | -\def\PYk #1{{\color{snakes}#1}} | ||
49 | -\def\PYn #1{{\color{python}#1}} | ||
50 | -\def\PYc #1{{\color{minor}#1}} | ||
51 | 19 | ||
52 | \begin{document} | 20 | \begin{document} |
53 | -\begin{frame}[fragile]{} | ||
54 | - | ||
55 | -%% | ||
56 | -%% title & logos | ||
57 | -%% | ||
58 | - | ||
59 | -\begin{textblock}{14.4}(.5,.5) | ||
60 | - \parpic{\includegraphics[height=13cm]{logo-snakes}\quad} | ||
61 | - {\Large\bfseries a high-level Petri nets library}\\[15pt] | ||
62 | - {\large Franck Pommereau}\\[30pt] | ||
63 | - \small | ||
64 | - IBISC/COSMO, university of vry/Paris-Saclay\\ | ||
65 | - 23 boulevard de France, 91037 vry Cedex France\\[20pt] | ||
66 | - \url{franck.pommereau@ibisc.univ-evry.fr}\\ | ||
67 | - \url{http://www.ibisc.univ-evry.fr/~fpommereau/SNAKES/} | ||
68 | -\end{textblock} | ||
69 | - | ||
70 | -\begin{textblock}{14.4}(.7,.5) | ||
71 | - \null\hfill | ||
72 | - \begin{tikzpicture}[xscale=4,yscale=4] | ||
73 | - \node at (-2,0) {\includegraphics[width=150mm, height=150mm, | ||
74 | - keepaspectratio=true]{logo-ibisc}}; | ||
75 | - \node at (1,1) {\includegraphics[width=58mm, height=58mm, | ||
76 | - keepaspectratio=true]{logo-ueve}}; | ||
77 | - \node at (1,-1) {\includegraphics[width=65mm, height=65mm, | ||
78 | - keepaspectratio=true]{logo-genopole}}; | ||
79 | - \end{tikzpicture} | ||
80 | -\end{textblock} | ||
81 | - | ||
82 | -%% | ||
83 | -%% left column | ||
84 | -%% | ||
85 | - | ||
86 | -\begin{textblock}{9}(.5,2.85) | ||
87 | -\section{SNAKES in a nutshell} | ||
88 | - | ||
89 | -\tikzstyle{popup}=[draw,rectangle callout,rounded corners=15, | ||
90 | - text width=10cm,align=center,callout pointer width=7mm, | ||
91 | - callout absolute pointer={(70:.5)},fill=popup] | ||
92 | - | ||
93 | -\begin{center} | ||
94 | -\begin{tikzpicture}[scale=12] | ||
95 | - \node at (0,0) {\scalebox{-1}[1]{% | ||
96 | - \includegraphics[scale=3]{oroborus.pdf}}}; | ||
97 | - \node[popup,callout relative pointer={(-70:2)}] at (90:1) | ||
98 | - {SNAKES is a Python library}; | ||
99 | - \node[popup,callout relative pointer={(-150:2)}] at (40:1.4) | ||
100 | - {Define and manipulate Petri nets}; | ||
101 | - \node[popup,callout relative pointer={(170:3)}] at (10:1.3) | ||
102 | - {Very generic Petri net definition}; | ||
103 | - \node[popup,callout relative pointer={(150:4)}] at (-25:1.3) | ||
104 | - {Annotations are Python expressions}; | ||
105 | - \node[popup,callout relative pointer={(80:4)}] at (-90:1) | ||
106 | - {Tokens are Python objects}; | ||
107 | - \node[popup,cloud callout,cloud puffs=15,aspect=2.5,inner sep=-20pt, | ||
108 | - cloud puff arc=120,callout relative pointer={(170:3)}, | ||
109 | - fill=blue!20,rounded corners=0] at (-45:1.7) | ||
110 | - {\small Even SNAKES'\\[-20pt] net objects}; | ||
111 | - \node[popup,callout relative pointer={(50:4.5)}] at (-150:1.2) | ||
112 | - {Fully reflexive for maximal flexibility}; | ||
113 | - \node[popup,cloud callout,cloud puffs=12,aspect=2.6,inner sep=-50pt, | ||
114 | - cloud puff arc=140,callout relative pointer={(50:2)}, | ||
115 | - fill=blue!20,rounded corners=0] at (-130:1.5) | ||
116 | - {\small Inspired\\[-20pt] by Emacs}; | ||
117 | - \node[popup,callout relative pointer={(10:3)}] at (170:1.2) | ||
118 | - {Extensible with plugins}; | ||
119 | - \node at (0,0) {\includegraphics[scale=.5]{python-powered.pdf}}; | ||
120 | -\end{tikzpicture} | ||
121 | -\end{center} | ||
122 | - | ||
123 | -%% | ||
124 | -%% | ||
125 | -%% | ||
126 | - | ||
127 | -\medskip | ||
128 | -\section{Plugins} | ||
129 | - | ||
130 | -\> {\color{snakes}\texttt{gv}}: draw Petri nets using GraphViz | ||
131 | -\> {\color{snakes}\texttt{ops}}: algebras of Petri nets compositions | ||
132 | - {\small\color{minor}(PBC, PNA, M-nets, \dots)} | ||
133 | -\> {\color{snakes}\texttt{pids}}: dynamic processes creation and | ||
134 | - destruction | ||
135 | -\> {\color{snakes}\texttt{labels}}: arbitrary objects annotations | ||
136 | -\> {\color{snakes}\texttt{let}}: variables assignation during computation | ||
137 | -\> \dots {\color{minor}(your plugin here: try, it's easy)} | ||
138 | - | ||
139 | -%% | ||
140 | -%% | ||
141 | -%% | ||
142 | - | ||
143 | -\bigskip | ||
144 | -\section{ABCD for friendly modelling} | ||
145 | - | ||
146 | -\> process algebra with friendly Python-like syntax | ||
147 | -\> embeds full Python | ||
148 | -\> compiler shipped with SNAKES library | ||
149 | -\> generates Petri nets objects | ||
150 | -\> export to pictures or PNML files | ||
151 | -\> simulation and reachability analysis | ||
152 | - | ||
153 | -\vbox to 0pt{\vss\null\hfill | ||
154 | - \includegraphics[width=18cm]{abcd-simul} | ||
155 | - \vspace*{.2\baselineskip}} | ||
156 | -\vspace*{-\baselineskip} | ||
157 | - | ||
158 | -%% | ||
159 | -%% | ||
160 | -%% | ||
161 | - | ||
162 | -\bigskip | ||
163 | -\section{Neco for fast analysis} | ||
164 | - | ||
165 | -\> \L ukasz Fronc's companion tool {\small\color{minor}(available | ||
166 | - separately at \url{https://code.google.com/p/neco-net-compiler/})} | ||
167 | -\> Neco compiles SNAKES Petri nets into fast native code | ||
168 | - \+ optimised marking structure | ||
169 | - \+ per-transition optimised firing | ||
170 | -\> reads PNML, ABCD, or net objects | ||
171 | -\> process-symmetries reductions | ||
172 | -\> state space exploration and LTL model-checking | ||
173 | - {\small\color{minor}(using SPOT)} | ||
174 | -\> awarded at the \emph{model-checking contest\/} 2013 | ||
175 | - {\small\color{minor}(PETRI NETS conf.)} | ||
176 | - | ||
177 | -\vbox to 0pt{\vss\null\hfill | ||
178 | - \begin{tikzpicture} | ||
179 | - \node[inner sep=0pt] (neco) {\includegraphics[width=18cm]{neco.pdf}}; | ||
180 | - \node[below=-6pt] at (neco.south) {\scalebox{2.1}[1]{net | ||
181 | - compiler\hskip 9pt\null}}; | ||
182 | - \end{tikzpicture}\hspace*{-12mm} | ||
183 | - \vspace*{2.8\baselineskip}} | ||
184 | - | ||
185 | -%% | ||
186 | -%% | ||
187 | -%% | ||
188 | - | ||
189 | -\end{textblock} | ||
190 | - | ||
191 | -%% | ||
192 | -%% right column | ||
193 | -%% | ||
194 | - | ||
195 | -\def\section#1{\noindent{\bfseries #1}\smallskip} | ||
196 | - | ||
197 | -\begin{textblock}{5}(10,2.85) | ||
198 | - \begin{tikzpicture} | ||
199 | - \path[fill=title] (0,0) rectangle (40,100); | ||
200 | - \end{tikzpicture} | ||
201 | -\end{textblock} | ||
202 | - | ||
203 | -\begin{textblock}{5}(10.2,3) | ||
204 | - | ||
205 | -%% | ||
206 | -%% | ||
207 | -%% | ||
208 | - | ||
209 | -\section{About SNAKES} | ||
210 | - | ||
211 | -\> free \& open source {\small (GNU LGPL)} | ||
212 | -\> works out of the box | ||
213 | -\> 81.5k lines of portable Python | ||
214 | -\> maintained for 10\texttt{+} years | ||
215 | -\> one permanent developer/user | ||
216 | -\> online documentation has\qquad 300\texttt{+} visitors per month | ||
217 | - | ||
218 | -%% | ||
219 | -%% | ||
220 | -%% | ||
221 | - | ||
222 | -\bigskip | ||
223 | -\section{SNAKES vs GitHub's top 10 Python projects$^*$ | ||
224 | - {\color{minor}\small(on Nov. 2013)}} | ||
225 | - | ||
226 | -\vskip -1ex | ||
227 | -\begin{tikzpicture}[xscale=3.4,yscale=-2.5] | ||
228 | -\tikzstyle{project}=[left,anchor=base east,inner sep=0pt] | ||
229 | -\tikzstyle{bar}=[draw=blue!50!black,fill=blue!50!white, | ||
230 | - anchor=base west,inner sep=0pt,name=bar] | ||
231 | -\tikzstyle{price}=[right,anchor=base west] | ||
232 | -\node[project] at (0,1) {\small django\;}; | ||
233 | -\node[bar,text width=530] at (0,1) {\small\strut}; | ||
234 | -\node[price,anchor=base east] at (bar.base east) | ||
235 | - {\raise -.1ex\hbox{\small\$5.3M (432)}}; | ||
236 | -\node[project] at (0,2) {\small\color{snakes}snakes\;}; | ||
237 | -\node[bar,text width=270] at (0,2) {\small\strut}; | ||
238 | -\begin{scope}[color=snakes] | ||
239 | - \draw[clip] (bar.north west) rectangle (bar.south east) | ||
240 | - node at (bar.center) {\includegraphics[scale=.2]{python-skin}}; | ||
241 | -\end{scope} | ||
242 | -\node[price] at (bar.base east) {\small\$2.7M (2)}; | ||
243 | -\node[project] at (0,3) {\small sick-beard\;}; | ||
244 | -\node[bar,text width=260] at (0,3) {\small\strut}; | ||
245 | -\node[price] at (bar.base east) {\small\$2.6M (110)}; | ||
246 | -\node[project] at (0,4) {\small ipython\;}; | ||
247 | -\node[bar,text width=230] at (0,4) {\small\strut}; | ||
248 | -\node[price] at (bar.base east) {\small\$2.3M (236)}; | ||
249 | -\node[project] at (0,5) {\small boto\;}; | ||
250 | -\node[bar,text width=210] at (0,5) {\small\strut}; | ||
251 | -\node[price] at (bar.base east) {\small\$2.1M (314)}; | ||
252 | -\node[project] at (0,6) {\small reddit\;}; | ||
253 | -\node[bar,text width=150] at (0,6) {\small\strut}; | ||
254 | -\node[price] at (bar.base east) {\small\$1.5M (87)}; | ||
255 | -\node[project] at (0,7) {\small sentry\;}; | ||
256 | -\node[bar,text width=130] at (0,7) {\small\strut}; | ||
257 | -\node[price] at (bar.base east) {\small\$1.3M (166)}; | ||
258 | -\node[project] at (0,8) {\small tornado\;}; | ||
259 | -\node[bar,text width=60] at (0,8) {\small\strut}; | ||
260 | -\node[price] at (bar.base east) {\small\$0.6M (120)}; | ||
261 | -\node[project] at (0,9) {\small requests\;}; | ||
262 | -\node[bar,text width=30] at (0,9) {\small\strut}; | ||
263 | -\node[price] at (bar.base east) {\small\$0.3M (275)}; | ||
264 | -\node[project] at (0,10) {\small flask\;}; | ||
265 | -\node[bar,text width=20] at (0,10) {\small\strut}; | ||
266 | -\node[price] at (bar.base east) {\small\$0.2M (159)}; | ||
267 | -\node[project] at (0,11) {\small httpie\;}; | ||
268 | -\node[bar,text width=10] at (0,11) {\small\strut}; | ||
269 | -\node[price] at (bar.base east) {\small\$0.1M (22)}; | ||
270 | -\end{tikzpicture} | ||
271 | - | ||
272 | -estimated cost to develop {\color{minor}\small(generated using David A. | ||
273 | - Wheeler's ``SLOCCount'')} and number of contributors | ||
274 | - | ||
275 | -\hbox to \textwidth{\null\hfill\color{minor}\small $^*$ 10 most forked | ||
276 | - or followed Python projects} | ||
277 | - | ||
278 | -%% | ||
279 | -%% | ||
280 | -%% | ||
281 | - | ||
282 | -\bigskip | ||
283 | -\section{Using SNAKES out of Python} | ||
284 | - | ||
285 | -\> write a binding in Cython | ||
286 | - | ||
287 | -\begin{Verbatim}[commandchars=\\\{\},fontsize=\small,xleftmargin=1.4em, | ||
288 | - numbers=left,numbersep=30pt] | ||
289 | -\PYc{# this is Cython code} | ||
290 | -\PYk{cdef} \PYk{public} \PYk{int} \PYn{foo} (...): | ||
291 | - \PYc{# Python with SNAKES here} | ||
292 | -\end{Verbatim} | ||
293 | - | ||
294 | -\> Cython compiles to C/C\texttt{++} \qquad with a \texttt{.h} file: | ||
295 | - | ||
296 | -\begin{Verbatim}[commandchars=\\\{\},fontsize=\small,xleftmargin=1.4em, | ||
297 | - numbers=left,numbersep=30pt] | ||
298 | -\PYc{// this is C/C++ code} | ||
299 | -\PYk{extern} \PYk{int} \PYn{foo}(...); | ||
300 | -\end{Verbatim} | ||
301 | - | ||
302 | -\> use this API in your project | ||
303 | - | ||
304 | -%% | ||
305 | -%% | ||
306 | -%% | ||
307 | 21 | ||
308 | -\bigskip | 22 | +\begin{frame}[t]{} |
309 | -\section{Isn't Python slow?} | ||
310 | 23 | ||
311 | -\> {\color{snakes}no} for handling nets {\small\color{minor}even large | 24 | + %% |
312 | - ones} | 25 | + %% drawing grid |
313 | -\> {\color{red!30!black}yes} for firing transitions | 26 | + %% |
314 | -\> \raise -.1ex\hbox{\includegraphics[height=.9em]{neco.pdf}} is fast | ||
315 | - at that! {;-)} | ||
316 | 27 | ||
317 | -%% | 28 | + \begin{textblock}{21}(0,0) |
318 | -%% | 29 | + \begin{tikzpicture}[yellow!70,yscale=-1] |
319 | -%% | 30 | + \draw[densely dotted] (0,0) grid (21,30); |
31 | + \foreach \x in {1,...,20} { | ||
32 | + \node at (\x,.5) {\x}; | ||
33 | + } | ||
34 | + \foreach \y in {1,...,29} { | ||
35 | + \node at (.5,\y) {\y}; | ||
36 | + } | ||
37 | + \end{tikzpicture} | ||
38 | + \end{textblock} | ||
320 | 39 | ||
321 | -\end{textblock} | 40 | + %% |
41 | + %% title & logos | ||
42 | + %% | ||
322 | 43 | ||
323 | -%% | ||
324 | -%% flush top | ||
325 | -%% | ||
326 | 44 | ||
327 | -\vspace*{150cm} | ||
328 | \end{frame} | 45 | \end{frame} |
329 | -\end{document} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
46 | +\end{document} | ... | ... |
-
Please register or login to post a comment