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