svn-gvsig-desktop / tags / v2_0_Build_1217 / install / IzPack / src / tutorial / izpack-tutorial.tex @ 44029
History | View | Annotate | Download (16.9 KB)
1 | 5819 | cesar | % ............................................................................ % |
---|---|---|---|
2 | |||
3 | \documentclass[compress,10pt]{beamer} |
||
4 | |||
5 | \mode<presentation> |
||
6 | { |
||
7 | \usetheme{Darmstadt} |
||
8 | \usefonttheme{professionalfonts} |
||
9 | \setbeamercovered{transparent} |
||
10 | } |
||
11 | |||
12 | \usepackage[english]{babel} |
||
13 | \usepackage[latin1]{inputenc} |
||
14 | |||
15 | \usepackage{graphicx} |
||
16 | \usepackage{url} |
||
17 | \usepackage{pgf} |
||
18 | |||
19 | % ............................................................................ % |
||
20 | |||
21 | \title{The IzPack tutorial} |
||
22 | |||
23 | \subtitle{Getting started with a basic installer for your software.} |
||
24 | |||
25 | \author{Julien~Ponge\inst{1}} |
||
26 | |||
27 | \institute |
||
28 | { |
||
29 | \inst{1}% |
||
30 | \texttt{<julien@izforge.com>}\\ |
||
31 | \url{http://www.izforge.com/}\\ |
||
32 | IzPack project founder and current maintainer. |
||
33 | } |
||
34 | |||
35 | \date{\today} |
||
36 | |||
37 | \pgfdeclareimage[height=0.5cm]{logo}{logo} |
||
38 | \logo{\pgfuseimage{logo}} |
||
39 | |||
40 | \setbeamertemplate{footline}[frame number] |
||
41 | \setbeamertemplate{navigation symbols}{} |
||
42 | \setbeamertemplate{background canvas}[vertical shading][top=blue!10,bottom=white] |
||
43 | |||
44 | \pgfdeclareimage[width=1.5cm,interploate=true]{cc}{cc} |
||
45 | \pgfdeclareimage[width=3cm,interpolate=true]{tree-view}{tree-view} |
||
46 | |||
47 | \pgfdeclareimage[width=9cm,interpolate=true]{panel-hello}{panel-hello} |
||
48 | \pgfdeclareimage[width=9cm,interpolate=true]{panel-info}{panel-info} |
||
49 | \pgfdeclareimage[width=9cm,interpolate=true]{panel-license}{panel-license} |
||
50 | \pgfdeclareimage[width=9cm,interpolate=true]{panel-packs}{panel-packs} |
||
51 | \pgfdeclareimage[width=9cm,interpolate=true]{panel-target}{panel-target} |
||
52 | \pgfdeclareimage[width=9cm,interpolate=true]{panel-install}{panel-install} |
||
53 | \pgfdeclareimage[width=9cm,interpolate=true]{panel-finish}{panel-finish} |
||
54 | |||
55 | \AtBeginSubsection[] |
||
56 | { |
||
57 | \begin{frame}<beamer> |
||
58 | \frametitle{Outline} |
||
59 | \tableofcontents[currentsection,currentsubsection] |
||
60 | \end{frame} |
||
61 | } |
||
62 | |||
63 | % ............................................................................ % |
||
64 | |||
65 | \begin{document} |
||
66 | |||
67 | % ............................................................................ % |
||
68 | |||
69 | \begin{frame} |
||
70 | \titlepage |
||
71 | \end{frame} |
||
72 | |||
73 | % ............................................................................ % |
||
74 | |||
75 | \begin{frame}[plain] |
||
76 | |||
77 | \footnotesize |
||
78 | |||
79 | \href{http://www.creativecommons.org/}{\pgfuseimage{cc}} |
||
80 | |||
81 | \vspace{2em} |
||
82 | |||
83 | Copyright \copyright~2004, 2005 Julien \textsc{Ponge} - All Rights Reserved. |
||
84 | |||
85 | \vspace{2em} |
||
86 | \sloppy |
||
87 | This work is licensed under the \textit{Creative Commons |
||
88 | Attribution - NonCommercial - ShareAlike License}. To view a copy of this license, |
||
89 | visit |
||
90 | \href{http://creativecommons.org/licenses/by-nc-sa/2.0/}{\url{http://creativecommons.org/licenses/by-nc-sa/2.0/}} |
||
91 | or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, |
||
92 | California 94305, USA. |
||
93 | |||
94 | \end{frame} |
||
95 | |||
96 | % ............................................................................ % |
||
97 | |||
98 | \begin{frame} |
||
99 | \frametitle{Outline} |
||
100 | \tableofcontents |
||
101 | \end{frame} |
||
102 | |||
103 | % ............................................................................ % |
||
104 | |||
105 | \section{Introduction} |
||
106 | |||
107 | % ............................................................................ % |
||
108 | |||
109 | \subsection{The IzPack project} |
||
110 | |||
111 | % ................................... % |
||
112 | |||
113 | \begin{frame} |
||
114 | |||
115 | \frametitle{IzWhat ?} |
||
116 | |||
117 | Fast facts: |
||
118 | \begin{itemize} |
||
119 | \item An open-sourced Java\texttrademark~-based cross-platform installer |
||
120 | generator. |
||
121 | |||
122 | \item Published under the GNU GPL license. |
||
123 | |||
124 | \item Project started in 2001 by myself, now developed with the help of |
||
125 | several developers and contributors (\texttt{Thanks.txt} contains about 90 |
||
126 | lines). |
||
127 | |||
128 | \item Used by various companies and projects around the world (see the |
||
129 | \href{http://www.izforge.com/izpack/index.php?page=references}{references |
||
130 | page}. |
||
131 | |||
132 | \item Available for about 22 languages. |
||
133 | |||
134 | \item One of the most active projects at |
||
135 | \href{http://www.berlios.de/}{BerliOS}. |
||
136 | \end{itemize} |
||
137 | |||
138 | \end{frame} |
||
139 | |||
140 | % ................................... % |
||
141 | |||
142 | \begin{frame} |
||
143 | |||
144 | \frametitle{Features} |
||
145 | |||
146 | \begin{itemize} |
||
147 | |||
148 | \item Cross-platform (tested on Win32, Mac OS X, Linux/i386 and FreeBSD/i386). |
||
149 | |||
150 | \item XML-based, modular and extensible (you choose what your installer will |
||
151 | be made of). |
||
152 | |||
153 | \item Integrates with Jakarta Ant. |
||
154 | |||
155 | \item Can create shortcuts for Win32 and X11 (FreeDesktop.org-compliant |
||
156 | environments and window managers). |
||
157 | |||
158 | \item Not dependent on native code (but can use it in a smart way). |
||
159 | |||
160 | \item Creates uninstallers. |
||
161 | |||
162 | \item Can get user input, substitute tokens in files, call scripts and much |
||
163 | more... |
||
164 | |||
165 | \end{itemize} |
||
166 | |||
167 | \end{frame} |
||
168 | |||
169 | % ................................... % |
||
170 | |||
171 | \begin{frame} |
||
172 | |||
173 | \frametitle{Project life} |
||
174 | |||
175 | \begin{itemize} |
||
176 | |||
177 | \item Online resources: |
||
178 | \begin{itemize} |
||
179 | \item hosted on my website at |
||
180 | \href{http://www.izforge.com/izpack/}{\url{http://www.izforge.com/izpack/}} |
||
181 | |||
182 | \item \href{http://www.berlios.de/}{BerliOS} hosts the developer tools |
||
183 | (CVS, SVN, bugs tracking, wiki, mailing-lists, file releases, FTP, ...). |
||
184 | \end{itemize} |
||
185 | |||
186 | \item The development is very open and contributions are always welcome. |
||
187 | |||
188 | \item Major releases (ex: $3.7.x$) are maintained in branches while the |
||
189 | development occurs in \texttt{CVS HEAD}. |
||
190 | |||
191 | \item Minor releases occur depending on fixes inclusion. |
||
192 | |||
193 | \item Major releases happen depending on new features inclusion. |
||
194 | |||
195 | \end{itemize} |
||
196 | |||
197 | \end{frame} |
||
198 | |||
199 | % ............................................................................ % |
||
200 | |||
201 | \subsection{Technical overview} |
||
202 | |||
203 | \begin{frame} |
||
204 | |||
205 | \frametitle{IzPack} |
||
206 | |||
207 | \begin{columns} |
||
208 | |||
209 | \begin{column}{6.5cm} |
||
210 | \begin{itemize} |
||
211 | |||
212 | \item An installer is described by an \textsl{XML installation file} that: |
||
213 | \begin{itemize} |
||
214 | \item arranges files into \textsl{packs} |
||
215 | \item can be customized by some resources (depending on what you choose). |
||
216 | \end{itemize} |
||
217 | |||
218 | \item The compiler takes the XML file as its input to build an installer as |
||
219 | an \textsl{executable Jar} archive. |
||
220 | |||
221 | \end{itemize} |
||
222 | \end{column} |
||
223 | |||
224 | \begin{column}{4cm} |
||
225 | \includegraphics[width=4cm,angle=270]{izpack-overview} |
||
226 | \end{column} |
||
227 | |||
228 | \end{columns} |
||
229 | |||
230 | \end{frame} |
||
231 | |||
232 | % ................................... % |
||
233 | |||
234 | \begin{frame} |
||
235 | |||
236 | \frametitle{Installers} |
||
237 | |||
238 | \begin{columns} |
||
239 | |||
240 | \begin{column}{6.5cm} |
||
241 | \begin{itemize} |
||
242 | |||
243 | \item An installer contains: |
||
244 | \begin{itemize} |
||
245 | \item the real files in packs |
||
246 | \item the langpacks. |
||
247 | \end{itemize} |
||
248 | |||
249 | \item An installer offers a set of panels that define the steps to perform |
||
250 | an installation. |
||
251 | |||
252 | \item Resources can be needed by panels and GUI preferences can change the |
||
253 | look depending on the OS (size, L\&F, ...). |
||
254 | |||
255 | \end{itemize} |
||
256 | \end{column} |
||
257 | |||
258 | \begin{column}{4cm} |
||
259 | \includegraphics[width=4cm,angle=270]{installers-overview} |
||
260 | \end{column} |
||
261 | |||
262 | \end{columns} |
||
263 | |||
264 | \end{frame} |
||
265 | |||
266 | % ............................................................................ % |
||
267 | |||
268 | \section{Making an installer} |
||
269 | |||
270 | % ............................................................................ % |
||
271 | |||
272 | \subsection{Preliminary steps} |
||
273 | |||
274 | \begin{frame} |
||
275 | |||
276 | \frametitle{Laying out the files and folders} |
||
277 | |||
278 | \begin{columns} |
||
279 | |||
280 | \begin{column}{7cm} |
||
281 | \begin{itemize} |
||
282 | |||
283 | \item Put your files in a folder. Try to make it easy to split the |
||
284 | files tree into packs (for instance put the files of a pack into a small set |
||
285 | of subfolders). |
||
286 | |||
287 | \item Think about which files and folders your packs will be made of. |
||
288 | |||
289 | \item Decide which packs will be mandatory and which packs will be optional. |
||
290 | |||
291 | \end{itemize} |
||
292 | \end{column} |
||
293 | |||
294 | \begin{column}{3cm} |
||
295 | \pgfuseimage{tree-view} |
||
296 | \end{column} |
||
297 | |||
298 | \end{columns} |
||
299 | |||
300 | \end{frame} |
||
301 | |||
302 | % ................................... % |
||
303 | |||
304 | \begin{frame} |
||
305 | |||
306 | \frametitle{Installation panels flow} |
||
307 | |||
308 | \begin{itemize} |
||
309 | |||
310 | \item Panels define the installation steps. Several panels are available, some |
||
311 | even do the same functional task. |
||
312 | \alert{You decide which panels you want and in which order.} |
||
313 | |||
314 | \item For this tutorial, we will use the following panels: |
||
315 | \begin{enumerate} |
||
316 | |||
317 | \item \textsl{HelloPanel}: welcome our user to the installation process |
||
318 | |||
319 | \item \textsl{HTMLInfoPanel}: display some informations with a structured |
||
320 | text |
||
321 | |||
322 | \item \textsl{LicencePanel}: the legal terms that must be agreed to reach |
||
323 | the next installation steps |
||
324 | |||
325 | \item \textsl{PacksPanel}: allow the user to pick the packs that she/he wants |
||
326 | to install or not |
||
327 | |||
328 | \item \textsl{TargetPanel}: choose where to install the files |
||
329 | |||
330 | \item \textsl{InstallPanel}: performs the actual files installation |
||
331 | |||
332 | \item \textsl{SimpleFinishPanel}: conclude the installation with a success. |
||
333 | |||
334 | \end{enumerate} |
||
335 | |||
336 | \end{itemize} |
||
337 | |||
338 | \end{frame} |
||
339 | |||
340 | % ................................... % |
||
341 | |||
342 | \begin{frame} |
||
343 | |||
344 | \frametitle{Panels flow illustrated} |
||
345 | |||
346 | \begin{overprint} |
||
347 | |||
348 | \onslide<1>\textsl{HelloPanel}\\ |
||
349 | |||
350 | \pgfuseimage{panel-hello} |
||
351 | |||
352 | \onslide<2>\textsl{HTMLInfoPanel}\\ |
||
353 | |||
354 | \pgfuseimage{panel-info} |
||
355 | |||
356 | \onslide<3>\textsl{LicencePanel}\\ |
||
357 | |||
358 | \pgfuseimage{panel-license} |
||
359 | |||
360 | \onslide<4>\textsl{PacksPanel} (here \textit{ImgPacksPanel})\\ |
||
361 | |||
362 | \pgfuseimage{panel-packs} |
||
363 | |||
364 | \onslide<5>\textsl{TargetPanel}\\ |
||
365 | |||
366 | \pgfuseimage{panel-target} |
||
367 | |||
368 | \onslide<6>\textsl{InstallPanel}\\ |
||
369 | |||
370 | \pgfuseimage{panel-install} |
||
371 | |||
372 | \onslide<7>\textsl{SimpleFinishPanel}\\ |
||
373 | |||
374 | \pgfuseimage{panel-finish} |
||
375 | |||
376 | \end{overprint} |
||
377 | |||
378 | \end{frame} |
||
379 | |||
380 | % ............................................................................ % |
||
381 | |||
382 | \subsection{Creating the installation files} |
||
383 | |||
384 | \begin{frame}[containsverbatim] |
||
385 | |||
386 | \frametitle{Basic installation XML file canvas} |
||
387 | |||
388 | Here is a global view of what our file will look like: |
||
389 | |||
390 | \begin{block}{\texttt{MyApp-install.xml}} |
||
391 | \small |
||
392 | \begin{verbatim} |
||
393 | <installation version="1.0"> |
||
394 | |||
395 | <info> (...) </info> |
||
396 | <guiprefs (...)> (...) </guiprefs> |
||
397 | <locale> (...) </locale> |
||
398 | <resources> (...) </resources> |
||
399 | <panels> (...) </panels> |
||
400 | <packs> (...) </packs> |
||
401 | |||
402 | </installation> |
||
403 | \end{verbatim} |
||
404 | \end{block} |
||
405 | |||
406 | \end{frame} |
||
407 | |||
408 | % ................................... % |
||
409 | |||
410 | \begin{frame}[containsverbatim] |
||
411 | |||
412 | \frametitle{Global informations} |
||
413 | |||
414 | We will specify here: |
||
415 | \begin{itemize} |
||
416 | \item the authors of the application to install |
||
417 | \item the application name, version and url |
||
418 | \item the minimum Java\texttrademark~ version required (optional). |
||
419 | \end{itemize} |
||
420 | |||
421 | \begin{block}{The \textsl{info} section} |
||
422 | \tiny |
||
423 | \begin{verbatim} |
||
424 | <info> |
||
425 | <appname>MyApp</appname> |
||
426 | <appversion>1.2.3</appversion> |
||
427 | <authors> |
||
428 | <author name="Snoopy" email="snoopy@myapp.org" /> |
||
429 | <author name="Foo Bar" email="foo@bar.org" /> |
||
430 | </authors> |
||
431 | <url>http://www.myapp.org/</url> |
||
432 | <javaversion>1.4</javaversion> |
||
433 | </info> |
||
434 | \end{verbatim} |
||
435 | \end{block} |
||
436 | |||
437 | \end{frame} |
||
438 | |||
439 | % ................................... % |
||
440 | |||
441 | \begin{frame}[containsverbatim] |
||
442 | |||
443 | \frametitle{GUI tweakings} |
||
444 | |||
445 | \begin{itemize} |
||
446 | |||
447 | \item We can customise the default size. |
||
448 | |||
449 | \item We can specify a Look \& Feel for a given OS, including: |
||
450 | \begin{itemize} |
||
451 | \item Metal (hum hum ...) |
||
452 | \item Kunststoff, Metouia, Liquid |
||
453 | \item JGoodies variants. |
||
454 | \end{itemize} |
||
455 | |||
456 | \item The default is to pick the native emulation L\&F. |
||
457 | |||
458 | \end{itemize} |
||
459 | |||
460 | \begin{block}{The \textsl{guiprefs} section} |
||
461 | \tiny |
||
462 | \begin{verbatim} |
||
463 | <guiprefs height="600" resizable="yes" width="800"> |
||
464 | <laf name="metouia"> |
||
465 | <os family="unix" /> |
||
466 | </laf> |
||
467 | </guiprefs> |
||
468 | \end{verbatim} |
||
469 | \end{block} |
||
470 | |||
471 | \end{frame} |
||
472 | |||
473 | % ................................... % |
||
474 | |||
475 | \begin{frame}[containsverbatim] |
||
476 | |||
477 | \frametitle{Choosing the available languages} |
||
478 | |||
479 | This step is quite easy. Just pick the ISO3 codes among the available languages, |
||
480 | for instance: |
||
481 | |||
482 | \begin{block}{The \textsl{locale} section} |
||
483 | \tiny |
||
484 | \begin{verbatim} |
||
485 | <locale> |
||
486 | <langpack iso3="eng"/> |
||
487 | <langpack iso3="fra"/> |
||
488 | <langpack iso3="deu"/> |
||
489 | <langpack iso3="ita"/> |
||
490 | <langpack iso3="jpn"/> |
||
491 | <langpack iso3="spa"/> |
||
492 | </locale> |
||
493 | \end{verbatim} |
||
494 | \end{block} |
||
495 | |||
496 | \end{frame} |
||
497 | |||
498 | % ................................... % |
||
499 | |||
500 | \begin{frame}[containsverbatim] |
||
501 | |||
502 | \frametitle{Including the needed resources} |
||
503 | |||
504 | \begin{itemize} |
||
505 | |||
506 | \item Each panel needs resources (see the IzPack documentation). A resource |
||
507 | associates a path to a file and an identifier. |
||
508 | |||
509 | \item Here, we have the following resources: |
||
510 | \begin{itemize} |
||
511 | \item the text for \textsl{HTMLInfoPanel} |
||
512 | \item the legal terms for \textsl{LicencePanel} |
||
513 | \item an optional picture for the language selection box. |
||
514 | \end{itemize} |
||
515 | |||
516 | \end{itemize} |
||
517 | |||
518 | \begin{block}{The \textsl{resources} section} |
||
519 | \tiny |
||
520 | \begin{verbatim} |
||
521 | <resources> |
||
522 | <res src="install-readme.html" id="HTMLInfoPanel.info"/> |
||
523 | <res src="Licence.txt" id="LicencePanel.licence"/> |
||
524 | <res src="langsel.jpg" id="installer.langsel.img"/> |
||
525 | </resources> |
||
526 | \end{verbatim} |
||
527 | \end{block} |
||
528 | |||
529 | \end{frame} |
||
530 | |||
531 | % ................................... % |
||
532 | |||
533 | \begin{frame}[containsverbatim] |
||
534 | |||
535 | \frametitle{Specifying the panels} |
||
536 | |||
537 | Simply put the panels names in the obvious order: |
||
538 | |||
539 | \begin{block}{The \textsl{panels} section} |
||
540 | \tiny |
||
541 | \begin{verbatim} |
||
542 | <panels> |
||
543 | <panel classname="HelloPanel"/> |
||
544 | <panel classname="HTMLInfoPanel"/> |
||
545 | <panel classname="LicencePanel"/> |
||
546 | <panel classname="PacksPanel"/> |
||
547 | <panel classname="TargetPanel"/> |
||
548 | <panel classname="InstallPanel"/> |
||
549 | <panel classname="SimpleFinishPanel"/> |
||
550 | </panels> |
||
551 | \end{verbatim} |
||
552 | \end{block} |
||
553 | |||
554 | \end{frame} |
||
555 | |||
556 | % ................................... % |
||
557 | |||
558 | \begin{frame}[containsverbatim] |
||
559 | |||
560 | \frametitle{Making the packs} |
||
561 | |||
562 | \begin{itemize} |
||
563 | |||
564 | \item We use the smart Ant filesets syntax to pick the files contained in |
||
565 | each pack. |
||
566 | |||
567 | \item Target directories are specified. \alert{\texttt{\small\$INSTALL\_PATH} |
||
568 | identifies the path chosen from \textsl{TargetPanel}}. |
||
569 | |||
570 | \end{itemize} |
||
571 | |||
572 | \begin{block}{The \textsl{packs} section} |
||
573 | \tiny |
||
574 | \begin{verbatim} |
||
575 | <packs> |
||
576 | <pack name="Core" required="yes"> |
||
577 | <description>MyApp core files.</description> |
||
578 | <fileset dir="" targetdir="$INSTALL_PATH"> |
||
579 | <include name="*.txt" /> |
||
580 | <include name="bin/**/*" /> |
||
581 | <include name="lib/**/*" /> |
||
582 | </fileset> |
||
583 | </pack> |
||
584 | (...) |
||
585 | </packs> |
||
586 | \end{verbatim} |
||
587 | \end{block} |
||
588 | |||
589 | \end{frame} |
||
590 | |||
591 | % ............................................................................ % |
||
592 | |||
593 | \subsection{Building the installer} |
||
594 | |||
595 | \begin{frame} |
||
596 | |||
597 | \frametitle{Ant integration} |
||
598 | |||
599 | \begin{itemize} |
||
600 | |||
601 | \item Ant is perfect for software tasks automation. |
||
602 | |||
603 | \item IzPack can be integrated with Ant in a simple and elegant manner. |
||
604 | |||
605 | \item IzPack needs the following informations (the same holds true for a |
||
606 | command-line invocation): |
||
607 | \begin{itemize} |
||
608 | \item the input installation XML file |
||
609 | |||
610 | \item the name of the output installer Jar file |
||
611 | |||
612 | \item the kind of installer (standard or web-based) |
||
613 | |||
614 | \item the base directory, to resolve the relative paths specified for the |
||
615 | various files of the XML installation file (files, resources, ...) |
||
616 | |||
617 | \item the directory where IzPack is installed. |
||
618 | \end{itemize} |
||
619 | |||
620 | \end{itemize} |
||
621 | |||
622 | \end{frame} |
||
623 | |||
624 | % ................................... % |
||
625 | |||
626 | \begin{frame}[containsverbatim] |
||
627 | |||
628 | \frametitle{Calling IzPack from Ant} |
||
629 | |||
630 | \begin{alertblock}{Warning} |
||
631 | Make the IzPack compiler jar available in the classpath before you call Ant. |
||
632 | \end{alertblock} |
||
633 | |||
634 | \begin{block}{Make the task available} |
||
635 | \tiny |
||
636 | \begin{verbatim} |
||
637 | <taskdef name="izpack" classpath="${izpack.dir}/lib/compiler.jar" |
||
638 | classname="com.izforge.izpack.ant.IzPackTask"/> |
||
639 | \end{verbatim} |
||
640 | \end{block} |
||
641 | |||
642 | \begin{block}{Call the IzPack task} |
||
643 | \tiny |
||
644 | \begin{verbatim} |
||
645 | <izpack input="MyApp-install.xml" |
||
646 | output="${dist.dir}/MyApp-install-${ver}.${rel}.jar" |
||
647 | installerType="standard" basedir="${dist.dir}" |
||
648 | izPackDir="${izpack.dir}/"/> |
||
649 | \end{verbatim} |
||
650 | \end{block} |
||
651 | |||
652 | \end{frame} |
||
653 | |||
654 | % ............................................................................ % |
||
655 | |||
656 | \section{Conclusion} |
||
657 | |||
658 | \begin{frame} |
||
659 | |||
660 | \frametitle{Summary} |
||
661 | |||
662 | \begin{itemize} |
||
663 | |||
664 | \item You have now made a simple installer for your application. You should |
||
665 | now feel more confident with IzPack, however you can get much more from it. |
||
666 | |||
667 | \item You can now try some more advanced features (such as desktop shortcuts |
||
668 | generation or scripts token replacement) or play with some other panels as |
||
669 | well. |
||
670 | |||
671 | \item The following resources will be of a great help: |
||
672 | \begin{itemize} |
||
673 | |||
674 | \item the IzPack documentation |
||
675 | |||
676 | \item the \href{http://openfacts.berlios.de/index-en.phtml?title=IzPack}{ |
||
677 | wiki} at BerliOS |
||
678 | |||
679 | \item the \href{http://developer.berlios.de/mail/?group_id=1408}{ |
||
680 | mailing-lists archives} |
||
681 | |||
682 | \item real-life examples (such as IzPack itself or open-source projects that |
||
683 | use it). |
||
684 | |||
685 | \end{itemize} |
||
686 | |||
687 | \end{itemize} |
||
688 | |||
689 | \end{frame} |
||
690 | |||
691 | \begin{frame} |
||
692 | |||
693 | \frametitle{Supporting IzPack} |
||
694 | |||
695 | If IzPack is useful to you and/or your company, please consider supporting it |
||
696 | financially. Just think about how expensive are its proprietary competitors... |
||
697 | |||
698 | \begin{itemize} |
||
699 | |||
700 | \item I accept donations through PayPal with my email address |
||
701 | \small{\url{julien@izforge.com}}. |
||
702 | |||
703 | \item Missing a feature ? Then you can offer a bounty to an IzPack developer |
||
704 | for implementing it. Ask for the feature and see if a developer wants to make |
||
705 | it for a donation that you can negotiate at your own discretion with her/him. |
||
706 | |||
707 | \end{itemize} |
||
708 | |||
709 | \end{frame} |
||
710 | |||
711 | \begin{frame} |
||
712 | |||
713 | \frametitle{Credits} |
||
714 | |||
715 | \begin{itemize} |
||
716 | |||
717 | \item The \href{http://latex-beamer.sf.net/}{\LaTeX~Beamer} class. |
||
718 | |||
719 | \item The \href{http://www.berlios.de/}{BerliOS} crew. |
||
720 | |||
721 | \item The numerous past and present IzPack developers and contributors. |
||
722 | |||
723 | \end{itemize} |
||
724 | |||
725 | \end{frame} |
||
726 | |||
727 | % ............................................................................ % |
||
728 | |||
729 | \end{document} |
||
730 |