Origins The evolution of • 1999 - second oldest Wiki still going the Tclers Wiki • wikit - written by Jean-Claude Wippler • minimal markup Jos Decoster - jos.decoster@gmail.com • Web + Tk renderer Steve Landers - steve@digitalsmarties.com • self-contained • Metakit database Transitions Issues • used for embedded documentation • page numbers • Metakit to TDBC + SQLite • searching • embedded web server to Wub • curation • searching from internal to Google to internal • spam • added markup • look and feel • styling • code maintenance
Opportunities Nikit • modern look • modern look based on Bootstrap • developer support • NGINX load balancing, proxying web server • 3rd party solutions for web, cache, security, search • Wikit running as an SCGI • spam mitigation • SQLite for database • curation support • CloudFlare for cache, security, acceleration • improved markup • Google search Nikit Architecture Database • SQLite3 CloudFlare Linode KVM • schema based on 2007 rewrite by Kevin and Colin Bootstrap Wikit TDBC NGINX JS/CSS writer SQLite • primary key is now page name (not integer) SCGI SCGI SCGI • writes serialized via single writer process Wikit Wikit Wikit reader reader reader • multiple readers Google search
Schema Database conversion • page name as primary key includes pages refs • removed empty pages pages_content users pages_content binary • old page-ids retained to support existing links • new pages not created until first edit changes changes blocked binary di ff s Page stats SCGI • single thread programming 44385 total number of pages text pages with date 13396 • multiprocessing binary pages with date 1634 • pool of pre-started scripts pages without date 27442 text pages without content 1891 • load balancing by nginx 22 missing • based on Tcllib’s cgi and http://wiki.tcl.tk/19760 skipped 28
NGINX CloudFlare • performance • scalable and performant - distributed cache + CDN • easy to configure - content optimization - DNS • large and growing user base • security • lots of info/help available - DDoS protection - web application firewall - SSL + IPV6 • analytics Styling • bootstrap based • responsive layout • adaptive menu on top
Changes Page Minor Edits • last edit per page • “Save as minor edit” button • minor edits hidden by default • not listed in default Changes page • minor edit / spam flags • listed in page history • geo-located region
Access Rules Roles • based on roles • read • per page • write (username supplied) • per area (e.g. admin pages, CSS templates) • trusted (authenticated via username / password) • gnome (edit not shown in default Changes) • admin Introspection Maintenance • user activity • rename pages • page history • delete pages (no trace left) • spam
Robot / Spam Detection • reCAPTCHA • bayesian filter • spam hidden by default • posting prevented from “spammy” IP addresses • trusted users can mark as spam or ham Markup Markup • full rewrite • document types • compatible with Wikit markup • special pages • optional • page templates - HTML • directives - Markdown • tables - TCL (in safe interp with CPU limit) • special characters
Document Types Special Pages <!DOCTYPE WIKIT> page content written in wikit markup ADMIN:WELCOME Welcome page, in wikit markup <!DOCTYPE MARKDOWN> page content written in markdown ADMIN:MOTD Message of the day, in HTML <!DOCTYPE HTMLPART> page content written in HTML ADMIN:ACCESSRULES Access rules <!DOCTYPE TCL> page generated by Tcl script ADMIN:PRIVACY Privacy statement <!DOCTYPE HTML> page written in HTML Page Templates Directives <<include:page>> include another page TEMPLATE:page Default page template <<redirect ?reason?>> page redirect to another page TEMPLATE:preview Page preview template <<motd>> display message of the day TEMPLATE:gsearch Google custom search template <<changes>> include 10 most recent changes TEMPLATE:content HTML page template <<categories>> page categories TEMPLATE:CSS Nikit specific CSS <<discussion>> show/hide part of page TEMPLATE:JS Nikit specific JS <<inlinehtml>> insert HTML within Wiki markup <<backrefs?:name?>> include page references for this or specified page
Tables Special Characters • one row per line <<br>> - header %|…|…|% <<nbsp>> - row |…|…| or &|…|…|& <<pipe>> • one field per line - start header row |% - start row + or |& - start field |
Cookie Consent • complies with EU cookie regulations • shows contents of ADMIN:PRIVACY
Recommend
More recommend