Absoluut Waardeloze Ideeën

Ik durf er flink wat om te verwedden dat degene die dit artikel lezen weleens een vreselijk idee hebben gehad. Ik neem hierbij aan dat mensen dit artikel lezen en dat is nog maar de vraag, maar dat is niet hetgene waar ik het vandaag over wil hebben.

Elke keer als ik in een internetdebat verdronken raak, komt dit idee weer boven drijven.

Een debatwebsite.

Juist, dat dus. Het idee erachter is dat je argumenten in een soort woordweb kan construeren. Een argument kan worden gekoppeld aan een standpunt en een weerlegging aan een argument. Het is niet het meest originele idee en een behoorlijk saaie. Toch, geen enkel idee is echt orgineel en ook saaie websites kunnen van populariteit genieten, dus met een goede executie zou het van middelmatig succes kunnen zijn.

Alleen is dat een leugen. Ik denk niet dat dit idee ooit succes van slagen zal hebben, omdat je altijd verliest. Als deze site flopt, dan heb je een geflopte site. Al die tijd die je er dan insteekt is kwijt en verloren. Het zou echter vele malen erger zijn als de site succesvol wordt. De debatten zouden uitlopen tot complottheorieën en ad hominems. Voor elke twintig actieve posters zou er minstens één moderator nodig zijn. Dit zou een slechte versie van Reddit zijn, uitsluitend bestaande uit politieke subreddits. Het zou zijn als Twitter.

Het probleem, fundamenteel, ligt bij het begrip ‘user generated content’. En ik ga nu proberen niet te klinken als een moeder die haar kind traag uitlegt welke kant van de tandenborstel hij moet gebruiken, dus ik ga geen definitie geven. Maar ik denk dat sociale media ons wel hebben geleerd dat het omgaan met een grote hoeveelheid user generated content een absolute nachtmerie is. Als je alleen al ziet hoe bedrijven zoals Google en Facebook het proberen en falen. Lees hierover het veel beter geschreven artikel van de Verge.

De strategie die enigszins lijkt te werken is het limiteren van de creativiteit van de gebruiker, je kan Mein Kampf immers niet delen er geen mogelijkheid is om tekst te delen (wat overigens niet betekent dat gebruikers er geen manier omheen vinden, tekst valt immers prima te fotograferen). Dit is de reden waarom de makers van spellen met een level-editor zich niet al te veel zorgen hoeven maken over moderatie.

Verder kan je de moderatie ook deligeren. Deze strategie wordt gedeeltelijk toegepast door Reddit en op een effectievere wijze in Whatsapp en Discord. Bij Whatsapp en Discord werkt dit vaak extra effectief, omdat je de personen met wie je chat ook daadwerkelijk kent en je dus niet zomaar alles kan zeggen wat in je opkomt. In Reddit kan je weggooi-account worden verbannen van de r/gardening subreddit, omdat je toevallig het favoriete kunstmestmerk van een moderator een ondergemiddelde review hebt gegeven. Dit is niets in vergelijking met een “wow, niet cool” van één van je vrienden.

Zelfs al heeft een beperkt aantal mensen de mogelijkheid om artikelen op je nieuwssite te zetten, of posts op je blog. Eén verbijsterend fout verslag van een belangerijk evenement kan je reputatie als objectieve nieuwsbron verpesten. Eén slechte poging tot een informatief en grappig arikel kan een zichzelf respecterend blog ruïneren.

Ze hadden mij nooit het wachtwoord moeten geven.

– Nathan

IBA verklaart Antiquiteiten van Bookweb en andere hilariteiten

Volgens de website bestaat de WebCie al sinds 1 januari 1970, dat is zo’n 25 jaar voor het uitvinden van het concept “website”! Volgens Git, ons versiebeheersysteem (wat vroeger SVN was (wat vroeger CVS was)), bestaat de code van de website al vanaf 1 juli 2000. Bookweb is het antiekste deel van de website en als je dit leest, is het nog steeds niet vervangen met een modern en superfancy nieuw boekenweb! Allemaal veranderingen in de vereniging kunnen we als jaarringen terugvinden in de code.

De huidige grote revisie van onze websitecode heet WhosWho4 omdat het de vierde editie is van ons ledenzoeksysteem. In het begin was WhosWho nog gewoon een collectie programmaatjes geschreven in de programmeertaal C, om de ledenadministratie bij te houden, maar ook al in code uit oktober 2000 wordt code geïntroduceerd die we nog altijd gebruiken. Hierbij zit bijvoorbeeld de functie tryPar, om parameters uit webrequests te lezen.

We hebben een overlevingsgrafiekje gemaakt, van welk percentage van de code gecommit op een bepaalde datum nog terug te vinden is in de huidige code.
survival_plot
Om eerlijk te zijn hebben we geen idee hoe al die plotselinge verspringingen zijn gebeurd, maar vermoedelijk hangt het samen met werken met branches (die in SVN neerkomen op alle code copy-pasten naar een andere map) en/of gegenereerde code. Je kunt ook interessante patronen ontdekken in de totale hoeveelheid regels code waar de website op gegeven momenten uit bestond. In deze grafiek zijn ook allemaal rare verspringingen te zien, die vermoedelijk met de verspringingen in de andere grafiek te maken hebben.
stack_plot

We hebben nog een paar interessante statistieken te geven over de Git-repository die we gebruiken bij de WebCie. Op het moment van schrijven (25 oktober 2017) bestaat de repository uit 15962 commits wat neerkomt op een gemiddelde van 2.5 per dag, of 4.9 per dag als je alleen de dagen meerekent waarop een commit gedaan is. De repository is 6324 dagen oud, waarvan op 3252 dagen een commit heeft plaatsgevonden. Over de gehele geschiedenis zijn er 1950084 regels toegevoegd en zijn er 1285980 regels verwijderd, waarmee je een huidig aantal van 664104 regels in de repo hebt. Niet geheel tegen de verwachtingen in zijn de maanden juli en augustus de minst actieve maanden; het aantal commits in deze maanden is samen goed voor slechts 8% van de totale commits.

In zulke oude code kom je nog wel eens “interessante” constructies tegen, zoals de onbegrijpelijke amalgamatie aan if-statements die in Bookweb draait als de boekencommissaris een rapport van de verkopen wil hebben en op de knop “Poep CSV-bestand uit” drukt. Leveranciers verwijder je niet, die worden “Weggeflikkerd”. Gaat er iets mis in deze brij, dan verschijnen er ook mooie foutmeldingen zoals “Whaa, het ging mis met $error, schop meteen een technisch persoon in zijn ballen!!!!” (waarbij $error staat voor dingen als 'WAAROM HEB IK GEEN TYPE?'). Inconsistenties in de administratie worden vermeld in de variabele $hedzerregels, vermoedelijk als belediging aan het adres van een zekere Hedzer die in het bestuur en WebCie zat. Als je de juiste rechten hebt, wordt de link naar deze pagina in het menu toegevoegd door de “Financieelmaaktnietuitmenucontenthook”. Als je als commissielid leden wilt inschrijven voor je activiteit maar je hebt geen leden geselecteerd wordt je door website op je vingers getikt met de melding “Je moet wel iemand selecteren Willem!”.

Groetjes, De ldap-check, de ldap-check, Kentucky Fried Chicken en de ldap-check

Ook gebruikers kunnen er wat van, met behulp van de doe-het-zelf sitebouwer de Publisher. Zo zit er in een mapje met verscheidene HTML-pagina’s uit 2006 ook de pagina kim, met als enige inhoud “Je bent lief!”, gemaakt door de toenmalige boekencommissaris, die naar verluidt een oogje had op de toenmalige commissaris intern. Verder zijn hier de pagina bedankt!, prachtige ouderwetse screenshots screenshots en archeologisch bewijs voor ledenpassen te vinden.

Toch kunnen we de mooiste lelijke constructies vinden in interne data. Het systeem dat voor Nederlandse tekst (waar beschikbaar) een Engelse tekst opzoekt, verwerkt opmerkingen die beginnen met VOC:, vernoemd naar de Vertaal- en Onderhoudscommissie van vier jaar terug, inmiddels vervangen door de Webredactie, die inmiddels is opgegaan in de PromoCie. Dit vertaalsysteem geeft soms de melding “FOUT: draai _(‘verfris’) in de wortel van je (mineraal?)bronnen”, als het wil dat je het scriptje “update” uitvoert in de map waar de source code te vinden is, ook wel “root” genoemd.

if(!$ster->checkUrl($entry->getName())) //Als dit fout gaat is er echt stront aan de knikker!

Mails correct versturen blijkt overigens ook niet zo makkelijk: omdat een mailprogramma anders omgaat met witregels dan een browser, dacht iemand slim te zijn en overbodige witruimte als volgt aan te pakken: neem alle juiste witruimte en vervang dat met de string “#SOEPMES#”, gooi alle andere witregels weg en vervang alle SOEPMESsen met de juiste witregels. En nu maar hopen dat niemand SOEPMES in zijn activiteitomschrijving vermeldt, zo zegt het bijbehorende commentaar.

Omdat er veel WebCieërs zijn die graag debuggen met de PHP-functie var_dump (een functie waarmee je meteen de inhoud van een variabele op het scherm weergeeft) wil het nog wel eens voor komen dat er een var_dump blijft staan in de code die gecommit wordt. Omdat er in het verleden kennelijk iemand was die nogal de neiging had dit erg vaak te doen zijn er maatregels genomen; iedere keer als je een var_dump probeert te committen krijg je de vriendelijke foutmelding “Eerst je debug code verwijderen, loeki.”.

Ben je dus een fan van oude code uitspitten om te snappen hoe het ooit had moeten werken, of juist iemand die in een avondje zulke fantastiche constructies uitdenkt, ook voor jou is het bij de WebCie altijd een feestje!

Ork ork ork, soep eet je met een…

#SOEPMES#.

IBA Verklaart Secure boot

Om te zorgen dat niet iedereen bij alle gegevens op jouw computer kan, is het belangrijk dat alle beveiligingslekken zijn dichtgetimmerd. Dit begint natuurlijk bij het vergrendelen van je computer met een veilig wachtwoord. Zo kan iemand die jouw computer heeft, niet zomaar inloggen en direct bij jouw gegevens. Maar iemand die een beetje handig is met computers laat zich hier niet door tegenhouden.
Een hacker, laten we haar Eve noemen, kan de harde schrijf uit je computer halen, en deze vervolgens aansluiten op haar eigen computer. Zo kan ze haar eigen computer gebruiken om de gegevens van je harde schrijf te halen, en hoeft ze dus niet in te kunnen loggen op jouw computer.

Om dit tegen te gaan kunnen moderne besturingssystemen je harde schrijf versleutelen. Dit werkt als volgt: de harde schrijf wordt opgedeeld in twee delen; één deel bevat je besturingssysteem, en het andere deel is versleuteld en bevat jouw gegevens. Het eerste wordt gelezen wanneer de computer wordt opgestart, en nadat je hebt ingelogd op de computer met je wachtwoord, wordt je wachtwoord gebruikt om de rest van de harde schrijf te kunnen ontsleutelen. Zo kan Eve, ook als ze jouw (computer met) harde schrijf heeft gestolen, nog steeds niet bij jouw gegevens. Eve weet immers jouw wachtwoord niet.

Natuurlijk is alleen dit niet genoeg om een volhardende hacker tegen te houden. Eve kan je harde schrijf ongemerkt stelen, de onversleutelde inhoud van je harde schrijf veranderen, en je harde schrijf dan stiekem weer terug in je computer zetten.  Zo kan Eve een keylogger installeren op jouw computer, die alles wat jij intypt onbeveiligd opslaat. Nadat jij een keer hebt ingelogd op je geïnfecteerde computer kan Eve jouw harde schrijf opnieuw stelen, waardoor ze zowel je versleutelde gegevens als jouw wachtwoord heeft. Natuurlijk is het onopvallend stelen en terugplaatsen van een harde schijf erg moeilijk, maar het is wel belangrijk om hier tegen te kunnen beschermen. Gelukkig bestaat er een manier om je ook hier tegen te beschermen. Ik zal in grote lijnen uitleggen hoe deze techniek werkt.

Het onversleutelde deel van de harde schrijf wordt digitaal ondertekend door middel van asymmetrische cryptografie. De producent van het besturingssysteem heeft een publieke sleutel en een geheime sleutel. De publieke sleutel wordt op een niet-herschrijfbare chip in het moederbord gezet. De gegevens op deze chip worden in de fabriek er op gezet, en kunnen daarna nooit meer veranderd worden. De fabrikant van het besturingssysteem gebruikt de geheime sleutel voor het maken van een digitale handtekening voor het besturingssysteem. Deze digitale handtekening wordt samen met het besturingssysteem op het niet-versleutelde deel van de harde schijf gezet.

Wanneer de computer nu opstart, controleert de firmware van het moederbord of het niet-versleutelde deel van de harde schijf nog overeenkomt met de handtekening. Alleen als dit het geval is, gaat de computer door met het opstarten van het besturingssysteem. Hierna wordt weer jouw wachtwoord gebruikt om de rest van de harde schijf te versleutelen. Nu weet je zeker dat Eve niks heeft kunnen installeren op jouw computer. Tenzij Eve je moederbord vervangt, of de geheime encryptiesleutel wordt gelekt, of er fouten zijn gemaakt in de moederbordfirmware.

IBA Verklaart latex

De naam latex werd oorspronkelijk alleen gebruikt voor een stroperige substantie uit de rubberboom of andere planten, zoals de paardenbloem. De plant maakt de latex aan als bescherming tegen insecten en is dus niet het plantensap of het hars van de plant. Deze latex uit de rubberboom werd al voor de komst van de Europeanen in Zuid-Amerika om kleding waterdicht te maken. Charles Marie de La Condamine bracht in de achttiende eeuw rubber, gemaakt van geconcentreerd latex, van Amerika naar Europa. In de achttiende eeuw was het een exotisch materiaal dat, hoewel het heel interessante eigenschappen had, weinig nuttige toepassingen had1. In de negentiende eeuw werd rubber gebruikt als ballon of om kieren te dichten. Pas aan het einde van de negentiende eeuw werd er op grotere schaal rubber geproduceerd in India, Congo en Brazilië en werden er ook banden van rubber gemaakt. Op plantages werd (en wordt nog steeds, hetzij voor een heel klein percentage van de rubberproductie) een gat in de bast van de rubberbomen gemaakt om de latex af te tappen. Het negentiende-eeuwse rubber bestond uit geconcentreerd latex en was ook veel zachter en van slechtere kwaliteit dan het rubber dat tegenwoordig geproduceerd wordt.

Omdat rubber vroeger van deze latex uit planten werd gemaakt, wordt ongevulkaniseerd rubber ook latex genoemd. Dit ongevulkaniseerde rubber is een stuk zachter dan het gevulkaniseerde rubber dat gebruikt wordt in autobanden, daarom kan ongevulkaniseerd ook gebruikt worden voor handschoenen: de latex handschoenen. In de tweede wereldoorlog werd er in de Verenigde Staten en Duitsland wegens tekorten door de oorlog onderzoek gedaan naar de verbetering van synthetisch rubber dat op dat moment nog van slechtere kwaliteit was dan natuurrubber. Tot in de jaren ’60 werd op grote schaal natuurrubber gebruikt, maar de kwaliteit van synthetisch rubber was al snel vergelijkbaar en zelfs beter dan natuurrubber, maar dan eens stuk goedkoper. Tegenwoordig wordt ook het rubber voor latexhandschoenen gesysnthesiteerd en komt er dus geen latex meer te pas bij het produceren van latex en wordt latex als synoniem voor ongevulkaniseerd rubber gebruikt.2

1 Het rubber kon wel als gum gebruikt worden, vandaar het woord rubber.
2 Dit stukje is ook niet geschreven met LaTeX.

IBA verklaart: plaatsing van figuren in LaTeX

De plaatsing van figuren in LaTeX en in tekstverwerkers in het algemeen is soms lastig te doorgronden. In MS Word kunnen afbeeldingen verspringen naar schijnbaar willekeurige plaatsen in de tekst. LaTeX gooit nog wel eens alle afbeeldingen achter elkaar aan het einde van het document. Hoe bepaalt LaTeX wat de beste positie is van afbeeldingen in de tekst en hoe kun je daar handig gebruik van maken?

LaTeX kan zelf de plaatsing van een afbeelding of tabel bepalen, als deze in een float omgeving is geplaatst. De floatomgeving voor afbeeldingen wordt aangeroepen met \begin{figure}. Zoals de naam suggereert, kunnen de floats nu drijven in de lettersoep.

Voordat ik het over het zetten van afbeeldingen zal hebben, is het wellicht handig om te kijken wat LaTeX doet bij het compileren van de code. Zodra de LaTeX-code wordt gecompileerd, doet LaTeX het zetwerk vanaf het begin van de tekst naar het einde van de tekst. Als LaTeX vindt dat een pagina goed is, beschouwt hij die pagina als `af’ en wordt er niet meer naar gekeken. Voor gewone tekst maakt dat niet uit, maar voor floats heeft dit tot praktisch gevolg dat een float alleen op dezelfde pagina of op een pagina na de aanroep kan worden gezet. Dus, als LaTeX een afbeelding in een floatomgeving vindt, terwijl hij net met pagina n bezig is, zal de afbeelding op pagina p ≥ n komen. Het kan dus gebeuren dat de afbeelding een paar pagina’s verder wordt geplaatst, terwijl de pagina voor de aanroep een betere plaats zou kunnen zijn, omdat dit idee simpelweg niet bij LaTeX opkomt.

Op welke plaats op de pagina zet LaTeX de afbeelding neer? Als optionele parameter in de aanroep van de floatomgeving (d.w.z: Na het commando: \begin{figure}{[<optionele parameters>]} kan de gebruiker aan de floatomgeving aangeven waar op de pagina de float mag staan:

  • t: bovenaan de pagina.
  • h: midden in de tekst
  • b: onderaan de pagina
  • p: op een pagina met alleen afbeeldingen

Omdat dit aangeeft waar de float mag staan, zal een float met [tb] overal op de pagina mogen worden gezet. Deze optionele parameters commuteren met elkaar, dus [tb] is hetzelfde als [bt].

Figuur 1: Zowel Tux als Windows passen samen bovenin de pagina.

\begin{figure}[t]
\includegraphics{tux}
\end{figure}
\begin{figure}[t]
\includegraphics{windows}
\end{figure}

Figuur 2: Omdat Tux vrij groot is, heeft Apple niet genoeg ruimte. Daarom wordt Apple doorgeschoven naar de volgende pagina.

\begin{figure}[t]
\includegraphics{tux}
\end{figure}
\begin{figure}[t]
\includegraphics{apple}
\end{figure}

Figuur 3: Tux wil graag onderaan de pagina staan, omdat zijn floatomgeving wordt aangeroepen met \begin{figure}[b]. Omdat Tux langer is dan 30% van de paginahoogte, kan Tux alleen op een `afbeeldingpagina’. Omdat plaatjes in de PDF altijd in dezelfde volgorde staan waarin ze ook in het LaTeX-document staan, neemt Tux Windows en Apple mee naar beneden, terwijl er ruimte genoeg is voor Windows en Apple op eerdere pagina’s.

Wat is boven en wat is beneden? LaTeX beschouwt de bovenste 70% van de pagina als boven en de onderste 30% als beneden. (Deze waarden kunnen worden aangepast met \renewcommand{\topfraction}{<waarde>} en \renewcommand{\bottomfraction}{<waarde>} voor \begin{document}. Het is meestal niet nodig deze waarden aan te passen.) Dit betekent dat een plaatje, als het hoger is dan 30% van de paginahoogte, niet onderaan de pagina geplaatst kan worden. In het voorbeeld hiernaast is te zien hoe dit in zijn werk gaat. In Figuur 1 en 2 is te zien hoe LaTeX in normale omstandigheden werkt. Het plaatsen gaat echter mis in Figuur 3, omdat LaTeX Tux niet onderaan de pagina kan zetten. De plaatjes staan in dezelfde volgorde in de PDF, zoals LaTeX ze heeft aangetroffen in het LaTeX-bestand, dus Windows en Apple zullen pas na Tux gezet worden. Omdat geen van de afbeeldingen een [p] heeft meegekregen, kan er geen ‘afbeeldingpagina’ gemaakt worden tussen pagina  1 en pagina 2. Tux en alle afbeeldingen die hij heeft meegesleept, worden onderaan het document geplaatst.

Naar welk van de parameters tussen blokhaken kijkt LaTeX het eerst? Als LaTeX een float wil plaatsen, kijkt het dus naar de parameters [tbhp]. Eerst kijkt LaTeX of er een h in het rijtje staat, want de snelste methode om een afbeelding te plaatsen is natuurlijk om het plaatje meteen tussen de tekst in te zetten. De afbeelding zal niet meer verplaatsen, omdat LaTeX al geplaatste tekst of afbeeldingen niet meer verandert. Mocht het niet kunnen om het plaatje meteen te plaatsten, zal er daarna gekeken worden of er ook een t is aangegeven, omdat LaTeX het liefst plaatjes bovenaan de pagina heeft. Als het niet mogelijk is om een plaatje bovenaan de pagina te zetten (de floats die bovenaan staan, nemen niet meer dan 70% van de ruimte in en het aantal bovenin geplaatste afbeeldingen is niet hoger dan 2), zal gekeken worden of er beneden nog ruimte is. Als nergens aan voldaan kan worden, of alleen de optie p is aangegeven, zal LaTeX het plaatje in de wachtrij zetten. Zodra er een nieuwe pagina wordt gemaakt, zal de compiler weer kijken of het plaatje past. Dit zal in de meeste gevallen werken, omdat LaTeX nu de hele pagina ter beschikking heeft (dit gebeurt in Figuur 3). Als er meerdere floats in de wachtrij staan, zal LaTeX bij een nieuwe pagina proberen in één keer de rij te legen door een `afbeeldingpagina’ te maken. Voor zo een pagina gelden geen restricties meer over of een afbeelding boven of onder geplaatst moet worden of het aantal afbeeldingen dat maximaal geplaatst kan worden.

Tot slot nog wat praktische tips:

Bij het maken van een float kunnen de restricties wat betreft het aantal afbeeldingen per pagina worden uitgezet door een ! tussen de blokhaken te zetten. Om een plaatje op dezelfde plaats in de PDF te krijgen als in het TeX-bestand is [h!] mee te geven aan \begin{figure}. Er kan ook grover geschut in worden gezet: [H] zet altijd de float op de plaats neer als aangegeven en maakt zo nodig een nieuwe pagina aan. Hiervoor is de float package nodig.

Om te voorkomen dat floats ergens heen drijven naar plaatsen waar ze niet horen, kan de placeins package gebruikt worden. Deze package geeft het commando \FloatBarrier. Zoals de naam al suggereert, kunnen floats niet voorbij dit commando en zullen de altijd ervoor geplaatst worden. Dit is handig om te voorkomen dat verdwaalde floats van vorige hoofdstukken nog ronddrijven verderop in het document.

De voorgaande tekst ging alleen over de plaatsing van afbeeldingen die de hele breedte van het document in beslag nemen. Als de afbeelding klein is vergeleken met de paginabreedte, kun je ook de wrapfig-package gebruiken. De wrapfig-package geeft een wrapfigure-omgeving waarmee door tekst omringde afbeeldingen gemaakt kunnen worden. Natuurlijk zal LaTeX dit plaatje dicht bij de aanroep plaatsen.

Wellicht ten overvloedde: de manier van plaatsten zorgt ervoor dat afbeeldingen pas gezet worden, nadat ze zijn aangeroepen in de code. Ook worden alle floats geplaatst op volgorde waarin ze in de code voorkomen. Wees dus niet te restrictief: een float met alleen [b], zal niet altijd op een goede manier geplaatst kunnen worden en kan hierdoor andere floats wegduwen.

Dit artikel is eerder verschenen in de Vakidioot 1617-3 Figuur

IBA verklaart glob

Oh my Glob!

Met globben kun je heel efficiënt bestanden in de terminal selecteren, zodat je nog minder hoeft in te typen en wordt aangezien voor tovenaar door de mindere gebruikers. Welke doorgewinterde LaTeXgebruiker is het ook niet zat om na elke druk op de compilatieknop door tientallen meukbestanden te navigeren? De macht van het globben geeft je eindelijk de mogelijkheid een einde maken aan al die troep. Bovendien is het woord “glob” ook gewoon leuk om te zeggen.

Deze commando’s zijn allemaal getest in bash versie 4.2.46, wat je per default tegenkomt als je op het A–Eskwadraatsysteem een terminal opstart. Het voorbeeldmapje kun je op het A–Eskwadraatsysteem terugvinden in /home/mensjes/timb/troep/glob.

De allersimpelste glob is *, wat simpelweg alle zichtbare dingen in de huidige map betekent. Dat is voor ons meteen ook een beetje nutteloos, want rm * gooit ook al je niet-meukbestanden weg.

$ echo *
boot kat klok raket rat submapje zat

Gelukkig kun je de onderdelen die in de bestandsnaam moeten voorkomen ook aan * vastplakken, zodat je rm *.aux kunt gebruiken om alle .aux-meukbestanden die LaTeX maakt, weg te gooien. Je mag ook meerdere globs en verplichte stukken tegelijk gebruiken.

$ echo k*
kat klok


$ echo *k*t
kat raket

Daarnaast zijn er globs die maar één letter aangeven. Op de plek van ? mag elk karakter staan, maar niet meer dan één.

$ echo ?at
kat rat zat

Om een keuze tussen karakters aan te geven, is er de glob [...]. Tussen de haakjes zet je de karakters die je wilt hebben. Om niet een heel alfabet te hoeven typen, kun je ook een bereik aangeven met een streepje, zoals [a-z] voor alle kleine letters. Je hebt ook [^...] om juist alles behalve de inhoud van de haakjes te krijgen zoals:

$ echo [kr]at
kat rat
$ echo [p-z]at
rat zat
$ echo [^r]at
kat zat

Uitgebreidere globs

Om geavanceerdere trucs uit te halen, moet je uitgebreidere globs aanzetten. Het commando om dat te doen is shopt -s extglob globstar.Als je uit meerdere opties wilt kiezen, geeft extglob je de glob @(...). Zet de opties met een | ertussen in de haakjes. Aangeven hoe vaak iets herhaalt kan met ?(...) voor 0 of 1 keer, *(...) voor 0 of meer en +(...) voor 1 of meer. Tenslotte heb je nog !(...) die juist alles behalve de inhoud van de haakjes kiest.

$ echo ra@(ket|t)
raket rat
$ echo !(*at)
boot klok raket submapje

Het globstar-gedeelte slaat op de glob **, die niet alleen de inhoud van de huidige map kiest, maar ook alle submappen.

$ echo **
boot kat klok raket rat submapje submapje/ondergroep submapje/onderzeeboot submapje/verwisseling zat

Deze **-globs kun je niet zomaar uitbreiden met karakters erna, anders begrijpt bash het niet als glob. Gelukkig kun met een / ertussen toch verplichte onderdelen toevoegen. Let op: deze slash betekent niet dat de glob altijd naar een submap gaat.

$ echo **boot
-bash: no match: **boot
$ echo **/*boot
boot submapje/onderzeeboot

Creatief misbruik maken van glob

Je moet goed opletten dat globben ingebouwd is in bash, en een programma dus niet weet of zijn invoer ingetypt of geglobd is. Zo kunnen bestandsnamen per ongeluk opeens opties worden, wat ervoor zorgt dat je commando’s per ongeluk iets onverwachts gaan doen. Normaal weigert rm om mappen weg te gooien, tenzij je het de optie -r geeft.

$ rm submapje
rm: cannot remove `submapje': Is a directory
$ rm -r submapje
$

Als een of andere onverlaat het bestand -r aanmaakt, ziet rm * na globben uit als rm -r boot kat klok raket rat submapje zat, en gaan je mappen er dus toch aan.

$ touch -- -r
$ rm *
$ echo *
-bash: no match: *

Een andere populaire bron van bugs is de combinatie van glob en variabelen. Als je een variabele en een glob combineert, wordt eerst de waarde van de variabele ingevuld, en dan de glob uitgebreid.
Als je variabele geen waarde heeft (bijvoorbeeld door een typfout) kan je glob plots /* worden, wat als argument voor bijvoorbeeld rm nogal spectaculaire resultaten oplevert.

$ MAPJE=submapje echo $AMPJE/*
/archief /bin /boot /dev /etc /home /lib /lib64 /lost+found /media /mnt /opt /proc /rhev /root /run /sbin /scratch /srv /sys /tmp /usr /var

Aan de andere kant kun je misbruik van globben handig gebruiken om je bestanden juist te beschermen: als je rm de optie -I meegeeft, vraagt het commando eerst of je het wel zeker weet. Zet je dus een bestand genaamd -I in je belangrijke mappen, heb je een klein beetje extra bescherming tegen je eigen stommiteiten.

IBA verklaart Benamite

Je zult er waarschijnlijk nog nooit van gehoord hebben: Benamite. Toch gebruik je het iedere keer weer als je gebruik maakt van de A–Eskwadraatwebsite. Benamite is het virtuele filesystem van de website. Veel websites gebruiken een fysieke filesystem als structuur van de website. Dit houdt in dat er ergens op een server een mapje moet bestaan. Als je op de website naar bijvoorbeeld www.website.nl/index.html wilt gaan, betekent dat dat er in het mapje op de server een bestand index.html moet bestaan en dat de webserver ook nog de juiste rechten moet hebben om dat bestand te kunnen lezen. Je kunt wel begrijpen dat, als je website uit veel verschillende pagina’s bestaat, je dus heel veel verschillende bestanden nodig hebt, wat nogal veel overhead geeft. De A–Eskwadraatwebsite heeft op dit moment rond de 4000 verschillende unieke pagina’s waarbij de pagina’s die een variabele url hebben, zoals bijvoorbeeld a-eskwadraat.nl/Leden/5794, niet meegenomen zijn. Om de overhead te besparen is er ooit jaren geleden (in 2006 al) Benamite gemaakt.

Hoe werkt Benamite dan? Stel, je gaat naar de pagina https://www.a-eskwadraat.nl/Service/Bugweb/. We vergeten het https://www.a-eskwadraat.nl/-gedeelte want dat geeft alleen het domein aan waarmee de server gevonden kan worden en heeft voor Benamite geen verdere functie. We houden dus de uri /Service/Bugweb/ over. Deze gaan we door Benamite halen. Benamite gaat als eerste de eerste '/' bekijken, wat de root is van de site. Hij kijkt of het wel bestaat in Benamite, of het een map is en of de huidige gebruiker er wel bij mag. Als dit allemaal goed is, gaat Benamite door naar het volgende gedeelte: 'Service/'. Ook hier kijkt hij weer of het bestaat, etc, etc. Op die manier werkt Benamite de delen van de uri een voor een af. Eenmaal bij het laatste aangekomen, zijn er een aantal opties. Als het laatste element een bestand is in Benamite, dan opent hij het bestand. Als het een map betreft, probeert hij het bestand 'index.html' in die map te openen (de naamgeving is door de jaren heen niet veranderd en eigenlijk niet meer van toepassing, want we hebben nauwelijks nog html-bestanden op de website). Als dat bestand niet bestaat, stuurt hij een foutmelding naar de gebruiker.

Dan is er ook nog de speciale ‘variabele entry’. Dit zorgt ervoor dat je bijvoorbeeld elk lid kan bekijken op /Leden/*lidnr*. Een variabele entry is een map met wat extra’s: je kan eisen van de variabele entry wat het moet zijn, bijvoorbeeld een activiteit-id, een commissie-id etc en of het zichtbaar is voor de huidige gebruiker. Vervolgens accepteert de variabele entry alles wat hieraan voldoet. Wat gebeurt er dan, als je dus naar /Leden/5794/ gaat? Benamite handelt eerst /Leden/ af en als dit allemaal goed gaat, komt hij bij het gedeelte 5794/ uit. Er staat in de map /Leden/ geen map of bestand 5794, maar wel een variabele entry. Wat Benamite nu gaat doen, is: hij gaat kijken wat de variabele entry moet zijn. In dit geval moet de variabele entry een lidnummer zijn van een bestaand lid en moet degene die ingelogd is, het lid kunnen zien. Als dit allemaal goed is gegaan, stuurt Benamite het door naar het volgende gedeelte. In alle bestanden die in de map of submappen van de variabele entry staan kunnen we vervolgens met speciale php-functies alle variabele entries uit de url halen en op die manier de juiste objecten erbij halen.

Bestanden in Benamite kunnen verschillende types zijn en dus verschillende functies hebben. Het meest standaard is het normale bestand, waarmee we functies in php-bestanden kunnen aanroepen om op die manier een pagina te maken. Daarnaast hebben we geüploade bestanden, dit zijn bestanden die naar de site zijn geüpload, zoals bijvoorbeeld pdf’jes, afbeeldingen etc. Dan zijn er ook nog Publisherbestanden. Dit zijn bestanden waarvan de html wordt opgeslagen, zodat die later door gebruikers van de website aangepast kan worden en je dus niet in de code van de website hoeft te hekken om de html aan te passen. Dit wordt bijvoorbeeld gebruikt voor pagina’s zoals /Vereniging/Kamer/. Benamite heeft ook links, als een uri eindigt in een link, stuurt Benamite je meteen door naar waar de link naar toe linkt. Als laatste is er nog de php-haak. Dit is een soort midden tussen een normaal bestand en een variabele entry in. Bij een php-haak wordt de rest van de url die nog over is en niet door benamite verwerkt is, rechtstreeks aan de php-haak doorgegeven die er dan vervolgens mee kan doen wat ie wil. Php-haken werden vroeger voornamelijk gebruikt bij de menuutjes; zo werd bijvoorbeeld ‘Open de boekverkoop’, ‘Sluit de boekverkoop’ als de boekverkoop al geopend was. Tegenwoordig worden php-haken nauwelijks meer gebruikt op de A–Eskwadraatwebsite.

Al met al maakt Benamite het beheren van onze fantastische website een stuk eenvoudiger en hopelijk kijk ook jij nu weer anders tegen de website aan dan dat je voorheen deed. Lijkt het je nou leuk om nog meer over Benamite te weten te komen of wil je graag zelf knutselen aan de A–Eskwadraatwebsite, kom dan vooral een keertje langs op onze wekelijkse Werkfeestjes op de dinsdagavond in de A–Eskwadraatwerkkamer!

IBA Verklaart thuiswerken

Het nieuwe collegejaar staat voor de deur, dat betekent dat je binnenkort niet alleen voor je opleiding aan de slag gaat maar ook weer voor A–Eskwadraat! Dikke kans dat je in de zomervakantie allerlei dingen vergeten bent dus om je geheugen op te frissen is hier een korte handleiding thuiswerken.

Mail
Misschien wel het belangrijkste onderdeel van je commissiewerk: email. Er zijn twee manieren om commissiemail te regelen: via Gmail en via de A–Eskwadraat webmail (mail.a-eskwadraat.nl). Sysop heeft voor de beide scenario’s handleidingen geschreven.

Handleiding Webmail
→ Handleiding Gmail

Bestanden
De makkelijkste manier om vanuit Windows bij je bestanden te komen is via WinSCP. Je kunt WinSCP hier downloaden. Om verbinding te maken met A–Eskwadraat tik je in het startscherm je gegevens in (zie plaatje), klik je op ‘Save’ en vervolgens op ‘Login’. WinSCP geeft een waarschuwing omdat je voor het eerst inlogt, deze mag je negeren door op ‘Yes’ te klikken.

winscp
Startscherm WinSCP
WinSCP ingelogd
WinSCP ingelogd

Als alles goed gaat zou je iets moeten zien dat sterk lijkt op het bovenstaande plaatje. Aan de rechterkant van het scherm staan je A–Eskwadraatbestanden en aan de linkerkant de bestanden van je eigen computer. Zoals je ziet zit ik in de map cies en kan ik van daaruit eenvoudig naar de bestanden van mijn commissies.

Om vanuit macOS bij je bestanden te komen kun je bijvoorbeeld FileZilla gebruiken, dat werkt op ongeveer dezelfde manier als WinSCP. Linuxgebruikers hebben geen extra software nodig, de meeste filemanagers kunnen wel overweg met sftp.

SSH
Het is ook mogelijk om vanuit huis iets te doen op een computer bij A–Eskwadraat, dit doe je met SSH. Uitgebreide informatie over ssh is te vinden in het artikel IBA Verklaart ssh, hieronder volgen wat korte instructies.

Vanaf macOS of Linux is ssh eenvoudig: je opent een terminal, typt ssh -X gebruikersnaam@a-eskwadraat.nl en je bent binnen. Je kunt dan precies hetzelfde als in een terminal op een werkplek in de werkkamer. De optie -X zorgt er voor dat je ook grafische programma’s zoals nautilus of evince kan opstarten. Op Windows heb je extra programma’s nodig: PuTTY (kies voor putty.exe onder “For Windows on Intel x86”) en optioneel Xming. Xming heb je alleen nodig als je grafische programma’s wil gebruiken.

PuTTY werkt heel simpel, je vult in het beginscherm onder ‘Host Name’ a-eskwadraat.nl in en klikt op ‘Open’. Als je voor het eerst inlogt wordt er een waarschuwing gegeven, deze mag je gewoon negeren. Vul vervolgens je gebruikersnaam en wachtwoord in en zie daar, een terminal.

X forwarding in PuTTY
X forwarding in PuTTY

Om in Windows een grafisch programma te openen moet je Xming downloaden en installeren. Start Xming en vervolgens PuTTY, navigeer in PuTTY naar “Connection” -> “SSH” -> “X11” (zie plaatje) en vink “Enable X11 Forwarding” aan. Ga weer terug naar “Session” (het startscherm) en verbind met A–Eskwadraat. Je kunt nu gebruik maken van grafische programma’s. Protip: zet een & achter de naam van een grafisch programma om je terminal open te houden.

PuTTY en Xming
PuTTY en Xming

LaTeX
Volg de instructies van de TeXniCie om thuis aan de slag te kunnen met de LaTeX-packages van A–Eskwadraat.

Kom je ergens niet uit? Laat hieronder een reactie achter (inloggen met je A–Eskwadraataccount) of neem contact op met sysop of de TeXniCie.

IBA Verklaart Multiseat

Als je wel eens in de werkkamer van A–Eskwadraat bent geweest, heb je misschien wel gezien dat er 12 (op moment van schrijven staan er tijdelijk 8) werkplekken zijn, maar dat ze aangesloten zijn op slechts 3 computers. Dit wordt een multiseat opstelling genoemd. Toen vroeger de eerste computers bij bedrijven en universiteiten in gebruik werden genomen, waren computers nog zo groot dat ze een hele kamer innamen, en was het dus nog niet mogelijk om een aparte computer per gebruiker te hebben. Tegenwoordig is dat natuurlijk geen probleem meer, maar er zijn nog steeds goede redenen om een multiseat opstelling te hebben.

Iedere computer heeft een hoeveelheid geheugen. Maar waarschijnlijk gebruik je meestal een stuk minder geheugen dan dat je computer tot zijn beschikking heeft. Dit geheugen is voor het geval dat je een keer zwaardere software of veel programma’s tegelijk wilt gebruiken. Wanneer je vier werkplekken op één computer hebt, hoef je vaak minder geheugen te hebben dan dat vier losse computers zouden hebben, omdat niet alle vier de gebruikers tegelijk zware software willen draaien. Ditzelfde argument gaat bijvoorbeeld ook op voor hoe krachtig de processor moet zijn, en hierdoor kan het goedkoper en energiezuiniger zijn om één krachtige computer voor 4 werkplekken te kopen dan om 4 gewone losse computers te kopen.

Een ander voordeel is dat er door zo een opstelling minder onderhoud nodig is per werkplek. Je hoeft maar één keer software te installeren of instellingen aan te passen in plaats van 4 keer, dus dit kan heel veel werk besparen. Bij grotere organisaties zoals de Universiteit Utrecht maakt dit minder verschil, want daar zijn de update- en installatieprocessen grotendeels geautomatiseerd.

Besturingssystemen zoals Linux hebben de mogelijkheid om meerdere werkplekken aan te sluiten standaard meegeleverd. Als je dit op een computer met Linux leest, zou je kunnen proberen om control en alt ingedrukt te houden, en de toetsen F1 tot en met F8 een voor een in te drukken. Over het algemeen kom je met ctrl+alt+F7 terug waar je normaal bent. Hiermee wissel je standaard tussen zogehete virtual terminals, maar het is mogelijk om hier een aparte grafische omgeving te starten. Overigens zal je niet op alle Linux computers zomaar naar de virtuele terminals kunnen wisselen. Op de computers in de werkkamer staat het natuurlijk uit, zodat je niet per ongeluk het scherm van je buurman voor je krijgt.

Als je een Linux computer tot je beschikking hebt en zelf eens wilt proberen om een tweede grafische omgeving te starten, kan je met ctrl+alt+F1 naar een virtuele terminal gaan, daar inloggen en het volgende commando uit te voeren:

startx -- :1

Als het goed is kom je nu vanzelf bij je nieuwe inlogscherm terecht. Je kunt heen en weer gaan met control, alt en de F-toetsen. Om de tweede grafische omgeving weer te stoppen, kun je het nieuwste Xorg proces (degene met de hoogste process id) stoppen met de taskmanager, maar pas op dat je geen niet-opgeslagen werk open hebt staan in de nieuwe omgeving.

Om de nieuwe grafische omgeving echte werkplek te maken, heb je natuurlijk een extra scherm, toetsenbord en muis nodig. Helaas is het niet zo simpel dat je de extra apparatuur alleen hoeft aan te sluiten, maar gelukkig zijn er meerdere goede handleidingen op internet, zoals bijvoorbeeld deze (https://wiki.archlinux.org/index.php/xorg_multiseat), maar je Linux-distributie naar keuze heeft wellicht een eigen handleiding.

Zeker als je niet zo ervaren met Linux bent, is het een goed idee een backup te maken van je belangrijke bestanden voordat je dit probeert, omdat als je grafische interface interface niet meer werkt, je niet zo makkelijk het internet kan raadplegen om te vinden hoe je alles weer herstelt.