Skip to content

A fantastic system for correcting rebusrallys and generating nice presentations for the rallysexa.

Notifications You must be signed in to change notification settings

postinternetsyndrome/Das-Rebussystem

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Das Rebussystem, ett Hallonhack, baserat pÄ BasPers perlhack frÄn 1999

Skapat av Trial and Error 2011

Docker

Om du vill slippa installera lika mÄnga beroenden kan du köra i Docker. KrÀver dock exempelvis Docker Desktop.

Kör dÄ först följande i lÀmplig terminal bör att bygga en container, nÀr du stÄr i roten:

docker build -t rebusrally .

DÀrefter följande för att starta, mounta C:\github\Das-Rebussystem (Àndra till din uppsÀttning) till containerns html-mapp, och mappa port 8080 till containerns 8080-mapp.

docker run -dp 8080:8080 -v C:\github\Das-Rebussystem\:/var/www/html rebusrally

DÀrefter gÄr det att nÄ sidan pÄ localhost:8080, eller frÄn en annan dator pÄ samma nÀtverk via serverns IP-adress.

PÄ Docker i Windows kan det vara lite meckigt att fÄ till skrivrÀttigheterna pÄ mappen, dÄ den mountade volymen Àgs av 'root' istÀllet för 'nobody'. Detta kan man lösa igenom att endast bygga första delen av docker containern:

docker build --target rebusrally_root -t rebusrally_root .

med samma volymmount och logga in pÄ terminalen och köra:

chown -R nobody:nobody var/www/html

Efter det sÄ skall det gÄ utmÀrkt att köra den vanliga dockercontainern. Börja med att titta sÄ att rÀttningssidan laddar. Det kan vara bli fel vid installationen av PHP och Sqlite3.

Felsökning

Om förstasidan laddar men ingen av de andra sidorna sĂ„ kan du öppna containern i Docker. DĂ€r finns en log du kan titta pĂ„. Om du fĂ„r fel som sĂ€ger att Sqlite3 inte kan laddas sĂ„ kan det vara sĂ„ att php har uppgraderat till en ny version utan att uppdatera vĂ„rt installationsscript. Uselt av dem. Öppna terminalfönstret och skriv 'php --version' och se vilken version som gĂ€ller. Om det Ă€r en nyare version Ă€n den som finns i Dockerfile sĂ„ behöver du Ă€ndra pĂ„ den raden som lĂ€nkar in olika versioner av sqlite.

Installation

För att anvÀnda detta system behövs en webbserver med php-stöd samt php-sqlite och php-json. LÀgg hela skiten i lÀmplig katalog och sÀtt igÄng!

Översikt

Systemet bestĂ„r av tvĂ„ delar, presentation och rĂ€ttning. För starta presentationen öppna present.php i lĂ€mplig browser. Presentationen bestĂ„r av ett antal slides som genereras av en datafil som beskrivs nedan. Filen beskriver alla lag och grenar i rallyt. Presentationen blir roligare om det finns resultat för de olika grenarna, det Ă€r dĂ€r rĂ€ttningen kommer in. Öppna r.php och beskĂ„da alla tomma fĂ€lt dĂ€r prickar ska fyllas i.

Ditt rally

VÀlj ett namn pÄ rallyt, tex ht2011, och lÀgg in det i rebus_settings.php. All information om ett specifikt rally finns i en fil med namnet ht2011.php. Alla data som hör till rallyt finns i en katalog med namnet ht2011.

I ht2011.php filen finns en samling arrayer med data. Dessa Àr relativt sjÀlvförklarande, men hÀr Àr ÀndÄ en förklaring:

  • teams: En array som mappar lagnamn mot lagnummer och antal lagmedlemmar. Antal lagmedlemmar behöver endast sĂ€ttas till rĂ€tt antal om man vill anvĂ€nda prickberĂ€kning baserat pĂ„ antal lagmedlemmar. För att markera blĂ„bĂ€rslag och smĂ„bil osv kan man anvĂ€nda syntaxen:

'Lag namn' => array(, , ),

Flair en bild som lÀggs framför lagnamnet i grafer, för att anvÀnda tex markera en smÄbil kan man skriva '' och skapa en bild som heter small.png.

  • events: En ganska stor array som innehĂ„ller alla rebusar, pyssel och plock och övriga "grenar" som ger prickar, tex öppnade kuvert. De olika grenarnas kortnamn mappas mot deras fullstĂ€ndiga namn. Kortnamnens begynnelsebokstav mĂ„ste vara R för rebusar, S för stjĂ€lprebusar, P för pyssel, FP för fotoplock och TP för tallriksplock. Övriga grenar behöver inte heta nĂ„got speciellt.

  • parts: HĂ€r mappas rallyts etapper upp. Det Ă€r enligt denna gruppering som presentationen kommer att visas. Etapperna byggs upp av kortnamnen som definierades i events arrayen enligt ovan. LĂ€s nĂ€sta avsnitt för mer information!

  • maxPoints: Pyssel mappas mot antal maxprickar i det pysslet. Om maxprickar finns för ett pyssel visas det i presentationen och pĂ„ rĂ€ttningssidan.

  • info: HĂ€r kan man mappa in specialinformation per gren. Denna info visas pĂ„ rĂ€ttningssidan till stor hjĂ€lp för de stackars satar som rĂ€ttar. Man kan givetvis anvĂ€nda regexpar för att mappa. Man kan anvĂ€nda specialsyntaxen: för att markera texten röd om nĂ„got Ă€r exakt viktigt. ersĂ€tts med X multiplicerat med antalet lagmedlemmar.

Etapper

En etapp Àr antingen en enda gren som bara anges med kortnamnet eller sÄ bestÄr den av flera grenar, enligt formatet <etappnamn> => array(<grenar>). Efter att grenarna har visats generas automatisk en summeringsslide som heter 'Summering '. Om namnet pÄ etappen Àr 'Etapp X' och det finns en bild som heter etappX.xxx (xxx Àr jpg, png eller gif) kommer bilden att visas i en egen slide. PÄ samma sÀtt visas bilder för pyssel och plock om det finns en bild med namnet gren<grenkortnamn>.xxx eller bara <grenkortnamn>.xxx.

Det speciella grennamnet *sum* anvÀnds för att summera resten av grenarna i en array och presentera resultat i en sorterad lista. PÄ detta sÀtt kan man summera olika etapper, Àven med fördel rekursivt. Man kan alternativt anvÀnda *sumcomp*, effekten blir liknande som med *sum* men dessutom görs en animation som visar hur lagens position har Àndrats jÀmfört med den första sliden efter *sumcomp*.

För extra effekt kan man lÀgga in en bild (som fÄr titeln 'Lunch'):

*picture*Lunch:lunch.jpg

eller en speciallösning av en rebus:

*solution*S11puh

eller en event summering (första posten efter esum blir titeln):

array(*esum*, 'StjĂ€lpplock totalt', 'StjPlk', 'ÖppPlk')

En gren som presenteras som sorterad (kan anvÀnds för tex stilpris):

*sorted*Stil

Detta verkade nog mycket mer komplicerat Àn det Àr, utgÄ frÄn en gammal fil sÄ gÄr det lÀtt. AnvÀnd webserverns log för att hitta eventuella syntaxproblem.

HÀr Àr ett utdrag frÄn ht2011.php:

...

'Etapp 4' => array('R 4', 'P DOD', 'P HOP', 'TP 4', 'FP 4', 'Tid L'),
'Totalt efter Etapp 4' => array('*sumcomp*', 'Totalt efter Etapp 3', 'Etapp 4'),

'Lunch' => 
  array('*picture*Lunch:lunch.jpg',
        'P GRI', 'P TPS', 'P TAT', 'P HZZ', 'P TUP', 'ÖppPlk', 'StjPlk',
        array('*esum*', 'StjĂ€lpplock totalt', 'StjPlk', 'ÖppPlk'),
        'ÖppReb',
        'S 1', 'S 2', 'S 3', 'S 4', 'S 5', 'S 6', 'S 7',
        'S 8', 'S 9', 'S 10', 'S 11', 
        '*solution*S11puh', 'S 12',
        array('*esum*', 'StjÀlprebusar totalt',
              'ÖppReb', 'S 1', 'S 2', 'S 3', 'S 4',
              'S 5', 'S 6', 'S 7', 'S 8', 'S 9', 'S 10', 'S 11', 'S 12')),
'Totalt efter Lunch' => array('*sumcomp*', 'Totalt efter Etapp 4', 'Lunchsummering'),

...

HĂ€r definieras tvĂ„ etapper, nĂ€mligen 'Etapp 4' som innehĂ„ller en rebus och ett antal pyssel och plock. Även tidprickar för lunch visas hĂ€r. Eftersom etappen heter 'Etapp 4' visas Ă€ven bilden som heter etapp4.jpg. Efter att alla grenar har presenteras kommer en automatisk summeringslide som visar resultatet av etappen och sedan en sorterad av summering av hela rallyt sĂ„ lĂ„ngt ('Totalt efter Etapp 4').

Lunchetappen inleds med en bild, sedan ett antal pyssel och en summering av stjÀlpplock. Ett antal stjÀlprebusar presenteras inklusive en alternativ lösning, till slut en summering av stjÀlprebusarna och ett totalresult efter lunchen.

Rebusar

Rebusar ska ha filnamn Rn.txt, Hn.txt, Bn.txt, Xn.txt eller Sn.txt för vanliga rebusar, hjÀlprebusar, blÄbÀrsrebusar, bonusrebusar eller stjÀlprebusar, dÀr n Àr numret pÄ rebusen. För att göra alternativlösningar kan man byta ut siffran mot valfri text och sedan anvÀnda t.ex. 'solutionS' som beskrivs ovan.

BlÄbÀrs-rebusar visas bara om de Àr med i arrayen bluerebus. Exempel:

$bluerebus = array(2, 3, 4, 6, 7, 8);

Vill man inte ha nÄgra blÄbÀrsrebusar gör man en tom array.

I rebusfilerna kan man anvÀnda dessa taggar:

\bild <bild>
\orgbild <bild som inte skalas>
\rebus <rebus start>
\ort <rebussvar>
\upphovsman <signatur>
\av <signatur>
\op <rebus operation>

Allt annat blir vanlig text.

Det finns ett Python-script (check.py) för att kolla att rebusarna Àr korrekta.

RĂ€ttning

All inmatad information finns i en sqlite-databas som skapas i rallyts katalog om den inte finns. Filnamnet Àr db. För att rensa bort allt och börja med en ny databas Àr det bara att ta bort den filen. Se dock till att inte fler Àn en dator skapar upp en ny databas. Det tar en liten stund att skapa upp den, men nÀr den vÀl finns pÄ plats kan flera anvÀnda den samtidigt.

Glöm inte att sÀtta lÀmpliga rÀttigheter sÄ att webservern kan skriva i databsen. Oftast ska man göra:

chgrp www-data <katalog> <katalog>/db
chmod g+w <katalog> <katalog>/db

För att mata in resultat surfar man till r.php pÄ servern. DÀr möts man av en stor matris. Röd bakgrundsfÀrg betyder att ingen har matat in nÄgot i den cellen. Vitt betyder att fÀltet Àr inmatat. Grönt blir fÀltet om data matats in av nÄgon annan och du har fÄtt det infört i ditt fÀlt. Ajax!

Datat skickas till databasen nÀr man lÀmnar en cell. Data hÀmtas kontinuerligt frÄn databasen, kolumn för kolumn. Det Àr en halv sekund mellan kolumnuppdateringarna, sÄ det tar en stund att uppdatera hela matrisen.

Presentation

NÀr som helst kan man kika pÄ presentationen genom att surfa till present.php. Man navigerar mellan sidorna i presentationen genom att anvÀnda piltangenterna eller page up, page down. Vi anvÀnde en trÄdlös presenterarmojt som var hÄrdkodad till page up, page down.

Statisk presentation

För att generera en statisk presentation (ren html som inte behöver en databas eller php) anvÀnder man static.php frÄn kommandoraden, och pekar ut en mapp dÀr resultatet ska lÀggas.

Om du kör sidan i Docker, kan du köra följande:

docker exec -it <container-id> /bin/sh

I shell kör du sedan php static-php . för att generera den statiska sidan, html-filerna hamnar i rotmappen.

Remote

För att fÄ upp presentationen pÄ fler Àn en skÀrm samtidigt anvÀnder man inte VNC (som vi gjorde...). DÀremot kör man lÀmpligtvis med remote.php: sidan laddas pÄ den eller de datorer som Àr kopplade till projektorer etc. Sedan kör man den "vanliga" present.php pÄ en dator som dÄ styr vad som visas pÄ remote-datorerna.

Det finns ocksÄ ett script (stats.php) som visar hur mÄnga procent som Àr rÀttade.

Övrigt

I rebus_settings.php gÄr det att Àndra diverse instÀllningar, tex kan man fÄ lÀnkar till individuella sidor i presentationen genom att sÀtta index_links till 1.

Det mesta av det grafiska gÄr att justera med css. Just nu Àr det en css-mall som heter <rallynamn>.css.

About

A fantastic system for correcting rebusrallys and generating nice presentations for the rallysexa.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 79.3%
  • CSS 17.9%
  • Python 2.4%
  • Other 0.4%