Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
487 lines (418 sloc) 14.2 KB
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Čo je Perl, ako "funguje" a aké sú jeho silné stránky‎ </title>
<!-- metadata -->
<meta name="version" content="S5 1.1" />
<meta name="presdate" content="20081108" />
<meta name="author" content="Jozef Kutej"/>
<meta name="company" content="" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<!-- configuration parameters -->
<meta name="defaultView" content="slideshow" />
<!-- <meta name="defaultView" content="outline" /> -->
<meta name="controlVis" content="hidden" />
<!-- style sheet links -->
<link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
<link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
<link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
<link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
<!-- S5 JS -->
<script src="ui/default/slides.js" type="text/javascript"></script>
<!-- syntax highlighting -->
<link rel="stylesheet" type="text/css" href="ui/sh/sh_style.css" />
<script type="text/javascript" src="ui/sh/sh_main.js"></script>
<script type="text/javascript" src="ui/sh/sh_perl.js"></script>
<script type="text/javascript" src="ui/sh/sh_sql.js"></script>
<!-- custom -->
<script src="ui/jquery-1.2.6.js" type="text/javascript"></script>
<script src="ui/custom.js" type="text/javascript"></script>
<link rel="stylesheet" href="ui/custom.css" type="text/css" />
</head>
<body><!-- onload='sh_highlightDocument();' -->
<div class="layout">
<div id="controls"><!-- DO NOT EDIT --></div>
<div id="currentSlide"><!-- DO NOT EDIT --></div>
<div id="header"></div>
<div id="footer">
<!-- added by Jozef :) -->
<div id="counter" style="float: right; margin-right: 10px;">40</div>
<span id="ignoreClicks" />
<h1>08. Nov 2008</h1>
<h2>Čo je Perl, ako "funguje" a aké sú jeho silné stránky‎</h2>
</div>
</div>
<div class="presentation">
<div class="slide">
<h1>Čo je Perl, ako "funguje" a aké sú jeho silné stránky‎</h1>
<h3>Jozef Kutej</h3>
<p><img src='co-je-a-ako-funguje-perl/perl-onion.png' alt="perl" /></p>
</div>
<div class="slide">
<h1>Čo nás čaká?</h1>
<div class="singleThing">
<img src="images/expectations.jpg" alt=":-?" />
</div>
</div>
<div class="slide">
<h1>1) čo je Perl?</h1>
</div>
<div class="slide">
<h1>1) čo je Perl?</h1>
<p>copy&amp;paste z Wikipédie:</p>
<p>Perl je vyšší, všeobecný, interpretovaný, dynamický programovací jazyk.
Perl bol pôvodne vyvinul Larry Wall, liguista pracujúci ako systém
administrátor pre NASA v 1987, ako všeobecne použiteľný UNIX skriptovací
jazyk aby sa dali reporty spracovávať jednoduchšie ako pretým.
</p>
</div>
<div class="slide">
<h1>2) ako funguje</h1>
</div>
<div class="slide">
<h1>2.1) ako mnohé ďalšie/iné jazyky</h1>
<ul>
<li>perl -le '$w="world"; print "Hello $w!"'</li>
<li>print join " ", reverse split ' ', "hacker, Perl another Just"</li>
</ul>
</div>
<div class="slide">
<h1>2.2) ale aj ináč</h1>
<ul>
<li>conferences/workshops/hackathons - 1999: 2; 2000: 3; 2001: 3; 2002: 4; 2003: 6; 2004: 12; 2005: 14; 2006: 16; 2007: 19; 2008: 27 = 101+ (<a href="http://act.mongueurs.net/conferences.html">zdroj</a>)</li>
<li>Perl Mongers skupín - 669 (<a href="http://www.pm.org/groups/perl_mongers.xml">zdroj</a>)</li>
<li>8308 Registrovaných email adries v PM mailinglistoch (Perl cenzus 2005)</li>
<li>710+ bloggerov s 35870+ príspevkami na <a href="http://use.perl.org/">use.perl.org</a> (<a href="http://use.perl.org/search.pl?threshold=0&amp;op=users&amp;sort=1&amp;journal_only=1&amp;start=710">zdroj</a> <a href="http://use.perl.org/search.pl?threshold=0&amp;op=journals&amp;sort=1&amp;start=35870">zdroj2</a>)</li>
<li>6900+ autorov Perl modulov (<a href="http://search.cpan.org/">zdroj</a>)</li>
<li>856 users, 245 channels na irc.perl.org (Sobota 25. Októbra 13:59)</li>
</ul>
</div>
<div class="slide">
<h1>3) prečo Perl?</h1>
</div>
<div class="slide">
<h1>3) prečo Perl?</h1>
<ul>
<li>TIMTOWTDI (<a href="http://en.wikipedia.org/wiki/Alphabetical_list_of_programming_languages">560+ rôznych jazykov</a>)</li>
<li>prečo nie?</li>
<li>prečo áno? keď všetko sa dá napísať v akomkoľvek inom jazyku - viď. <a href="co-je-a-ako-funguje-perl/web-server.awk">web server v AWK</a></li>
<li>prečo, keď: ...but NOTHING comes close to unclear perl code<br/>
(...ale nič sa ani len nepribližuje k zlému Perl kódu)<br/>
--<a href="http://faqs.cs.uu.nl/na-dir/computer-lang/awk/faq.html">comp.lang.awk FAQ</a>
</li>
</ul>
</div>
<div class="slide">
<h1>1) Späť na začiatok</h1>
</div>
<div class="slide">
<h1>1)</h1>
<ul>
<li>NASA v 1987</li>
<li>vyšší (high-level)</li>
<li>všeobecný</li>
<li>interpretovaný</li>
<li>dynamický</li>
</ul>
</div>
<div class="slide">
<h1>NASA v 1987</h1>
<ul>
<li>Perl 1.000 - 18 December 1987 - is unleashed upon the world</li>
<li>#perl - 1988 - na <a href="http://www.efnet.net/">EFNet</a> (začiatky IRC)</li>
<li>Perl 2.000 - 5 Jún 1988</li>
<li>Perl 3.000 - 18 Október 1989</li>
<li>Perl 4.000 - 21 Marec 1991</li>
<li>Perl 5.000 - 18 Október 1994</li>
<li>CPAN - 25 September 1995</li>
<li>Perl 6.000 - ???</li>
</ul>
</div>
<div class="slide">
<h1>vyšší (high-level)</h1>
<ul>
<li>vyššie programovacie jazyky sú jazyku nezávislé na detailoch
architektúry počítača na ktorom sa spúšťajú</li>
<li>Perl funguje na 98 rôznych operačných systémoch (<a href="http://www.cpan.org/ports/">zdroj</a>)</li>
</ul>
</div>
<div class="slide">
<h1>všeobecný</h1>
<h2>Perl nájde uplatnenie všade, napríklad v</h2>
<ul class="small">
<li>CMS systémy (ACT, Movable Type, ...)</li>
<li>finančníctvo (Finance:: , zisťovanie informácií z búrz)</li>
<li>výuka (Perl6)</li>
<li>pri prototypoch aplikácií (potyl‎ - ‎Building a GUI with GTK2)</li>
<li>spracovanie textu/xml (XML::)</li>
<li>komunikácií (XML::RPC, SOAP, REST)</li>
<li>administrovaní serverov a sietí (MRTG, Smokeping, Webmin, ...)</li>
<li>web aplikáciách (Hiveminder, Intechangem, Plans, ...)</li>
<li>biochémií (BioPerl.org)</li>
<li>matematike (Math::)</li>
<li>atď.</li>
</ul>
</div>
<div class="slide">
<h1>interpretovaný</h1>
<ul>
<li>Perl kód sa dopredu neprekladá pre rôzne architektúry, ale vyhodnocuje
sa za "behu" - čo má svoje výhody a nevýhody</li>
<li>Aj keď samotný Perl je interpretovaný umožňuje rozširovať
svoju funkčnosť prilinkovaváním binárnych (skompilovaných)
knižníc (napr. XML::LibXML, JSON::XS, Text::CSV_XS)
</li>
</ul>
</div>
<div class="slide">
<h1>dynamický</h1>
<h2>Perl umožňuje</h2>
<ul>
<li>pridávať/odoberať kód za behu</li>
<li>meniť objekty za behu</li>
<li>nahrávať kód JIT</li>
</ul>
</div>
<div class="slide">
<h1>2) ako funguje?</h1>
</div>
<div class="slide">
<h1>2)</h1>
<ul>
<li>syntax</li>
<li>culture</li>
<li>irc</li>
<li>rss</li>
</ul>
</div>
<div class="slide">
<h1>2.1) syntax</h1>
<ul>
<li>Perl syntax je ovplyvnená - AWK, BASIC, BASIC-PLUS, C, C++, Lisp, Pascal, sed, UNIX shell</li>
<li>existuje veľa Perl úvodov na webe</li>
<li>zaujímavosti ukážem v slidoch "Prečo?"</li>
</ul>
</div>
<div class="slide">
<h1>2.2) Perl Culture</h1>
<ul>
<li>za perlom sú ľudia (aj tí čo zorganizovali tento workshop)</li>
<li>veľa ľudí</li>
<li>nie zas tak aby sa nemohli stretnúť a poznať</li>
<li><a href="http://yapceurope.org/">YAPC::Europe</a>, ::Asia, ::Australia, ::Israel, ::NA, ::Rusia, ::SA - každý rok</li>
<li>lokálne workshopy počas celého roka</li>
<li>lokálne Perl Mongers stretnutia počas celého roka</li>
</ul>
</div>
<div class="slide">
<h1>Perl Mongers</h1>
<div class="singleThing"><img src="co-je-a-ako-funguje-perl/pm-world.png" alt="" /></div>
</div>
<div class="slide">
<h1>Perl Mongers</h1>
<ul>
<li>lokálne skupiny</li>
<li>účelom je spojiť ľudí</li>
<li>s rovnakým záujmom v jednej lokalite</li>
<li>s rovnakým jazykom</li>
<li>(ne)pravidelne sa stretávajúcimi na tech-social stretnutiach</li>
</ul>
</div>
<div class="slide">
<h1>IRC.Perl.org</h1>
<ul>
<li>IRC - Internet Relay Chat</li>
<li>IRC patrí k perlu</li>
<li>IRC =~ wikipedia v IM</li>
<li>žiadne heslá</li>
<li>ľahká skupinová komunikácia</li>
<li>#slovakia.pm</li>
</ul>
</div>
<div class="slide">
<h1>use.Perl.org</h1>
<ul>
<li>blogy a perle</li>
<li>jednoducho sa dajú pridávať priatelia</li>
<li>jeden RSS feed od všetkých priateľov</li>
</ul>
</div>
<div class="slide">
<h1>3) Prečo?</h1>
</div>
<div class="slide">
<h1>3)</h1>
<ul>
<li>TIMTOWTDI</li>
<li>nie?</li>
<li>áno?</li>
</ul>
</div>
<div class="slide">
<h1>easy thinks keep easy,<br/>had things possible</h1>
</div>
<div class="slide">
<h1>TIMTOWTDI</h1>
<ul>
<li>moto</li>
<li>Perl sa nesnaží programátorom nanútiť štýl programovania ani riešenia problému</li>
<li>čo má svoje + a -</li>
<li>jednoznačne je to sloboda oproti iným jazykom</li>
<li>some like cats some like dogs</li>
<li><cite>Nič nie je samo o sebe ani dobré ani zlé. Záleží na tom, čo si o tom myslíme. --William Shakespeare</cite></li>
</ul>
</div>
<div class="slide">
<h1>poďme tomu mysleniu pomôcť</h1>
</div>
<div class="slide">
<h1>prečo nie?</h1>
<ul>
<li>programátor má možnosť napísať write-only kód</li>
<li>pri niektorých aplikáciách môže byť interpretovaný jazyk
rýchlostne alebo pamäťovo nevyhovujúci oproti kompilovaným jazykom
</li>
<li>šíri sa spolu so zdrojovím kódom, nie je vhodný pre client-side
komerčné programy</li>
</ul>
</div>
<div class="slide">
<h1>Prečo ANO!</h1>
</div>
<div class="slide">
<h1>CPAN</h1>
<ul>
<li>14 tisíc univerzálnych riešení problémov</li>
<li>6 tisíc autorov z hádam akejkoľvek oblasti - informatika, matematika, chémia, fyzika, ...</li>
</ul>
</div>
<div class="slide">
<h1>Pod</h1>
<ul>
<li>Plain Old Documentation format</li>
<li>stačia dve kľúčové slová na písanie - "=head1" a "=cut"</li>
<li>dokumentácia je súčasť kódu</li>
<li>pod2docbook, pod2html, pod2latex, pod2man, pod2text</li>
</ul>
</div>
<div class="slide">
<h1>perltidy</h1>
<pre class="small">
$LOVE= AMOUR.
true.cards. ecstacy.crush
.hon.promise.de .votion.partners.
tender.truelovers. treasure.affection.
devotion.care.woo.baby.ardor.romancing.
enthusiasm.fealty.fondness.turtledoves.
lovers.sentiment.worship.sweetling.pure
.attachment.flowers.roses.promise.poem;
$LOVE=~ s/AMOUR/adore/g; @a=split(//,
$LOVE); $o.= chr (ord($a[1])+6). chr
(ord($a[3])+3). $a[16]. $a[5]. chr
(32). $a[0]. $a[(26+2)]. $a[27].
$a[5].$a[25]. $a[8].$a[3].chr
(32).$a[29]. $a[8].$a[3].
$a[62].chr(32).$a[62].
$a[2].$a[38].$a[4].
$a[3].'.';
print
$o;
</pre>
</div>
<div class="slide">
<h1>perltidy</h1>
</div>
<div class="slide">
<h1>perlcritic</h1>
<ul>
<li>kritika kódu</li>
<li>ako základ je kniha <a href="http://oreilly.com/catalog/9780596001735/">Perl Best Practices</a></li>
<li>pravidlá sa dajú prispôsobiť vlastnému štýlu</li>
</ul>
</div>
<div class="slide">
<h1>perlcritic</h1>
</div>
<div class="slide">
<h1>očistená reputácia škaredosti?</h1>
</div>
<div class="slide">
<h1>regexp</h1>
<div class="singleThing small">/^([0-9a-zA-Z]+)([._-]([0-9a-zA-Z]+)[._-]?)*[@]([0-9a-zA-Z]+)([._-]([0-9a-zA-Z]+))*[.]([0-9a-zA-Z]){2,3}([0-9a-zA-Z])?$/</div>
</div>
<div class="slide">
<h1>čo "to" robí?</h1>
</div>
<div class="slide">
<h1>správny regexp na kontrolu email adresy?</h1>
</div>
<div class="slide">
<h1>/xms</h1>
</div>
<div class="slide">
<h1>regexp</h1>
<pre>
/
^ # začiatok reťazca
([0-9a-zA-Z]+) # čísla a písmená
( # čísla, písmena a ._-
[._-]
([0-9a-zA-Z]+)
[._-]?
)*
[@] # zavináč
([0-9a-zA-Z]+) # čísla a písmená
( # čísla, písmena a ._-
[._-]
([0-9a-zA-Z]+)
)*
[.] # bodka
([0-9a-zA-Z]){2,3} # 2 alebo 3 čísla a písmená
([0-9a-zA-Z])? # poprípade ďalšie čísla a písmená
$ # koniec reťazca
/xms
</pre>
</div>
<div class="slide">
<h1>regexp bol zobraný z live kódu a po funkčnej stránke nie je veľmi dobrý...</h1>
</div>
<div class="slide">
<h1>testy</h1>
<h2>t/</h2>
<ul class="small">
<li>00-compile.t - prejde všetky zdrojové súbory a zistí či sa dajú skompilovať</li>
<li>distribution.t - skontroluje či všetky meta súbory balíka sú v poriadku
a aktuálne</li>
<li>perlcritic.t - Test::Perl::Critic prejde všetky zdrojové súbory a </li>
<li>+perlcriticrc skontroluje či ich štýl súhlasí so zadefinovanými</li>
<li>+perltidy.conf pravidlami</li>
<li>pod-coverage.t - skontroluje či všetky funkcie majú dokumentáciu</li>
<li>pod-spell.t - skontroluje pravopis v dokumentácií</li>
<li>pod.t - skontroluje formátovanie dokumentácie</li>
<li>signature.t - skontroluje integritu súborov v balíčku</li>
</ul>
</div>
<div class="slide">
<h1>Devel::Cover</h1>
<ul>
<li>ukáže ktoré riadky/funkcie sú a na koľko pokryté testami</li>
<li><a href="http://pjcj.sytes.net/cpancover/DBI-1.54/index.html">príklad</a></li>
</ul>
</div>
<div class="slide">
<h1>The need for speed</h1>
<ul>
<li>Profiling with NYTProf (Mike Astle Friday November 7, 2008 16:10)</li>
<li><a href="http://search.cpan.org/perldoc?Benchmark">Benchmark</a></li>
<li>a mnohé ďalšie nástroje na hľadanie pomalého kódu</li>
<li>a kde nepomôže prepis tak môže pomôcť XS<br/>rozhranie pomocou ktorého sa dajú volať C alebo C++ funkcie</li>
</ul>
</div>
<div class="slide">
<h1>Otázky?</h1>
<div class="singleThing"><img src="images/question-mark-blue-grey.jpg" alt=":-?" /></div>
</div>
</div>
</body>
</html>