– !lukas naar tabel in DB
– !agenda
* kan per kanaal of per gebruiker zijn
(afhankelijk van waar het toevoegingsverzoek gemaakt werd)
* met verjaardagen (zie ook onder kopje ‘verjaardagen’)
– help op basis van authenticatie
Moet nog eventjes geïmplementeerd worden.
– Wiki rendering voor f00f (fiki?)
Een wiki is vaak een combinatie van een zeer simpele markup language en
de mogelijkheid om zonder autorisatie teksten aan te passen. Zowel
words/definitions als appreciates bevatten kenmerken van wiki's.
Wellicht is het een idee om bsubst() uit te breiden tot een soort van
wiki rendering engine?
Er zouden hooks kunnen komen die afhankelijk van het soort interface
(IRC, jabber, email, web?) de zaken kunnen renderen (bv. met hyperlinks
voor jabber en web, en kleurtjes in alles behalve email).
Welke mogelijkheden zijn er nog meer?
– Commando's detecteren met een regexp.
– Verder parallelliseren googlefight en srom.
Dat wil zeggen, voer de google queries parallel uit.
– Parse conflicts uit bereken.g halen dmv nette prioriteiten
– Vertaling en lokalisatie
- Languages noteren in lc[_CC[@modifier]] waarbij lc een ISO 639 language
code en CC een ISO 3166 country code is? Geen .charset want f00f kan
recoden.
→ uitstekend idee!
- Andere tabellen die language aware moeten worden:
* users
* channels
* words? Dit op de een of andere manier linken met phrases tabel?
- Galgje moet dictionary kiezen die het best bij language past.
- Zoeken naar vertalingen (analoog aan apropos).
- Language voorkeuren? !taal nl_NL;en_GB zou eerst de nl_NL taal proberen,
daarna de nl taal, daarna en_GB, daarna en, daarna pas opgeven.
Op die manier kun je ook overlays doen van partiële vertalingen.
→ uitstekend idee!
– Wijzigingen in databasestructuur automatiseren
Indien f00f geüpgraded wordt moeten ook wijzigingen in de database,
zoals nieuwe/verwijderde kolommen of tabellen of herschikkingen,
automatisch worden uitgevoerd.
Voorstel 1: een upgrade.pg bestand maken waar alleen dingen aan
toegevoegd worden op het eind. Tijdens een upgrade van f00f naar een
nieuwe revisie wordt een diff van de oude en nieuwe upgrade.pg gemaakt
en alle toegevoegde regels worden als invoer voor psql gebruikt.
Voorstel 1 wordt inmiddels gebruikt en zarq schijnt er blij mee te zijn.
Komen er nog andere voorstellen of houden we het hierbij?
Voorstel 2: in de database staat een versienummer (enkelvoudig getal) dat
aangeeft wat de versie van de database is. f00f zelf heeft een bepaalde
minimumeis aan wat die waarde moet zijn. Bij het opstarten moet-ie een
functie hebben die upgradinaten afhandelt, volgens de volgende structuur:
BEGIN;
while(gewenste_versie ≠ SELECT versie FROM databeest) {
switch(versie_van_database) {
case 543:
case 544:
CREATE TABLE foo;
SELECT * FROM users;
for(all users)
UPDATE user SET nick = rfc_1459_casemap(nick);
UPDATE databeest SET versie = 560;
break;
case 560:
DROP TABLE oink;
UPDATE databeest SET versie = 561;
break;
default:
abort("FTUK!");
}
}
COMMIT;
Al deze code uiteraard in de database-library.
Voordeel boven methode 1: f00f bepaalt wat-ie wil hebben zodra-ie
start en controleert daar ook op.
Voordeel boven methode 1: Raakt veel minder snel out of sync.
Voordeel boven methode 1: Is niet afhankelijk van diff-scripts.
Voordeel boven methode 1: Kan ook upgrades doen die ingewikkelde
controlflow nodig hebben.
Voordeel boven methode 1: Kan gebruik maken van librarycalls van f00f
zelf.
Nadeel t.o.v. methode 1: bloat in libf00fdb binary.
Onzinnig “nadeel”, volgens mij is dit niet meer dan een paar kB code,
valt volkomen in het niet bij die parsers en wordt vanzelf uitgeswapt.
→ Optie: aparte binary die upgrades doet. Doet wel voordeel 1 teniet.
→ Optie: ditzelfde concept in PL/PGSQL uitprogrammeren. Doet wel
voordeel 5 teniet.
→ Optie: libupgrade.so
– verjaardagen
Verjaardagen moeten opgevraagd kunnen worden en f00f moet mensen
natuurlijk feliciteren (met !taart).
– commentaar bij ++ en --
<Tonus> in $anderkanaal hebben we # comments bij ++'en en die comments
kun je dan weer opvragen met 'wkd' en 'wku' (why karma up), is dat wat
voor f00f?
– GNU C extensies
We hebben nog een aantal extensies niet gebruikt. Een paar interessante:
- statements en declaraties in expressies
- pointers naar labels
- hexadecimale floating point constantes
- dollartekens in identifiers
- transparant unions
Overigens hebben we al ongeveer de helft gebruikt van het lijstje in
“info gcc "C Extensions"”.
/o\