Compare commits

..

1 commit
master ... sync

Author SHA1 Message Date
Niko Strijbol f33cc0aafd
[WIP] Add sync command 2020-08-31 01:03:01 +02:00
185 changed files with 520 additions and 5015 deletions

View file

@ -1,3 +1,2 @@
---
BUNDLE_PATH: "vendor/bundle"
BUNDLE_WITH: "production"

View file

@ -1,32 +0,0 @@
# This is a basic workflow to help you get started with Actions
name: CI
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
branches: [ master ]
pull_request:
branches: [ master ]
schedule:
- cron: "00 06 * * *"
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- uses: actions/checkout@v2
- uses: cachix/install-nix-action@v13
with:
nix_path: nixpkgs=channel:nixos-unstable
- run: "nix-shell --run 'nanoc --env=prod'"
- run: "nix-shell --run 'nanoc --env=prod check --deploy'"

2
.gitignore vendored
View file

@ -24,5 +24,3 @@ crash.log*
.author-information
.fb_token
/vendor/

View file

@ -1 +1 @@
3.0.0
2.6.5

View file

@ -1,2 +0,0 @@
nodejs 14.15.4
ruby 3.0.0

View file

@ -18,16 +18,15 @@ cache:
addons:
apt:
packages:
- texlive-generic-recommended
- texlive-latex-base
- texlive-math-extra
- texlive-xetex
- texlive-full
- lmodern
branches:
only:
- master
rvm:
- 2.6.5
notifications:
slack:
secure: tej68wbYns4DYg488iz+4ncU3/CHJvG/5c1qntGcEjti6vZp24atuH32BzNMY+gqa5ftZtcRfqIiJ0I0tkbiFWEDzjSk89bgjG4sgwXq1gMqi/Fj4bqEpjU5m7QLa786q4UfYyTF+srca1fHPLVS5REdGjRr2wxX+bcFnTRxreGCIrlNdWhoZPPJyS37R4RR9k+l5ZWZnqWgUN6bD448O8EzMRVRWoUSxQcJ6+u4QLpinEvem4iXe+WcHOyFfsNmavxGGMMpkOSed/tzA1l+gNpl224qOJl3yAk2qrGi4N6SOnSkeJFfUO5RzX56KDC/tcCL1oJpamhDmzDvRrbDNnCjSriv+g+PkXEjiwBF/tkZwIe7nMKyc9QF698Zvdgb6Ffbq21obsRnkkddkxijthdbUKMAIREPQuU7pXRL4ykPkBeB5GkNjPlErOooxvUHvQEVElJ8NMD4ychQqW6relaYJ0W0uy0QMvrtS+cHkpprZAOZzWLa3AdEOvD50kiS2hDhJway5JHJg/LMl3I6XVVMx6fNGdNWBcezeCqkDZM+nuMJqgAtQ+Tz8bwrHLCJgS5u0lQq/MbrDkYdpmmzvA5LXxn2SpjfOAlgiFKnSIwKSuuuwzW/zCEGdPo1pfBba2VfYAN4y1l863j5ph+eMtlHf7JG8mzIWTo3k+Jx8lQ=
@ -41,13 +40,12 @@ before_install:
- echo -e "[zeus.ugent.be]:2222 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC87/Q3H8f7ghmA+iCtKGaNyk0fx3Z36Xrn+eGv8a4pD7MXeu6Uwr0aN5HnkcbRWXFtMwnAU3ptoP90vH7qu99w=\n[herbert.ugent.be]:2222 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGLnJMh2DgqpVnHxOmeV6KffvzZGEVfniq0NFHRGZoL4f7Uc8xeG9gn3cc7lCL02F9LwWZNwR4gSqhGt/RK2S54=\n[git.zeus.gent]:2222 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGLnJMh2DgqpVnHxOmeV6KffvzZGEVfniq0NFHRGZoL4f7Uc8xeG9gn3cc7lCL02F9LwWZNwR4gSqhGt/RK2S54=\n" >> ~/.ssh/known_hosts
- git submodule update --init --recursive --remote
# Repo for newer Node.js versions
- curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
# - curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
# Repo for Yarn
- sudo apt-key adv --keyserver keyserver.ubuntu.com --recv D101F7899D41F3C3
- echo "deb http://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
- sudo apt-get update -qq
- sudo apt-get install -y -qq yarn nodejs
- nodejs -v
# - sudo apt-key adv --keyserver pgp.mit.edu --recv D101F7899D41F3C3
# - echo "deb http://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
# - sudo apt-get update -qq
# - sudo apt-get install -y -qq yarn
- yarn
script:
- bundle exec nanoc --env=prod

11
Gemfile
View file

@ -5,10 +5,6 @@ gem 'nanoc'
gem 'icalendar' # ical files
gem 'kramdown'
# Kramdown math mode gems
gem 'kramdown-math-katex'
gem 'sassc'
gem 'typogruby'
@ -17,19 +13,18 @@ gem 'builder'
# Word counting gem (which takes special characters into account)
# for reading time
gem 'words_counted', git: 'https://github.com/werthen/words_counted'
gem 'words_counted'
group :development do
gem 'adsf'
# puma instead of thin, see https://github.com/nanoc/nanoc/issues/1499
gem 'puma'
gem 'highline'
gem 'terminal-notifier'
gem 'terminal-notifier-guard'
gem 'nanoc-live'
end
group :production do
# Faster css autoprefixing
gem 'mini_racer'
# Autoprefixing for class
gem 'autoprefixer-rails'
gem 'htmlcompressor'

View file

@ -1,41 +1,26 @@
GIT
remote: https://github.com/werthen/words_counted
revision: 735357e4d530c99d5c4c366d0c246ebffffd80de
specs:
words_counted (1.0.2)
GEM
remote: https://rubygems.org/
specs:
addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0)
adsf (1.4.5)
adsf (1.4.3)
rack (>= 1.0.0, < 3.0.0)
adsf-live (1.4.5)
adsf (~> 1.3)
em-websocket (~> 0.5)
eventmachine (~> 1.2)
listen (~> 3.0)
rack-livereload (~> 0.3)
autoprefixer-rails (10.2.4.0)
autoprefixer-rails (9.8.6.1)
execjs
builder (3.2.4)
coderay (1.1.3)
colored (1.2)
concurrent-ruby (1.1.8)
cri (2.15.11)
concurrent-ruby (1.1.6)
cri (2.15.10)
ddmemoize (1.0.0)
ddmetrics (~> 1.0)
ref (~> 2.0)
ddmetrics (1.0.1)
ddplugin (1.0.3)
ddplugin (1.0.2)
diff-lcs (1.4.4)
em-websocket (0.5.2)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
eventmachine (1.2.7)
equatable (0.6.1)
execjs (2.7.0)
ffi (1.15.0)
ffi (1.13.1)
formatador (0.2.5)
guard (2.16.2)
formatador (>= 0.2.4)
@ -56,44 +41,41 @@ GEM
concurrent-ruby (~> 1.0)
highline (2.0.3)
htmlcompressor (0.4.0)
http_parser.rb (0.6.0)
icalendar (2.7.1)
icalendar (2.6.1)
ice_cube (~> 0.16)
ice_cube (0.16.3)
json (2.5.1)
json_schema (0.21.0)
katex (0.6.1)
execjs (~> 2.7)
kramdown (2.3.1)
json (2.3.1)
json_schema (0.20.9)
kramdown (2.3.0)
rexml
kramdown-math-katex (1.0.1)
katex (~> 0.4)
kramdown (~> 2.0)
listen (3.5.1)
libv8 (8.4.255.0)
listen (3.2.1)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
lumberjack (1.2.8)
lumberjack (1.2.7)
method_source (1.0.0)
mini_portile2 (2.5.0)
nanoc (4.12.0)
mini_portile2 (2.4.0)
mini_racer (0.3.1)
libv8 (~> 8.4.255)
nanoc (4.11.18)
addressable (~> 2.5)
colored (~> 1.2)
nanoc-checking (~> 1.0)
nanoc-cli (= 4.12.0)
nanoc-core (= 4.12.0)
nanoc-cli (= 4.11.18)
nanoc-core (= 4.11.18)
nanoc-deploying (~> 1.0)
parallel (~> 1.12)
tty-command (~> 0.8)
tty-which (~> 0.4)
nanoc-checking (1.0.1)
nanoc-checking (1.0.0)
nanoc-cli (~> 4.11, >= 4.11.15)
nanoc-core (~> 4.11, >= 4.11.15)
nanoc-cli (4.12.0)
nanoc-cli (4.11.18)
cri (~> 2.15)
diff-lcs (~> 1.3)
nanoc-core (= 4.12.0)
nanoc-core (= 4.11.18)
zeitwerk (~> 2.1)
nanoc-core (4.12.0)
nanoc-core (4.11.18)
concurrent-ruby (~> 1.1)
ddmemoize (~> 1.0)
ddmetrics (~> 1.0)
@ -104,37 +86,26 @@ GEM
tomlrb (~> 1.2)
tty-platform (~> 0.2)
zeitwerk (~> 2.1)
nanoc-deploying (1.0.1)
nanoc-deploying (1.0.0)
nanoc-checking (~> 1.0)
nanoc-cli (~> 4.11, >= 4.11.15)
nanoc-core (~> 4.11, >= 4.11.15)
nanoc-live (1.0.0)
adsf-live (~> 1.4)
listen (~> 3.0)
nanoc-cli (~> 4.11, >= 4.11.14)
nanoc-core (~> 4.11, >= 4.11.14)
nenv (0.3.0)
nio4r (2.5.7)
nokogiri (1.11.2)
mini_portile2 (~> 2.5.0)
racc (~> 1.4)
nokogiri (1.10.10)
mini_portile2 (~> 2.4.0)
notiffany (0.1.3)
nenv (~> 0.1)
shellany (~> 0.0)
pandoc-ruby (2.1.4)
parallel (1.20.1)
pastel (0.8.0)
parallel (1.19.2)
pastel (0.7.4)
equatable (~> 0.6)
tty-color (~> 0.5)
pry (0.14.0)
pry (0.13.1)
coderay (~> 1.1)
method_source (~> 1.0)
public_suffix (4.0.6)
puma (5.2.2)
nio4r (~> 2.0)
racc (1.5.2)
public_suffix (4.0.5)
rack (2.2.3)
rack-livereload (0.3.17)
rack
rainpress (1.0.1)
rb-fsevent (0.10.4)
rb-inotify (0.10.1)
@ -148,23 +119,23 @@ GEM
slow_enumerator_tools (1.1.0)
terminal-notifier (2.0.0)
terminal-notifier-guard (1.7.0)
thor (1.1.0)
thor (1.0.1)
tomlrb (1.3.0)
tty-color (0.6.0)
tty-command (0.10.1)
pastel (~> 0.8)
tty-color (0.5.1)
tty-command (0.9.0)
pastel (~> 0.7.0)
tty-platform (0.3.0)
tty-which (0.4.2)
typogruby (1.0.18)
rubypants
uglifier (4.2.0)
execjs (>= 0.3.0, < 3)
w3c_validators (1.3.6)
w3c_validators (1.3.5)
json (>= 1.8)
nokogiri (~> 1.6)
rexml (~> 3.2)
words_counted (1.0.2)
yui-compressor (0.12.0)
zeitwerk (2.4.2)
zeitwerk (2.4.0)
PLATFORMS
ruby
@ -178,11 +149,9 @@ DEPENDENCIES
htmlcompressor
icalendar
kramdown
kramdown-math-katex
mini_racer
nanoc
nanoc-live
pandoc-ruby
puma
rainpress
sassc
terminal-notifier
@ -190,8 +159,8 @@ DEPENDENCIES
typogruby
uglifier (>= 4.0.0)
w3c_validators
words_counted!
words_counted
yui-compressor
BUNDLED WITH
2.2.3
2.0.2

View file

@ -1,5 +1,5 @@
# zeus.ugent.be
[![Build Status](https://api.travis-ci.com/ZeusWPI/zeus.ugent.be.svg?branch=master)](https://travis-ci.com/github/ZeusWPI/zeus.ugent.be)
[![Build Status](https://travis-ci.org/ZeusWPI/zeus.ugent.be.svg?branch=master)](https://travis-ci.org/ZeusWPI/zeus.ugent.be)
[![Code Climate](https://codeclimate.com/github/ZeusWPI/zeus.ugent.be.png)](https://codeclimate.com/github/ZeusWPI/zeus.ugent.be)
[![PageSpeed](https://pagespeed-badges.herokuapp.com/?url=zeus.ugent.be&strat=desktop&showStratLabel=true)](https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fzeus.ugent.be&tab=desktop)
[![PageSpeed](https://pagespeed-badges.herokuapp.com/?url=zeus.ugent.be&strat=mobile&showStratLabel=true)](https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fzeus.ugent.be&tab=mobile)
@ -60,22 +60,11 @@ The latest and greatest builds on master get deployed automatically using [travi
For manual deployment, run
```bash
# Build the site for production
bundle exec nanoc --env=prod
# Run checks
bundle exec nanoc --env=prod check --deploy
# Deploy it to the server
bundle exec nanoc deploy --target public --env=prod
bundle exec nanoc deploy --target public
```
If you want to deploy this on your own system for whatever reason, just serve the files using a webserver like nginx or Apache.
## Uploading media files
Before using mediafiles on the site, upload them via https://zeus.ugent.be/zeuswpi/, our own custom [uploading service](https://github.com/ZeusWPI/ZeusWPI). You'll receive the server-filename which is available at the aforementioned url.
## Submitting a Pull Request
Once you've submitted a PR, it will automatically be deployed to (PR#).pr.zeus.gent, for easier reviewing.

26
Rules
View file

@ -3,9 +3,6 @@
require 'json'
require 'icalendar'
require 'kramdown'
require 'kramdown-math-katex'
# Important!!!
# First ignore the node_modules, we do not need any of it on the site directly.
@ -25,12 +22,8 @@ preprocess do
ignore_old_content('blog', 'events', 'about/verslagen') if development?
update_blog_attributes
convert_tags('Blog')
convert_tags('Events')
create_yearly_items('Blog')
create_yearly_items('Events')
create_tagly_items('Blog')
create_tagly_items('Events')
convert_event_time_to_timestamps
all_events.each do |event|
@ -83,7 +76,7 @@ end
compile '/events/*/*' do
filter :erb
filter :kramdown, {math_engine: :katex}
filter :kramdown
layout '/eventpost.*'
layout '/default.*'
@ -108,8 +101,8 @@ end
compile '/blog/*/*.md' do
filter :erb
layout '/blogpost.md'
filter :kramdown, {math_engine: :katex}
filter :typogruby_custom
filter :kramdown
filter :typogruby
layout '/blogpost.erb'
layout '/generic.*'
@ -165,7 +158,7 @@ end
# Note drive/verslagen is 'linked' as a data source to /about/verslagen/
compile '/about/verslagen/*/*.md', rep: :pdf do
filter :pandoc_pdf, args: { f: :markdown, 'pdf-engine': 'xelatex', template: 'templates/report.tex' } if production?
filter :pandoc_pdf, args: { f: :markdown, :'pdf-engine' => 'xelatex' } if production?
write ext: (production? ? 'pdf' : 'md')
end
@ -178,7 +171,7 @@ compile '/**/*.erb' do
# Apply typographic improvements if required by the page. Use this on text-heavy pages,
# such as the history page.
if @item[:typography]
filter :typogruby_custom
filter :typogruby
end
layout '/generic.*'
@ -202,13 +195,10 @@ compile '/assets/scripts/**/*.js' do
filter :uglify_js, harmony: true if production?
end
ignore '/assets/stylesheets/includes/**/*'
ignore '/data/**/*'
ignore '/assets/stylesheets/includes/**/*'
compile '/assets/stylesheets/**/*.scss' do
# This filter is necessary for the workaround present in main.scss and deals with out of date dependencies
filter :erb
sass_opts = {
syntax: :scss,
load_paths: ['content/assets/stylesheets']
@ -245,10 +235,6 @@ route '/**/*.{erb,html,md}' do
"#{item.identifier.without_ext}/index.html"
end
route %r[/well-known/(.+)] do |rest|
"/.well-known/" + rest[0]
end
# Let anything else simply pass through
passthrough '/**/*'

217
commands/sync.rb Normal file
View file

@ -0,0 +1,217 @@
require 'highline/import'
require 'yaml'
require 'net/http'
require 'json'
usage 'sync'
aliases :s
summary 'Sync events with DSA'
description 'Sync future events with the DSA panel.'
option :k, :key, 'API key for DSA', argument: :required
def bold_say(str)
say "<%= color %(#{str}), :bold %>"
end
def bold_ask(str, *args)
res = ask "<%= color %(#{str}), :bold %>", *args
puts
res
end
DSA_API = "https://localhost:8080/api/activiteiten"
# Inspired by https://github.com/nanoc/nanoc/blob/main/nanoc-cli/lib/nanoc/cli/commands/shell.rb
class SyncRunner < Nanoc::CLI::Commands::Shell
def run
@site = load_site
Nanoc::Core::Compiler.new_for(@site).run_until_preprocessed
items = env[:items]
# Add about ~50 hours
cut_off = DateTime.now + Rational('2.08333')
local_events = filter_items(items, cut_off)
api_key = "Zrl0JRxxKJHelIn5IRubA-GZiPw"
puts "Found #{local_events.length} local events"
# Construct a connection to the server, which will be kept open.
uri = URI(DSA_API)
Net::HTTP.start(uri.host, uri.port, use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_NONE) do |http|
# Get remote events from DSA.
remote_events = get_server_events(http, api_key, cut_off)["page"]["entries"]
.find_all { |e| e["advertise"] }
.find_all { |e| e["sync_data"] }
puts "Found #{local_events.length} remote events"
do_sync(http, local_events, remote_events, api_key)
end
end
private
def do_sync(http, local_events, remote_events, api_key)
# Contains local events we want to add.
to_add = []
# Contains events we want to potentially update.
to_update = []
# Calculate the identifier for each local event.
# We use the map (academic year) + file name without extension.
# This is necessarily unique.
local_events.each { |local_event|
path = Pathname(local_event[:filename])
academic_year = path.dirname.basename
filename = path.basename(".*")
identifier = "#{academic_year}-#{filename}"
# Check if we have a remote event with the same identifier
remote = remote_events.find { |e| e["sync_data"] == identifier }
if remote == nil
to_add.append([identifier, local_event])
else
to_update.append([identifier, remote, local_event])
end
remote_events.delete(remote)
}
puts "#{to_update.length} existing events will be updated"
puts "#{to_add.length} new events will be added to remote"
puts "#{remote_events.length} remote events will be deleted"
# Add new events.
to_add.each { |new_event|
add_event(http, api_key, *new_event)
}
to_update.each { |existing_event|
update_event(http, api_key, *existing_event)
}
remote_events.each { |old_event|
delete(http, api_key, old_event)
}
end
def local_to_params(local_event, identifier)
puts local_event[:time].iso8601
{
"activity" => {
"title" => local_event[:title],
"description" => local_event[:description],
"location" => local_event[:location],
"address" => local_event[:locationlink],
"advertise" => true,
"association" => "zeus",
"sync_data" => identifier,
"start_time" => local_event[:time].iso8601,
"end_time" => local_event[:end].iso8601,
"infolink" => "https://zeus.ugent.be#{local_event.path}"
}
}
end
def update_event(http, api_key, identifier, remote_event, local_event)
params = local_to_params(local_event, identifier)
uri = URI("#{DSA_API}/#{remote_event["id"]}")
req = Net::HTTP::Put.new(uri)
req['Authorization'] = api_key
req['Content-Type'] = 'application/json'
req.body = params.to_json
response = http.request(req)
case response
when Net::HTTPSuccess
puts "Updated event #{remote_event["id"]}"
when Net::HTTPUnauthorized
raise "#{response.message}: username and password set and correct?"
when Net::HTTPServerError
raise "#{response.message}: try again later?"
else
raise response.message
end
end
def add_event(http, api_key, identifier, local_event)
params = local_to_params(local_event, identifier)
uri = URI(DSA_API)
req = Net::HTTP::Post.new(uri)
req['Authorization'] = api_key
req['Content-Type'] = 'application/json'
req.body = params.to_json
response = http.request(req)
case response
when Net::HTTPSuccess
puts "Added event #{identifier}"
when Net::HTTPUnauthorized
raise "#{response.message}: username and password set and correct?"
when Net::HTTPServerError
raise "#{response.message}: try again later?"
else
print response.body
raise response.message
end
end
def delete(http, api_key, remote)
uri = URI("#{DSA_API}/#{remote["id"]}")
req = Net::HTTP::Delete.new(uri)
req['Authorization'] = api_key
response = http.request(req)
case response
when Net::HTTPSuccess
puts "Delete event #{remote["id"]}"
when Net::HTTPUnauthorized
raise "#{response.message}: username and password set and correct?"
when Net::HTTPServerError
raise "#{response.message}: try again later?"
else
raise response.message
end
end
def filter_items(items, cut_off)
# Must be in the future
# Must have sync_id
items.find_all('/events/*/*.md')
.find_all { |event| event[:time] > cut_off }
.find_all { |event| event[:exclude_from_sync] != true }
end
def get_server_events(http, api_key, cut_off)
uri = URI(DSA_API)
params = {:start_time => cut_off.iso8601, :association => "zeus"}
uri.query = URI.encode_www_form(params)
request = Net::HTTP::Get.new(uri)
request['Authorization'] = api_key
response = http.request(request)
case response
when Net::HTTPSuccess
JSON.parse response.body
when Net::HTTPUnauthorized
raise "#{response.message}: username and password set and correct?"
when Net::HTTPServerError
raise "#{response.message}: try again later?"
else
raise response.message
end
end
end
runner SyncRunner

View file

@ -212,45 +212,4 @@ subnavigation:
Verder organiseren we ook voor het eerst HTTPizza in samenwerking met Ruben Verborgh en IDLab, en, omdat bij 25 jaar Zeus nog wel wat vernieuwing mag, schrijven we onszelf een nieuwe site.</p>
</div>
</div>
<header class="timeline-header">
<span class="tag is-primary is-medium">2017</span>
</header>
<div class="timeline-item">
<div class="timeline-marker"></div>
<div class="timeline-content content">
<h2>Het jaar 2017 2018</h2>
<p>Dit jaar slagen we er wél in om <abbr title="Directie Gebouwen en Facilitair Beheer">DGFB</abbr> te overtuigen dat de geleidelijke erosie van de keldervloer in de vorm van rood stof onze neus-, oor-, keel- én spuigaten uitkomt. In de lente van 2018 ruilt de kelder haar stoffig rood in voor blinkend grijs. Wie de volledige saga van de <em>vleor</em> wil kennen dat dat lezen in de <a href="/blog/17-18/vleor/">betreffende blogpost</a>.
<figure>
<img src="https://zeus.ugent.be/zeuswpi/trZFwU90.jpg" alt="Lege kelder met een grijze vloer">
<figcaption>
De nieuwe, grijze, blinkende vloer van de Zeuskelder.
</figcaption>
</figure>
<p>Dit jaar werd er opnieuw vleitig aan projecten gewerkt en werden de grondslagen gelegd voor een nieuw toekomstig legacy-project: <b>G2</b>. Ook aan events was er geen tekort. Zo organiseerden we in samenwerking met <a href="https://ceneka.be/">CenEka</a>, onze zuster-werkgroep uit de ingenieursfaculteit, een reeks <b>TECH Talkz</b>.
<p>Tot slot breidt Zeus haar digitaal vastgoed uit en leggen we onze territoriale claim op de domeinnaam <a href="https://zeus.gent">zeus.gent</a>.
</div>
</div>
<header class="timeline-header">
<span class="tag is-primary is-medium">2018</span>
</header>
<div class="timeline-item">
<div class="timeline-marker"></div>
<div class="timeline-content content">
<h2>Het jaar 2018 2019</h2>
<p>De tijd is gekomen om van chatplatform te wisselen. Vanaf nu is Zeus WPI te vinden op <a href="https://mattermost.zeus.gent/">https://mattermost.zeus.gent</a>. Voor de eerste keer organiseren we ook een esoterische codenight om zo veel mogelijk eerstejaars kennis te laten maken met de wondere wereld van het programmeren. In het tweede semester is er ook de eerste IHNGTWHSIPB (Ik Heb Nog Genoeg Tijd Want Het Semester Is Pas Begonnen) codenight. Een maand later organiseren we ook onze eigen CTF (Capture The Friday), gericht op beginnende l33t h4x0rs.</p>
<p>Qua projecten wordt het idee van vorig jaar genaamd G2 eindelijk een ding, er is meer animo voor en er begint dit keer ook effectief code uit voort te komen. Daarnaast wordt ook Cat (Cuddles And Bad Abbreviations) geschreven, onze kaart van wie knuffels gegeven heeft aan wie. Omdat we vinden dat de messages van de Cammie-site naar de kelder niet archaisch genoeg getoond worden besluiten we om een systeem te schrijven dat de berichten via een Raspberry Pi naar Hoek (de computer in de hoek van de kelder) stuurt, die deze toont met behulp van een puur x86-assembly programma dat van een floppy draait. Waarom? Waarom niet?!</p>
</div>
</div>
<header class="timeline-header">
<span class="tag is-primary is-medium">2019</span>
</header>
<div class="timeline-item">
<div class="timeline-marker"></div>
<div class="timeline-content content">
<h2>Het jaar 2019 2020</h2>
<p>Het jaar begon ook dit jaar met een esoterisch-getinte codenight. Dit jaar was onze spelletjesavond net iets anders, we werkten namelijk samen met <a href="https://nemesisgent.be/">de studentenvereniging Nemesis</a> die ons uitnodigden in hun clublokaal om samen gezellig spellejes te spelen. We doen ook dit jaar opnieuw een CTF gericht om al intro te dienen. In het tweede semester beginnen we aan het Durf Doen-project van de GSR (Gentse Studentenraad) te revampen dat dient om studenten te helpen om studentenverenigingen te vinden die bij hen passen. We bezoeken ook de jobavond van onze Leuvense vrienden ULYSSIS en organiseren samen met VVN, Prime en WiNA een paar dagen later (toevallig) onze eigen jobbeurs.</p>
<p>Wat er daarna gebeurde had niemand kunnen voorspellen, de COVID-19 infecties lopen op en ons land gaat in een nationale lockdown. Natuurlijk betekent dit ook dat wij met Zeus onze kelder moeten sluiten voor onbepaalde duur. Hoe spijtig dit ook moge zijn, Zeus laat zich niet doen en we organiseren een online LAN-party (een WAN-party eigenlijk) en een online-CTF. Ook onze verkiezingen moeten digitaal doorgaan en in de zomer hebben we een van de meest rare bestuursovergangen in de geschiedenis van onze vereniging. Niemand weet wat het volgend jaar gaat brengen, maar Zeus blijft doet er alles aan om er het beste van te maken.</p>
</div>
</div>
</div>

View file

@ -28,7 +28,7 @@ subnavigation:
</div>
<div class="content">
<p>Laatst bijgewerkt op <strong><time datetime="2021-01-07">7 januari 2021</time></strong>.
<p>Laatst bijgewerkt op <strong><time datetime="2020-07-26">26 juli 2020</time></strong>.
</p>
<p>Zeus WPI biedt een waaier aan diensten en projecten aan aan haar leden en het algemene publiek. Met dit privacybeleid wil ze aangeven hoe en waarvoor ze data verzamelt.</p>

View file

@ -23,3 +23,12 @@ Daarnaast gebruiken de apps andere diensten van derden. Indien u gebruik maakt v
##### API
Bij het gebruik van de API worden enkel technische data verzameld.
##### Assistent
Bij het gebruik van *Hydra van de UGent* in de Google Assistent gebruiken we deze diensten:
- **Technische informatie**, zoals serverlogs (zie de paragraaf [_Technische gegevens_](#technisch).
- **Dialogflow**, voor de gespreksmogelijkheden (d.w.z. verstaan wat u bedoelt). Deze data is onderhevig aan het privacybeleid van [Google](https://policies.google.com/privacy)
Dialogflow verzamelt geen persoonlijke data. Om de herkenning van de gesprekken tussen u en *Hydra van de UGent* te verbeteren, slaat Dialogflow de inhoud van de gesprekken in tekstuele vorm op. Deze kunnen door het bestuur van Zeus of de medewerkers van het Hydra-project beoordeeld worden, om zo de nauwkeurigheid van de herkenning te verbeteren.

View file

@ -13,7 +13,7 @@ subnavigation:
<% if current_sponsoring_members.nil? %>
Nog geen sponsorende leden voor dit academiejaar. Interesse? Contacteer het bestuur.
<% else %>
<% current_sponsoring_members.shuffle.each do |member| %>
<% current_sponsoring_members.each do |member| %>
<div id="<%= member[:nickname] %>" class="box sponsoring-member">
<article class="columns is-mobile">
<div class="column is-gapless is-narrow logo-wrapper">

View file

@ -1,735 +0,0 @@
// Code below modified from https://github.com/arhs/iban.js
/*
The MIT License (MIT)
Copyright (c) 2013-2017 ARHS Developments SA
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
function electronicFormat(iban) {
return iban.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();
}
// Code below modified from https://github.com/derhuerst/sepa-payment-qr-code
/*
Copyright (c) 2018, Jannis R
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
const SERVICE_TAG = 'BCD'
const VERSION = '002'
const CHARACTER_SET = 1
const IDENTIFICATION_CODE = 'SCT'
const assertNonEmptyString = (val, name) => {
if ('string' !== typeof val || !val) {
throw new Error(name + ' must be a non-empty string.')
}
}
const defaults = {
currency: 'EUR'
}
var generateQrCode = data => {
if (!data) throw new Error('data must be an object.')
data = Object.assign(Object.create(null), defaults, data)
// disabled, we will check this ourselves
// if (isValidIBAN(data.payeeIBAN)) throw new Error('data.payeeIBAN must be a valid IBAN.')
assertNonEmptyString(data.name, 'data.name')
if ('bic' in data) assertNonEmptyString(data.bic, 'data.bic')
if ('number' !== typeof data.amount) throw new Error('data.amount must be a number.')
if (data.amount < 0.01 || data.amount > 999999999.99) {
throw new Error('data.amount must be >=0.01 and <=999999999.99.')
}
if ('purposeCode' in data) {
assertNonEmptyString(data.purposeCode, 'data.purposeCode')
}
if ('structuredReference' in data) {
assertNonEmptyString(data.structuredReference, 'data.structuredReference')
}
if ('unstructuredReference' in data) {
assertNonEmptyString(data.unstructuredReference, 'data.unstructuredReference')
// todo: validate <=140 chars
}
if (('structuredReference' in data) && ('unstructuredReference' in data)) {
throw new Error('Use either data.structuredReference or data.unstructuredReference.')
}
if ('information' in data) {
assertNonEmptyString(data.information, 'data.information')
}
return [
SERVICE_TAG,
VERSION,
CHARACTER_SET,
IDENTIFICATION_CODE,
data.bic, // todo: validate 8/11 chars
data.name, // todo: validate <=70 chars
electronicFormat(data.iban),
data.currency + data.amount.toFixed(2),
data.purposeCode || '',
data.structuredReference || '',
data.unstructuredReference || '',
data.information || ''
].join('\n')
}
// Code below copied from https://github.com/davidshimjs/qrcodejs
/*
The MIT License (MIT)
---------------------
Copyright (c) 2012 davidshimjs
Permission is hereby granted, free of charge,
to any person obtaining a copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/**
* @fileoverview
* - Using the 'QRCode for Javascript library'
* - Fixed dataset of 'QRCode for Javascript library' for support full-spec.
* - this library has no dependencies.
*
* @author davidshimjs
* @see <a href="http://www.d-project.com/" target="_blank">http://www.d-project.com/</a>
* @see <a href="http://jeromeetienne.github.com/jquery-qrcode/" target="_blank">http://jeromeetienne.github.com/jquery-qrcode/</a>
*/
var QRCode;
(function () {
//---------------------------------------------------------------------
// QRCode for JavaScript
//
// Copyright (c) 2009 Kazuhiko Arase
//
// URL: http://www.d-project.com/
//
// Licensed under the MIT license:
// http://www.opensource.org/licenses/mit-license.php
//
// The word "QR Code" is registered trademark of
// DENSO WAVE INCORPORATED
// http://www.denso-wave.com/qrcode/faqpatent-e.html
//
//---------------------------------------------------------------------
function QR8bitByte(data) {
this.mode = QRMode.MODE_8BIT_BYTE;
this.data = data;
this.parsedData = [];
// Added to support UTF-8 Characters
for (var i = 0, l = this.data.length; i < l; i++) {
var byteArray = [];
var code = this.data.charCodeAt(i);
if (code > 0x10000) {
byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);
byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);
byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);
byteArray[3] = 0x80 | (code & 0x3F);
} else if (code > 0x800) {
byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);
byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);
byteArray[2] = 0x80 | (code & 0x3F);
} else if (code > 0x80) {
byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);
byteArray[1] = 0x80 | (code & 0x3F);
} else {
byteArray[0] = code;
}
this.parsedData.push(byteArray);
}
this.parsedData = Array.prototype.concat.apply([], this.parsedData);
if (this.parsedData.length != this.data.length) {
this.parsedData.unshift(191);
this.parsedData.unshift(187);
this.parsedData.unshift(239);
}
}
QR8bitByte.prototype = {
getLength: function (buffer) {
return this.parsedData.length;
},
write: function (buffer) {
for (var i = 0, l = this.parsedData.length; i < l; i++) {
buffer.put(this.parsedData[i], 8);
}
}
};
function QRCodeModel(typeNumber, errorCorrectLevel) {
this.typeNumber = typeNumber;
this.errorCorrectLevel = errorCorrectLevel;
this.modules = null;
this.moduleCount = 0;
this.dataCache = null;
this.dataList = [];
}
QRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+","+col);}
return this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row<this.moduleCount;row++){this.modules[row]=new Array(this.moduleCount);for(var col=0;col<this.moduleCount;col++){this.modules[row][col]=null;}}
this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-7,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(test,maskPattern);if(this.typeNumber>=7){this.setupTypeNumber(test);}
if(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);}
this.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}}
return pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row<this.modules.length;row++){var y=row*cs;for(var col=0;col<this.modules[row].length;col++){var x=col*cs;var dark=this.modules[row][col];if(dark){qr_mc.beginFill(0,100);qr_mc.moveTo(x,y);qr_mc.lineTo(x+cs,y);qr_mc.lineTo(x+cs,y+cs);qr_mc.lineTo(x,y+cs);qr_mc.endFill();}}}
return qr_mc;},setupTimingPattern:function(){for(var r=8;r<this.moduleCount-8;r++){if(this.modules[r][6]!=null){continue;}
this.modules[r][6]=(r%2==0);}
for(var c=8;c<this.moduleCount-8;c++){if(this.modules[6][c]!=null){continue;}
this.modules[6][c]=(c%2==0);}},setupPositionAdjustPattern:function(){var pos=QRUtil.getPatternPosition(this.typeNumber);for(var i=0;i<pos.length;i++){for(var j=0;j<pos.length;j++){var row=pos[i];var col=pos[j];if(this.modules[row][col]!=null){continue;}
for(var r=-2;r<=2;r++){for(var c=-2;c<=2;c++){if(r==-2||r==2||c==-2||c==2||(r==0&&c==0)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}}}},setupTypeNumber:function(test){var bits=QRUtil.getBCHTypeNumber(this.typeNumber);for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;}
for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}}
for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}}
this.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex<data.length){dark=(((data[byteIndex]>>>bitIndex)&1)==1);}
var mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;}
this.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}}
row+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;i<dataList.length;i++){var data=dataList[i];buffer.put(data.mode,4);buffer.put(data.getLength(),QRUtil.getLengthInBits(data.mode,typeNumber));data.write(buffer);}
var totalDataCount=0;for(var i=0;i<rsBlocks.length;i++){totalDataCount+=rsBlocks[i].dataCount;}
if(buffer.getLengthInBits()>totalDataCount*8){throw new Error("code length overflow. ("
+buffer.getLengthInBits()
+">"
+totalDataCount*8
+")");}
if(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);}
while(buffer.getLengthInBits()%8!=0){buffer.putBit(false);}
while(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;}
buffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;}
buffer.put(QRCodeModel.PAD1,8);}
return QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r<rsBlocks.length;r++){var dcCount=rsBlocks[r].dataCount;var ecCount=rsBlocks[r].totalCount-dcCount;maxDcCount=Math.max(maxDcCount,dcCount);maxEcCount=Math.max(maxEcCount,ecCount);dcdata[r]=new Array(dcCount);for(var i=0;i<dcdata[r].length;i++){dcdata[r][i]=0xff&buffer.buffer[i+offset];}
offset+=dcCount;var rsPoly=QRUtil.getErrorCorrectPolynomial(ecCount);var rawPoly=new QRPolynomial(dcdata[r],rsPoly.getLength()-1);var modPoly=rawPoly.mod(rsPoly);ecdata[r]=new Array(rsPoly.getLength()-1);for(var i=0;i<ecdata[r].length;i++){var modIndex=i+modPoly.getLength()-ecdata[r].length;ecdata[r][i]=(modIndex>=0)?modPoly.get(modIndex):0;}}
var totalCodeCount=0;for(var i=0;i<rsBlocks.length;i++){totalCodeCount+=rsBlocks[i].totalCount;}
var data=new Array(totalCodeCount);var index=0;for(var i=0;i<maxDcCount;i++){for(var r=0;r<rsBlocks.length;r++){if(i<dcdata[r].length){data[index++]=dcdata[r][i];}}}
for(var i=0;i<maxEcCount;i++){for(var r=0;r<rsBlocks.length;r++){if(i<ecdata[r].length){data[index++]=ecdata[r][i];}}}
return data;};var QRMode={MODE_NUMBER:1<<0,MODE_ALPHA_NUM:1<<1,MODE_8BIT_BYTE:1<<2,MODE_KANJI:1<<3};var QRErrorCorrectLevel={L:1,M:0,Q:3,H:2};var QRMaskPattern={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var QRUtil={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:(1<<10)|(1<<8)|(1<<5)|(1<<4)|(1<<2)|(1<<1)|(1<<0),G18:(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8)|(1<<5)|(1<<2)|(1<<0),G15_MASK:(1<<14)|(1<<12)|(1<<10)|(1<<4)|(1<<1),getBCHTypeInfo:function(data){var d=data<<10;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)>=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));}
return((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));}
return(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;}
return digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error("bad maskPattern:"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i<errorCorrectLength;i++){a=a.multiply(new QRPolynomial([1,QRMath.gexp(i)],0));}
return a;},getLengthInBits:function(mode,type){if(1<=type&&type<10){switch(mode){case QRMode.MODE_NUMBER:return 10;case QRMode.MODE_ALPHA_NUM:return 9;case QRMode.MODE_8BIT_BYTE:return 8;case QRMode.MODE_KANJI:return 8;default:throw new Error("mode:"+mode);}}else if(type<27){switch(mode){case QRMode.MODE_NUMBER:return 12;case QRMode.MODE_ALPHA_NUM:return 11;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 10;default:throw new Error("mode:"+mode);}}else if(type<41){switch(mode){case QRMode.MODE_NUMBER:return 14;case QRMode.MODE_ALPHA_NUM:return 13;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 12;default:throw new Error("mode:"+mode);}}else{throw new Error("type:"+type);}},getLostPoint:function(qrCode){var moduleCount=qrCode.getModuleCount();var lostPoint=0;for(var row=0;row<moduleCount;row++){for(var col=0;col<moduleCount;col++){var sameCount=0;var dark=qrCode.isDark(row,col);for(var r=-1;r<=1;r++){if(row+r<0||moduleCount<=row+r){continue;}
for(var c=-1;c<=1;c++){if(col+c<0||moduleCount<=col+c){continue;}
if(r==0&&c==0){continue;}
if(dark==qrCode.isDark(row+r,col+c)){sameCount++;}}}
if(sameCount>5){lostPoint+=(3+sameCount-5);}}}
for(var row=0;row<moduleCount-1;row++){for(var col=0;col<moduleCount-1;col++){var count=0;if(qrCode.isDark(row,col))count++;if(qrCode.isDark(row+1,col))count++;if(qrCode.isDark(row,col+1))count++;if(qrCode.isDark(row+1,col+1))count++;if(count==0||count==4){lostPoint+=3;}}}
for(var row=0;row<moduleCount;row++){for(var col=0;col<moduleCount-6;col++){if(qrCode.isDark(row,col)&&!qrCode.isDark(row,col+1)&&qrCode.isDark(row,col+2)&&qrCode.isDark(row,col+3)&&qrCode.isDark(row,col+4)&&!qrCode.isDark(row,col+5)&&qrCode.isDark(row,col+6)){lostPoint+=40;}}}
for(var col=0;col<moduleCount;col++){for(var row=0;row<moduleCount-6;row++){if(qrCode.isDark(row,col)&&!qrCode.isDark(row+1,col)&&qrCode.isDark(row+2,col)&&qrCode.isDark(row+3,col)&&qrCode.isDark(row+4,col)&&!qrCode.isDark(row+5,col)&&qrCode.isDark(row+6,col)){lostPoint+=40;}}}
var darkCount=0;for(var col=0;col<moduleCount;col++){for(var row=0;row<moduleCount;row++){if(qrCode.isDark(row,col)){darkCount++;}}}
var ratio=Math.abs(100*darkCount/moduleCount/moduleCount-50)/5;lostPoint+=ratio*10;return lostPoint;}};var QRMath={glog:function(n){if(n<1){throw new Error("glog("+n+")");}
return QRMath.LOG_TABLE[n];},gexp:function(n){while(n<0){n+=255;}
while(n>=256){n-=255;}
return QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<<i;}
for(var i=8;i<256;i++){QRMath.EXP_TABLE[i]=QRMath.EXP_TABLE[i-4]^QRMath.EXP_TABLE[i-5]^QRMath.EXP_TABLE[i-6]^QRMath.EXP_TABLE[i-8];}
for(var i=0;i<255;i++){QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]]=i;}
function QRPolynomial(num,shift){if(num.length==undefined){throw new Error(num.length+"/"+shift);}
var offset=0;while(offset<num.length&&num[offset]==0){offset++;}
this.num=new Array(num.length-offset+shift);for(var i=0;i<num.length-offset;i++){this.num[i]=num[i+offset];}}
QRPolynomial.prototype={get:function(index){return this.num[index];},getLength:function(){return this.num.length;},multiply:function(e){var num=new Array(this.getLength()+e.getLength()-1);for(var i=0;i<this.getLength();i++){for(var j=0;j<e.getLength();j++){num[i+j]^=QRMath.gexp(QRMath.glog(this.get(i))+QRMath.glog(e.get(j)));}}
return new QRPolynomial(num,0);},mod:function(e){if(this.getLength()-e.getLength()<0){return this;}
var ratio=QRMath.glog(this.get(0))-QRMath.glog(e.get(0));var num=new Array(this.getLength());for(var i=0;i<this.getLength();i++){num[i]=this.get(i);}
for(var i=0;i<e.getLength();i++){num[i]^=QRMath.gexp(QRMath.glog(e.get(i))+ratio);}
return new QRPolynomial(num,0).mod(e);}};function QRRSBlock(totalCount,dataCount){this.totalCount=totalCount;this.dataCount=dataCount;}
QRRSBlock.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];QRRSBlock.getRSBlocks=function(typeNumber,errorCorrectLevel){var rsBlock=QRRSBlock.getRsBlockTable(typeNumber,errorCorrectLevel);if(rsBlock==undefined){throw new Error("bad rs block @ typeNumber:"+typeNumber+"/errorCorrectLevel:"+errorCorrectLevel);}
var length=rsBlock.length/3;var list=[];for(var i=0;i<length;i++){var count=rsBlock[i*3+0];var totalCount=rsBlock[i*3+1];var dataCount=rsBlock[i*3+2];for(var j=0;j<count;j++){list.push(new QRRSBlock(totalCount,dataCount));}}
return list;};QRRSBlock.getRsBlockTable=function(typeNumber,errorCorrectLevel){switch(errorCorrectLevel){case QRErrorCorrectLevel.L:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+0];case QRErrorCorrectLevel.M:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+1];case QRErrorCorrectLevel.Q:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+2];case QRErrorCorrectLevel.H:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+3];default:return undefined;}};function QRBitBuffer(){this.buffer=[];this.length=0;}
QRBitBuffer.prototype={get:function(index){var bufIndex=Math.floor(index/8);return((this.buffer[bufIndex]>>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i<length;i++){this.putBit(((num>>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);}
if(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));}
this.length++;}};var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]];
function _isSupportCanvas() {
return typeof CanvasRenderingContext2D != "undefined";
}
// android 2.x doesn't support Data-URI spec
function _getAndroid() {
var android = false;
var sAgent = navigator.userAgent;
if (/android/i.test(sAgent)) { // android
android = true;
var aMat = sAgent.toString().match(/android ([0-9]\.[0-9])/i);
if (aMat && aMat[1]) {
android = parseFloat(aMat[1]);
}
}
return android;
}
var svgDrawer = (function() {
var Drawing = function (el, htOption) {
this._el = el;
this._htOption = htOption;
};
Drawing.prototype.draw = function (oQRCode) {
var _htOption = this._htOption;
var _el = this._el;
var nCount = oQRCode.getModuleCount();
var nWidth = Math.floor(_htOption.width / nCount);
var nHeight = Math.floor(_htOption.height / nCount);
this.clear();
function makeSVG(tag, attrs) {
var el = document.createElementNS('http://www.w3.org/2000/svg', tag);
for (var k in attrs)
if (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]);
return el;
}
var svg = makeSVG("svg" , {'viewBox': '0 0 ' + String(nCount) + " " + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight});
svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink");
_el.appendChild(svg);
svg.appendChild(makeSVG("rect", {"fill": _htOption.colorLight, "width": "100%", "height": "100%"}));
svg.appendChild(makeSVG("rect", {"fill": _htOption.colorDark, "width": "1", "height": "1", "id": "template"}));
for (var row = 0; row < nCount; row++) {
for (var col = 0; col < nCount; col++) {
if (oQRCode.isDark(row, col)) {
var child = makeSVG("use", {"x": String(col), "y": String(row)});
child.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#template")
svg.appendChild(child);
}
}
}
};
Drawing.prototype.clear = function () {
while (this._el.hasChildNodes())
this._el.removeChild(this._el.lastChild);
};
return Drawing;
})();
var useSVG = document.documentElement.tagName.toLowerCase() === "svg";
// Drawing in DOM by using Table tag
var Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () {
var Drawing = function (el, htOption) {
this._el = el;
this._htOption = htOption;
};
/**
* Draw the QRCode
*
* @param {QRCode} oQRCode
*/
Drawing.prototype.draw = function (oQRCode) {
var _htOption = this._htOption;
var _el = this._el;
var nCount = oQRCode.getModuleCount();
var nWidth = Math.floor(_htOption.width / nCount);
var nHeight = Math.floor(_htOption.height / nCount);
var aHTML = ['<table style="border:0;border-collapse:collapse;">'];
for (var row = 0; row < nCount; row++) {
aHTML.push('<tr>');
for (var col = 0; col < nCount; col++) {
aHTML.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:' + nWidth + 'px;height:' + nHeight + 'px;background-color:' + (oQRCode.isDark(row, col) ? _htOption.colorDark : _htOption.colorLight) + ';"></td>');
}
aHTML.push('</tr>');
}
aHTML.push('</table>');
_el.innerHTML = aHTML.join('');
// Fix the margin values as real size.
var elTable = _el.childNodes[0];
var nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2;
var nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2;
if (nLeftMarginTable > 0 && nTopMarginTable > 0) {
elTable.style.margin = nTopMarginTable + "px " + nLeftMarginTable + "px";
}
};
/**
* Clear the QRCode
*/
Drawing.prototype.clear = function () {
this._el.innerHTML = '';
};
return Drawing;
})() : (function () { // Drawing in Canvas
function _onMakeImage() {
this._elImage.src = this._elCanvas.toDataURL("image/png");
this._elImage.style.display = "block";
this._elCanvas.style.display = "none";
}
// Android 2.1 bug workaround
// http://code.google.com/p/android/issues/detail?id=5141
if (this._android && this._android <= 2.1) {
var factor = 1 / window.devicePixelRatio;
var drawImage = CanvasRenderingContext2D.prototype.drawImage;
CanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) {
if (("nodeName" in image) && /img/i.test(image.nodeName)) {
for (var i = arguments.length - 1; i >= 1; i--) {
arguments[i] = arguments[i] * factor;
}
} else if (typeof dw == "undefined") {
arguments[1] *= factor;
arguments[2] *= factor;
arguments[3] *= factor;
arguments[4] *= factor;
}
drawImage.apply(this, arguments);
};
}
/**
* Check whether the user's browser supports Data URI or not
*
* @private
* @param {Function} fSuccess Occurs if it supports Data URI
* @param {Function} fFail Occurs if it doesn't support Data URI
*/
function _safeSetDataURI(fSuccess, fFail) {
var self = this;
self._fFail = fFail;
self._fSuccess = fSuccess;
// Check it just once
if (self._bSupportDataURI === null) {
var el = document.createElement("img");
var fOnError = function() {
self._bSupportDataURI = false;
if (self._fFail) {
self._fFail.call(self);
}
};
var fOnSuccess = function() {
self._bSupportDataURI = true;
if (self._fSuccess) {
self._fSuccess.call(self);
}
};
el.onabort = fOnError;
el.onerror = fOnError;
el.onload = fOnSuccess;
el.src = "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; // the Image contains 1px data.
return;
} else if (self._bSupportDataURI === true && self._fSuccess) {
self._fSuccess.call(self);
} else if (self._bSupportDataURI === false && self._fFail) {
self._fFail.call(self);
}
};
/**
* Drawing QRCode by using canvas
*
* @constructor
* @param {HTMLElement} el
* @param {Object} htOption QRCode Options
*/
var Drawing = function (el, htOption) {
this._bIsPainted = false;
this._android = _getAndroid();
this._htOption = htOption;
this._elCanvas = document.createElement("canvas");
this._elCanvas.width = htOption.width;
this._elCanvas.height = htOption.height;
el.appendChild(this._elCanvas);
this._el = el;
this._oContext = this._elCanvas.getContext("2d");
this._bIsPainted = false;
this._elImage = document.createElement("img");
this._elImage.alt = "Scan me!";
this._elImage.style.display = "none";
this._el.appendChild(this._elImage);
this._bSupportDataURI = null;
};
/**
* Draw the QRCode
*
* @param {QRCode} oQRCode
*/
Drawing.prototype.draw = function (oQRCode) {
var _elImage = this._elImage;
var _oContext = this._oContext;
var _htOption = this._htOption;
var nCount = oQRCode.getModuleCount();
var nWidth = _htOption.width / nCount;
var nHeight = _htOption.height / nCount;
var nRoundedWidth = Math.round(nWidth);
var nRoundedHeight = Math.round(nHeight);
_elImage.style.display = "none";
this.clear();
for (var row = 0; row < nCount; row++) {
for (var col = 0; col < nCount; col++) {
var bIsDark = oQRCode.isDark(row, col);
var nLeft = col * nWidth;
var nTop = row * nHeight;
_oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;
_oContext.lineWidth = 1;
_oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;
_oContext.fillRect(nLeft, nTop, nWidth, nHeight);
// 안티 앨리어싱 방지 처리
_oContext.strokeRect(
Math.floor(nLeft) + 0.5,
Math.floor(nTop) + 0.5,
nRoundedWidth,
nRoundedHeight
);
_oContext.strokeRect(
Math.ceil(nLeft) - 0.5,
Math.ceil(nTop) - 0.5,
nRoundedWidth,
nRoundedHeight
);
}
}
this._bIsPainted = true;
};
/**
* Make the image from Canvas if the browser supports Data URI.
*/
Drawing.prototype.makeImage = function () {
if (this._bIsPainted) {
_safeSetDataURI.call(this, _onMakeImage);
}
};
/**
* Return whether the QRCode is painted or not
*
* @return {Boolean}
*/
Drawing.prototype.isPainted = function () {
return this._bIsPainted;
};
/**
* Clear the QRCode
*/
Drawing.prototype.clear = function () {
this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height);
this._bIsPainted = false;
};
/**
* @private
* @param {Number} nNumber
*/
Drawing.prototype.round = function (nNumber) {
if (!nNumber) {
return nNumber;
}
return Math.floor(nNumber * 1000) / 1000;
};
return Drawing;
})();
/**
* Get the type by string length
*
* @private
* @param {String} sText
* @param {Number} nCorrectLevel
* @return {Number} type
*/
function _getTypeNumber(sText, nCorrectLevel) {
var nType = 1;
var length = _getUTF8Length(sText);
for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {
var nLimit = 0;
switch (nCorrectLevel) {
case QRErrorCorrectLevel.L :
nLimit = QRCodeLimitLength[i][0];
break;
case QRErrorCorrectLevel.M :
nLimit = QRCodeLimitLength[i][1];
break;
case QRErrorCorrectLevel.Q :
nLimit = QRCodeLimitLength[i][2];
break;
case QRErrorCorrectLevel.H :
nLimit = QRCodeLimitLength[i][3];
break;
}
if (length <= nLimit) {
break;
} else {
nType++;
}
}
if (nType > QRCodeLimitLength.length) {
throw new Error("Too long data");
}
return nType;
}
function _getUTF8Length(sText) {
var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a');
return replacedText.length + (replacedText.length != sText ? 3 : 0);
}
/**
* @class QRCode
* @constructor
* @example
* new QRCode(document.getElementById("test"), "http://jindo.dev.naver.com/collie");
*
* @example
* var oQRCode = new QRCode("test", {
* text : "http://naver.com",
* width : 128,
* height : 128
* });
*
* oQRCode.clear(); // Clear the QRCode.
* oQRCode.makeCode("http://map.naver.com"); // Re-create the QRCode.
*
* @param {HTMLElement|String} el target element or 'id' attribute of element.
* @param {Object|String} vOption
* @param {String} vOption.text QRCode link data
* @param {Number} [vOption.width=256]
* @param {Number} [vOption.height=256]
* @param {String} [vOption.colorDark="#000000"]
* @param {String} [vOption.colorLight="#ffffff"]
* @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H]
*/
QRCode = function (el, vOption) {
this._htOption = {
width : 256,
height : 256,
typeNumber : 4,
colorDark : "#000000",
colorLight : "#ffffff",
correctLevel : QRErrorCorrectLevel.H
};
if (typeof vOption === 'string') {
vOption = {
text : vOption
};
}
// Overwrites options
if (vOption) {
for (var i in vOption) {
this._htOption[i] = vOption[i];
}
}
if (typeof el == "string") {
el = document.getElementById(el);
}
if (this._htOption.useSVG) {
Drawing = svgDrawer;
}
this._android = _getAndroid();
this._el = el;
this._oQRCode = null;
this._oDrawing = new Drawing(this._el, this._htOption);
if (this._htOption.text) {
this.makeCode(this._htOption.text);
}
};
/**
* Make the QRCode
*
* @param {String} sText link data
*/
QRCode.prototype.makeCode = function (sText) {
this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);
this._oQRCode.addData(sText);
this._oQRCode.make();
this._el.title = sText;
this._oDrawing.draw(this._oQRCode);
this.makeImage();
};
/**
* Make the Image from Canvas element
* - It occurs automatically
* - Android below 3 doesn't support Data-URI spec.
*
* @private
*/
QRCode.prototype.makeImage = function () {
if (typeof this._oDrawing.makeImage == "function" && (!this._android || this._android >= 3)) {
this._oDrawing.makeImage();
}
};
/**
* Clear the QRCode
*/
QRCode.prototype.clear = function () {
this._oDrawing.clear();
};
/**
* @name QRCode.CorrectLevel
*/
QRCode.CorrectLevel = QRErrorCorrectLevel;
})();

View file

@ -1,78 +0,0 @@
function regenerateQR() {
let username_field = document.getElementById('tabtopup-username');
let amount_field = document.getElementById('tabtopup-amount');
let qr_container = document.getElementById("tabtopup-qrcode");
let amountUnparsed = amount_field.value;
let username = username_field.value;
username_field.classList.remove('is-danger');
amount_field.classList.remove('is-danger');
qr_container.textContent = '';
let message_container = document.getElementById('tabtopup-message');
if (username == '') {
message_container.textContent = 'Please fill in username.';
username_field.classList.add('is-danger');
return;
}
else if (!(/^[a-z0-9A-Z\-_.]+$/.test(username))) {
message_container.textContent = 'Are you sure that ' + username + ' is your username? Most usernames only contain letters and numbers. If you\'re not sure what your username is, feel free to contact the board.';
username_field.classList.add('is-danger');
return;
} else if (amountUnparsed == '') {
message_container.textContent = 'Please fill in amount.';
amount_field.classList.add('is-danger');
return;
} else {
message_container.textContent = '';
}
let amount = parseFloat(document.getElementById('tabtopup-amount').value.replace(',', '.'));
message_container.textContent = username + ' will top up for ' + amount.toFixed(2) + ' euro. It might take a couple of days before this arrives on your Tab.';
let message = 'TAB ' + username;
if (message.length >= 80) {
message_container.textContent = 'Username too long.';
username_field.classList.add('is-danger');
return;
}
if (amount <= 0) {
message_container.textContent = 'Amount should be at least 0.01 euro (but preferably more of course).';
amount_field.classList.add('is-danger');
return;
}
let qr_data = generateQrCode({
name: 'Zeus WPI',
iban: document.getElementById('banknumber').textContent,
amount: amount,
unstructuredReference: message,
information: 'Zeus WPI Tab',
});
new QRCode(qr_container, {
text: qr_data,
width: 256,
height: 256,
correctLevel: QRCode.CorrectLevel.M
});
return;
}
window.onload = function() {
document.getElementById('tab-qr-button').addEventListener('click', function(event) {
event.preventDefault();
let modal = document.querySelector('.modal');
let html = document.querySelector('html');
modal.classList.add('is-active');
html.classList.add('is-clipped');
modal.querySelector('.modal-background').addEventListener('click', function(e) {
e.preventDefault();
modal.classList.remove('is-active');
html.classList.remove('is-clipped');
});
});
document.getElementById('tabtopup-username').addEventListener('input', regenerateQR);
document.getElementById('tabtopup-amount').addEventListener('input', regenerateQR);
regenerateQR();
}

View file

@ -66,13 +66,17 @@ table.board-table {
}
#contact-icons {
display: flex;
justify-content: center;
align-items: center;
> .column {
max-width: 40vw;
max-width: 70vw;
}
.contact-circle-option {
//display: block;
//max-width: 200px;
display: block;
max-width: 200px;
.contact-circle-wrapper {
display: block;

View file

@ -12,6 +12,7 @@
.titlewrap {
position: relative;
margin: auto;
min-width: 400px;
.title {
@include tablet {
@ -65,11 +66,21 @@
}
.blog-preview {
.blogpreview-extra {
color: #7a7a7a;
}
.blogpreview-tags {
color: #7a7a7a;
position: relative;
// Fadeout
&::after {
content: '';
position: absolute;
bottom: 20px;
left: 0;
/* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#ffffff+0,ffffff+100&0+0,1+100;White+to+Transparent */
background: -moz-linear-gradient(top, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(top, rgba(255,255,255,0) 0%,rgba(255,255,255,1) 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(to bottom, rgba(255,255,255,0) 0%,rgba(255,255,255,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#ffffff',GradientType=0 ); /* IE6-9 */
height: 100px;
width: 100%;
}
}

View file

@ -15,6 +15,7 @@ pre .line-numbers {
transition: all .15s ease;
box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);
}
a.box:hover {
@ -222,11 +223,3 @@ footer.footer {
.has-small-caps {
font-variant: small-caps;
}
.underline--magical {
background-image: -webkit-linear-gradient(to right, $zeus-orange, #FFFFFF); /* Chrome 10-25, Safari 5.1-6 */
background-image: linear-gradient(to right, $zeus-orange, #FFFFFF); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
background-repeat: no-repeat;
background-size: 100% 0.15em;
background-position: 0 99%;
}

View file

@ -30,14 +30,6 @@ $top_coder_size: 80px;
margin-left: 10px;
margin-right: 10px;
>h2 {
margin-bottom: 0;
}
>hr {
margin: 0.4rem 0;
}
.event-time-loc {
margin-left: 10px;
margin-right: 10px;

View file

@ -1,13 +1,15 @@
/* KEEP THIS VVVV */
/* HACK The following line of code does nothing. It only serves as a way for nanoc to recognize dependencies with all the sub scss files */
// <% @items.find_all('/assets/stylesheets/includes/*').each {|e| e.raw_content } %>
/* KEEP THIS ^^^^ */
@import "includes/variables";
@import "node_modules/bulma/bulma";
@import "node_modules/bulma-timeline/src/sass/index.sass";
@import "node_modules/bulma-divider/dist/css/bulma-divider";
@import "node_modules/bulma-timeline/dist/css/bulma-timeline";
// TODO: Remove this once FF64.0b2+ fixes this fustercluck
@-moz-document url-prefix() {
.tile {
min-height: auto;
}
}
// Sticky footer
body {
@ -39,4 +41,4 @@ body {
@import "includes/search";
@import "includes/about";
@import "includes/privacy";
@import "includes/toc";
@import "includes/toc";

View file

@ -1,9 +0,0 @@
---
title: Java-bot project.
created_at: 29-03-2001
---
Alle leden en geinteresseerden mogen meewerken aan het in Java programmeren van een irc-bot. Mail junk@zeus.rug.ac.be".
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,9 +0,0 @@
---
title: Linuxlessen online.
created_at: 03-12-2000
---
De lessen kunnen nu ook [gedownload](http://web.archive.org/web/20010303211508/http://www.zeus.rug.ac.be/linuxles.shtml#download) worden.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,8 +0,0 @@
---
title: Data Linuxlessen gekend!
created_at: 01-12-2000
---
Zeus WPI geeft terug Linuxlessen! Er zijn dit keer 4 lessen voorzien, met onder meer Linux-installatie en configuratie voor de beginnende gebruiker. Voor de gevorderde gebruiker hebben we enkele uiteenzettingen over firewalling, routing, samba, ... Om je in te schrijven volstaat een mailtje naar lessen@zeus.rug.ac.be met een vermelding van je naam, de les en het aantal aanwezige personen! Voor meer informatie ga je naar de [lessenpagina](http://web.archive.org/web/20001208193800/http://www.zeus.rug.ac.be:80/pub.shtml).
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,9 +0,0 @@
---
title: Nieuwe lessen in het verschiet.
created_at: 01-03-2001
---
Er worden terug lessen gegeven. Deze keer gaan ze over PHP, firewalling, ... Meer info volgt binnenkort.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,9 +0,0 @@
---
title: Mirrors bijgewerkt tijdens de vakantie
created_at: 01-10-2000 10:00
---
De mirrors van Zeus WPI (ftp.zeus.rug.ac.be) werden in de vakantie goed onderhouden, en verschillende nieuwe zaken werden toegevoegd of ge-updated. Zo hebben we ondermeer Debian 2.2 staan en Tucows met de nieuwe layout. We proberen altijd de recenste versies van alles te vinden. Indien iets ontbreekt aarzel dan zeker niet om ons te contacteren, zodat we onze diensten altijd kunnen uitbreiden naar de wensen van onze gebruikers.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,22 +0,0 @@
---
title: ZEUS WPI geeft PHP lessen.
created_at: 30-03-2001
---
Op 18, 25 april en 2, 9 mei geven we PHP lessen. Een niet te missen kans voor alle webmasters onder jullie. Meer info volgt binnenkort.
De Linux lessen kunnen nu ook [gedownload](http://web.archive.org/web/20010331094024/http://www.zeus.rug.ac.be:80/lessen/linuxles.shtml#download) worden.
_Update 01/05/2001_
Op 18, 25 april en 2, 9 mei geven we PHP lessen. Een niet te missen kans voor alle webmasters onder jullie. De lessenreeks is nu reeds halfweg. De teksten en de voorbeelden zijn beschikbaar via onderstaande link.
[Meer info, de teksten en de voorbeelden...](http://web.archive.org/web/20010429044958/http://www.zeus.rug.ac.be/lessen/phples.shtml)
_Update 19/05/2001_
De lessen van 2000-2001 zijn achter de rug. De lessenreeks over PHP oogste veel bijval. De lessen werden toegelicht met programmavoorbeelden en uitvoerige lesnota's. Je kan de lesnota's en de source-codes van de voorbeelden afhalen van de zeus-site.
[Meer info, de teksten en de voorbeelden...](http://web.archive.org/web/20010519194513/http://www.zeus.rug.ac.be:80/lessen/phples.shtml)
_Noot van de archivaris: de datum van deze blogpost en zijn updates is een schatting._

View file

@ -1,10 +0,0 @@
---
title: "ZEUS WPI's security pagina."
created_at: 31-03-2001
---
Er is gebleken dat er een grote nood is aan enkele webpagina's met uitleg over het hoe en waarom van security (of beveiliging voor de fanatiekelingen onder u). Vooral het hoe bleek een probleem te zijn.
Op de [security pagina](http://web.archive.org/web/20010331094024/http://www.zeus.rug.ac.be/security/) vindt u meer uitleg.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,8 +0,0 @@
---
title: Nieuwe site Zeus WPI
created_at: 02-10-2000
---
Vanaf vandaag is de nieuwe site van Zeus WPI online. De layout is grondig veranderd, maar de inhoud is ongeveer gelijk gebleven (alles wat er vroeger was is nu ook nog terug te vinden), en enkele nieuwe zaken werden toegevoegd. Dit is een eerste stap in de richting waarin we dit jaar willen gaan. We kiezen voor vernieuwing, en naar aanleiding van het 10-jarig bestaan van Zeus zullen nog andere dingen volgen. Hou ons in de gaten!
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,9 +0,0 @@
---
title: De Zeus t-shirts.
created_at: 02-12-2000
---
Ben jij een grafisch genie? Kun je overweg met een tekenpakket? Voel je je geroepen om het Zeus t-shirt te ontwerpen? Aarzel dan niet en ontwerp voor ons een t-shirt met het gekende [Zeus-logo](http://www.zeus.rug.ac.be/logos/logozeus.jpg). Ontwerpen kun je mailen naar ons [keurteam](mailto:tshirts@zeus.rug.ac.be). Na overleg met het bestuur wordt de mooiste/origineelste uit gekozen.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,10 +0,0 @@
---
title: Foto's van de verjaardag online!
created_at: 11-05-2001
---
Op 23 april vierde Zeus zijn 10-jarig bestaan met een korte receptie en een lange after-party in de BoomBoom. De foto's zijn te bezichtigen op onze site. Jammer genoeg zijn deze niet beschikbaar van buiten het RUGnet.
[Meer foto's...](http://web.archive.org/web/20031009082128/http://zeus.rug.ac.be/~jonas/)
_Noot van de archivaris: de datum van deze blogpost en zijn updates is een schatting._

View file

@ -1,13 +0,0 @@
---
title: Zeus dankt de lesgevers van de installatieles...
created_at: 28-11-2001
---
Hierbij willen we Bernard Grymonpon, Frank Louwers en Rudy Gevaert danken voor hun inzet voor de [installatieles](http://web.archive.org/web/20020802193359/http://www.zeus.rug.ac.be:80/pub.shtml). Alsook danken we de talrijke aanwezigen.
Als ook willen we onze verontschuldigingen aanbieden aan de aanwezigen, voor de ietwat hectische les. Dit kwam omdat Bernard de dag zelf past wist dat hij de les ging geven. Tom die de les normaal ging geven was geveld door de griep.
Na de les hebben we de X-server ook aan de praat gekregen (wat tijdens de les niet lukte), we gebruikten een verkeerde driver. Maw inspecteer uw hardware voor je begint te installeren.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,9 +0,0 @@
---
title: Blok
created_at: 26-05-2002
---
De examens staan voor de deur, dus dit academiejaar houden we het, wat de lessen betreft, voor bekeken.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,14 +0,0 @@
---
title: Latex les !
created_at: 01-03-2002
---
LaTeX is een taal waarmee men gemakkelijk documenten van hoge kwaliteit kan produceren. De kwaliteit slaat vooral op: het invoegen van wiskundige tekst op eenvoudige manier in een document, het maken van thesissen, het opstellen van brieven.
Kortom LaTeX is het vervangmiddel voor tekstverwerkingprogramma's als Word die doen wat je niet wilt, LaTex doet wat jij wilt.
De lessen gaan door op donderdag 07/03 en dinsdag 12/03, telkens op 18h30 in auditorium A0 in gebouw S9 van de campus Sterre.
Een gratis cursus tijdens de les ? Stuur een mailtje naar lessen@zeus.rug.ac.be.
_Noot van de archivaris: de aanmaakdatum van dit evenement is een schatting._

View file

@ -1,9 +0,0 @@
---
title: ZEUS WPI zoekt nieuwe leden
created_at: 01-10-2001
---
Ben je een nieuwe student, heb je interesse in de informatica? Word dan [lid](http://web.archive.org/web/20011127170659/http://www.zeus.rug.ac.be:80/newlid.shtml) van Zeus.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,9 +0,0 @@
---
title: Zeus geeft linuxles.
created_at: 27-11-2001
---
Op dinsdag 20/11 en 27/11 geven we terug Linuxles. Meer info op de [lessen](http://web.archive.org/web/20020802193359/http://www.zeus.rug.ac.be:80/pub.shtml)pagina.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,9 +0,0 @@
---
title: ZEUS WPI geeft PHP lessen
created_at: 13-03-2001
---
Op 15,18,22 en 25 april geeft ZeusWPI een lessenreeks over PHP.
_Noot van de archivaris: de datum van deze blogpost en zijn updates is een schatting._

View file

@ -1,8 +0,0 @@
---
title: Onze lang verwachte C-lessen
created_at: 10-02-2003
---
Vanaf woensdag 19/2 begint Geert Vernaeve aan zijn legendarische C-cursus. 4 inleidingslessen leiden je in in de wondere wereld van programmeren in C. Heb je altijd al willen helpen aan een van die Open Source (sorry.. Vrije) projecten, of wil je verder kijken dan je java-neus lang is, schrijf je dan in op lessen at zeus.ugent.be . Als je een gedrukte cursus wenst (meer info [hier](http://web.archive.org/web/20030321012833/http://www.zeus.rug.ac.be:80/c.shtml)), vergeet dat ook niet te vermelden in je mailtje.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,24 +0,0 @@
---
title: Externe bereikbaarheid
created_at: 08-07-2003
author: Olivier Verhoogen
---
Hallo!
Zoals sommigen onder jullie wel al gehoord, gemerkt en/of op
bovennatuurlijke wijze aangevoeld hebben is Zeus vanaf heden ook van
buiten (R)UGnet bereikbaar. We gaan bovendien tijdens de zomermaanden
(hoezo 2e zit?) serieus aan onze setup sleutelen zodat we het komende
academiejaar kunnen starten zoals het een werkgroep informatica betaamt.
Het is uit veiligheidsoverwegingen voorlopig wel niet mogelijk nieuwe
connecties van op een zeus-machine naar buiten te starten.
Het zal nog even wachten zijn op koele dingen als CVS respositories, MySQL
databases en dergelijke meer. Het is ondertussen wel weer mogelijk om op
de conventionele manier PHP te gebruiken.
Enjoy!
Het admin team,
Het bestuur.

View file

@ -1,9 +0,0 @@
---
title: FreeBSD cvsup mirror
created_at: 02-02-2003
author: Kenneth
---
Op hermes.rug.ac.be is nu tevens een cvsup mirror te vinden van FreeBSD. Mensen die FreeBSD gebruiken kunnen hun sources dus syncen via hermes.rug.ac.be; via ftp zijn tevens de packages te vinden. Je kunt die dus beter via hermes downloaden ipv de mastersites nog extra te belasten.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,8 +0,0 @@
---
title: Nieuw hardwareproject
created_at: 23-11-2002
---
Een netwerkje van oude computers ineenknutselen.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,9 +0,0 @@
---
title: Kernel-les
created_at: 15-03-2003
---
Download [hier](http://web.archive.org/web/20030528113017/http://www.zeus.rug.ac.be:80/kernel_introductie.pdf) de les over de linux-kernel, gegeven door Bart De Schuymer.
Meer info op zijn [project-page](http://web.archive.org/web/20030801141805/http://zeus.rug.ac.be/~bdschuym/) (RUGnet intern).
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,8 +0,0 @@
---
title: Listserver
created_at: 22-11-2002
---
Ja die werkt terug!
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,9 +0,0 @@
---
title: Interessante mailinglists
created_at: 20-03-2003
---
Onlangs werden bij Zeus twee nieuwe mailinglists opgericht, nl. help@zeus.rug.ac.be en announce@zeus.rug.ac.be. Hoe u kan inschrijven leest u [hier](http://web.archive.org/web/20030502094002/http://www.zeus.rug.ac.be/mailinglists.shtml).
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,8 +0,0 @@
---
title: Zeus Mirror
created_at: 21-11-2002
---
Onze mirror is nu ook bereikbaar via rsync.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,8 +0,0 @@
---
title: O'reilly reviews
created_at: 24-11-2002
---
O'reilly heeft ons een tijdje terug 4 boeken opgestuurd om te [reviewen](http://web.archive.org/web/20021124131950/http://www.zeus.rug.ac.be:80/reviews/). Dit is nu gebeurd. Bedankt aan O'reilly en de reviewers.
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,8 +0,0 @@
---
title: Zeus Projecten Pagina
created_at: 20-11-2002
---
De zeus projecten pagina is geactualiseerd naar 2002-2003, zie [Projecten](http://web.archive.org/web/20021207222624/http://www.zeus.rug.ac.be/projects.shtml).
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,8 +0,0 @@
---
title: Overleven op RUGnet
created_at: 30-09-2002
---
"Overleven op RUGnet" is nu ook [on-line](http://web.archive.org/web/20021004042945/http://www.zeus.rug.ac.be/overleven/) te raadplegen!
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,10 +0,0 @@
---
title: Zeus en voyeurisme
created_at: 17-03-2003
---
Is er momenteel iemand in de Zeuskelder? Ga ik er niet voor een gesloten deur staan? Zit je ook soms met die prangende vragen, vooraleer je naar de kelder komt, dan bestaat daar nu een handige oplossing voor. Er hangt nl. een webcam in de kelder, die om de paar seconden een beeldje doorstuurt, waarop je kan ziet wat er bij Zeus momenteel aan de hand is. De beelden kan je bekijken op [NaN's homepagina](http://www.zeus.rug.ac.be/~kris/zeus.jpg) (RUGnet intern).
En aan iedereen die van plan is de Zeuskelder leeg te komen halen: We're watching you!
_Noot van de archivaris: de datum van deze blogpost is een schatting._

View file

@ -1,8 +0,0 @@
---
title: Generieke gelukwensen
created_at: 24-12-2003
author: Olivier Verhoogen
---
Ik zou namens het bestuur en de admin alle leden (en de toevallige meekijkers ook wel) een vrolijk kerstfeest en een gelukkig nieuwjaar willen toewensen. Of vertaald naar de minder gelukkigen onder ons: een voorspoedige blok en een geslaagde eerste examenperiode!

View file

@ -1,9 +0,0 @@
---
title: LaTeX-lessen
created_at: 15-10-2003
author: Kenneth
---
Op maandag 27 oktober en maandag 3 november om 18u, geeft Gaspard 2 lessen over LaTeX. Dus als je meer wil weten over deze professionele typesetting-language, kom dan zeker af naar auditorium A0, S9, Campus De Sterre. Stuur vooraf wel even een mailtje naar lessen@zeus.UGent.be, met de vermelding of je een gedrukte cursus wil. Tot dan.
Update: De nieuwe cursus staat nu ook online. Je kan hem vinden onder publicaties.

View file

@ -1,9 +0,0 @@
---
title: PHP lessen
created_at: 01-04-2004
author: Rudy Gevaert
---
Zeus geeft nog es les.
De vier eerste maandagen na de paasvakantie, dat zijn 19 en 26 april en 3 en 10 mei, geeft Simkin 4 PHP-lessen, telkens om 18.00u. Wil je komen stuur dan een mailtje naar lessen @ zeus . ugent . be.

View file

@ -1,9 +0,0 @@
---
title: Les, les en nog eens les
created_at: 07-03-2004
author: Kenneth
---
Op 18 maart om 19.00 geeft Mattias Campe een introductie tot het IM-protocol **Jabber**.
In samenwerking met de Werkgroep Vrije Software van het VTK gaat er nog een les door over **Mandrake** op 22 maart, een **GNU/Linux**-introductieles op 25 maart, en een **LaTeX**-les op 22 april.
De vier eerste maandagen na de paasvakantie tenslotte, dat zijn 19 en 26 april en 3 en 10 mei, geeft Simkin 4 **PHP**-lessen, telkens om 18.00u.

View file

@ -1,11 +0,0 @@
---
title: Gent OntgroenD
created_at: 08-10-2003
author: Olivier Verhoogen
---
Op dit eigenste moment gaat er in zaal Kunstzicht in resto Overpoort een mega verenigingenshowofftoestand door. Natuurlijk is ook Zeus WPI vertegenwoordigd! Voor die arme mensen die hier al de fun moeten missen hebben we rap een webcampaginaatje in elkaar gefoefeld.
In zoverre Lieven zijn macje het niet nog eens begeeft kan je live meevolgen op ons [kassa IP](http://overes15.ugent.be/). NaN heeft ook een paar snapshots genomen met de digicam van zijn nonkel. Die zijn te bezichtigen op zijn (nieuwe) [site](http://web.archive.org/web/20031128075228/http://www.zeus.ugent.be/~kris/gallery/view_album.php?set_albumName=gentontgroend&page=1).
UPDATE (1650CEST): Het vat is af... dus we zijn voort.

View file

@ -1,25 +0,0 @@
---
title: Zeus T-shirts!
created_at: 01-09-2003
author: Olivier Verhoogen
---
Weledelgeboren leden van de Werkgroep Publieke Informatica,
Na veel (en af en toe ook wel wat minder) geduld staat het er eindelijk
toch van te komen: er worden opnieuw Zeus T-Shirts gedrukt!
Origineel als we zijn kiezen we voor een zwart shirt met langs voor een
klein Zeus logo en langs achter de reeds welbekende adminspotting tekst
(zo niet: zie www.adminspotting.org). De om en bij volledige gelijkenis
met de vorige editie shirts berust hierbij uiteraard geheel op toeval.
Zie je het wel zitten om je kleerkast aan te vullen met een (of meerdere)
shirts van je favoriete werkgroep? Schrijf dan snel per gewenst exemplaar
8 euro over op rekeningnummer 979-9937065-02. Vermeld in de mededeling
duidelijk je loginnaam, het gewenste aantal shirts alsook de gewenste
maten (M, L of XL).
Ik plaats de bestelling in de week van 22 september dus zie dat je
overschrijving uiterlijk tegen dan is voltrokken. Met een beetje geluk
krijg je dan je eigenste exempla(a)r(en) al op de eerste ledenvergadering.

View file

@ -1,10 +0,0 @@
---
title: Updates
created_at: 16-02-2004
author: Kenneth
---
Een nieuw semester, nieuwe gewoontes. De nieuwe openingstijden van de kelder vind je onder Kelderpermanenties.
Ook zijn er nieuwe versies beschikbaar van onze XHTML/CSS en LaTeX-lessen. Nog steeds te vinden onder Publicaties.

View file

@ -1,8 +0,0 @@
---
title: Webcam online
created_at: 30-10-2003
author: Kenneth
---
De webcam is terug online! Ons nerdzijn is hier te bewonderen. Het is de bedoeling de boel volledig streaming te maken als project.

View file

@ -1,11 +0,0 @@
---
title: Website Update
created_at: 19-04-2004
author: Kenneth
---
De site onderging een kleine update. Enkele van de wijzigingen:
- er is een nieuwe categorie toegevoegd: in het fotoboek kunt u foto's bekijken van voorbije Zeus-activiteiten
- bij publicaties kunt u nu ook de cursus over de Linux kernel downloaden
- de verslagen zijn up-to-date gebracht

View file

@ -1,9 +0,0 @@
---
title: lessen XHTML / CSS
created_at: 08-11-2003
author: Kenneth
---
Op woensdag 3 en 10 **en 16** december organiseert Zeus lessen over XHTML en CSS. Kijk snel op de [lessenpagina](http://web.archive.org/web/20031124172524/http://zeus.rug.ac.be:80/index.php?include=lessen).

View file

@ -1,15 +0,0 @@
---
title: C-lessenreeks & Linux kernel les
created_at: 15-03-2005
author: Lieven
---
Programmeurs en aspirant-programmeurs opgelet!
Op **21 en 23 maart** en op **11 april** leert gnorkende guru Geert Vernaeve ons in drie keer het fijne van de **programmeertaal C**. Om daarna onze kunde eens aan de praktijk te toetsen vertelt Bart De Schuymer ons op **13 april** wat meer over de binnenkant van de **linux kernel**.
We beginnen telkens om **19u00 in auditorium A0**. Dat is als vanouds op campus De Sterre in gebouw S9 op het gelijkvloers.
Beide lesgevers voorzien een **begeleidende cursus**. Wil je een gedrukt exemplaar? Mail dan op voorhand even naar clessenreeks at zeus.ugent.be . Je kopie ligt dan klaar bij het begin van de eerste les. De kostprijs zal hoogstens de drukkosten evenaren.
[klik hier om de affiche in PDF-formaat te downloaden](http://web.archive.org/web/20050513102651/http://www.zeus.ugent.be/~simkin/affiches/affiche-c.pdf)

View file

@ -1,11 +0,0 @@
---
title: Studenten Tegen Softwarepatenten
created_at: 21-05-2005
author: Wim De Smet
---
Volgende week woensdag (25 mei) vindt er een algemene actie plaats tegen softwarepatenten, georganiseerd door studenten van de verschillende universiteiten. Bij zeus steunen we dit natuurlijk van harte.
Voor zij die geinteresseerd zijn in iets te doen op die dag, kijk voor meer info op:<br>
[http://wiki.vrijschrift.org/StudentenTegenSoftwarePatenten](http://web.archive.org/web/20050830053612/http://wiki.vrijschrift.org/StudentenTegenSoftwarePatenten)

View file

@ -1,9 +0,0 @@
---
title: "Activiteiten deze week: poolen en les debian Package Management"
created_at: 07-03-2006
author: Wim De Smet
---
Dinsdag 07/03 gaan de leden van Zeus poolen. Hierbij een kleine herinnering aan de ingeschreven leden om vanavond aanwezig te zijn aan de Stars and Stripes.
Verder komt woensdag 08/03 Luk Claes ons wat uitleg doen over packages in Debian: hoe zitten ze in elkaar, hoe maak je ze zelf, vragensessie, ... De les gaat door in Auditorium A0 in de Sterre S9 om 19:30. Be there.

View file

@ -1,7 +0,0 @@
---
title: Onderhoud servers Zeus
created_at: 16-05-2006
author: Wim De Smet
---
De servers van Zeus zullen di 16 mei tussen 18:00 en 23:00 in onderhoud zijn dus er zal slechts beperkte functionaliteit zijn tijdens deze periode.

View file

@ -1,11 +0,0 @@
---
title: Details nieuwe softwareprojecten zeus
created_at: 28-10-2005
author: Wim De Smet
---
Programmeurs en aspirant-programmeurs opgelet!
Zoals op de ledenvergadering besloten (het verslag komt er hopelijk binnenkort aan) zullen enkele gezamenlijke projecten onder zeusleden gelanceerd worden. Momenteel is er nog geen streepje code en enkel een nieuwe mailinglist: projecten AT zeus dot ugent.be. [Schrijf je in](https://lists.zeus.ugent.be/cgi-bin/mailman/listinfo/projecten) en hopelijk kunnen we dan binnenkort aan het eerste project beginnen (dat zou een jabberbotje zijn in python geschreven).
Binnenkort komt naast die website nog een subversion repository. (info over subversion [hier](http://web.archive.org/web/20070214144045/http://subversion.tigris.org/)) Misschien ook interessant voor projectjes die de arme studenten onder ons moeten maken. Laat ons iets weten op de projecten mailinglist als je zin hebt om mee te doen.

View file

@ -1,10 +0,0 @@
---
title: Stroompanne in de kelder
created_at: 29-05-2006
author: appel
---
De voeding van timmy (een van onze desktop pc's in de Zeus kelder) heeft de geest gegeven,
hij zag het leven niet meer zitten en nam zo de helft van onze kelder met zich mee naar de duisternis.
Onze excuses voor de lange stroompanne, maar wegens het verlengde weekend konden wij het probleem niet verhelpen.
Alles zou nu terug normaal moeten werken.

View file

@ -1,9 +0,0 @@
---
title: Zeus Webcam terug operationeel
created_at: 06-12-2005
author: Wim De Smet
---
Vanaf vandaag is de zeus webcam weer beschikbaar via de link onder "Intern" of [klik hier](http://web.archive.org/web/20070214092156/http://zeus.ugent.be:2080/index.php?menu_item=54).

View file

@ -1,9 +0,0 @@
---
title: "Webdev-Lessenreeks: De Pagina"
created_at: 28-12-2005
author: Lieven
---
Zoals beloofd heb ik [een aantal links, voorbeeldjes en het cursusmateriaal](http://web.archive.org/web/20070730125059fw_/http://zeus.ugent.be:2080/index.php?module=webpage&action=view&i_id=124) van de voorbije webdev-lessenreeks online geplaatst.
Veel plezier ermee, en Happy Coding!

View file

@ -1,33 +0,0 @@
---
title: "De webdev reeks van Zeus: XHTML, CSS en PHP"
created_at: 24-11-2005
author: Wim De Smet
---
We openen een leeg tekstbestand en overlopen de hele weg naar je eigen stek op het Internet. Heb je dus altijd al wel eens een website willen maken... of kan een grondige heropfrissing van je skills geen kwaad? Kom dan zeker eens kijken! Voorkennis is niet vereist.
Wanneer? Waar? Hoe?
De lessen gaan door op 29 november en op 1, 7, 8, 13 en 15 december. We starten telkens om 20u, in auditorium A0. Dat is op campus De Sterre in gebouw S9 op het gelijkvloers.
Voor de liefhebbers worden er gedrukte cursussen voorzien. Had je graag een exemplaar van onze XHTML/CSS- of PHP-cursus bemachtigd, stuur dan op voorhand een mailtje naar cursus at zeus.UGent.be. (Geef wel duidelijk aan welke van beide cursussen je juist wil.) Voor leden zijn de cursussen gratis, voor de anderen zal de kostprijs niet groter zijn dan de drukkosten.
_Hieronder vind je een overzicht van de onderwerpen die we in elke les zullen behandelen. Elke les staat zoveel mogelijk op zichzelf. Je krijgt dus hopelijk zo min mogelijk dingen te horen die je eigenlijk al weet._
**Les1**: XHTML
Allereerst zien we hoe we de concrete inhoud van onze webpagina op een gestructureerde manier kunnen uitdrukken.
**Les2**: CSS
Dan leren we de lay-out eigenschappen bepalen waarmee de verschillende componenten van onze site - zoals de verschillende blokken tekst, het menu en dergelijke meer - juist zullen worden weergegeven.
**Les3**: PHP: Inleiding tot programmeren
Voor we uitleggen hoe je wat meer dynamische inhoud aan je pagina kan toevoegen geven we eerst nog een snelcursus programmeren.
**Les4**: PHP: Hot Topics
We behandelen kort de installatie van het nodige om op je eigen PC dynamische sites te kunnen bekijken. Daarna gaan we in op een aantal courante onderwerpen zoals het werken met invoervelden, het benaderen van databanken en dergelijke meer.
**Les5**: PHP: Learn-by-example
Om wat gewend te raken aan het programmeren van websites behandelen we een aantal korte voorbeelden.
**Les6**: PHP: Een uitgewerkte case
Tot slot kijken we naar een wat groter en meer realistisch voorbeeld van een website in zijn geheel.

View file

@ -1,15 +0,0 @@
---
title: Hier zijn we weer...
created_at: 06-12-2006
author: Thomas Meire
---
We weten het, we weten het: het was stil op de site, te stil. Stilte voor de storm?
Een storm zit er niet meteen aan te komen, maar we hebben toch niet stilgezeten de laatste tijd. Er bleven nog wat subsidies van vorig jaar over die op moesten, en daarmee werden 2 nieuwe workstations gekocht om ons machinepark uit te breiden: bebe (een MacMini - inclusief een splinternieuw 19" tft-scherm) en Jesus (een amd64). Sinds cartman gepromoveerd werd tot nfs-server, bleven alleen timmy en chef over als workstation. Het was dus hoog tijd voor uitbreiding 😉
Aanwisten zijn allemaal tof en geestig, maar die bakjes moeten geconfigureerd worden ook. En van die gelegenheid zullen we gebruikmaken om de volledige structuur van ons machinepark te herbekijken. We zouden dit op de volgende adminavond doen, en deze zou ergens in de komende week vallen (11/12 tot 15/12). We moeten juist nog eens kijken welke dag het best past voor de meesten onder ons.
Naast onze alledaagse geekie bezigheden, willen we ons natuurlijk ook outen als sociaal begaafde wezens. Vandaar dat we ook nog eens een pool- of ribbetjes-avond zullen organiseren. Liefst nog voor de kerstvakantie, anders zal het waarschijnlijk pas na de examens vallen. En aangezien de komende week de enige lesweek is, is het misschien het gemakkelijkst om het ook in die week te doen? Misschien eerst adminnen en daarna ons buikje rond eten?
Hoedanook, lieve vrienden, laat uw stem horen en vertel ons wanneer je vrij bent om te adminnen/eten/poolen via "bestuur AT zeus.ugent.be". De definitieve data zullen zeker nog tijdig op de site gepost worden, so stayed tuned for more...

View file

@ -1,13 +0,0 @@
---
title: Mail op je zeus-account...
created_at: 28-02-2007
author: Thomas Meire
---
Blijkbaar zijn er sinds de laatste adminavond enkele problemen met de e-mail. Dit is grotendeels te wijten aan het feit dat niet alle taken reeds uitgevoerd zijn.
Mensen met problemen kunnen ssh-en naar zeus.ugent.be, en daarna verder ssh-en naar kenny. Op kenny kan je dan nog je mail raadplegen aan de hand van pine of mutt. Indien je onlangs je paswoord veranderd hebt, en je imap gebruikt om je mail te bekijken, dien je je oude wachtwoord nog in te geven.
Mensen met andere problemen kunnen altijd mailen naar admin at zeus.ugent.be .
Maandag (05/02/2007) is er een adminavond en gaan we proberen een nieuwe mailserver in gebruik te nemen.

View file

@ -1,7 +0,0 @@
---
title: Zeus netwerk problemen
created_at: 18-04-2007
author: Wim De Smet
---
Vlak voor het weekend vorige week is een gateway gecrasht vanwege een slechte videokaart. Hierdoor waren de website e.a. stukken van onze infrastructuur een aantal dagen onbereikbaar. De problemen zouden nu moeten opgelost zijn, onze excuses voor enige overlast.

View file

@ -1,11 +0,0 @@
---
title: Overleven op het UGentNet
created_at: 18-12-2006
author: Thomas Meire
---
In 2002 brachten we voor het eerst de gids "Overleven op het UGentNet" uit, in samenwerking met de faculteit Bio-Ingenieurswetenschappen. Deze gids verschaft de UGent-student alle nodige informatie om gebruik te maken van alles wat het computernetwerk van de UGent te bieden heeft.
De voorbije jaren werd de gids onderhouden en bijgewerkt door Gaspard Lequeux en David De Wolf. Vanaf vandaag staat de meest recente versie terug op onze website, onder [Publicaties](https://zeus.ugent.be/index.php?menu_item=23). Deze zal vanaf nu ook permanent bijgewerkt worden, en volgend jaar verschijnt waarschijnlijk weer een gedrukte versie die verspreid zal worden over verschillende faculteiten en universitaire gebouwen.
Veel plezier ermee:
[Overleven op UGentNet](http://web.archive.org/web/20070702045236/https://zeus.ugent.be:2443/index.php?module=webpage&action=view&i_id=128)

View file

@ -0,0 +1,6 @@
---
title: ThermiLAN -- AFGELAST
created_at: 12-03-2007
---
Lanparty in samenwerking met het VTK en het WiNA

View file

@ -1,11 +0,0 @@
---
title: Ubuntu CD's
created_at: 14-12-2006
author: Thomas Meire
---
Deze zomer hadden we een aantal ubuntu cd's besteld om linux te verspreiden op de unif. Uiteindelijk was het zo ver: de cd'tjes zijn uitgedeeld aan de 1ste bachelors informatica. Dit semester is er helaas geen tijd meer voor een introductie tot linux, maar verwacht je er volgend semester maar aan - een datum is nog nader te bepalen.
Er zijn nog cd'tjes over, dus mensen die nog eentje willen, moeten maar eens langskomen in de kelder, of mailen naar bestuur at zeus.ugent.be . De cd'tjes zullen ook beschikbaar zijn op de introductieles.
(De cd's bevatten versie 6.06 LTS. Dit is niet de meest recente versie, maar wel de meest recente versie met Long Term Support (LTS), een langere ondersteuningstijd dus.)

View file

@ -1,13 +0,0 @@
---
title: Webcam terug operationeel...
created_at: 11-10-2006
author: Thomas Meire
---
Nadat de webcam een heel eind buiten strijd geweest is, staat hij nu weer op zijn beide benen. Het is nog niet de flashy flash-versie die appel voor ogen had, maar - and I quote relix - "de vrouwen kunnen ons nu toch al weer zien".
Voor de gluurders onder ons, cammie staat nog altijd op zijn zelfde plaatsje.
Have fun with it!
EDIT 14/10/1006:
Na heel wat geklooi met de firewalls van de gateways en een browser met de initialen IE, kan iedereen eindelijk genieten van bewegende webcambeelden, zelfs Operanen...
En mocht er nog een browser zijn waarin het niet werkt, laat het me dan weten via webmaster AT zeus.ugent.be

View file

@ -9,7 +9,7 @@ Hoi hoi,
Als nieuw event-persoon zijn er ineens heel veel dingen die moeten gebeuren, waaronder het maken van posters. Ik had nog nooit een poster gemaakt en voor het eerste event kreeg ik dan ook hulp van Noctua, die een zalige poster voor onze Linux Install party maakte. (Bekijk hem zeker!)
Maar ja, ik moet toch ooit ook eens zelf een poster maken, nee? Op aanraden van Noctua ging ik dus aan de slag met [Inkscape](//inkscape.org/), een relatief simpel programma waar je heel toffe vectorafbeeldingen mee kunt maken. Hetgeen fantastisch is aan dit formaat (.svg) is dat je eindeloos kan zoomen, wat dus inhoudt dat je een kleine afbeelding op een grote poster kunt zetten, zonder dat je die vieze pixels te zien krijgt! Daarnaast kan je er natuurlijk ook eenvoudiger dingen mee doen, onze $$\LaTeX$$ poster bvb bestaat uit een logo, een afbeelding (gephotoshopped door Don) en dan wat tekst met alle info. Ik vond dit alvast een goed begin ;)
Maar ja, ik moet toch ooit ook eens zelf een poster maken, nee? Op aanraden van Noctua ging ik dus aan de slag met [Inkscape](//inkscape.org/), een relatief simpel programma waar je heel toffe vectorafbeeldingen mee kunt maken. Hetgeen fantastisch is aan dit formaat (.svg) is dat je eindeloos kan zoomen, wat dus inhoudt dat je een kleine afbeelding op een grote poster kunt zetten, zonder dat je die vieze pixels te zien krijgt! Daarnaast kan je er natuurlijk ook eenvoudiger dingen mee doen, onze LaTeX poster bvb bestaat uit een logo, een afbeelding (gephotoshopped door Don) en dan wat tekst met alle info. Ik vond dit alvast een goed begin ;)
En hetgeen Inkscape helemaal fantastisch maakt is dat de gehele software Free en open source is, een Zeus-approved sticker zou dus helemaal op z'n plaats zijn.

View file

@ -3,8 +3,6 @@ title: "Zeus en Corona"
created_at: 11-03-2020
description: Corona en de invloed ervan op Zeus WPI
author: Robbe Van Herck
tags:
- Corona
---
Beste Zeussers en Zeusinnen,

View file

@ -4,8 +4,6 @@ title: "Het vervolg op het avontuur van de Vleor"
created_at: 07-07-2020
description: Eindelijk, de Zeuskelder heeft weer een nieuwe vloer!
toc: true
tags:
- vloer
---
**vleor** (_de; m;_ meervoud: _vleoren_)

View file

@ -1,103 +0,0 @@
---
title: "De geschiedenis in met Zeus"
created_at: 10-05-2021
description: "den nostaligschen tour op met Zeus"
author: "Niko Strijbol"
---
Wie onze site bezoekt heeft nu een hoop leesvoer bijgekregen: de evenementen en blog gaan nu terug tot het jaar 2000!
In deze blog staat kort wat/hoe er toegevoegd is, en daarna wat leuke dingen over het Zeus van weleer.
## Wat en hoe?
De eerste zin zei het al: de blog en evenementen zijn aangevuld tot het academiejaar 2000-2001.
Omdat er in die tijd nog geen onderscheid was tussen blog en evenement, zijn enkel de blogposts die één-op-één overeenkwamen met een evenement ook zo toegevoegd.
Blogposts die meerdere evenementen beschrijven zijn nog steeds een blogpost.
De meeste informatie is afkomstig van de [Wayback Machine](http://web.archive.org/) (❤️ Wayback Machine).
Het is vooral een kwestie van te bepalen onder welke domeinnaam de informatie staat. Gelukkig heeft Zeus er al een aantal gehad (waardoor de kans dat een bepaalde pagina ergens opgeslagen is groter wordt):
- `zeus.ugent.be` - Dé domeinnaam (al is dat nu meer en meer `zeus.gent`). Eerste snapshot op dit domein dateert van [**8 mei 2003**](http://web.archive.org/web/20030508164101/http://www.zeus.ugent.be/).
- `zeus.rug.ac.be` - Basically hetzelfde als hiervoor, toen de UGent nog de RUG (Rijksuniversiteit Gent) was. Het eerste snapshot hier is van [**5 oktober 1999**](http://web.archive.org/web/19991005232153/http://www.zeus.rug.ac.be/).
- `student.rug.ac.be/zeus` - Het webadres van Zeus bij de Dienst StudentenActiviteiten. Hier is het oudste snapshot genomen op [**15 februari 1998**](http://web.archive.org/web/19980215073116/http://www.student.rug.ac.be/zeus/).
Hoewel het oudste snapshot dus 15 februari 1998 is, werken de meeste foto's niet in dat snapshot om een of andere reden (met uitzondering van dit [logo](http://web.archive.org/web/19990202142442/http://student.rug.ac.be/zeus/pics/zeus_k1.gif), het oudste logo van Zeus dat ik gevonden heb).
Het oudste, deftig werkend snapshot is dat van 5 oktober 1999.
De eerste versies van de website met nieuws op de startpagina verschijnen rond het jaar 2000; vanaf dan zijn alle gevonden gegevens overgezet (er zijn er [een aantal](http://web.archive.org/web/19990913001946/http://www.zeus.rug.ac.be/hotnews.shtml) van 1999, maar onze huidige site heeft moeite met 1999, dus dat zal voor een andere keer zijn).
Dat overzetten gebeurde handmatig: uiteindelijk heeft dat twee of drie uurtjes in beslag genomen, waarschijnlijk minder lang dan als ik daar een script voor zou geschreven hebben. Waar mogelijk zijn de links vervangen door links naar de Wayback Machine, zodat de context van de blogposts en evenementen zo goed mogelijk bewaard bleef.
Een klein deel van de evenementen komt ook uit de archieven van de [mailinglijst voor de leden](https://lists.zeus.ugent.be/pipermail/leden/).
De archieven lopen van 2003 tot 2015, en zijn ook altijd interessant om te lezen (ze bevatten in het begin vooral het soort aankondigingen dat nu gebeurt via Mattermost).
## Waarom?
Enerzijds omdat het leuk is als er gearchiveerde data bestaat en ik, zoals iedereen, thuis zit en dus wat tijd had.
Anderzijds kan het nut hebben: oud-leden uit die tijd kijken misschien graag vol nostalgie terug (naar bv. [het bezoek aan een brouwerij](<%= @items['/events/05-06/brouwerijbezoek.md'].path %>)).
Nieuwere leden willen misschien inspiratie opdoen over hoe het er vroeger aan toe ging.
Spoilers:
- sommige dingen veranderen (over [PHP](<%= @items['/blog/00-01/php-lessen.md'].path %>) [zal](<%= @items['/blog/03-04/les-2.md'].path %>) [waarschijnlijk](<%= @items['/blog/05-06/webdev.md'].path %>) niet snel nog eens les gegeven worden)
- andere zijn wat verloren geraakt (de [traditionele](<%= @items['/events/03-04/ribben.md'].path %>) [Ribbetjesavond](<%= @items['/events/02-03/ribben.md'].path %>) wordt nu soms anders ingevuld)
- nog andere zaken blijven hetzelfde (zoals het [verkiezen van een nieuw bestuur](<%= @items['/events/05-06/ledenvergadering-3.md'].path %>) of [cammie](<%= @items['/blog/02-03/voyeur.md'].path %>), die [af en toe](<%= @items['/blog/05-06/webcam.md'].path %>) werkt).
## Intermezzo: DSA is een Zeusproject?
Een nog ouder snapshot vinden we van de [homepage van de Dienst StudentenActiviteiten](http://web.archive.org/web/19971222130916/http://student.rug.ac.be/), van 22/12/1997.
Omdat veel leden van Zeus bij DSA werk(t)en heb je waarschijnlijk de _running gag_ al wel gehoord: "DSA is een Zeusproject".
Nu, wat staat er onderaan de pagina van de DSA in 1997?
> Deze pagina werd ontwikkeld en is onderhouden door ZEUS
🤔
## Wat is Zeus?
We kijken terug naar wat Zeus toen was, om te vergelijken met Zeus in haar huidige vorm.
Herkennen we onszelf daar nog in?
De [geschiedenispagina op de oudste snapshots](http://web.archive.org/web/19980221043915/http://student.rug.ac.be:80/zeus/history.shtml) is nog exact hetzelfde als onze huidige geschiedenispagina, zij het dat de nieuwe versie wat aangevuld is.
Dit is dus niet bijster interessant.
Interessanter is de pagina [_Wat is Zeus WPI?_](http://web.archive.org/web/19980221043835/http://student.rug.ac.be:80/zeus/infozeus.shtml), waarvan we enkele fragmenten kunnen bekijken:
> Zeus WPI staat voor Zeus Werkgroep Informatica. Deze werkgroep richt zich tot alles wat met informatica te maken heeft. [...] Het grootste doel van Zeus WPI is het grote publiek bekend maken met alles wat informatica aangaat.
Zeus WPI werd gesticht in 1991, en heette toen nog Zeus Werkgroep Publieke Informatica. De volledige levenswandel van de werkgroep bestaat ook samengevat. [...]
We kunnen leren dat in 1998 de W**P**I al achterhaald was, zoals het nu nog steeds is.
> We hebben verschillende doelstellingen binnen Zeus WPI. Een algemeen doel is altijd het helpen van de informaticaleek en de informaticafreak op ieder vlak. Daar dit wel een heel complexe en grote zaak is hebben we enkele kleinere doelstellingen opgesteld:
Het verspreiden van de verschillende nieuwste shareware programma's die nuttig kunnen zijn voor de studenten en personeelsleden van de universiteit. (Hier speelt natuurlijk onze FTP-server een belangrijke rol).
Het helpen van de beginnende internetgebruikers aan de RUG. (We bieden verschillende folders aan zoals het alom bekende overleven op RUGnet)
Het geven van raad aan iedereen die er nodig heeft.
Sinds kort houden we er ook nog andere taken op na, zoals het onderhouden van verschillende webservers aangesloten op RUGnet.
Het laatste stukje op deze pagina is nog het meest veranderd: Zeus biedt namelijk geen mirrors meer aan en staat niet meer in voor de distributie van software of cursussen (ook het organiseren van lessen gebeurt nog slechts sporadisch).
Andere dingen zoals het geven van raad aan eender wie de kelder binnenwandelt gebeurt nog steeds.
## Zelf rondsnuisteren
Er zijn nog interessante pagina's op die snapshots:
- [De mirrors](http://web.archive.org/web/20000608202730/http://www.zeus.rug.ac.be/mirrors.shtml), als je eens wilt zien wat je allemaal kon downloaden van Zeus
- [De leden](http://web.archive.org/web/20000608171826/http://www.zeus.rug.ac.be/members.shtml) (toen nog met [proefleden](http://web.archive.org/web/20000608171826/http://www.zeus.rug.ac.be/newlid.shtml))
- [Het machinepark van Zeus in 2000](http://web.archive.org/web/20000122025113/http://www.zeus.rug.ac.be:80/machinepark.shtml) (64 MB RAM, met 14 GB HDD voor de "Webserver, mailserver, ftpserver en backup name server voor subnet.")
- [T-shirts van Zeus is een oude traditie](http://web.archive.org/web/20000615204502/http://www.zeus.rug.ac.be/tshirts.shtml)
- [Het Zeus-logo in 3D](http://web.archive.org/web/20000922221222/http://www.zeus.rug.ac.be/logo.jpg)
Nog een kleine tip als je zelf door de historische sites aan het grasduinen bent: als je op [deze versie van de website](http://web.archive.org/web/20070128094936/http://zeus.ugent.be/) komt, zul je merken dat alle links op de pagina er zo uitzien:
[`http://web.archive.org/web/20070214092156fw_/http://zeus.ugent.be:2080/index.php?menu_item=8&PHPSESSID=a91c46ab8fe8622e78359a92d9ed53ba`](http://web.archive.org/web/20070214092156fw_/http://zeus.ugent.be:2080/index.php?menu_item=8&PHPSESSID=a91c46ab8fe8622e78359a92d9ed53ba)
Deze links bestaan echter niet in de Wayback Machine, maar geen probleem: als je de `PHPSESSID` verwijdert uit de URL, is de kans groot dat de link wel opgeslagen is:
[`http://web.archive.org/web/20070214092156fw_/http://zeus.ugent.be:2080/index.php?menu_item=8`](http://web.archive.org/web/20070730123958fw_/http://zeus.ugent.be:2080/index.php?menu_item=8)
Vergeet tot slot niet dat er voorheen ook al heel wat historische informatie over Zeus op onze site stond:
- [Alle besturen ooit](<%= @items['/about/oud-bestuur.erb'].path %>)
- [De volledige geschiedenis, geheel met tijdlijn](<%= @items['/about/historiek.erb'].path %>)

View file

@ -3,8 +3,6 @@ title: "Zeusbestuur 2020-2021"
created_at: 6-7-2020
description: "Het gloriZeuse nieuw bestuur"
author: "Robbe Van Herck"
tags:
- Bestuur
---
> Hallo mijn naam is Jasper en ik zou nog steeds sysadmin willen blijven
@ -27,3 +25,4 @@ Voor iedereen die niet op de verkiezingen was of de uitslag vergeten is, hier ee
| Evenementen | Ruben De Facq |
Veel succes en veel plezier van jullie oud bestuur. Het gaat gegarandeerd onvergetelijk worden! 🧡

View file

@ -1,27 +0,0 @@
---
title: "Warme eindejaarsgroetjes"
created_at: 19-12-2020
description: "virtuele knuffels voor iedereen <3"
author: "Ruben De Facq"
tags:
- Pannenkoeken
- Eindejaar
---
Liefste Zeusjes,
Het is zover: het jaar 2020 is op zijn einde.
Het was een woelige periode die zeker niet gemakkelijk is voorbij gegaan. Toch hebben we nog heel wat evenementen kunnen organiseren en de Zeussfeer sterk kunnen houden. Zowel even irl in het begin van het semester, alsook op online events, onze <a href="http://chat.zeus.gent/">Mattermost</a> en nu zelfs Discord.
Na een geslaagde en gezellige P&J-codenight, dit jaar 100% online, met 100% meer diverse pannenkoeken, is het tijd om even te pauzeren en in de examenperiode te vliegen!
Bedankt om zo talrijk aanwezig te zijn en de pannenkoekensfeer samen met ons op te snuiven.
<img src="https://zeus.ugent.be/zeuswpi/KUXYVpuv.jpg" />
Het bestuur wenst jullie veel moed toe. Doe het goed 👍
Toch even een dipmomentje, of heb je het moeilijk om te concentreren op je eentje? Spring dan even binnen op onze
<a href="http://chat.zeus.gent/">Mattermost</a> en wie weet vind je je nieuwe online studiebuddy <3
Tot 2021! Of het nu online of offline is, we doen ons best om jullie allemaal op een of andere manier terug te zien.
Misschien op afstand,
Maar met nog steeds dezelfde warme liefde
~Je Zeus WPI-Bestuur <3 🎄

View file

@ -3,9 +3,6 @@ title: "Wij coden voort"
created_at: 21-7-2020
description: "We mogen de kelder opnieuw openen"
author: "Jasper Devreker"
tags:
- Corona
- General
---
We hebben via het WVK[^wvk] doorgekregen dat we onze geliefde kelder terug mogen openen.

View file

@ -39,54 +39,17 @@ contact_links:
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.4/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.3.4/dist/leaflet.js"></script>
<script src="https://unpkg.com/leaflet@1.3.4/dist/leaflet.js"></script>
<%= asset :js, 'epcqr' %>
<%= asset :js, 'tabtopup' %>
<% end %>
<div id="tabtopupmodal" class="modal">
<div class="modal-background"></div>
<div class="modal-content">
<div class="modal-card">
<header class="modal-card-head">
<p class="modal-card-title">Top up Tab with EPC QR code</p>
</header>
<section class="modal-card-body">
<div style="height: 256px"><div id="tabtopup-qrcode"></div></div>
<p id='tabtopup-message'></p>
<div class="field">
<label class="label" for="tabtopup-username">Zeus username:</label>
<div class="control has-icons-left">
<input id="tabtopup-username" type="text" class="input" placeholder="j" name="tabtopup-username">
<span class="icon is-small is-left">
<%= fa :user, fw: true %>
</span>
</div>
<p class="help">This is not necessarily the same as your Mattermost username, contact the board if you forgot your username</p>
</div>
<div class="field">
<label class="label" for="tabtopup-amount">Amount (euro):</label>
<div class="control has-icons-left">
<input id="tabtopup-amount" type="text" step="0.01" class="input" value="5.0" name="tabtopup-amount">
<span class="icon is-small is-left">
<%= fa :euro, fw: true %>
</span>
</div>
</div>
</section>
</div>
</div>
</div>
<div class="content">
<h1 class='title is-1 has-text-centered'>Contact us</h1>
<h2 class='subtitle is-4 has-text-centered has-text-weight-light'>bleep bloop</h2>
<!-- Contact buttons -->
<div id='contact-icons' class='columns is-centered is-multiline is-mobile'>
<ul id='contact-icons' class='columns is-centered is-multiline'>
<% @item[:contact_links].each do |option| %>
<div class='column is-one-quarter-desktop is-one-third-tablet is-half-mobile'>
<div id='<%= option[:description] %>' class='contact-circle-option'>
<li id='<%= option[:description] %>' class='contact-circle-option column is-one-quarter-desktop is-one-third-tablet is-half-mobile'>
<a href='<%= option[:link] %>' class='contact-circle-wrapper'>
<div class='contact-circle is-centered'>
<div class='contact-circle-pulse grow'></div>
@ -97,10 +60,9 @@ contact_links:
<p class='has-text-centered'>
<a href='<%= option[:link] %>' class='contact-text-link is-link'><%= option[:action] %></a>
</p>
</div>
</div>
</li>
<% end %>
</div>
</ul>
<div id="board">
<h2>The board (<%= pretty_year @config[:academic_year] %>)</h2>
@ -121,17 +83,14 @@ contact_links:
<!-- Payment information -->
<div id='payment-info' class='tile is-child box content has-text-centered'>
<h1 class='title has-text-centered'>Pay us</h1>
<hr/>
<div class='is-divider'></div>
<p id='banknumber' class='is-size-5'>
BE03 7340 5456 0384
BE32 9799 9370 6502
</p>
<p class='is-size-5'>
<b>Please use the message <wbr>"TAB&nbsp;<em>&lt;username&gt;</em>" when manually topping up your Tab balance</b>
<b>Please use the message "TAB <em>&lt;username&gt;</em>" when toppping up your Tab balance</b>
</p>
<a id="tab-qr-button" class="button">
<%= fa :qrcode, fw: true %> Top up Tab balance
</a>
<a class='button' href='https://tab.zeus.gent' target='_blank'>
<a class='button' href='https://zeus.ugent.be/tab/'>
<%= fa :euro, fw: true %> Use Tab
</a>
</div>
@ -139,7 +98,7 @@ contact_links:
<!-- Calling information -->
<div id='calling-info' class='tile is-child box content has-text-centered'>
<h1 class='title has-text-centered'>Call us</h1>
<hr/>
<div class='is-divider'></div>
<p id='phone-number' class='is-size-5'>
+32 9 264 47 51<br/>
Internal: 4751
@ -151,7 +110,7 @@ contact_links:
<div id='address-info' class='tile is-parent'>
<div class='tile is-child box content'>
<h1 class='title has-text-centered'>Find us</h1>
<hr/>
<div class='is-divider'></div>
<p class='is-size-5'>
You can find our hiding place, or what we call <strong>'de kelder'</strong> at the basement level of following address:
</p>
@ -179,17 +138,16 @@ contact_links:
<div id='mattermost-info' class='tile is-parent'>
<div class='tile is-child box content'>
<h1 class='title has-text-centered'>Mattermost info</h1>
<hr/>
<div class='is-divider'></div>
<p id='mattermost-info-text' class='is-size-5'>
You can register with any valid email address.
</p>
</div>
</div>
<!-- Embedded map -->
<div style="z-index: 0" class="map-wrapper box">
<%= render '/partials/_map.erb', location: "Zeus WPI" %>
</div>
</div>
<!-- Embedded Google Maps -->
<div class="map-wrapper box">
<%= render '/partials/_map.erb', location: "Zeus WPI" %>
</div>
</div>

View file

@ -1,10 +0,0 @@
---
title: Ledenvergadering Belangrijk!
created_at: 10-10-2000
time: 17-10-2000 19:00
location: Galglaan, campus de Sterre
---
Alle leden en mogelijkst geintresseerde nieuwe leden worden vriendelijk uitgenodigd op de ledenvergadering van Zeus WPI. Deze gaat door op 17 oktober 2000 in de Galglaan (campus de Sterre) om 19:00. Alle nieuwe leden worden verzocht te komen! Indien je niet kan komen, laat het ons weten.
_Noot van de archivaris: de aanmaakdatum van dit evenement is een schatting._

View file

@ -1,13 +0,0 @@
---
title: Zeus gaat bowlen.
created_at: 01-11-2001
time: 14-11-2001 18:30
location: De Brug
---
Op 14 november gaan we samen met de OAK bowlen. Voor meer informatie of inschrijvingen stuur je een mailtje naar Milena.
We vertrekken om 18.30u stipt MET de FIETS vanaf De Brug (verzamelen om 18.20u!!!) richting bowling De Meibloem (Meibloemstraat 18).
_Noot van de archivaris: de aanmaakdatum van dit evenement is een schatting._

View file

@ -1,15 +0,0 @@
---
title: 15 mei = Ledenvergadering !!!
created_at: 01-05-2002
time: 15-05-2002 18:00
location: Cage-gebouwen
---
Op woensdag 15 mei om 18h is er een ledenvergadering. Deze zal doorgaan in het Cage complex (Galglaan).
Tijdens deze vergadering zullen we o.a. de bestuurs-functies voor volgend jaar bespreken. Het is dus belangrijk dat alle leden aanwezig zijn !
Mensen die interesse hebben om volgend jaar in het bestuur van Zeus te zitten (ook bestuursleden van nu die hun 'mandaat' willen vernieuwen) sturen best een mailtje naar bestuur@zeus.rug.ac.be met eventueel een motivatie (ja reeds voor de vergadering)
_Noot van de archivaris: de aanmaakdatum van dit evenement is een schatting._

View file

@ -1,11 +0,0 @@
---
title: Volgende ledenvergadering.
created_at: 01-11-2001
time: 12-11-2001 18:00
location: Cage-gebouwen
---
Maandag 12 november om 18uur is er een ledenvergadering in de Cage-gebouwen. De [projecten](http://web.archive.org/web/20011127170659/http://www.zeus.rug.ac.be:80/projects.shtml) van dit semester worden besproken.
_Noot van de archivaris: de aanmaakdatum van dit evenement is een schatting._

View file

@ -1,16 +0,0 @@
---
title: Anti spam les
created_at: 01-03-2002
time: 27-03-2002 18:30
location: Auditorium A0, S9
locationlink: $s9
---
18h30, gebouw S9 campus de Sterre, audiotorium A0. Inschrijven verplicht!
Hoef je geen nieuwe lening? Interesseert een hypotheek je niet? Geen behoefte aan porno? Tevreden met de omvang van je lichaam en haar onderdelen en prestaties? Geen interesse in aandelen, superaanbiedingen, manieren om ongeloofijk snel stinkend rijk te worden etc?
Indien je antwoorden op bovenstaande vragen voornamelijk "ja"zijn en je toch voortdurend gebombardeerd wordt met emails die je dat alles en nog veel meer proberen aan te smeren, dan heb je al kennis gemaakt met het fenomeen dat "spam"genoemd wordt. [Meer info](http://web.archive.org/web/20020402151005/http://www.zeus.rug.ac.be:80/pub.shtml)
_Noot van de archivaris: de aanmaakdatum van dit evenement is een schatting._

View file

@ -1,37 +0,0 @@
---
title: Zeus eet ribbetjes
created_at: 22-04-2003
time: 29-04-2003 19:30
location: Gekroonde Hoofden
locationlink: Gekroonde Hoofden, Ghent Belgium
---
Het is weer zover, Zeus gaat terug eens *ribbetjes* eten. Dit op
*dinsdag 29 april*. In de *gekroonde hoofden* te Gent.
En dit om 19u30.
Als je meewilt gelieve te reageren naar mij (rudy at zeus) met in de
subject:
ribbetjes X
Waarbij X het aantal personen is die je wenst mee te brengen
(inclusief jezelf). Hoe meer zielen hoe meer vreugde. Als ge een
lief/vriend hebt, breng die dan eens mee.
In de gekroonde hoofden kun je naast ribbetjes ook nog andere dingen
eten. Keus genoeg! Twee jaar geleden zijn we al eens geweest en
waren we met een stuk of 15 geloof ik.
De ribbetjes zijn a volente en je hebt keuze uit 4 smaken:
- van de chef (is pikant)
- honing
- zoetzuur
- en nog iets waarvan ik het niet meer weet.
Kostprijs ongeveer 13 euro geloof ik. Dus daarvoor moet je het niet
laten, eet desnoods twee dagen niets want het is A VOLENTE!
Tot dan!

View file

@ -1,11 +0,0 @@
---
title: ANTI-Spamles
created_at: 09-05-2003
time: 13-05-2003 18:00
location: Auditorium A2, S9
locationlink: $s9
---
Als je wil weten hoe de spammers te werk gaan, hoe ze proberen te verbergen vanwaar hun emails komen en waar hun websites gehost worden en wat je er tegen kan doen, dan is de cursus "Spam: wat doe ik eraan?" zeker iets voor jou. We bekijken hoe het SMTP protocol (dat gebruikt wordt om mails te versturen) werkt en hoe je emails moet traceren, wat open relays en proxy's zijn en hoe ze misbruikt worden door spammers, hoe web pagina's door spammers gecodeerd worden en manieren om ze te ontcijferen, etc.
De les gaat door op dinsdag 13 mei, om 18.00, en dit in auditorium A2, S9, Capus Sterre (en dus niet op de eerder aangekondigde datum). Zoals steeds is iedereen welkom. Als je wil komen, mail dan even naar lessen@zeus.rug.ac.be, en vermeld erbij of je een gedrukte cursus wilt

View file

@ -1,12 +0,0 @@
---
title: "ZeusWPI presents: Richard Stallman"
created_at: 10-02-2003
time: 09-05-2007 19:00
location: Auditorium A1 - S9
locationlink: $s9
---
Update: De voordracht van RMS werd goed gesmaakt door de aanwezigen. Foto's van de voordracht zijn te vinden op: [http://cage.rug.ac.be/~gvernaev/stallmanzeus](http://web.archive.org/web/20050506174605/http://cage.ugent.be/~gvernaev/stallmanzeus/) en hier - Geïnteresseerden kunnen [deze](http://web.archive.org/web/20070630085501/http://www.researchoninnovation.org/patent.pdf) interessante pdf-file eens lezen, die RMS vermeldde in zijn speech.
Richard Stallman (RMS) will be giving a speech on the danger of software patents. - Richard Stallman geeft voor Zeus WPI een voordracht over de gevaren van gepatenteerde software. - [More info](http://web.archive.org/web/20040521070955/http://studwww.rug.ac.be/~rgevaert/rmsaffiche.pdf).
Iedereen die geïnteresseerd is is welkom; inschrijven hoeft niet. - Everybody is invited; no reservation required.

View file

@ -1,9 +0,0 @@
---
title: Bowling
created_at: 02-10-2003
time: 29-10-2003 19:00
location: Therminal
locationlink: $therminal
---
Op 29 oktober gaan we bowlen. Verdere details volgen later nog.

View file

@ -1,10 +0,0 @@
---
title: Les GNUPG
created_at: 23-02-2004
time: 01-03-2004 18:00
location: Auditorium A1, S9
locationlink: $s9
---
Op maandag 1 maart, van 18 tot 20u organiseert Zeus een les GNUPG, met aansluitende keysigning party. Deze gaat door in auditorium A1, gebouw S9, campus de Sterre. Als je komt, stuur dan even een mailtje naar lessen@zeus.ugent.be.

View file

@ -1,22 +0,0 @@
---
title: Ledenvergadering II
created_at: 17-02-2004
time: 25-02-2004 18:30
location: De Brug
---
Een nog onbevlekt tweede semester ligt voor de boeg... Hoog tijd dus om
tussen pot en pint de komende activiteiten op een rijtje te zetten.
Zouden we niet nog eens ribbetjes gaan eten? Of op FOSDEM gaan
kijken? Wat van de geruchten dat er een jabber server zou worden
opgezet? En zouden de T-Shirts eindelijk gearriveerd zijn?
Misschien moesten we eens onze stoute schoenen aantrekken en op
kroegentocht gaan... Of op FreeEDEM (www.freeedem.org) naar Rudy's
voordracht over GLMS gaan luisteren.
Zou het niet tof zijn om een les te organiseren over GPG? Of over
Jabber? En zouden we onze PHP-les niet nog eens van stal halen?
U hoort het allemaal, volgende week WOENSDAG 25 FEBRUARI 2004, om
1830hrs in de BRUG.

View file

@ -1,8 +0,0 @@
---
title: Ledenvergadering
created_at: 02-10-2003
time: 14-10-2003 19:00
location: De Brug
---
Op dinsdag 14 oktober om 19.00u houden we in De Brug onze eerste ledenvergadering van het nieuwe Zeusjaar. Er wordt gekozen voor de Brug vanwege de nabijgelegen cafeetjes (na de vergadering dus). Alle leden: be there! By the way, Zeus zal ook aanwezig zijn op Gent Ontgroent op 8 oktober. Kom eens langs in studentenresto leden: be there!

View file

@ -1,16 +0,0 @@
---
title: zeus etentje
created_at: 10-04-2004
time: 29-04-2004 19:00
location: Amadeus
locationlink: Plotersgracht 8, 9000 Gent
---
Zoals jaarlijks gaan we weer eens gezamenlijk bouffen met zeus. Deze
keer een iets hoogstaander menu dan op de kroegentocht. (cfr.
http://www.zeus.ugent.be/~kris/stuff/zeus-kroegentocht-260304/sany0038.jpg)
We gaan opnieuw ribbetjes eten zoals vorig jaar, maar deze keer bij
Amadeus. Dit gaat door op donderdag 29 april.
Om te kunnen inschatten hoeveel plaatsen we moeten reserveren had ik
graag een mailtje gekregen van voordien of je komt.

View file

@ -1,8 +0,0 @@
---
title: Zeus bowlt!
created_at: 3-11-2004
time: 3-11-2004 19:00
location: Meibloemstraat 18-20
---
Vanavond stunten we met zware dingen in bowlinghal "de Meibloem" (Meibloemstraat 18-20). De colonne per fiets vertrekt om 18u30 aan de Brug. Afspraak omstreeks 19u00 ter plaatse.

View file

@ -1,21 +0,0 @@
---
title: Lezing Dr. Leslie Lamport
created_at: 31-10-2004
time: 17-11-2004 18:00
location: S9
locationlink: $s9
---
Zeus presenteert:
> Dr. Leslie Lamport<br>
> Thinking for Programmers
Wanneer: woensdag 17 november, 18.00 uur<br>
Waar: Campus "De Sterre", Gebouw S9, Krijgslaan 281, Gent
GRATIS TOEGANG
Abstract: "There is a very effective software development tool that is not used nearly enough--the brain. The many impediments to its proper use devised by computer scientists can be overcome."
De affiche kan je [hier](http://web.archive.org/web/20041115180039/http://zeus.ugent.be/~tiemelijn/tests/affiche_leslie.pdf) bekijken.

View file

@ -1,16 +0,0 @@
---
title: Ledenvergadering
created_at: 17-02-2005
time: 24-02-2005 20:00
location: De Brug
---
Yo!
Nu de eerste examenperiode alweer achter ons ligt en we weer volop van het vrije leven kunnen genieten lijkt geen moment beter geschikt om uit te doeken te doen wat Zeus deze semester allemaal te bieden heeft.
Stop daarom aanstaande donderdag 24 februari 2005 om 2000hrs even met repetitief de 'Mijn resultaten'-pagina op Minerva te herladen en zak af naar Studentenhuis "De Brug"! De ledenvergadering zal doorgaan in de Fotoklas op de tweede verdieping (neem bij het binnenkomen de eerste paar trappen, ga dan rechts door de glazen deur en pak daar verder de trap omhoog).
Uiteraard is het bestuur niet verantwoordelijk voor het gebeurlijke afzakken naar de Deffoo en de daaropvolgende overmatige consumtie van houten koppen.
Tot dan!

Some files were not shown because too many files have changed in this diff Show more