+"product" category in general.
[www.jankratochvil.net.git] / resume / ResumeJanKratochvil.pm
index 41ef8f8..990123d 100644 (file)
@@ -27,6 +27,7 @@ use warnings;
 use My::Web;
 require Crypt::Rot13;
 Wrequire 'project::Lib';
+Wrequire 'product::Lib';
 
 
 sub Contact($)
@@ -39,7 +40,7 @@ my($self)=@_;
                "Born"    =>"1979",
                "Sex"     =>"male",
                "Licenses"=>"motorcycle, car",
-               "eMail"   =>(map({ a_href("mailto:$_",$_); } 'job@jankratochvil.net'))[0],
+               "eMail"   =>a_href('mailto:job@jankratochvil.net'),
                "Projects"=>a_href('http://www.jankratochvil.net/project/'),
                "Resume"  =>a_href('http://www.jankratochvil.net/resume/')."<br />"
                           ."[ ".a_href('/resume/ResumeJanKratochvil.pdf','PDF')
@@ -64,29 +65,36 @@ my $W=My::Web->init(
                                "print"=>'^(?:print)?$',
                                },
                "http_safe"=>1, # For our anti-robot POST request.
+               "no_job"=>1,
                );
 $W->{"args"}{"Wabs"}=1;
 My::Web->heading();
 
 
-my %item=project::Lib->name_to_hashref();
+my %item=(
+       project::Lib->name_to_hashref(),
+       product::Lib->name_to_hashref(undef(),"override"=>{"platform"=>"product"}),
+       );
 my @itemnames=sort {
-               ($item{$b}{"priority"} <=> $item{$a}{"priority"})
-               or (lc($item{$a}->{"name"}) cmp lc($item{$b}->{"name"}));
-               } keys(%item);
+       ($item{$b}{"priority"} <=> $item{$a}{"priority"})
+       or (lc($item{$a}->{"name"}) cmp lc($item{$b}->{"name"}));
+       } keys(%item);
 
 my $projectref=sub
 {
-my($name)=@_;
+my($name,%args)=@_;
 
-       return a_href "/project/$name/",$item{$name}{"name"},"attr"=>'class="project"';
+       my $project_product=($args{"product"} ? "product" : "project");
+       return a_href "/$project_product/$name/",$item{$name}{"name"},"attr"=>'class="'.$project_product.'"';
 };
 
+# $args{"parenthesis"}=1;
+# $args{"product"}=1;
 my $project=sub
 {
 my($name,%args)=@_;
 
-       my $r=&{$projectref}($name);
+       my $r=&{$projectref}($name,%args);
        if (!$args{"bare"}) {
                my $summary=$item{$name}{"summary"};
                $summary=~s#(?:<a\s[^>]*>|</a>)##gi;    # if $args{"unhref"};
@@ -106,7 +114,9 @@ my(@platforms)=@_;
 
        my $r="";
        $r.=join ", ",map({ my $platform=$_;
-               map({ ($item{$_}{"sponsorship"} || $item{$_}{"trivia"}
+               map({ (0
+                               # || $item{$_}{"sponsorship"}
+                               || $item{$_}{"trivia"}
                                || $item{$_}{"platform"} ne $platform ? () : (&{$projectref}($_))); } @itemnames);
                } @platforms);
        return $r;
@@ -124,7 +134,7 @@ my($mail,$fullname)=@_;
                        my $rot13=Crypt::Rot13->new();
                        $rot13->charge($mail);
                        $mail=($rot13->rot13())[0];
-                       $r.=' &lt;'.a_href("mailto:$mail",$mail).'&gt;';
+                       $r.=' &lt;'.a_href("mailto:$mail").'&gt;';
                        }
        $r.='</td>';
        return $r;
@@ -158,17 +168,33 @@ HERE
 print <<"HERE";
 </table>
 
-@{[ vskip "3ex" ]}
+@{[ vskip "2ex" ]}
+
+<p>Contractor - software engineer. Technical achievements highlights:</p>
+<ul>
+       <li>@{[ a_href '#captive','Captive NTFS' ]}:
+                       Delivery of the first free NTFS read/write filesystem for GNU/Linux.
+                       Technically advanced project incl. the required reverse engineering.
+       </li>
+       <li>@{[ a_href '#mms2','MMS2' ]}:
+                       Independent startup business worth blocking by existing monopolies. Coverage by news articles:
+                       @{[ a_href 'http://www.mobilmania.cz/Zpravy/AR.asp?ARI=111260','1' ]},
+                       @{[ a_href 'http://mobil.idnes.cz/mob_operatori.asp?r=mob_operatori&c=A051106_214538_mob_operatori_dno','2' ]};
+                       resolution is still pending.
+       </li>
+</ul>
+
+@{[ vskip "2ex" ]}
 
 <table border="1" frame="border" rules="rows" class="jobs">
 <caption>Fulltime Jobs</caption>
 <tr><th>Date</th><th>Company</th>
                <th>Description</th></tr>
-<tr><td>2005/04-now</td><td class="com">@{[
+<tr><td>2005/04-11</td><td class="com">@{[
                                                a_href_cc {""=>'http://www.valinux.co.jp/en/',
                                                         "JP"=>'http://www.valinux.co.jp/'},'VA Linux Systems Japan' ]}</td>
                <td>@{[ a_href 'http://www.kernel.org/','Linux kernel' ]}
-                                               based development</td></tr>
+                                               based software development</td></tr>
 <tr><td>2004/01-11</td><td class="com">@{[ a_href 'http://www.sun.com/','Sun Microsystems' ]}</td>
                <td>@{[ a_href 'http://www.sun.com/software/javaenterprisesystem/','Java Enterprise System' ]}
                                                Quality Assurance (JES&nbsp;QA), technical lead<br />
@@ -181,10 +207,29 @@ print <<"HERE";
 @{[ vskip "1ex" ]}
 
 <table border="1" frame="border" rules="rows" class="jobs">
-<caption>Contractor Jobs</caption>
-<tr><th>Date</th><th>Client</th>
+<caption>Freelance Commercial Projects</caption>
+<tr><th>Date</th>
                <th>Description</th></tr>
-<tr><td>2002-2003</td><td class="com">- (freelance project)</td>
+<tr id="mms2"><td>2005     </td>
+               <td>@{[ &$project('mms2',"product"=>1) ]} (@{[ a_href_cc {""=>'http://www.mms2.org/',
+                                                                       "CZ"=>'http://www.mms2.cz/'},'service web' ]})<br />
+                       Web interface was outsourced.
+                       Commercial service management held together with company JK-Invent.
+                       <ul>
+                               <li>Designed to coexist with existing GSM networks service servers</li>
+                               <li>MMSE/WAP-Push/web/mail convergency featuring smart transformations</li>
+                               <li>Credits charging by ISDN IVR + automatic bank transaction acceptance interface</li>
+                               <li>Completed alpha and beta product cycle for mobile phones firmware bugs workarounds</li>
+                               <li>Free gatewaying program for customers to avoid targetted GSM operators firewalling</li>
+                       </ul>
+               </td></tr>
+<tr><td>2004     </td>
+               <td>@{[ &$project('hotelgate',"product"=>1) ]}<br />
+                       Plug&amp;Play TCP/IP for clients, selectively ticketed and/or free access,
+                       simplified interface for reception desks, easy and unified management.<br />
+                       European facility installations provided by @{[ a_href 'http://www.jklabs.cz/','JK&nbsp;Labs' ]}.
+               </td></tr>
+<tr id="captive"><td>2002-2003</td>
                <td>@{[ &$project('captive') ]}<br />
                        Featured @{[ a_href 'http://slashdot.org/article.pl?sid=03/12/02/1536227','on slashdot' ]}.<br />
                        Analysis of portions of 80MB+ i386 disassembly dumps of MS-Windows XP kernel and ntfs.sys
@@ -195,6 +240,14 @@ print <<"HERE";
                        UNIX userland of Captive provides GnomeVFS interface to the MS-Windows kernel
                        based MS-Windows filesystem isolated by the CORBA/ORBit interface.
                </td></tr>
+</table>
+
+@{[ vskip "1ex" ]}
+
+<table border="1" frame="border" rules="rows" class="jobs">
+<caption>Contractor Jobs</caption>
+<tr><th>Date</th><th>Client</th>
+               <th>Description</th></tr>
 <tr><td>2001-2002</td><td class="com">@{[ a_href('http://www.atspraha.cz/','Advanced Telecom Services') ]}</td>
                <td>Mobile technologies
                        <ul>