Fedora obsahuje typografický systém TeX v štandardnom repozitáre balíkov. Je však rozdelený na približne 6000 samostatných balíkov s jednotlivými komponentmi. Pre jednoduchšiu inštaláciu sú tieto balíky zoskupené do schém a kolekcií, takže najdôležitejšie balíky pre systém LaTeX a podporu slovenčiny (vrátane definície rozdeľovania slov) môžeme nainštalovať pomocou jedného príkazu:
dnf install texlive-collection-latexrecommended \
texlive-collection-langczechslovak
Okrem toho odporúčam nainštalovať latexmk, ktorý zabezpečí správne spúšťanie LaTeXu a súvisiacich nástrojov pre preklad dokumentu:
Na inštaláciu doplňujúcich balíkov a štýlov pre LaTeX je možné použiť trik. Ak v dokumente použijete balík, ktorý nie je nainštalovaný, LaTeX vypíše chýbové hlásenie, kde uvedie aj názov chýbajúceho súboru, napríklad multirow.sty
. Ten môžete použiť namiesto názvu RPM balíka:
dnf install 'tex(multirow.sty)'
Funguje to vďaka tomu, že každý RPM balík špecifikuje sadu „schopností“ (capabilities), ktoré zabezpečuje a tie sa dajú zadať pri inštalácii namiesto názvu balíka. Balíky s komponentmi pre LaTeX definujú schopnosti pre poskytované súbory .sty
v tváre tex(súbor.sty)
. Viac o schopnostiach môžete prečítať v príručke k RPM.
Ak používate Fedoru 21, mohli ste sa stretnúť s chybou pri pripojení na VPN. Chybové hlásenie hovorí, že nastal problém pri verifikácii certifikátu (VERIFY ERROR: depth=0, error=certificate signature failure...
) a to aj napriek tomu, že predchádzajúca verzia OS s nim nemála problém. Dôvod je ten, že Fedora 21 prestala podporovať VPN certifikáty používajúce algoritmus MD5, ktorý už dlhšiu dobu nie je považovaný za dostatočne bezpečný. Ak však musíte stále používať staršie certifikáty a nemate možnosť to nijak ovplyvniť, v tomto článku nájdete spôsob, ako toto obmedzenie (aspoň dočasne) obísť.
Daný problém je opísaný v hlásení v bugzille RedHatu, kde je uvedené aj riešenie: nastaviť premennú prostredia OPENSSL_ENABLE_MD5_VERIFY
. Podarilo sa mi tiež nájsť návod pre zapnutie podpory MD5 v NetworkManager, čo umožni pripájať sa na VPN priamo pomocou nastavení siete v Gnome. Jeho nedostatok je však v tom, že vyžaduje zmenu systémového konfiguračného súboru, ktorý bude prepísaný pri aktualizácii NetworkManageru.
Lepší spôsob spočíva vo vytvorení samostatného konfiguračného súboru, ktorý doplní štandardnú konfiguráciu. Potrebujete vytvoriť adresár /etc/systemd/system/NetworkManager.service.d/
a v ňom súbor md5vpn.conf
. Obsah súboru má byť takýto:
[Service]
Environment="OPENSSL_ENABLE_MD5_VERIFY=1 NSS_HASH_ALG_SUPPORT=+MD5"
Tento súbor doplní konfiguráciu uvedenú v /usr/lib/systemd/system/NetworkManager.service
. Podrobnejšie informácie o tom, ako je možné doplniť alebo upraviť štandardnú konfiguráciu služieb systemd je možné nájsť v manuálových stránkach.
Posledné, čo musíte spraviť je opätovné načítanie konfigurácie a reštartovanie služby NetworkManager pomocou príkazu systemctl
:
systemctl daemon-reload
systemctl restart NetworkManager.service
Nedávno som dostal do spravy existujúci projekt a jednou z prvých veci, ktoré som sa rozhodol urobiť bol prechod na použitie Gitu namiesto Subversion. Pritom som, samozrejme, potreboval konvertovať existujúcu históriu zmien. Projekt nebol veľký, takže celý proces bol pomerne jednoduchý. Svoje postrehy a riešenia problémov som zhrnul v tomto článku.
Celý proces konverzie sa skladal z dvoch krokov:
- prevodu repozitára pomocou git-svn a
- „upratania“ výsledného repozitára.
Príkaz git svn umožňuje používať Git ako klient pre Subversion. Je teda možné vytvoriť lokálny Git repozitár, ktorý bude kópiou Subversion repozitára a zmeny urobené v Gite je možné nahrať naspäť do Subversion.
Pritom musíte brať do úvahy to, že model ukladania histórie v Subversion je vo viacerých ohľadoch odlišný od Gitu. Napríklad, zatiaľ čo Git používa na označenie autorov revízii ich meno a e-mailovú adresu, Subversion zaznamenáva len ich prihlasovacie mena.
Na základný prevod som teda použil príkaz v tvare:
git svn clone -s -A authors.txt <svn-repository-url> \
<local-repository-path>
Prepínač -s
alebo --stdlayout
označuje to, že repozitár používa štandardné rozloženie s podadresármi trunk
, tags
a branches
a tie sa použijú pre správnu konverziu vetiev a značiek. Za prepínačom -A
alebo --authors-file=
je uvedený súbor s priradením mien a e-mailových adries autorov ich prihlasovacím menám v Subversion. Záznamy v tomto súbore sú v tváre:
Po tomto je repozitár konvertovaný a je možné začať jeho čistenie. Keďže git-svn zabezpečuje obojsmernú konverziu, do každej revízie sú zaznamenané informácie identifikujúce zodpovedajúcu revíziu v Subversion. Tie sú súčasťou komentára a začínajú reťazcom „git-svn-id:
“. Ja som neplánoval ďalej používať Subversion, takže tieto identifikátory boli pre mňa zbytočné. Na druhej strane som chcel zachovať pôvodné číslo revízie. Inšpirovaný článkom Treya Hunnera som ich nahradil za značky v tváre svn: <číslo revízíe>
pomocou príkazu:
git filter-branch -f --msg-filter \
'sed -E "s/^git-svn-id:.*@([0-9]*).*$/svn: \1/"'
Príkaz git filter-branch prechádza všetky revízie a upravuje ich komentáre pomocou zadaného programu. V dánom prípade je to jednoduché nahradenie textu pomocou regulárneho výrazu.
Pôvodné čísla revízii majú nielen historickú hodnotu. Subversion totiž podporuje aj revízie bez komentára a v danom projekte takýchto revízii bolo viacero. Tieto revízie teraz získali aspoň komentár s poradovým číslom v starom systéme.
JavaScript sa zo škaredého kačiatka medzi programovacími jazykmi stal jedným z najpopulárnejších jazykov súčasnosti. Začína sa teraz „epocha JavaScriptu“?
História
JavaScript bol vytvorený v roku 1995 v spoločnosti Netscape ako jazyk pre skriptovanie webových stránok na strane klienta. Ako spomína Brendan Eich, autor jazyka, pôvodne sa uvažovalo o zabudovaní do prehliadača jazyka Scheme. Ale počas vývoja bol niekoľko krát zmenený nielen názov jazyka ale tiež jeho koncept. Po dohode so Sun Microsystems sa rozhodlo, že jazyk sa bude volať JavaScript a bude sa podobať na Javu. Malo isť o akýsi doplňujúci jazyk pre Javu, určený pre menej skúsených programátorov.
JavaScript umožnil pridávať na stránky rôzne dynamické efekty, ako je napríklad kontrola správnosti vyplnenia formulárov na strane klienta alebo jednoduché animácie. Ale efekty vytvárané pomocou neho boli často rušivé a nevkusné.
Samotný jazyk tiež mál viacero nedostatkov. Navyše jeho implementácie v rôznych prehliadačoch neboli úplne rovnaké a v rozhraniach, pre manipuláciu s obsahom HTML stránky, boli značné rozdiely. Spolu to viedlo k zlej povesti JavaScriptu medzi programátormi.
Okolo roku 2005 sa situácia zmenila. S príchodom popularity AJAXu, technológie umožňujúcej asynchronnú komunikáciu klientského kódu so serverom, sa JavaScript začal dostávať do popredia. Vynikajúcimi ukážkami jeho možnosti boli služby Google Maps a GMail, ktoré predviedli možnosti interaktívnych webových aplikácií.
Popularita jazyka sa odvtedy zvyšovala. Vzniklo množstvo knižníc a rámcov (napríklad jQuery a Prototype), ktoré zakrývali rozdiely medzi rozhraniami v rôznych prehliadačoch a zjednodušovali mnohé operácie. To umožnilo jednoduchšie využívať bohaté možnosti poskytované JavaScriptom.
Najviac nepochopený programovací jazyk
Aj napriek rozšírenosti JavaScriptu, dlhu dobu nebolo tak veľa ľudí, ktorí ho poznali dobre. Douglas Crockford ho dokonca označil za najviac nepochopený programovací jazyk. Jedným z dôvodov je to, že napriek syntaktickej podobnosti s jazykmi Java a C++, JavaScript sa od nich výrazne líši.
JavaScript obsahuje množstvo prvkov, ktoré ho radia k funkcionálnym jazykom. Funkcie sú v ňom prvotriednymi objektmi a je možné s nimi manipulovať ako s hodnotami. Podporuje tiež uzávery (angl. closure) — možnosť definovať funkciu vo vnútri inej funkcie s tým, že vnútorná funkcia môže pristupovať k lokálnym premenným vonkajšej funkcie (a to aj po tom, čo vykonávanie vonkajšej funkcie bolo ukončené).
Zároveň je to objektovo-orientovaný jazyk, ale pritom je značne odlišný od bežne používaných objektových jazykov. Namiesto dedičnosti na základe tried, používa prototypovú dedičnosť. Objekt dedí spoločné vlastnosti z objektu prototypu, ktorý je pripojený ku konštruktoru triedy.
Tieto vlastnosti pridávajú jazyku značnú flexibilitu, ale na druhej strane odlišnosti spôsobujú problémy a nepochopenie. Programátori vzhľadom na slovo „Java“ v názve jazyka a podobnú syntax, očakávajú podobné vlastnosti jazyka a pritom narážajú na nečakané problémy.
JavaScript je všade
Napriek všetkým problémom sa JavaScript stáva stále populárnejším. Hlavným dôvodom je samozrejmé to, že je štandardným jazykom pre skriptovanie vo webových prehliadačoch. Pričom s príchodom skupiny štandardov HTML5 sa jeho možnosti v tejto oblasti značne rozširujú. JavaScript sa stál základom pre stále rastúce množstvo webových aplikácií, ktoré poskytujú čoraz bohatšie používateľské rozhranie v mnohých prípadoch už porovnateľné s bežnými grafickými aplikáciami.
JavaScript ale začal prenikať aj do iných oblastí, často spolu s HTML a CSS. Tieto technológie sa používajú napríklad na vytváranie widgetov pre Dashboard v MacOS. Je tiež hlavným jazykom pre vytváranie aplikácií pre mobilný operačný systém WebOS a jedným zo štandardných jazykov pre Metro — nové používateľské rozhranie pre Microsoft Windows. Je v ňom napísané aj nové rozhranie pre spúšťanie aplikácií a prepínanie medzi úlohami v prostredí Gnome 3. Nesmieme zabudnúť ani na to, že je populárnym jazykom pre rozšírovanie aplikácií.
A v neposlednom ráde JavaScript preniká aj na server. Tam sa v poslednom čase stáva populárnou platforma node.js. Jej výnimočnou vlastnosťou je originálny prístup k vstupno-výstupným operáciám a paralelizmu. Všetok kód napísaný programátorom v JavaScripte beží v jednom vlákne, ale na druhej strane všetky vstupno-výstupné operácie sú asynchrónne a vykonávané paralelne. Kód programu sa potom skladá z callbackov — funkcií ktoré sú volané po dokončení určitej operácie. Výhodou tohto prístupu je to, že zbavuje od obrovských problémov spojených s prácou s viacerými vláknami. Na druhej strane je programovanie s intenzívnym využívaním callbackov pomerne neobvyklé, ale pre programátorov v JavaScripte je tento štýl bežný, keďže sa používa aj na klientskej strane.
Ako je vidieť, JavaScript sa postupne stáva jedným z najrozšírenejších programovacích jazykov. Jeho oblasť použitia už nie je obmedzená len na webové prehliadače, ale preniká aj na servery, desktopy a mobily. Takýmto spôsobom má šancu dostať sa do pozície univerzálneho jazyka pre aplikačné programovanie. Túto pozíciu sa neúspešne snažila obsadiť Java.
Ako zabezpečiť, aby LaTeX správne rozdeľoval slová so spojovníkom v súlade s Pravidlami slovenského pravopisu.
Nedávno som písal text, ktorý obsahoval veľa slov obsahujúcich spojovník. Napríklad „doménovo-špecifický“ alebo „jazykovo-orientovaný“. Sú to dlhé slová, preto je často potrebné rozdeliť ich na dva riadky.
LaTeX, ktorý obvykle veľmi dobre rieši takúto úlohu, tento ráz ostal bezradný. Takéto slová vedel rozdeliť len na mieste spojovníka. Pri tom dokonca porušoval Pravidlá slovenského pravopisu, v ktorých sa uvádza: „Ak zložené slová písané so spojovníkom rozdeľujeme na mieste tohto rozdeľovacieho znamienka, spojovník píšeme na konci
prvého aj na začiatku nasledujúceho riadka …“
Ako teda vyriešiť tento problém? Po dlhom pátraní som zistil, že riešenie poskytuje balík babel zabezpečujúci podporu pre rôzne jazyky. V režime pre slovenčinu definuje špeciálnu kombináciu "=
, ktorá sa má uvádzať namiesto spojovníka. Takto označený spojovník sa potom správne rozdeľuje (podľa PSP) a navyše slovo sa môže rozdeliť aj na iných miestach.
Podrobnosti o spojovníkoch a iných príkazoch a špeciálnych kombináciách poskytovaných balíkom babel si môžete prečítať v jeho dokumentácii.