Autor blogu: Sergej Chodarev

twitter · github · 500px

Fedora 21 a VPN certifikáty používajúce MD5

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

Konverzia zo Subversion do Gitu

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:

  1. prevodu repozitára pomocou git-svn a
  2. „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:

svn-login = Meno <email>

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 — jazyk budúcnosti?

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 WebOS1 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.


  1. Treba poznamenať, že budúcnosť WebOS je dosť neistá po tom, čo spoločnosť HP (súčasný majiteľ firmy Palm kde WebOS vznikol) oznámila o ukončení vývoja zariadení s týmto systémom. Zdrojové kódy WebOS ale majú byť zverejnené pod open-source licenciou. 

LaTeX a slová so spojovníkom

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 …“

Nesprávne rozdeľovanie

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.

Správne rozdeľovanie

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.

Filozofia a programovanie

Programovanie je veľmi mladý odbor, ktorý vznikol v polovici minulého storočia. Jeho korene ale siahajú do skorších období, napríklad dvojková číselná sústava, ktorá je základom činnosti počítačov, bola plne vypracovaná Gottfriedom Leibnizom v 17. storočí.

Tak ako každá oblasť ľudského života aj programovanie je istým spôsobom spojené s filozofiou. V tejto práci sa pokúsim pozrieť na niektoré filozofické otázky, ktoré súvisia s programovaním.

Poznámka: Tento článok vznikol ako seminárna práca z predmetu Vybrané problémy filozofie.

Čo je to programovanie?

Na začiatok sa pokúsim stručne vysvetliť čo je to vlastne programovanie. Počítačový program je vlastne postupnosť príkazov, ktoré má vykonať počítač. V tejto postupnosti sa dajú tiež definovať podmienky, opakovanie príkazov, práca s pamäťou počítača a reakcie na rôzne udalosti, ako stlačenie klávesy. Programátor túto postupnosť zapisuje ako text v jednom z programovacích jazykov. Programovacie jazyky sa odlišujú rôznou úrovňou abstrakcie, teda či je jazyk bližší mysleniu človeka alebo tomu ako funguje počítač. Text, ktorý píše programátor sa nazýva zdrojový kód, a ten sa potom pomocou špeciálnych programov prekladá do tvaru, ktorý dokáže vykonávať počítač – do strojového kódu.

Filozofia programovania

Pojmom filozofia sa v súvislosti s programovaním často označujú určité základné princípy, ktorými sa programátori riadia. Mnohé programovacie jazyky a operačné systémy majú svoju filozofiu – princípy a hodnoty, na ktoré sa opierajú. Napríklad filozofia operačného systému UNIX sa podľa jedného z jeho autorov, Douga McIlroya, dá stručne vyjadriť tak:

Píšte programy, ktoré plnia jednu úlohu, ale ktoré ju plnia dobre. Píšte programy, ktoré budu spolupracovať s ostatnými programami. Píšte programy, ktoré spracovávajú textové prúdy, pretože tie sú univerzálnym rozhraním.

Iné technológie sa môžu opierať o iné princípy. Napríklad operačný systém Apple Macintosh stavia na prvé miesto jednoduchosť a estetickosť používateľského rozhrania, atď. Princípy, na ktorých je postavený operačný systém potom ovplyvňujú aj aplikácie, ktoré sú napísane pre tento systém. Podobne princípy programovacieho jazyka ovplyvňujú programy napísane v ňom (možno v ešte väčšej miere, keďže jazyk, v ktorom je myslenie vyjadrované, ovplyvňuje samotné myslenie).

Kultúry

Takéto princípy sú potom základom na vytváranie určitých kultúr okolo daného operačného systému, programovacieho jazyka alebo inej významnej technológie. Každá z týchto kultúr má svoje špecifické tradície a zvyky, dokonca môže mať svoj špecifický jazyk – slang, svoje legendy a hrdinov.

Jednou z takýchto programátorských kultúr je napríklad takzvaná „hackerská“ kultúra. Na chvíľu sa musím zastaviť pri slove „hacker“, ktoré sa v médiach používa v nesprávnom význame na označenie počítačového zločinca. Pôvodne, v počítačovej kultúre, toto slovo označovalo človeka, ktorého teší poznávanie detailov vnútorného fungovania programov, počítačov a počítačových sieti.

Hackerská kultúra vznikla a rozvíjala sa v 60-tých rokoch minulého storočia v laboratóriu umelej inteligencie MIT1 a na ďalších amerických univerzitách. Od vzniku počítačovej siete ARPANET (predchodca Internetu) bola táto kultúra s ňou veľmi tesne spojená. Počítačová sieť umožnila jednoduchú výmenu poznatkov a spoluprácu ľudí, ktorí sa nachádzali na vzdialených miestach.

Práve neohraničená výmena informácii sa stala jedným z hlavných princípov hackerskej kultúry. Jednou z príčin je asi to, že táto kultúra sa vyvíjala v prostredí univerzít, kde existuje tradícia pre takúto výmenu poznatkov.

Etika programovania

Tvorivosť môže byť príspevkom spoločnosti, ale len v prípade, že spoločnosť môže slobodne využívať jej výsledky.

Richard Stallman — GNU manifest

Pre niektorých ľudí sa voľna výmena informácii stala viac ako užitočným pracovným nástrojom. Pre nich možnosť študovať ako fungujú programy a upravovať ich podľa svojích potrieb je etickou otázkou. Podobne ako vo vede sú všetky poznatky verejné pre prospech celej spoločnosti aj zdrojové kódy programov by mali byť verejné a autori programov by nemalí obmedzovať používateľov. Toto je cieľom hnutia slobodného softvéru, ktorého zakladateľom je jeden z hackerov z MIT – Richard Matthew Stallman.

Príbeh tohto hnutia sa začal z jednej laserovej tlačiarne v laboratóriu umelej inteligencie MIT, v ktorej sa často zasekával papier. To spôsobovalo pracovníkom laboratória dosť veľké nepohodlie, ktoré by sa ale dalo pomerne jednoducho vyriešiť. Stačilo by upraviť program ovládajúci tlačiareň, aby upozorňoval používateľov tlačiarne na zaseknutý papier. Lenže ku tomuto programu neboli dodané zdrojové kódy, takže sa nedal upraviť. Richard Stallman našiel človeka na inej univerzite, ktorý mal zdrojové kódy. Ale ten mu ich odmietol dať, keďže podpísal so spoločnosťou vyrábajúcou tlačiarne dohodu o nezverejňovaní. Pre Richarda Stallmana to nebola len malá nepríjemnosť, toto odmietnutie bolo pre neho ako zrada nielen jeho ale celej spoločnosti. Dohoda, ktorá núti odmietnuť pomôcť kolegovi bola pre neho neetická.

Stallman potom založil hnutie slobodného softvéru a sformoval jeho filozofiu. Softvér je slobodný ak neobmedzuje slobodu jeho používateľov, konkrétnejšie, ak poskytuje štyri základné práva:

  1. Právo používať program na akýkoľvek účel.
  2. Právo študovať ako program funguje a upravovať ho podľa svojich potrieb. To vyžaduje prístup ku zdrojovým kódom.
  3. Právo distribuovať kópie programu a pomôcť tak svojím blížnym.
  4. Právo zlepšovať program a zverejniť zlepšenú verziu aby z toho mala prospech celá komunita.

Stallman založil projekt GNU, ktorého cieľom bolo vytvorenie slobodného operačného systému, a tiež napísal licenciu GNU GPL, ktorá mala chrániť slobodu používateľov. Jej základom je princíp nazývaný copyleft2, podľa ktorého, ak niekto použil kód slobodného programu, musí aj jeho upravená verzia byť pod tou istou licenciou. Tým sa má zabrániť tomu, aby niekto mohol zobrať slobodný softvér a ďalej ho šíriť už bez príslušných slobôd.

Softvérové spoločnosti sa ale snažia o čo najväčší zisk. Preto chcu čo najviac obmedziť práva používateľov. Tvrdia, že oni, ako autori, vlastnia softvér a preto majú ako jediní právo rozhodovať o jeho distribúcii a používaní.

Veľmi často počujeme o softvérovom „pirátstve“, o „krádeži“ softvéru. Softvér ale nie je hmotná vec, je to informácia v digitálnej podobe, ktorá sa dá jednoducho kopírovať a šíriť. Takže tým, že si niekto urobí kópiu niektorého programu, nikomu nič nezoberie. Zverejňované údaje o stratach spôsobovaných „pirátstvom“ sa zakladajú na predpoklade, že každý, kto si skopíroval program, by ho inak kúpil. To ale často nie je tak.

Tieto obmedzenia, ktoré sa snažia zaviesť mnohé softvérové spoločnosti sú neetické. Oni jednak zakazujú používateľovi zisťovať ako fungujú programy na jeho počítači a prispôsobovať si ich. Takže používateľ stráca kontrolu nad svojim počítačom a nad svojimi údajmi. Ale tiež zakazujú pomáhať iným ľuďom tým, že im poskytneme kópiu programu. Práva autora programu sa tu stavajú nad práva používateľov programu, nad pomoc blížnemu a nad prospech celej spoločnosti.

Stallman uvádza porovnanie programov s receptami. Podobne ako recepty aj programy predstavujú vlastne návod na vykonanie určitej činnosti. Je bežne, že ľudia si recepty medzi sebou vymieňajú, je to súčasť dobrých medziľudských vzťahov. Ľudia si tiež upravujú recepty podľa svojej chuti a vytvárajú nové recepty na základe starých. Predstavte si, keby vydavateľ knihy s receptami zakazoval povedať recept niekomu, kto si nekúpil knihu, alebo by zakazoval upravovať recept. Presne toto sa teraz deje s počítačovými programami – pomoc blížnemu sa označuje za krádež3.

Musím ešte vyvrátiť častý omyl, že hnutie slobodného softvéru je proti predaju programov. Tento omyl je spôsobený aj tým, že slovo „free“ v angličtine znamená okrem „slobodný“ aj „bezplatný“. Sloboda softvéru nie je o cene ale o právach používateľa. Aj keď zarábanie na slobodnom softvére je zložitejšie, mnohé spoločnosti ukázali, že je to možné a sú celkom úspešné.

Sloboda? Ktorá sloboda?

Niektorí ľudia nesúhlasia so Stallmanovym ponímaním slobody. Podľa nich obmedzenia, ktoré kladie licencia GNU GPL ju robia menej slobodnou ako niektoré iné licencie, ktoré umožňujú robiť s programom úplne čokoľvek, pokiaľ sa ponechá zmienka o pôvodných autoroch. V chápaní hnutia slobodného softvéru ale sloboda nie je absolútna, je obmedzená slobodou ďalších ľudí. Preto by nikto nemal právo slobodu, ktorú sam dostal, odobrať iným, teda šíriť modifikovaný slobodný program pod inou – neslobodnou licenciou. Takéto obmedzenie slobody jednotlivca je potrebné kvôli zachovaniu slobody všetkých.

Ako určitá opozícia voči hnutiu slobodného softvéru vzniklo hnutie Open Source (otvorených zdrojových kódov). Predstavitelia tohto hnutia sa snažia zdôrazňovať najmä praktické výhody slobodného softvéru, ako je vyššia kvalita a bezpečnosť programov, ktorá pramení z verejného vývoja a zapojenia množstva dobrovoľníkov, ktorí kontrolujú a zlepšujú kód programov. Hnutie open source ale nespomína etické hodnoty slobodného softvéru, keďže s nimi nie všetci súhlasia, a tak by to mohlo obmedziť rozširovanie takéhoto softvéru. Stallman ale oponuje, že na zaistenie slobody používateľov z dlhodobého hľadiska je nevyhnutné ich naučiť vážiť si svoju slobodu a bojovať za ňu.

Záver

Môže sa zdať, že témy, o ktorých som písal, sa týkajú iba programátorov a používateľov počítačov. Ale počítače sú dnes už natoľko bežnou súčasťou života, že ovplyvňujú život skoro každého. Okrem toho, otázky, ktorým sa venuje hnutie slobodného softvéru majú celospoločenský dosah. Toto hnutie sa totiž snaží postaviť dobre medziľudské vzťahy nad komerčné záujmy. V súčasnej ekonomickej situácii to môže naznačovať cestu, akou by sa malo vybrať svetové hospodárstvo – cestu, na ktorej najdôležitejší je človek, jeho sloboda a dobre medziľudské vzťahy.

Literatúra


  1. Massachusettský technologický inštitút 

  2. Je to slovná hračka – autorské právo sa v angličtine označuje pojmom copyright

  3. Podobná situácia je tiež s hudbou a filmom.