3073df6bee2c8a8557fed113f192062ef2f14aa0
[www.jankratochvil.net.git] / resume / Resume-JanKratochvil.html.pl
1 #! /usr/bin/perl
2
3 # $Id$
4 # Resume page Perl template.
5 # Copyright (C) 2003 Jan Kratochvil <project-www.jankratochvil.net@jankratochvil.net>
6
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; exactly version 2 of June 1991 is required
10
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
20
21 package resume::ResumeJanKratochvil;
22 require 5.6.0;  # at least 'use warnings;' but we need some 5.6.0+ modules anyway
23 use vars qw($VERSION $CVS_ID);
24 $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
25 $CVS_ID=q$Id$;
26 use strict;
27 use warnings;
28
29 BEGIN{ open F,"Makefile"; our $top_dir=pop @{[split /\s/,(grep /^top_srcdir/,<F>)[0]]}; eval "use lib '$top_dir'"; close F; }
30 use My::Web;
31 require CGI;
32 require Crypt::Rot13;
33 Wrequire 'My::Project';
34
35
36 my $W=My::Web->init(
37                 "__PACKAGE__"=>__PACKAGE__,
38                 "title"=>"Resume",
39                 "section"=>"Resume",
40                 "heading"=>0,
41                 "footer"=>0,
42                 "head_css"=>"
43 td { vertical-align: top; }
44 table { border-collapse: collapse; border-style: solid; border-width: 1px; margin: 8px; }
45 A[href] { text-decoration: inherit; /* revoke underline */ }
46 A[href].project { text-decoration: underline; }
47 .platform { font-style: italic; white-space: nowrap; }
48 table.referees td.com { text-align: center; }
49 .techs { white-space: nowrap; }
50 caption  { caption-side: top; }
51 table.jobs td { padding: 1ex; }
52 ",
53                 "args_check"=>{
54                                 "referees"=>'', # Do not bother with '^(?:(?i)referees)?$'
55                                 "print"=>'^(?:print)?$',
56                                 },
57                 );
58 $W->{"args"}{"Wabs"}=1;
59 My::Web->heading();
60
61
62 my %item=( My::Project::item_hash_read() );
63 my @itemnames=sort {
64                 ($item{$b}{"priority"} <=> $item{$a}{"priority"})
65                 or (lc($item{$a}->{"name"}) cmp lc($item{$b}->{"name"}));
66                 } keys(%item);
67
68 my $projectref=sub
69 {
70 my($name)=@_;
71
72         return a_href "/project/$name/",$item{$name}{"name"},"attr"=>'class="project"';
73 };
74
75 my $project=sub
76 {
77 my($name,%args)=@_;
78
79         my $r=&{$projectref}($name);
80         if (!$args{"bare"}) {
81                 my $summary=$item{$name}{"summary"};
82                 $summary=~s#(?:<a\s[^>]*>|</a>)##gi;    # if $args{"unhref"};
83                 if (!$args{"parenthesis"}) {
84                         $r.=": $summary";
85                         }
86                 else {
87                         $r.=" ($summary)";
88                         }
89                 }
90         return $r;
91 };
92
93 my $free_projects=sub (@)
94 {
95 my(@platforms)=@_;
96
97         my $r="";
98         $r.=join ", ",map({ my $platform=$_;
99                 map({ ($item{$_}{"sponsorship"} || $item{$_}{"trivia"}
100                                 || $item{$_}{"platform"} ne $platform ? () : (&{$projectref}($_))); } @itemnames);
101                 } @platforms);
102         return $r;
103 };
104
105
106 my $reference=sub ($$)
107 {
108 my($mail,$fullname)=@_;
109
110         my $r="";
111         $r.='<td>';
112                 $r.=$fullname;
113                 if (lc($W->{"args"}{"referees"}) eq "referees") {
114                         my $rot13=Crypt::Rot13->new();
115                         $rot13->charge($mail);
116                         $mail=($rot13->rot13())[0];
117                         $r.=' &lt;'.a_href("mailto:$mail",$mail).'&gt;';
118                         }
119         $r.='</td>';
120         return $r;
121 };
122
123 sub techs ($)
124 {
125 my($arg)=@_;
126
127         return '<span class="techs">('.$arg.')</span>';
128 }
129
130
131 my $uClinux=a_href 'http://www.uclinux.com/','uClinux';
132 my $mailme=(map({ a_href("mailto:$_",$_); } 'job@jankratochvil.net'))[0];
133 my $now=(localtime())[5]+1900;
134
135 print <<"HERE";
136 <table width="100%" style="border-style: none;"><tr><td align="center"><table>
137 <tr><td class="tab-head">Name    </td><td>Jan Kratochvil</td></tr>
138 <tr><td class="tab-head">English </td><td>technical: fluent, general: communicable</td></tr>
139 <tr><td class="tab-head">Born    </td><td>1979</td></tr>
140 <tr><td class="tab-head">Sex     </td><td>male</td></tr>
141 <tr><td class="tab-head">Licenses</td><td>motorcycle, car</td></tr>
142 <tr><td class="tab-head">eMail   </td><td>$mailme</td></tr>
143 <tr><td class="tab-head">Projects</td><td>@{[ a_href('http://www.jankratochvil.net/project/') ]}</td></tr>
144 <tr><td class="tab-head">Resume  </td><td>@{[ a_href('http://www.jankratochvil.net/resume/') ]}<br />
145                                           <!-- FIXME: [ @{[ a_href '/resume/Resume-JanKratochvil.pdf','PDF' ]} ] -->
146                                                                                                                                                                         </td></tr>
147 <tr><td class="tab-head">OpenPGP </td><td style="font-family: monospace; text-align: left;">@{[ a_href '/pgp-JanKratochvil.txt',''
148                 .'pub  1024D/26A802B2 2004-01-17'.'<br />'
149                 .'sub  2048g/A74DF86D 2004-01-17 [expires: 2007-01-16]'
150                 ]}</span></td></tr>
151 </table></td></tr></table>
152
153 @{[ vskip "3ex" ]}
154
155 <table border="1" frame="border" rules="rows" class="jobs">
156 <caption>Fulltime Job</caption>
157 <tr><th>Date</th><th>Company</th>
158                 <th>Description</th></tr>
159 <tr><td>2004/01-11</td><td class="com">@{[ a_href 'http://www.sun.com/','Sun Microsystems' ]}</td>
160                 <td>@{[ a_href 'http://www.sun.com/software/javaenterprisesystem/','Java Enterprise System' ]}
161                                                 Quality Assurance (JES&nbsp;QA), technical lead<br />
162                                 JES components compatibility analysis, automation of QA&nbsp;tasks,
163                                 JES testing, QA&nbsp;frameworks pilot deployments,
164                                 architecture and lead of the team projects, team programming guidelines
165                                 </td></tr>
166 </table>
167
168 @{[ vskip "1ex" ]}
169
170 <table border="1" frame="border" rules="rows" class="jobs">
171 <caption>Contractor Jobs</caption>
172 <tr><th>Date</th><th>Client</th>
173                 <th>Description</th></tr>
174 <tr><td>2002-2003</td><td class="com">- (freelance project)</td>
175                 <td>@{[ &$project('captive') ]} (14 months)<br />
176                         Featured @{[ a_href 'http://slashdot.org/article.pl?sid=03/12/02/1536227','on slashdot' ]}.<br />
177                         Project required analysing portions of 80MB+ i386 disassembly dumps of MS-Windows XP kernel and ntfs.sys
178                         to achieve the first binary compatible reimplementation of the required undocumented XP kernel subsystems.<br />
179                         Written @{[ &$project('TraceFS') ]} as native W32 kernel hooking driver for run-time analysis of the NT Cache Manager
180                         XP kernel subsystem.<br />
181                         GNU/Linux part required integration and extensions of
182                         @{[ a_href 'http://lufs.sourceforge.net/lufs/','LUFS' ]} (Linux Userland File System)
183                         to transparently connect the UNIX userland based MS-Windows kernel filesystem isolated by the CORBA/ORBit interface.
184                 </td></tr>
185 <tr><td>2001-2002</td><td class="com">@{[ a_href('http://www.atspraha.cz/','Advanced Telecom Services') ]}</td>
186                 <td>Mobile technologies
187                         <ul>
188                                 <li>MMS framework client via EuroTel GSM operator
189                                                 by technologies GSM MMS, Perl, XML, SOAP (3 months, still maintained)<br />
190                                                 Project included
191                                                 @{[ a_href "/etmms/",'pilot MMS Center debugging',"attr"=>'class="project"' ]} with
192                                                 Ethereal (@{[ a_href 'http://www.ethereal.com','external link' ]}), fixes of Ethereal
193                                                 (@{[ a_href '/project/etherealmmse/','1' ]}, @{[ a_href '/project/etherealwsp/','2' ]}).
194                                                 </li>
195                                 <li>Multimedia EMS support implemented by @{[ &$project('gsmperl',"bare"=>1) ]}</li>
196                                 <li>Implementation of protocol BIP (based on Nokia CIMD2 protocol) for GSM SMS Center direct communication
197                                                 by extending gnokii (@{[ a_href 'http://www.gnokii.org/','external link' ]})
198                                                 for EuroTel GSM operator (still in use)</li>
199                         </ul>
200                 </td></tr>
201 <tr><td>1999-2000</td><td class="com">@{[ a_href('http://www.suse.com/','SuSE') ]}</td>
202                 <td>@{[ &$project('surprise') ]} (15 months)<br />
203                         Project was completed as a team work. The code is based on Gnome technologies.
204                         As one of the subtasks to keep system bootability I implemented @{[ &$project('int13sniff',"bare"=>1) ]}
205                         to ease Microsoft boot loaders disassembly across partition modifications.
206                         </td></tr>
207 <tr><td>2001-2002</td><td class="com">@{[ a_href('http://www.readynote.com/','ReadyNote') ]}</td>
208                 <td>Mobile technologies for embedded devices
209                 <ul>
210                         <li>Completed debugging of gnokii (@{[ a_href 'http://www.gnokii.org/','external link' ]}) GSM software modem
211                                         for Nokia 5190</li>
212                         <li>Port of gnokii and my @{[ &$project('mdsms',"parenthesis"=>1) ]} to embedded
213                                         uClinux (@{[ a_href 'http://www.uclinux.org/','external link' ]})</li>
214                 </ul>
215                 </td></tr>
216 <tr><td>1999-2003</td><td class="com">@{[ a_href('http://www.jklabs.cz/','JKLabs') ]}</td>
217                 <td>System administration of GNU/Linux and FreeBSD, techsupport: GuestNET,
218                                 @{[ a_href 'http://www.2m.dk/web/html_version/eclipse/eclipse.html','Eclipse' ]},
219                                 @{[ a_href 'http://www.globaloop.com/','GlobaLoop' ]},
220                                 @{[ a_href 'http://www.antlimited.com/products/fresco.htm','Fresco' ]}<br />
221                         Ad hoc technical support challenges such as i386 IRQ redirector,
222                         @{[ &$project('middleman',"parenthesis"=>1,"unhref"=>1) ]} or @{[ &$project('ssht',"parenthesis"=>1,"unhref"=>1) ]}.
223                 </td></tr>
224 <tr><td>2001     </td><td class="com">@{[ a_href('http://www.gtsgroup.cz/','GTS') ]}</td>
225                 <td>@{[ &$project('tac_plus') ]} (3 months)</td></tr>
226 <tr><td>1999     </td><td class="com">@{[ a_href('http://www.unicom-prague.cz/','Unicom') ]}</td>
227                 <td>Technical translations from English</td></tr>
228 <tr><td>1998-1999</td><td class="com">@{[ a_href('http://www.geoinvest.cz/','Geoinvest') ]}</td>
229                 <td>Mobile technologies, embedded devices
230                         <ul>
231                                 <li>@{[ &$project('332') ]}</li>
232                                 <li>Siemens M1 GSM modem daemon for GPS, client/server setup, remote GSM terminals</li>
233                         </ul>
234                 </td></tr>
235 <tr><td>1999     </td><td class="com">@{[ a_href('http://www.tencom.cz/','TENcom Trade') ]}</td>
236                 <td>Mobile technologies
237                         <ul>
238                                 <li>@{[ a_href "/project/mdsms/","MobilDock SMS Tool","attr"=>'class="project"' ]}:
239                                                 SMS communication software for Digital UNIX (2 months)</li>
240                         </ul>
241                 </td></tr>
242 <tr><td>1998     </td><td class="com">@{[ a_href('http://www.elsa-online.org/',"European Law Students' Association") ]}</td>
243                 <td>@{[ &$project('step') ]}, requirement for fixes of
244                                 @{[ a_href "/project/phphash/","PHP","attr"=>'class="project"' ]} and
245                                 @{[ a_href "/project/pgsqlsubstr/","PostgreSQL","attr"=>'class="project"' ]}</td></tr>
246 <tr><td>1993-1996</td><td class="com">Profes J&amp;K</td>
247                 <td>PC assembly and customer service</td></tr>
248 <tr><td>1993     </td><td class="com">@{[ a_href('http://www.japhila.cz/index_en.htm','Japhila') ]}</td>
249                 <td>StampMan: Database application @{[ techs 'MS-DOS: Pascal, plainTeX' ]}</td></tr>
250 </table>
251
252 @{[ vskip "1ex" ]}
253
254 <table class="referees">
255 <caption>Contractor Jobs Referees (reversed chronological order)</caption>
256 <tr><td class="com">@{[ a_href('http://www.sun.com/','Sun Microsystems') ]}</td>
257                 @{[ &{$reference}('xnery.mngybhxny(ng)fha.pbz','Karel Zatloukal') ]}</tr>
258 <tr><td class="com">@{[ a_href('http://www.atspraha.cz/','Advanced Telecom Services') ]}</td>
259                 @{[ &{$reference}('zvpuny.ubenx(ng)ngfcenun.pm','Michal Horak') ]}</tr>
260 <tr><td class="com">@{[ a_href('http://www.readynote.com/','ReadyNote') ]}</td>
261                 @{[ &{$reference}('wcehrgg(ng)ernqlabgr.pbz','Jim Pruett') ]}</tr>
262 <tr><td class="com">@{[ a_href('http://www.jklabs.cz/','JKLabs') ]}</td>
263                 @{[ &{$reference}('wna.xbyne(ng)wxynof.pm','Jan Kolar') ]}</tr>
264 <tr><td class="com">@{[ a_href('http://www.gtsgroup.cz/','GTS') ]}</td>
265                 @{[ &{$reference}('Zvpunry.Znprx(ng)tgftebhc.pm','Michael Macek') ]}</tr>
266 <tr><td class="com">@{[ a_href('http://www.unicom-prague.cz/','Unicom') ]}</td>
267                 @{[ &{$reference}('erprcpr(ng)havpbz-centhr.pm','Valerie Bernardova') ]}</tr>
268 <tr><td class="com">@{[ a_href('http://www.geoinvest.cz/','Geoinvest') ]}</td>
269                 @{[ &{$reference}('ohgna(ng)trbvairfg.pm','Lubor Otta') ]}</tr>
270 <tr><td class="com">@{[ a_href('http://www.tencom.cz/','TENcom Trade') ]}</td>
271                 @{[ &{$reference}('grfne(ng)grapbz.pm','Petr Tesar') ]}</tr>
272 <tr><td class="com">@{[ a_href('http://www.japhila.cz/index_en.htm','Japhila') ]}</td>
273                 @{[ &{$reference}('wnavx(ng)wncuvyn.pbz','Bretislav Janik') ]}</tr>
274 HERE
275
276 if (lc($W->{"args"}{"referees"}) ne "referees") {
277         print <<"HERE";
278                 <tr><td style="padding: 10px;" colspan="2">
279                         <hr />
280                         <form method="post" action="@{[ top_dir $W->{"resume_url"} ]}">
281                                 <p>Enter the word '<b>referees</b>' (without quotes) to disclose e-mail addresses:</p>
282                                 <input type="text" size="15" name="referees" value="@{[ CGI::escapeHTML($W->{"args"}{"referees"}) ]}" />
283                                 <input type="submit" value="Submit" />
284                                 <p>(spambot protection)</p>
285                         </form>
286                 </td></tr>
287 HERE
288         }
289
290 print <<"HERE";
291 </table>
292
293 @{[ vskip "2ex" ]}
294
295 <table>
296 <caption>Awards</caption>
297 <tr><td>1997</td><td>Bronze medal in the International Olympiad in Informatics, South Africa - Cape Town</td></tr>
298 <tr><td>1997</td><td>2nd in an MO-P national contest - mathematics Olympiad, the programming category</td></tr>
299 <tr><td>1997</td><td>1st in the International Competition in Programming</td></tr>
300 <tr><td>1996</td><td>4th in the International Competition in Programming</td></tr>
301 <tr><td>1995</td><td>7th in the Central European Olympiad in Informatics</td></tr>
302 </table>
303
304 @{[ vskip "2ex" ]}
305
306 <table>
307 <caption>Experience Summary</caption>
308 <tr><td class="tab-head">Major Areas  </td><td>mobile technologies, filesystems, embedded devices</td></tr>
309 <tr><td class="tab-head">Platforms    </td><td>GNU/Linux/i386/UNIX/FreeBSD, W32 kernel, Amiga/680x0, MS-DOS,
310                                                ZX Spectrum, handheld PC-E500S</td></tr>
311 <tr><td class="tab-head">Languages    </td><td>C (Gnome/GCC), Perl, bash/awk/sed...,
312                                                Java, C++, Pascal, Basic, REXX, S-Lang, Foxplus, Prolog</td></tr>
313 <tr><td class="tab-head">Tools/Metalanguages</td>
314                                            <td>autoconf, automake, libtool, m4, CVS, gettext, bison, flex, ld&nbsp;script,
315                                                gdb&nbsp;script, Maple&nbsp;V</td></tr>
316 <tr><td class="tab-head">Assemblers   </td><td>i386, Motorola 680x0, Zilog&nbsp;Z80, Intel 8051, MIPS R2/3000,
317                                                (Hitachi SH-8)</td></tr>
318 <tr><td class="tab-head">WWW-Related  </td><td>(X)HTML, CSS, PHP, SQL (PostgreSQL, MySQL), JavaScript, CGI</td></tr>
319 <tr><td class="tab-head">Documentation</td><td>plainTeX, LaTeX, DocBook, DocBook Lite, XML/NS/Schema,
320                                                gtk-doc, nroff, pod</td></tr>
321 <tr><td class="tab-head">Libraries    </td><td>Gnome/GTK+/GLib, POSIX/BSD/SysV/threads/sockets, X11, OpenGL, NCurses,
322                                                S-Lang, GnomeVFS, libxml, SVGALib, NIS, Qt,...</td></tr>
323 <tr><td class="tab-head">RPC          </td><td>CORBA/ORBit, SOAP, WSDL, Sun&nbsp;RPC</td></tr>
324 <tr><td class="tab-head">Protocols    </td><td>GSM SMS/PDU/Nokia&nbsp;Smart&nbsp;Messaging/EMS/WTP/WSP/MMSE/SMIL/WML/AMR/ETSI stds/3GPP stds,
325                                                IPv4, HTTP, SMTP/RFC822/MIME, FTP, SSH, DHCP, POP3, NFSv2, PPP/LCP/IPCP,...</td></tr>
326 <tr><td class="tab-head">Filesystems  </td><td>ext2, FAT, AmigaFFS, ISO-9660</td></tr>
327 </table>
328
329 @{[ vskip "2ex" ]}
330
331 <table border="1" frame="border" rules="groups">
332 <caption>My Own Free Projects</caption>
333 <thead>
334         <tr><td colspan="2" style="font-size: larger;" align="center">
335                 Detailed listing available at: @{[ a_href 'http://www.jankratochvil.net/projects/' ]}
336         </td></tr>
337 </thead>
338 <tr><th>Platform</th><th>Available Free Projects</th></tr>
339 HERE
340         my @platforms=@My::Project::platforms;
341         while (@platforms) {
342                 my $platform_sym =shift @platforms;
343                 my $platform_name=shift @platforms;
344                 print "<tr>";
345                         print '<td>'.a_href('/project/#'.$platform_sym,$platform_name).'</td>';
346                         print '<td>'.&{$free_projects}($platform_sym).'</td>';
347                 print "</tr>\n";
348                 }
349 print <<"HERE";
350 </table>
351 HERE
352
353
354 My::Web->footer();