V pátek 6. a sobotu 7. března proběhl v pražském sídle Nejvyššího kontrolního úřadu (NKÚ) Hackathon veřejné správy 7.1. Publikovány byly vytvořené aplikace. V kategorii projektů rozvíjených z krajského kola zvítězil tým „Mackokládi“. Čtyři středoškoláci ze Dvora Králové uspěli s aplikací KompaZ. Jde o digitálního průvodce, který pomůže s rychlou a srozumitelnou orientací v životních i krizových situacích „krok za krokem“. Aplikace
… více »QGIS, svobodný desktopový GIS, byl vydán v nové hlavní verzi 4.0. Změny zahrnují několik nových analytických a editačních funkcí, rozšíření podpory 3D, více možností úprav uživatelského rozhraní či mnoho dalších zlepšení použitelnosti. Řada 3.44 má aktualizace plánovány do září.
Dan Blanchard vydal knihovnu pro Python chardet v nové verzi 7.0.0. S novou verzí byla knihovna přelicencována z LGPL na MIT. Souhlasili s tím všichni přispěvatelé? Dan Blanchard souhlasy vůbec neřešil. Zaúkoloval umělou inteligenci (Claude), aby knihovnu zcela přepsala a výslovně jí nařídil, aby nepoužila žádný LGPL kód. Dan Blanchard tvrdí, že se jedná o clean room design. Protistrana argumentuje, že umělá inteligence byla trénována
… více »Andy Nguyen si na svou herní konzoli PlayStation 5 (PS5) pomocí exploitu Byepervisor nainstaloval Linux (Ubuntu). V Linuxu si spustil Steam a PS5 tak proměnil v Steam Machine. Na PS5 může hrát hry, které jsou vydané pouze pro PC a jsou na Steamu [Tom's Hardware].
Správce sbírky fotografií digiKam byl vydán ve verzi 9.0.0. Jedná se o větší vydání provázené aktualizacemi knihoven. Mnoho dílčích změn se vedle oprav chyb týká uživatelského rozhraní, mj. editace metadat.
Byla vydána verze 2026 distribuce programu pro počítačovou sazbu TeX s názvem TeX Live (Wikipedie). Přehled novinek v oficiální dokumentaci.
Jihokorejská Národní daňová služba (NTS) zabavila kryptoměnu Pre-retogeum (PRTG) v hodnotě 5,6 milionu dolarů. Pochlubila se v tiskové zprávě, do které vložila fotografii zabavených USB flash disků s kryptoměnovými peněženkami spolu se souvisejícími ručně napsanými mnemotechnickými obnovovacími frázemi. Krátce na to byla kryptoměna v hodnotě 4,8 milionu dolarů odcizena. O několik hodin ale vrácena, jelikož PRTG je extrémně nelikvidní, s denním objemem obchodování kolem 332 dolarů a zalistováním na jediné burze, MEXC [Bitcoin.com].
Komunita kolem Linuxu From Scratch (LFS) vydala nové verze knih s návody na instalaci vlastního linuxového systému ze zdrojových kódů Linux From Scratch 13.0 a Beyond Linux From Scratch 13.0. Pouze se systemd.
Byla vydána nová stabilní major verze 25.12 linuxové distribuce primárně určené pro routery a vestavěné systémy OpenWrt (Wikipedie). Jedná se o nástupce předchozí major verze 24.10. Přehled novinek v poznámkách k vydání. Podporováno je více než 2200 zařízení.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za únor (YouTube). Odstraněn byl veškerý kód napsaný ve Swiftu. JavaScriptový engine LibJS byl reimplementován v Rustu.
$str = "abc"; $out = substr($str, 0, 1, ""); print "str: $str\nout: $out\n";Celou dobu jsem nedokázal pochopit, proč bude v proměnné $out znak "a". Pokud to dobře chápu, nejprve se provede
$out = substr($str, 0, 1) a až poté se v proměnné $str nahradí první znak prázdným znakem? Člověk by řekl, že to bude prosté jako bulharská striptérka, ale mně to teda jasné není. A nebo už fakt přicházím o mozkové buňky.
Dneska bylo Perlu dost, mrknu na to zase zítra, teď se jdu rozčilovat pro změnu na Aukro.
Tiskni
Sdílej:
replacement je volitelný čtvrtý parametr. Někdy potřebujete získat část řetězce podle indexů, někdy část řetězce podle indexů potřebujete nahradit – a Perl má funkci, která to podle způsobu použití umí obojí, případně i najednou. Řekl bych, že je to takové typicky perlovské řešení.
substr vrací podřetězec určený indexem a délkou (2. a 3. parametr). Čtvrtý parametr nijak neovlivňuje vracenou hodnotu, ale původní řetězec předaný jako 1. parametr.
V pseudokódu využívajícím trojparametrický substr() to dělá zhruba tohle:
$result = substr($string, $offset, $length); $string = substr($string, 0, $offset) + $replacement + substr($string, $length+$offset, strlen($string)-$length-1); return $resultPřičemž
$string není zkopírovaná hodnota, ale je to pořád ten „původní“, tj. funkce změní jeho hodnotu i z pohledu kódu, který funkci vyvolal.
Overview
perl Perl overview (this section)
perlintro Perl introduction for beginners
perltoc Perl documentation table of contents
Tutorials
perlreftut Perl references short introduction
perldsc Perl data structures intro
perllol Perl data structures: arrays of arrays
perlrequick Perl regular expressions quick start
perlretut Perl regular expressions tutorial
perlboot Perl OO tutorial for beginners
perltoot Perl OO tutorial, part 1
perltooc Perl OO tutorial, part 2
perlbot Perl OO tricks and examples
perlperf Perl Performance and Optimization Techniques
perlstyle Perl style guide
perlcheat Perl cheat sheet
perltrap Perl traps for the unwary
perldebtut Perl debugging tutorial
perlfaq Perl frequently asked questions
perlfaq1 General Questions About Perl
perlfaq2 Obtaining and Learning about Perl
perlfaq3 Programming Tools
perlfaq4 Data Manipulation
perlfaq5 Files and Formats
perlfaq6 Regexes
perlfaq7 Perl Language Issues
perlfaq8 System Interaction
Reference Manual
perlsyn Perl syntax
perldata Perl data structures
perlop Perl operators and precedence
perlsub Perl subroutines
perlfunc Perl built-in functions
perlopentut Perl open() tutorial
perlpacktut Perl pack() and unpack() tutorial
perlpod Perl plain old documentation
perlpodspec Perl plain old documentation format specification
perlrun Perl execution and options
perldiag Perl diagnostic messages
perllexwarn Perl warnings and their control
perldebug Perl debugging
perlvar Perl predefined variables
perlre Perl regular expressions, the rest of the story
perlrebackslash Perl regular expression backslash sequences
perlrecharclass Perl regular expression character classes
perlreref Perl regular expressions quick reference
perlref Perl references, the rest of the story
perlform Perl formats
perlobj Perl objects
perltie Perl objects hidden behind simple variables
perldbmfilter Perl DBM filters
To je opravdu tak tezky zadat man perlfunc a najit si, co presne substr dela???
Jednak, perl substr lze pouzit i jako lvalue, cili substr($var,X,Y) = "neco";. A kdyz si popis substr poradne prectete, tak zjistite, ze:
An alternative to using substr() as an lvalue is to specify the replacement string as the 4th argument. This allows you to replace parts of the EXPR and return what was there before in one operation, just as you can with splice().Pokud neovladate EN, urcite se daji tyhle man stranky najit i v CZ. Pokud nechapete vyznam, nezacinejte programovat a jdete delat neco jineho.
k cemu tam je ten ctvrty parametrnebo
Takze pri takomto pouziti ("") je tam zbytocnynebo
to je nejake divne, pripada me ze u takove funkce replacement neni potreba. Hledat v diskuzi spravnou odpoved by mel autor zapisku a pak opravit blog, aby to kazdy dalsi ctenar videl hned. Je blbost, aby kazdy ctenar pak prochazel diskuzi a hledal, jestli uz tam nekdo spravne reseni nenapsal. A kdyz jsem videl ty "vestecke" reakce (viz vyse), tak jsem nemel chut se tim dal hrabat, kdyz odpoved je primo v manu. Misto tehle zbytecnych uvah si kolegove diskutujici a autor mohli behem 5 minut v manu najit, proc je tam ctvrty parametr a co presne dela. Podobne nesnasim blogy stylu
Zjistil jsem, ze tohle nefunguje, dokud nezapnu tamten prepinac. Nevim proc, ale proste to tak je.A pak nakonec dotycny zjisti, ze mel proste neco v systemu spatne a proto to nefungovalo a ten jiny prepinac byla jen souhra nahod. Bohuzel, driv na Linuxu byli pouze odbornici, kteri se zajimalo, jak ta vec funguje. Dneska se do toho stoura kazdy, ale navody ctou jen nekteri.
perldoc -f substr
$a = 0; $b = ++$a; say "$a - $b"; # 1 - 1 $a = 0; $b = $a++; say "$a - $b"; # 1 - 0 $a = "abc"; $b = substr ($a, 0, 1) = "X"; say "$a - $b"; # Xbc - X $a = "abc"; $b = substr ($a, 0, 1, "X"); say "$a - $b"; # Xbc - a
V manuálu je to skutečně dobře (anglicky) podáno, budu rozhodně používat. Hledal jsem předtím i na webu, ale bohužel jsem narazil na ne příliš dobré stránky, které se funkcí substr() se 4 parametry příliš nezabývaly a vysvětlení chybělo, z toho plynula má frustrace. Teď je tedy chování funkce substr() v PERLu jasné. Uvidíme, na co zajímavého ještě v knize narazím.
Misto hledani jehly v kupce sena radeji prohledate cely stoh?Já při práci místo nesmyslných příměrů používám hlavu :).
perl -aF'/\s+/' -ne '$s{$F[0]}++;END{foreach $ip (keys(%s)) {print "$f $s{$f}\n";}' /var/log/apache/access.log. Moc dobre to nejde, vid?

cut -d' ' -f1 /var/log/access.log | uniq -c


perl -F'/\s/' -apple '$s{$F[0]}++}for(keys%s){$_.=" $s{$_}"'
Jinak, chtel jsem ten perl videt prepsanej v pythonu:)Nejsem si jistej jestli jsem dostatečně dobře pochopil co to dělá, ale:
python -c "print '\n'.join(set(map(lambda x: x.split()[0], open('/var/log/apache/access.log').readlines())))"
Log apache zrovna nemám po ruce, takže jsem to zkoušel na testovacím souboru..
python -c "d = map(lambda x: x.split()[0], open('/var/log/apache/access.log').readlines()); print '\n'.join([str(y) + ' ' + x for x, y in dict([[x, d.count(x)] for x in d]).items()])"
Je to už ale hnusně nepřehledné, napsal bych si na to radši klasický script nebo použil << EOF.
Dost možná bys došel úplně k jinému postupu a to, že bys to celé dělal v interaktivním pythonu, kde bysis seznam řádků postupně upravoval a vytáhl z něj naprosto libovolné výstupy.Tenhle postup jsem musel pracně vymýšlet, protože chtěl vidět ekvivalent svého perlového příkazu. Kdybych to dělal v interaktivním režimu, vypadalo by úplně, ale úplně jinak.
Tenhle postup jsem musel pracně vymýšlet, protože chtěl vidět ekvivalent svého perlového příkazu. Kdybych to dělal v interaktivním režimu, vypadalo by úplně, ale úplně jinak.Jasně, tak jsem to myslel. Jen jsem nevěděl, jestli s tím máš už nějaké zkušenosti.
python -c 'import sys, itertools; print "\n".join(("%s %s" % (k, c) for k, c in sorted(((len(list(g)), k) for k, g in itertools.groupby(sorted(l.split()[0] for l in open(sys.argv[1], "r")))), reverse=True)))' access.log
Zde je ještě indentovaná verze.
import sys, itertools
print "\n".join(
("%s %s" % (k, c) for k, c in
sorted(
( (len(list(g)), k) for k, g in
itertools.groupby(
sorted(l.split()[0] for l in open(sys.argv[1], "r")))), reverse=True)))
awk '$1 != prev {print $1; prev = $1;}' /var/log/access.log
No, zkus si odinstalovat perl u uvidis, kolik balicku se ti s tim odinstaluje, protoze bude perl zavislost. Mozna ti to ani nepujde, protoze perl bude systemova zavislost.Tak jsem to zkusil a dost by to bolelo :D 570 balíků by to vzalo s sebou a dalším ~200 by se nelíbyla nevyřešená závislost :S
Jinak, perl mi prijde lepsi - zkus si v pythonu udelat perl -aF'/\s+/' -ne '$s{$F[0]}++;END{foreach $ip (keys(%s)) {print "$f $s{$f}\n";}' /var/log/apache/access.log. Moc dobre to nejde, vid?Erm… na tohle svůj názor psát radši nebudu :D. P.S.: Používám perl, awk i python.
while ( $uinp = <> ) {
$tinp = chomp($uinp);
exit 1 if ( $uinp eq "quit" );
eval($uinp);
}
[pavlix@traveller ~]$ python3 Python 3.2 (r32:88445, Feb 21 2011, 21:11:06) [GCC 4.6.0 20110212 (Red Hat 4.6.0-0.7)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 3 + 4 7 >>> from fractions import Fraction >>> Fraction(3) / Fraction(4) Fraction(3, 4) >>> _ + Fraction(1, 2) Fraction(5, 4) >>> quit Use quit() or Ctrl-D (i.e. EOF) to exit >>> quit() [pavlix@traveller ~]$To jen abys věděl, o co se jedná. Další flame na toto téma je zbytečný.
Ja VIM, jak funguje interaktivni shell v Python, v Perl holt nemas holt interaktivni shell primo, ale pomuzes si evalem. Nepredpokladam, zes ten eval vubec zkousel, jinak bys vedel, ze tam muzes delat to same, cos predvedl s Pythonem, nacitat moduly, psat subrutiny....
Jestli hledas kamose na flejm, tak si vybral spatne
Hele clovece, jak ty muzes vest kurzy, tobe teda asertivita nic nerikaAž mi budeš platit, budu se k tobě chovat pozitivně i když budeš mlít kraviny :). Za daných okolností mi připadají moje reakce dostatečně asertivní. Btw, jdu změnit patičku, aby tě tam neprovokoval ten Python :). Chápu, že tě to může rušit :).
Ja VIM, jak funguje interaktivni shell v Python, v Perl holt nemas holt interaktivni shell primo, ale pomuzes si evalem. Nepredpokladam, zes ten eval vubec zkousel, jinak bys vedel, ze tam muzes delat to same, cos predvedl s Pythonem, nacitat moduly, psat subrutiny....„To samé“ to je asi tak jako když řekneš, že v assembleru jde dělat to samé jako v perlu. Technicky budeš mít samozřejmě pravdu v obou případech, ale použitelnost je značně odlišná.
Jestli hledas kamose na flejm, tak si vybral spatneTo sis vybral špatně
.
Jinak ale musim nabidku odmitnout - ne ze bych mel nejake vyhrady vuci tvym znalostem, ale mit v tymu nekoho, kdo takhle seka zobakem, to radsi ne... :-P
Btw, jdu změnit patičku, aby tě tam neprovokoval ten Python :). Chápu, že tě to může rušit :).
Z ceho tak usuzujes? Ja proti Pythonu celkem nic nemam, sice mi nesedi, ale respektuji, pokud se ho nekdo rozhodne pouzivat...
To sis vybral špatně
.
Hele, ty mas problem poznat odlehcenejsi ton diskuze? trochu mi prijde, ze beres vsechno strasne vazne, za kazdou vetou hledas narazku ci osobni utok... Ber to trochu s nadsazkou, ne kazdy, kdo prijde do diskuze, se chce hadat... I kdyz co tak v posledni dobe sleduju, tak se prevazna cast diskuzi zvrhne v hadku o nejakou blbost :(
Takze kdyz ti nekdo plati, tam mu lezes do pr...?Mezi lezením do prdele a korektním jednáním s blbcem je určitý rozdíl... ale musím říct, že ve své pracovní praxi s blbcem spolupracuju velmi zřídkakdy. Většinou se z toho dá nějak vyvlíknout nebo včas odmítnout.
Jinak ale musim nabidku odmitnout - ne ze bych mel nejake vyhrady vuci tvym znalostem, ale mit v tymu nekoho, kdo takhle seka zobakem, to radsi ne... :-PPokud jsi to pochopil jako nabídku, měl bys uvažovat o lepším parseru na sarkasmus či alespoň nadsázku :). Jinak mám drobné podezření, že v tvém týmu z principu bude minimálně jeden člověk, který bude mít nutkání vytvářet v týmu problém. Osobně bych se toho dost nerad účastnil :).
Hele, ty mas problem poznat odlehcenejsi ton diskuze?Myslel jsem, že ho máš ty :).
Ja nemam problem poznat odlehcenejsi ton. Ale ty by ses mel zamyslet na tim, ze neustale reagovat kousavymi komentari, urazkami a napadanim ti dobrou povest nezajisti. Jak jsem si vsiml v jinych dizkuzich, neni tohle zdaleka vyjimka...Nápodobně.
>
Mě přišlo, že píšu docela srozumitelně.Prave ze vubec, co se vam v debugeru nelibilo?
luky@ntb:~$ perl -debile_cti_man Loading DB routines from perl5db.pl version 1.32 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(-e:1): bile_cti_man DB<1> p 7 + 3 10 DB<2> use Number::Fraction DB<3> $a = new Number::Fraction(3) / new Number::Fraction(4) DB<4> p $a 3/4 DB<5> $a += 5 DB<6> p $a 23/4