<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.why2025.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Okarin</id>
	<title>WHY2025 wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.why2025.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Okarin"/>
	<link rel="alternate" type="text/html" href="https://wiki.why2025.org/Special:Contributions/Okarin"/>
	<updated>2026-04-17T11:39:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.12</generator>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Parcel_deliveries&amp;diff=16137</id>
		<title>Parcel deliveries</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Parcel_deliveries&amp;diff=16137"/>
		<updated>2025-07-30T18:02:58Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;search terms: packet delivery, logistics&lt;br /&gt;
&lt;br /&gt;
= Shipping things to WHY2025 =&lt;br /&gt;
&lt;br /&gt;
It is possible to ship parcels to WHY2025. However, it&#039;s a lot of work for us and many things can go wrong. Therefore, we&#039;d prefer it if you can find alternatives to shipping things to the site. This way we can avoid a lot of disappointment and effort.&lt;br /&gt;
&lt;br /&gt;
There will be a delay after delivery of your package by the courier, before the package will be available to you. This delay could easily be up to an entire day.&lt;br /&gt;
&lt;br /&gt;
= Alternatives: =&lt;br /&gt;
&lt;br /&gt;
* Please try hard to find someone with a car who is going to the site. If you don&#039;t know anyone, ask on the [[IRC]] channel (#why2025 on OFTC).&lt;br /&gt;
&lt;br /&gt;
* Check whether your local hackerspace is organizing bulk transport to the site (many are) and whether you can ship/bring things to said space ahead of the event as well and have it join said transport.&lt;br /&gt;
&lt;br /&gt;
= What can go wrong =&lt;br /&gt;
&lt;br /&gt;
* We have no way of tracking packages beyond this (publicly editable) wiki page. Packages can get lost, misdelivered, or damaged and we are not able to do anything about it.&lt;br /&gt;
* The event is at a site that does not usually receive large volumes of mail and is not familiar to courier services. This means delivery services may attempt to deliver to the wrong place, and packages would be very difficult to trace.&lt;br /&gt;
* We are not set up for significant logistics and package handling on site. We are all volunteers that have a lot of other tasks to do and package handling is something we do when we can and if we can, but our priority is making a cool hacker camp happen, not running a post office.&lt;br /&gt;
&lt;br /&gt;
If you have no other options, we do offer a best-effort service, but there are no guarantees. Specifically:&lt;br /&gt;
&lt;br /&gt;
= DISCLAIMER =&lt;br /&gt;
&lt;br /&gt;
* WHY2025, Stichting IFCAT Foundation, and Manege Beukers accept no liability for your package.&lt;br /&gt;
* Although we will sign for receipt, we are not able to take responsibility of your package. If it happens to be damaged, stolen in transit, has the wrong contents, or it gets delivered to the wrong place, there is nothing we&#039;ll be able to do to help you.&lt;br /&gt;
* If for any reason your package seems dangerous in any way, we might reject or dispose of it before informing you — and still disclaim any liability.&lt;br /&gt;
&lt;br /&gt;
If your package gets lost, there is nothing we can do about it. Please only use this option as a last resort.&lt;br /&gt;
&lt;br /&gt;
= Howto =&lt;br /&gt;
&lt;br /&gt;
To ship a package to WHY2025, follow the following steps&lt;br /&gt;
&lt;br /&gt;
1. Make sure it&#039;s a package, not a letter/envelope. We have limited infrastructure for handling packages but no infrastructure at all for handling envelopes. Sorry!&lt;br /&gt;
&lt;br /&gt;
2. If your package is above 23 kg it **must** be on a pallet. Make sure it is either below that limit, or packaged on a pallet. If a package is on a pallet, make sure it&#039;s weatherproof as it may get rained on during transport and storage.&lt;br /&gt;
&lt;br /&gt;
3. Make sure the package does not consist of food or perishable items (see below)&lt;br /&gt;
&lt;br /&gt;
4. Check that the package is able to arrive between **Saturday, August 2nd** and **Monday, August 11th**. We are not able to receive packages at all outside this time window. If a package arrives outside that time window, it will most likely not reach us, and therefore also not reach you. The package will not be returned but discarded in whatever way seems appropriate. Note: in some countries, you can set a specific delivery date in the future. Dutch couriers typically ignore that.&lt;br /&gt;
&lt;br /&gt;
5. Make sure the package is addressed correctly. Please use the following address format if possible, or at least include all the following information:&lt;br /&gt;
&lt;br /&gt;
   To: YOUR NAME @ YOUR VILLAGE&lt;br /&gt;
   WHY2025 Team Warehouse p/a Manege Beukers&lt;br /&gt;
   &lt;br /&gt;
   Wagenweg 12&lt;br /&gt;
   1724 PT  Oudkarspel&lt;br /&gt;
   The Netherlands&lt;br /&gt;
&lt;br /&gt;
Note that &amp;quot;PT&amp;quot; is part of the postal code &amp;quot;1724 PT&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:red; padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:white; font-weight: bold;&amp;quot;&amp;gt;&#039;&#039;Regardless of your anxiety level, and regardless of how much you believe that you are not a burden, DO NOT CONTACT and DO NOT VISIT the riding hall (manage) yourself. All communication must go through Team:Warehouse, and we will pick up your package. This may take up an entire extra day after it was delivered; please remain calm and patient.&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If the shipping company requires a phone number, put **your own** phone number on the shipping label. That way you can react if the shipping company gets confused about where to deliver. Please do not use our phone numbers, as we can&#039;t guarantee reachability at the time the package is due to be delivered.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
6. Add your package to the list at the end of this page. The list is sorted by projected arrival day. Please keep it this way. We will update this page once we receive the package.&lt;br /&gt;
&lt;br /&gt;
7. Pick it up at the logistics warehouse. The warehouse is the building next to the Heaven tent.&lt;br /&gt;
&lt;br /&gt;
= Perishable or food items =&lt;br /&gt;
Perishable or food items include BBQ meat, pizza, drinks, and perishable foods. We cannot handle deliveries of such items on site at all.&lt;br /&gt;
&lt;br /&gt;
We have contractual obligations to our food vendors on site that prevent us from delivering food or accepting food deliveries. We also don&#039;t have the capacity for cold storage, rapid delivery, or food-safe logistics. Please understand that we can&#039;t offer this kind of service and don&#039;t ask us about it. Sorry!&lt;br /&gt;
&lt;br /&gt;
If you want to have food delivered to you on site, you&#039;re on your own. You will have to wait for it at the gate until it arrives and intercept them yourself. Delivery trucks are not allowed on the terrain. Be aware that many food suppliers have quite strict policies on deliveries, and will not deliver to a site like ours anyway. If you need large quantities of food, a better choice might be to do a shopping run yourself in a nearby supermarket. A list of supermarkets and their opening hours are on the [[Supermarkets|Supermarkets wiki page]].&lt;br /&gt;
&lt;br /&gt;
= Delivery policy =&lt;br /&gt;
&lt;br /&gt;
== No envelopes! ==&lt;br /&gt;
&lt;br /&gt;
Note: we &#039;&#039;&#039;can&#039;t&#039;&#039;&#039; receive envelopes, so make sure small stuff is in a box even if it would fit in an envelope.&lt;br /&gt;
&lt;br /&gt;
== Not on the wiki ==&lt;br /&gt;
If your package is delivered but it&#039;s not on the wiki, the package may be discarded in whatever way seems appropriate. You could try a reconciliation gift when picking it up at the Warehouse. Traditionally this is apple pie but we&#039;re open for surprises :)&lt;br /&gt;
&lt;br /&gt;
== Small parcels ==&lt;br /&gt;
&lt;br /&gt;
Small parcels (boxes) will be routed to our storage; once it has arrived, infodesk can tell you where to pick it up. The limit for small boxes is 23 kg. We will try to update this page when the shipment arrives.&lt;br /&gt;
&lt;br /&gt;
== Big parcels ==&lt;br /&gt;
&lt;br /&gt;
Any parcel above 23 kg counts as big.&lt;br /&gt;
&lt;br /&gt;
Big parcels **MUST BE ON A PALLET**. They will be delivered to the village directly if the village has a known location (a tent) that is reachable by one of the roads. If not, we&#039;ll leave it at a place we can access by road -- possibly in a restricted area from which you cannot pick it up without our help. Packages might get rained on in transit or in storage, so please make sure they are weatherproof.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please do not have anything shipped to the site (by any means) that you are not able to transport back away from the site.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Expected/delivered packages - ADD TO THIS LIST!! =&lt;br /&gt;
&lt;br /&gt;
Please sort by expected arrival date.&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! Expected arrival date !! Recipient name !! Village !! How big and heavy is it?&amp;lt;br&amp;gt;&#039;&#039;metric please!&#039;&#039; !! Description of contents !! Received? (to be edited by Team:Warehouse)&lt;br /&gt;
|- style=&amp;quot;background: #faa;&amp;quot;&lt;br /&gt;
| Before 2025-08-02&lt;br /&gt;
|colspan=5| Absolutely do not have anything delivered before Saturday 2nd of August.&amp;lt;br&amp;gt;We don&#039;t have the people or equipment to deal with it.&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-02 || Example || Example || small example package (0.5kg) || example contents&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-02 - 4 || Okarin || Heaven || 11 boxes by courier || t-shirts&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-02 - 4 || Okarin || Heaven || 2 boxes || safety vests&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-01 - 4 || Lightning5 || NOC || 1 box (2,5kg) || sleeping mat&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-04 || Mitch Altman || Hardware Hacking Area || Euro Pallet with 11 boxes + roller-board (156kg) || soldering irons and other tools, kits&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-04 - 8 || Marvin Brandstetter HyperCraft3r || Team Parking || medium package (ca. 3kg) || 3 Workpants &lt;br /&gt;
|-&lt;br /&gt;
|-|- style=&amp;quot;background: #faa&amp;quot;&lt;br /&gt;
| After 2025-08-11&lt;br /&gt;
|colspan=5| You can&#039;t have anything delivered to WHY after day 4!&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Team:Warehouse]]&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Parcel_deliveries&amp;diff=15971</id>
		<title>Parcel deliveries</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Parcel_deliveries&amp;diff=15971"/>
		<updated>2025-07-30T07:35:14Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;search terms: packet delivery, logistics&lt;br /&gt;
&lt;br /&gt;
= Shipping things to WHY2025 =&lt;br /&gt;
&lt;br /&gt;
It is possible to ship parcels to WHY2025. However, it&#039;s a lot of work for us and many things can go wrong. Therefore, we&#039;d prefer it if you can find alternatives to shipping things to the site. This way we can avoid a lot of disappointment and effort.&lt;br /&gt;
&lt;br /&gt;
There will be a delay after delivery of your package by the courier, before the package will be available to you. This delay could easily be up to an entire day.&lt;br /&gt;
&lt;br /&gt;
= Alternatives: =&lt;br /&gt;
&lt;br /&gt;
* Please try hard to find someone with a car who is going to the site. If you don&#039;t know anyone, ask on the [[IRC]] channel (#why2025 on OFTC).&lt;br /&gt;
&lt;br /&gt;
* Check whether your local hackerspace is organizing bulk transport to the site (many are) and whether you can ship/bring things to said space ahead of the event as well and have it join said transport.&lt;br /&gt;
&lt;br /&gt;
= What can go wrong =&lt;br /&gt;
&lt;br /&gt;
* We have no way of tracking packages beyond this (publicly editable) wiki page. Packages can get lost, misdelivered, or damaged and we are not able to do anything about it.&lt;br /&gt;
* The event is at a site that does not usually receive large volumes of mail and is not familiar to courier services. This means delivery services may attempt to deliver to the wrong place, and packages would be very difficult to trace.&lt;br /&gt;
* We are not set up for significant logistics and package handling on site. We are all volunteers that have a lot of other tasks to do and package handling is something we do when we can and if we can, but our priority is making a cool hacker camp happen, not running a post office.&lt;br /&gt;
&lt;br /&gt;
If you have no other options, we do offer a best-effort service, but there are no guarantees. Specifically:&lt;br /&gt;
&lt;br /&gt;
= DISCLAIMER =&lt;br /&gt;
&lt;br /&gt;
* WHY2025, Stichting IFCAT Foundation, and Manege Beukers accept no liability for your package.&lt;br /&gt;
* Although we will sign for receipt, we are not able to take responsibility of your package. If it happens to be damaged, stolen in transit, has the wrong contents, or it gets delivered to the wrong place, there is nothing we&#039;ll be able to do to help you.&lt;br /&gt;
* If for any reason your package seems dangerous in any way, we might reject or dispose of it before informing you — and still disclaim any liability.&lt;br /&gt;
&lt;br /&gt;
If your package gets lost, there is nothing we can do about it. Please only use this option as a last resort.&lt;br /&gt;
&lt;br /&gt;
= Howto =&lt;br /&gt;
&lt;br /&gt;
To ship a package to WHY2025, follow the following steps&lt;br /&gt;
&lt;br /&gt;
1. Make sure it&#039;s a package, not a letter/envelope. We have limited infrastructure for handling packages but no infrastructure at all for handling envelopes. Sorry!&lt;br /&gt;
&lt;br /&gt;
2. If your package is above 23 kg it **must** be on a pallet. Make sure it is either below that limit, or packaged on a pallet. If a package is on a pallet, make sure it&#039;s weatherproof as it may get rained on during transport and storage.&lt;br /&gt;
&lt;br /&gt;
3. Make sure the package does not consist of food or perishable items (see below)&lt;br /&gt;
&lt;br /&gt;
4. Check that the package is able to arrive between **Saturday, August 2nd** and **Monday, August 11th**. We are not able to receive packages at all outside this time window. If a package arrives outside that time window, it will most likely not reach us, and therefore also not reach you. The package will not be returned but discarded in whatever way seems appropriate. Note: in some countries, you can set a specific delivery date in the future. Dutch couriers typically ignore that.&lt;br /&gt;
&lt;br /&gt;
5. Make sure the package is addressed correctly. Please use the following address format if possible, or at least include all the following information:&lt;br /&gt;
&lt;br /&gt;
   To: YOUR NAME @ YOUR VILLAGE&lt;br /&gt;
   WHY2025 Team Warehouse p/a Manege Beukers&lt;br /&gt;
   &lt;br /&gt;
   Wagenweg 12&lt;br /&gt;
   1724 PT  Oudkarspel&lt;br /&gt;
   The Netherlands&lt;br /&gt;
&lt;br /&gt;
Note that &amp;quot;PT&amp;quot; is part of the postal code &amp;quot;1724 PT&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:red; padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:white; font-weight: bold;&amp;quot;&amp;gt;&#039;&#039;Regardless of your anxiety level, and regardless of how much you believe that you are not a burden, DO NOT CONTACT and DO NOT VISIT the riding hall (manage) yourself. All communication must go through Team:Warehouse, and we will pick up your package. This may take up an entire extra day after it was delivered; please remain calm and patient.&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If the shipping company requires a phone number, put **your own** phone number on the shipping label. That way you can react if the shipping company gets confused about where to deliver. Please do not use our phone numbers, as we can&#039;t guarantee reachability at the time the package is due to be delivered.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
6. Add your package to the list at the end of this page. The list is sorted by projected arrival day. Please keep it this way. We will update this page once we receive the package.&lt;br /&gt;
&lt;br /&gt;
7. Pick it up at the logistics warehouse. The warehouse is the building next to the Heaven tent.&lt;br /&gt;
&lt;br /&gt;
= Perishable or food items =&lt;br /&gt;
Perishable or food items include BBQ meat, pizza, drinks, and perishable foods. We cannot handle deliveries of such items on site at all.&lt;br /&gt;
&lt;br /&gt;
We have contractual obligations to our food vendors on site that prevent us from delivering food or accepting food deliveries. We also don&#039;t have the capacity for cold storage, rapid delivery, or food-safe logistics. Please understand that we can&#039;t offer this kind of service and don&#039;t ask us about it. Sorry!&lt;br /&gt;
&lt;br /&gt;
If you want to have food delivered to you on site, you&#039;re on your own. You will have to wait for it at the gate until it arrives and intercept them yourself. Delivery trucks are not allowed on the terrain. Be aware that many food suppliers have quite strict policies on deliveries, and will not deliver to a site like ours anyway. If you need large quantities of food, a better choice might be to do a shopping run yourself in a nearby supermarket. A list of supermarkets and their opening hours are on the [[Supermarkets|Supermarkets wiki page]].&lt;br /&gt;
&lt;br /&gt;
= Delivery policy =&lt;br /&gt;
&lt;br /&gt;
== No envelopes! ==&lt;br /&gt;
&lt;br /&gt;
Note: we &#039;&#039;&#039;can&#039;t&#039;&#039;&#039; receive envelopes, so make sure small stuff is in a box even if it would fit in an envelope.&lt;br /&gt;
&lt;br /&gt;
== Not on the wiki ==&lt;br /&gt;
If your package is delivered but it&#039;s not on the wiki, the package may be discarded in whatever way seems appropriate. You could try a reconciliation gift when picking it up at the Warehouse. Traditionally this is apple pie but we&#039;re open for surprises :)&lt;br /&gt;
&lt;br /&gt;
== Small parcels ==&lt;br /&gt;
&lt;br /&gt;
Small parcels (boxes) will be routed to our storage; once it has arrived, infodesk can tell you where to pick it up. The limit for small boxes is 23 kg. We will try to update this page when the shipment arrives.&lt;br /&gt;
&lt;br /&gt;
== Big parcels ==&lt;br /&gt;
&lt;br /&gt;
Any parcel above 23 kg counts as big.&lt;br /&gt;
&lt;br /&gt;
Big parcels **MUST BE ON A PALLET**. They will be delivered to the village directly if the village has a known location (a tent) that is reachable by one of the roads. If not, we&#039;ll leave it at a place we can access by road -- possibly in a restricted area from which you cannot pick it up without our help. Packages might get rained on in transit or in storage, so please make sure they are weatherproof.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please do not have anything shipped to the site (by any means) that you are not able to transport back away from the site.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Expected/delivered packages - ADD TO THIS LIST!! =&lt;br /&gt;
&lt;br /&gt;
Please sort by expected arrival date.&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! Expected arrival date !! Recipient name !! Village !! How big and heavy is it?&amp;lt;br&amp;gt;&#039;&#039;metric please!&#039;&#039; !! Description of contents !! Received? (to be edited by Team:Warehouse)&lt;br /&gt;
|- style=&amp;quot;background: #faa;&amp;quot;&lt;br /&gt;
| Before 2025-08-02&lt;br /&gt;
|colspan=5| Absolutely do not have anything delivered before Saturday 2nd of August.&amp;lt;br&amp;gt;We don&#039;t have the people or equipment to deal with it.&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-02 || Example || Example || small example package (0.5kg) || example contents&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-01 - 4 || Okarin || Heaven || 11 boxes by courier || t-shirts&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-01 - 4 || Okarin || Heaven || 2 boxes || safety vests&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-04 || Mitch Altman || Hardware Hacking Area || Euro Pallet with 11 boxes + roller-board (156kg) || soldering irons and other tools, kits&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-04 - 8 || Marvin Brandstetter HyperCraft3r || Team Parking || medium package (ca. 3kg) || 3 Workpants &lt;br /&gt;
|-&lt;br /&gt;
|-|- style=&amp;quot;background: #faa&amp;quot;&lt;br /&gt;
| After 2025-08-11&lt;br /&gt;
|colspan=5| You can&#039;t have anything delivered to WHY after day 4!&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Team:Warehouse]]&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Parcel_deliveries&amp;diff=15968</id>
		<title>Parcel deliveries</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Parcel_deliveries&amp;diff=15968"/>
		<updated>2025-07-30T07:34:04Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;search terms: packet delivery, logistics&lt;br /&gt;
&lt;br /&gt;
= Shipping things to WHY2025 =&lt;br /&gt;
&lt;br /&gt;
It is possible to ship parcels to WHY2025. However, it&#039;s a lot of work for us and many things can go wrong. Therefore, we&#039;d prefer it if you can find alternatives to shipping things to the site. This way we can avoid a lot of disappointment and effort.&lt;br /&gt;
&lt;br /&gt;
There will be a delay after delivery of your package by the courier, before the package will be available to you. This delay could easily be up to an entire day.&lt;br /&gt;
&lt;br /&gt;
= Alternatives: =&lt;br /&gt;
&lt;br /&gt;
* Please try hard to find someone with a car who is going to the site. If you don&#039;t know anyone, ask on the [[IRC]] channel (#why2025 on OFTC).&lt;br /&gt;
&lt;br /&gt;
* Check whether your local hackerspace is organizing bulk transport to the site (many are) and whether you can ship/bring things to said space ahead of the event as well and have it join said transport.&lt;br /&gt;
&lt;br /&gt;
= What can go wrong =&lt;br /&gt;
&lt;br /&gt;
* We have no way of tracking packages beyond this (publicly editable) wiki page. Packages can get lost, misdelivered, or damaged and we are not able to do anything about it.&lt;br /&gt;
* The event is at a site that does not usually receive large volumes of mail and is not familiar to courier services. This means delivery services may attempt to deliver to the wrong place, and packages would be very difficult to trace.&lt;br /&gt;
* We are not set up for significant logistics and package handling on site. We are all volunteers that have a lot of other tasks to do and package handling is something we do when we can and if we can, but our priority is making a cool hacker camp happen, not running a post office.&lt;br /&gt;
&lt;br /&gt;
If you have no other options, we do offer a best-effort service, but there are no guarantees. Specifically:&lt;br /&gt;
&lt;br /&gt;
= DISCLAIMER =&lt;br /&gt;
&lt;br /&gt;
* WHY2025, Stichting IFCAT Foundation, and Manege Beukers accept no liability for your package.&lt;br /&gt;
* Although we will sign for receipt, we are not able to take responsibility of your package. If it happens to be damaged, stolen in transit, has the wrong contents, or it gets delivered to the wrong place, there is nothing we&#039;ll be able to do to help you.&lt;br /&gt;
* If for any reason your package seems dangerous in any way, we might reject or dispose of it before informing you — and still disclaim any liability.&lt;br /&gt;
&lt;br /&gt;
If your package gets lost, there is nothing we can do about it. Please only use this option as a last resort.&lt;br /&gt;
&lt;br /&gt;
= Howto =&lt;br /&gt;
&lt;br /&gt;
To ship a package to WHY2025, follow the following steps&lt;br /&gt;
&lt;br /&gt;
1. Make sure it&#039;s a package, not a letter/envelope. We have limited infrastructure for handling packages but no infrastructure at all for handling envelopes. Sorry!&lt;br /&gt;
&lt;br /&gt;
2. If your package is above 23 kg it **must** be on a pallet. Make sure it is either below that limit, or packaged on a pallet. If a package is on a pallet, make sure it&#039;s weatherproof as it may get rained on during transport and storage.&lt;br /&gt;
&lt;br /&gt;
3. Make sure the package does not consist of food or perishable items (see below)&lt;br /&gt;
&lt;br /&gt;
4. Check that the package is able to arrive between **Saturday, August 2nd** and **Monday, August 11th**. We are not able to receive packages at all outside this time window. If a package arrives outside that time window, it will most likely not reach us, and therefore also not reach you. The package will not be returned but discarded in whatever way seems appropriate. Note: in some countries, you can set a specific delivery date in the future. Dutch couriers typically ignore that.&lt;br /&gt;
&lt;br /&gt;
5. Make sure the package is addressed correctly. Please use the following address format if possible, or at least include all the following information:&lt;br /&gt;
&lt;br /&gt;
   To: YOUR NAME @ YOUR VILLAGE&lt;br /&gt;
   WHY2025 Team Warehouse p/a Manege Beukers&lt;br /&gt;
   &lt;br /&gt;
   Wagenweg 12&lt;br /&gt;
   1724 PT  Oudkarspel&lt;br /&gt;
   The Netherlands&lt;br /&gt;
&lt;br /&gt;
Note that &amp;quot;PT&amp;quot; is part of the postal code &amp;quot;1724 PT&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:red; padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:white; font-weight: bold;&amp;quot;&amp;gt;&#039;&#039;Regardless of your anxiety level, and regardless of how much you believe that you are not a burden, DO NOT CONTACT and DO NOT VISIT the riding hall (manage) yourself. All communication must go through Team:Warehouse, and we will pick up your package. This may take up an entire extra day after it was delivered; please remain calm and patient.&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If the shipping company requires a phone number, put **your own** phone number on the shipping label. That way you can react if the shipping company gets confused about where to deliver. Please do not use our phone numbers, as we can&#039;t guarantee reachability at the time the package is due to be delivered.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
6. Add your package to the list at the end of this page. The list is sorted by projected arrival day. Please keep it this way. We will update this page once we receive the package.&lt;br /&gt;
&lt;br /&gt;
7. Pick it up at the logistics warehouse. The warehouse is the building next to the Heaven tent.&lt;br /&gt;
&lt;br /&gt;
= Perishable or food items =&lt;br /&gt;
Perishable or food items include BBQ meat, pizza, drinks, and perishable foods. We cannot handle deliveries of such items on site at all.&lt;br /&gt;
&lt;br /&gt;
We have contractual obligations to our food vendors on site that prevent us from delivering food or accepting food deliveries. We also don&#039;t have the capacity for cold storage, rapid delivery, or food-safe logistics. Please understand that we can&#039;t offer this kind of service and don&#039;t ask us about it. Sorry!&lt;br /&gt;
&lt;br /&gt;
If you want to have food delivered to you on site, you&#039;re on your own. You will have to wait for it at the gate until it arrives and intercept them yourself. Delivery trucks are not allowed on the terrain. Be aware that many food suppliers have quite strict policies on deliveries, and will not deliver to a site like ours anyway. If you need large quantities of food, a better choice might be to do a shopping run yourself in a nearby supermarket. A list of supermarkets and their opening hours are on the [[Supermarkets|Supermarkets wiki page]].&lt;br /&gt;
&lt;br /&gt;
= Delivery policy =&lt;br /&gt;
&lt;br /&gt;
== No envelopes! ==&lt;br /&gt;
&lt;br /&gt;
Note: we &#039;&#039;&#039;can&#039;t&#039;&#039;&#039; receive envelopes, so make sure small stuff is in a box even if it would fit in an envelope.&lt;br /&gt;
&lt;br /&gt;
== Not on the wiki ==&lt;br /&gt;
If your package is delivered but it&#039;s not on the wiki, the package may be discarded in whatever way seems appropriate. You could try a reconciliation gift when picking it up at the Warehouse. Traditionally this is apple pie but we&#039;re open for surprises :)&lt;br /&gt;
&lt;br /&gt;
== Small parcels ==&lt;br /&gt;
&lt;br /&gt;
Small parcels (boxes) will be routed to our storage; once it has arrived, infodesk can tell you where to pick it up. The limit for small boxes is 23 kg. We will try to update this page when the shipment arrives.&lt;br /&gt;
&lt;br /&gt;
== Big parcels ==&lt;br /&gt;
&lt;br /&gt;
Any parcel above 23 kg counts as big.&lt;br /&gt;
&lt;br /&gt;
Big parcels **MUST BE ON A PALLET**. They will be delivered to the village directly if the village has a known location (a tent) that is reachable by one of the roads. If not, we&#039;ll leave it at a place we can access by road -- possibly in a restricted area from which you cannot pick it up without our help. Packages might get rained on in transit or in storage, so please make sure they are weatherproof.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please do not have anything shipped to the site (by any means) that you are not able to transport back away from the site.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Expected/delivered packages - ADD TO THIS LIST!! =&lt;br /&gt;
&lt;br /&gt;
Please sort by expected arrival date.&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! Expected arrival date !! Recipient name !! Village !! How big and heavy is it?&amp;lt;br&amp;gt;&#039;&#039;metric please!&#039;&#039; !! Description of contents !! Received? (to be edited by Team:Warehouse)&lt;br /&gt;
|- style=&amp;quot;background: #faa;&amp;quot;&lt;br /&gt;
| Before 2025-08-02&lt;br /&gt;
|colspan=5| Absolutely do not have anything delivered before Saturday 2nd of August.&amp;lt;br&amp;gt;We don&#039;t have the people or equipment to deal with it.&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-02 || Example || Example || small example package (0.5kg) || example contents&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-01 || Okarin || Heaven || 11 boxes by courier || t-shirts&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-01 || Okarin || Heaven || 2 boxes || safety vests&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-04 || Mitch Altman || Hardware Hacking Area || Euro Pallet with 11 boxes + roller-board (156kg) || soldering irons and other tools, kits&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-04 - 8 || Marvin Brandstetter HyperCraft3r || Team Parking || medium package (ca. 3kg) || 3 Workpants &lt;br /&gt;
|-&lt;br /&gt;
|-|- style=&amp;quot;background: #faa&amp;quot;&lt;br /&gt;
| After 2025-08-11&lt;br /&gt;
|colspan=5| You can&#039;t have anything delivered to WHY after day 4!&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Team:Warehouse]]&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Parcel_deliveries&amp;diff=15964</id>
		<title>Parcel deliveries</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Parcel_deliveries&amp;diff=15964"/>
		<updated>2025-07-30T07:32:05Z</updated>

		<summary type="html">&lt;p&gt;Okarin: Updated because red on black is hard to read.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;search terms: packet delivery, logistics&lt;br /&gt;
&lt;br /&gt;
= Shipping things to WHY2025 =&lt;br /&gt;
&lt;br /&gt;
It is possible to ship parcels to WHY2025. However, it&#039;s a lot of work for us and many things can go wrong. Therefore, we&#039;d prefer it if you can find alternatives to shipping things to the site. This way we can avoid a lot of disappointment and effort.&lt;br /&gt;
&lt;br /&gt;
There will be a delay after delivery of your package by the courier, before the package will be available to you. This delay could easily be up to an entire day.&lt;br /&gt;
&lt;br /&gt;
= Alternatives: =&lt;br /&gt;
&lt;br /&gt;
* Please try hard to find someone with a car who is going to the site. If you don&#039;t know anyone, ask on the [[IRC]] channel (#why2025 on OFTC).&lt;br /&gt;
&lt;br /&gt;
* Check whether your local hackerspace is organizing bulk transport to the site (many are) and whether you can ship/bring things to said space ahead of the event as well and have it join said transport.&lt;br /&gt;
&lt;br /&gt;
= What can go wrong =&lt;br /&gt;
&lt;br /&gt;
* We have no way of tracking packages beyond this (publicly editable) wiki page. Packages can get lost, misdelivered, or damaged and we are not able to do anything about it.&lt;br /&gt;
* The event is at a site that does not usually receive large volumes of mail and is not familiar to courier services. This means delivery services may attempt to deliver to the wrong place, and packages would be very difficult to trace.&lt;br /&gt;
* We are not set up for significant logistics and package handling on site. We are all volunteers that have a lot of other tasks to do and package handling is something we do when we can and if we can, but our priority is making a cool hacker camp happen, not running a post office.&lt;br /&gt;
&lt;br /&gt;
If you have no other options, we do offer a best-effort service, but there are no guarantees. Specifically:&lt;br /&gt;
&lt;br /&gt;
= DISCLAIMER =&lt;br /&gt;
&lt;br /&gt;
* WHY2025, Stichting IFCAT Foundation, and Manege Beukers accept no liability for your package.&lt;br /&gt;
* Although we will sign for receipt, we are not able to take responsibility of your package. If it happens to be damaged, stolen in transit, has the wrong contents, or it gets delivered to the wrong place, there is nothing we&#039;ll be able to do to help you.&lt;br /&gt;
* If for any reason your package seems dangerous in any way, we might reject or dispose of it before informing you — and still disclaim any liability.&lt;br /&gt;
&lt;br /&gt;
If your package gets lost, there is nothing we can do about it. Please only use this option as a last resort.&lt;br /&gt;
&lt;br /&gt;
= Howto =&lt;br /&gt;
&lt;br /&gt;
To ship a package to WHY2025, follow the following steps&lt;br /&gt;
&lt;br /&gt;
1. Make sure it&#039;s a package, not a letter/envelope. We have limited infrastructure for handling packages but no infrastructure at all for handling envelopes. Sorry!&lt;br /&gt;
&lt;br /&gt;
2. If your package is above 23 kg it **must** be on a pallet. Make sure it is either below that limit, or packaged on a pallet. If a package is on a pallet, make sure it&#039;s weatherproof as it may get rained on during transport and storage.&lt;br /&gt;
&lt;br /&gt;
3. Make sure the package does not consist of food or perishable items (see below)&lt;br /&gt;
&lt;br /&gt;
4. Check that the package is able to arrive between **Saturday, August 2nd** and **Monday, August 11th**. We are not able to receive packages at all outside this time window. If a package arrives outside that time window, it will most likely not reach us, and therefore also not reach you. The package will not be returned but discarded in whatever way seems appropriate. Note: in some countries, you can set a specific delivery date in the future. Dutch couriers typically ignore that.&lt;br /&gt;
&lt;br /&gt;
5. Make sure the package is addressed correctly. Please use the following address format if possible, or at least include all the following information:&lt;br /&gt;
&lt;br /&gt;
   To: YOUR NAME @ YOUR VILLAGE&lt;br /&gt;
   WHY2025 Team Warehouse p/a Manege Beukers&lt;br /&gt;
   &lt;br /&gt;
   Wagenweg 12&lt;br /&gt;
   1724 PT  Oudkarspel&lt;br /&gt;
   The Netherlands&lt;br /&gt;
&lt;br /&gt;
Note that &amp;quot;PT&amp;quot; is part of the postal code &amp;quot;1724 PT&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:red; padding: 10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:white; font-weight: bold;&amp;quot;&amp;gt;&#039;&#039;Regardless of your anxiety level, and regardless of how much you believe that you are not a burden, DO NOT CONTACT and DO NOT VISIT the riding hall (manage) yourself. All communication must go through Team:Warehouse, and we will pick up your package. This may take up an entire extra day after it was delivered; please remain calm and patient.&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If the shipping company requires a phone number, put **your own** phone number on the shipping label. That way you can react if the shipping company gets confused about where to deliver. Please do not use our phone numbers, as we can&#039;t guarantee reachability at the time the package is due to be delivered.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
6. Add your package to the list at the end of this page. The list is sorted by projected arrival day. Please keep it this way. We will update this page once we receive the package.&lt;br /&gt;
&lt;br /&gt;
7. Pick it up at the logistics warehouse. The warehouse is the building next to the Heaven tent.&lt;br /&gt;
&lt;br /&gt;
= Perishable or food items =&lt;br /&gt;
Perishable or food items include BBQ meat, pizza, drinks, and perishable foods. We cannot handle deliveries of such items on site at all.&lt;br /&gt;
&lt;br /&gt;
We have contractual obligations to our food vendors on site that prevent us from delivering food or accepting food deliveries. We also don&#039;t have the capacity for cold storage, rapid delivery, or food-safe logistics. Please understand that we can&#039;t offer this kind of service and don&#039;t ask us about it. Sorry!&lt;br /&gt;
&lt;br /&gt;
If you want to have food delivered to you on site, you&#039;re on your own. You will have to wait for it at the gate until it arrives and intercept them yourself. Delivery trucks are not allowed on the terrain. Be aware that many food suppliers have quite strict policies on deliveries, and will not deliver to a site like ours anyway. If you need large quantities of food, a better choice might be to do a shopping run yourself in a nearby supermarket. A list of supermarkets and their opening hours are on the [[Supermarkets|Supermarkets wiki page]].&lt;br /&gt;
&lt;br /&gt;
= Delivery policy =&lt;br /&gt;
&lt;br /&gt;
== No envelopes! ==&lt;br /&gt;
&lt;br /&gt;
Note: we &#039;&#039;&#039;can&#039;t&#039;&#039;&#039; receive envelopes, so make sure small stuff is in a box even if it would fit in an envelope.&lt;br /&gt;
&lt;br /&gt;
== Not on the wiki ==&lt;br /&gt;
If your package is delivered but it&#039;s not on the wiki, the package may be discarded in whatever way seems appropriate. You could try a reconciliation gift when picking it up at the Warehouse. Traditionally this is apple pie but we&#039;re open for surprises :)&lt;br /&gt;
&lt;br /&gt;
== Small parcels ==&lt;br /&gt;
&lt;br /&gt;
Small parcels (boxes) will be routed to our storage; once it has arrived, infodesk can tell you where to pick it up. The limit for small boxes is 23 kg. We will try to update this page when the shipment arrives.&lt;br /&gt;
&lt;br /&gt;
== Big parcels ==&lt;br /&gt;
&lt;br /&gt;
Any parcel above 23 kg counts as big.&lt;br /&gt;
&lt;br /&gt;
Big parcels **MUST BE ON A PALLET**. They will be delivered to the village directly if the village has a known location (a tent) that is reachable by one of the roads. If not, we&#039;ll leave it at a place we can access by road -- possibly in a restricted area from which you cannot pick it up without our help. Packages might get rained on in transit or in storage, so please make sure they are weatherproof.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please do not have anything shipped to the site (by any means) that you are not able to transport back away from the site.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Expected/delivered packages - ADD TO THIS LIST!! =&lt;br /&gt;
&lt;br /&gt;
Please sort by expected arrival date.&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! Expected arrival date !! Recipient name !! Village !! How big and heavy is it?&amp;lt;br&amp;gt;&#039;&#039;metric please!&#039;&#039; !! Description of contents !! Received? (to be edited by Team:Warehouse)&lt;br /&gt;
|- style=&amp;quot;background: #faa;&amp;quot;&lt;br /&gt;
| Before 2025-08-02&lt;br /&gt;
|colspan=5| Absolutely do not have anything delivered before Saturday 2nd of August.&amp;lt;br&amp;gt;We don&#039;t have the people or equipment to deal with it.&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-02 || Example || Example || small example package (0.5kg) || example contents&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-04 || Mitch Altman || Hardware Hacking Area || Euro Pallet with 11 boxes + roller-board (156kg) || soldering irons and other tools, kits&lt;br /&gt;
|-&lt;br /&gt;
| 2025-08-04 - 8 || Marvin Brandstetter HyperCraft3r || Team Parking || medium package (ca. 3kg) || 3 Workpants &lt;br /&gt;
|-&lt;br /&gt;
|-|- style=&amp;quot;background: #faa&amp;quot;&lt;br /&gt;
| After 2025-08-11&lt;br /&gt;
|colspan=5| You can&#039;t have anything delivered to WHY after day 4!&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Team:Warehouse]]&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Template:Whybox&amp;diff=14337</id>
		<title>Template:Whybox</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Template:Whybox&amp;diff=14337"/>
		<updated>2025-07-22T14:02:52Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;width:100%;&amp;quot; class=&amp;quot;whybox&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;whybox-title&amp;quot; style=&amp;quot;background: #61F2FF; background: linear-gradient(90deg,rgba(82, 52, 191, 1) 0%, rgba(242, 94, 149, 1) 50%, rgba(82, 52, 191, 1) 100%); text-align: center; font-family:&#039;Beon&#039;,&#039;Oxanium&#039;; padding:0px; font-size:30px; vertical-align: bottom; display: block; color: white;&amp;quot; data-input=&amp;quot;{{{title}}}&amp;quot; |&lt;br /&gt;
&amp;lt;span style=&amp;quot;position: relative; top: 0px;&amp;quot;&amp;gt;{{{title}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding:10px;&amp;quot; | &lt;br /&gt;
{{{content}}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Vacancies&amp;diff=13965</id>
		<title>Vacancies</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Vacancies&amp;diff=13965"/>
		<updated>2025-07-20T16:59:29Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 1ex solid #491d88; background: #fec859; color: #331a38; padding: 1em; width: 60%; font-size: 120%; margin: 1em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This page describes how to become part of the organization, where you are more than welcome!&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Want to help out during the event doing one or more things on the field? Check the [[Angel_Guide]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All teams are starting up. That means that they are still preparing for showing their vacancies on this page. &lt;br /&gt;
&lt;br /&gt;
In the mean time: is there anything you would like to do that&#039;s not listed here yet? Ask at [ircs://irc.oftc.net/why2025 #why2025 on OFTC]. New to IRC? Use the [https://webchat.oftc.net/?randomnick=1&amp;amp;channels=why2025&amp;amp;prompt=1 web client] or send a mail at volunteers@why2025.org&lt;br /&gt;
&lt;br /&gt;
There are two tables here. One with specific vacancies, and one with teams who need general members.&lt;br /&gt;
&lt;br /&gt;
This info is accurate as of 2024-10-06.&lt;br /&gt;
&lt;br /&gt;
== Open Vacancies ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width: 100%&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! Team, Role&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Volunteers]], Team members&lt;br /&gt;
|&lt;br /&gt;
What would WHY2025 be without angels, all the volunteers that help make camp perfect? &lt;br /&gt;
&lt;br /&gt;
Help us help them so they can have fun helping at camp :)&lt;br /&gt;
&lt;br /&gt;
Looking for Angel Kitchen Coordinator.&lt;br /&gt;
&lt;br /&gt;
Interested? Need more info? Contact {{UserLink|Okarin}} or sent an email to [mailto:volunteers@why2025.org volunteers@why2025.org]&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Parking]], Parking coordinator support, &#039;evenementenverkeersbegeleiders&#039;&lt;br /&gt;
| &lt;br /&gt;
Are you the Dutch-/English-speaking hero who can help out everyone with a car? Or are you even an evenementenverkeersbegeleiders and can help out at day -1, 0 or 1?&lt;br /&gt;
&lt;br /&gt;
Do you want to help making parking possible, and look at the local regulations? Or do you have strong oppinions on how cars should be placed? &lt;br /&gt;
&lt;br /&gt;
We are in dire need of supporting people for the parking coordinator. Workload can vary, but we certainly need support on the field during the late build-up and the event itself. Please contact {{UserLink|Konmei}} for more information and if you are interested.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [[Team:Merch]], administrative coordinator&lt;br /&gt;
|&lt;br /&gt;
Quality inspector, distribution planner and online shop stockkeeper&lt;br /&gt;
We are looking for a Merch coordinator, who keeps an eye on the shop, handles questions, production and delivery of the WHY2025 Merch. First to feel the merch, looking at samples.[https://tickets.why2025.org/media/pub/ifcat/why2025/item-22-6fce47a6-9b15-4fce-b3ee-b065e9067b23.jpeg image of shirt]&lt;br /&gt;
&lt;br /&gt;
Let&#039;s dress the hackerscene, contact {{UserLink|Netsmurf}}!&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Shuttle]], Team members &lt;br /&gt;
| &lt;br /&gt;
We&#039;re looking for people to help organise the Shuttles.&lt;br /&gt;
The shuttle is, for a large amount of visitors, their first encounter with the event. They should enthusiastic and full of good energy. Really rewarding job though! Not only when arriving, but also when you bring them back to the train.&lt;br /&gt;
For questions, contact {{UserLink|crablab}}.&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Badge]], Team members&lt;br /&gt;
| &lt;br /&gt;
We can definitely use more software developers that are willing to commit to working with us on this interesting project.&lt;br /&gt;
&lt;br /&gt;
If you have experience with &#039;&#039;&#039;embedded C&#039;&#039;&#039; programming we&#039;d love for you to join the &#039;&#039;&#039;Firmware&#039;&#039;&#039; team and if you have experience with &#039;&#039;&#039;Web / Application&#039;&#039;&#039; development the &#039;&#039;&#039;BadgeHub&#039;&#039;&#039; team would love to see you help out.&lt;br /&gt;
&lt;br /&gt;
Join our &#039;&#039;&#039;Signal&#039;&#039;&#039; group for &#039;&#039;&#039;Newcomers&#039;&#039;&#039; and write us a message if you feel like joining us or just want to explore if you see it fit. https://signal.group/#CjQKICKbwZzlVup_A_smn_rUWrQVTzomGlBZgkP3Txm_P23xEhDzXQr4gvUMxUxivNZKuOEj&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Foodcourt]], Team members subteam &amp;quot;Bar&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
We are looking for team members for the Horeca team, subteam Bar. Do you like to put a smile on people&#039;s faces? &lt;br /&gt;
&lt;br /&gt;
The Bar team will organize, build and run the 3 planned Bar areas. Organizing consists of planning, designing bar set-up, ordering supplies to be delivered. &lt;br /&gt;
A few days before the event we will receive the ordered stuff and start the build up. &lt;br /&gt;
During the event on site the Angels will run the bars. &lt;br /&gt;
With a dedicated Bar-team we coordinate, re-supply and take turns solving any problems for the 3 event bars. Do you want to be part of the team closest to the Mate? Then this is the team for you! &lt;br /&gt;
&lt;br /&gt;
For questions, contact {{UserLink|K4T0}}&lt;br /&gt;
|- &lt;br /&gt;
| [[Team:PartyArea]], Team members&lt;br /&gt;
|&lt;br /&gt;
The Party Area team will organize, build and run the WHY2025 main stage with Live Music content, DJ&#039;s Silent Disco until deep in the Night&lt;br /&gt;
We are looking for Team Members that can&#039;t sleep anyway and love to organize parties !!!&lt;br /&gt;
&lt;br /&gt;
For questions, contact {{UserLink|Netsmurf}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Cohesion]], Team member&lt;br /&gt;
|&lt;br /&gt;
Team Cohesion is looking for extra team members. Both for during the event to coordinate things and in the preparation phase. Take a look at the team page for the things we are working on before the event starts if you want to lend a hand in creating policy or set up the ultimate silent lounge. For during the event we need people who are good listeners and feel up to deescalate wherever necessary. &lt;br /&gt;
Get in touch with us so you can help everyone be excellent to each other. &lt;br /&gt;
&lt;br /&gt;
For questions, contact {{UserLink|Dany}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Parking]], Team Lead&lt;br /&gt;
|&lt;br /&gt;
The Parking team is a fun vitally important team responsible for making our visitors feel welcome when they arrive for the first time at WHY2025 and making sure traffic flows and parking are done in a safe and orderly way.&lt;br /&gt;
&lt;br /&gt;
For questions, contact {{UserLink|Netsmurf}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Parking]], Team members&lt;br /&gt;
|&lt;br /&gt;
The Parking team is a fun vitally important team responsible for making our visitors feel welcome when they arrive for the first time at WHY2025 and making sure traffic flows and parking are done in a safe and orderly way.&lt;br /&gt;
&lt;br /&gt;
For questions, contact {{UserLink|Netsmurf}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Family]], Project owner&lt;br /&gt;
| &lt;br /&gt;
Even if you do not have time to be very closely involved with FamilyZone you may want to do something for/with (your?) kids.  We are very open to people to run one or two projects at the event. Check out our [[Team:Family#Projects|current project list]] for inspiration.&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Content]], Speaker Desk Volunteers&lt;br /&gt;
| &lt;br /&gt;
Team:Content is in need of volunteers for Speaker Desk (more info soon).&lt;br /&gt;
&lt;br /&gt;
Contact content@why2025.org to get involved!&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Teams who still need members ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- This table is filled from the teams page. Teams that don&#039;t need new people are not shown.&lt;br /&gt;
add &#039;|team_needs_x_people=1&#039; to the box on top of your wiki page.&lt;br /&gt;
love,&lt;br /&gt;
Boekenwuurm&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#ask: [[Category:Team]] [[Team needs x people::&amp;gt;1]]&lt;br /&gt;
 |?Team is essential to event=essential to event&lt;br /&gt;
 |?Team has enough people=enough people&lt;br /&gt;
 |?Team needs x people = team needs x people&lt;br /&gt;
 |?E-Mail=Contact&lt;br /&gt;
 |limit=100&lt;br /&gt;
 |offset=0&lt;br /&gt;
 |link=subject&lt;br /&gt;
 |sort=&lt;br /&gt;
 |outrotemplate=plteamhealthfooter&lt;br /&gt;
 |order=asc&lt;br /&gt;
 |headers=show&lt;br /&gt;
 |searchlabel=... further results&lt;br /&gt;
 |class=sortable wikitable smwtable&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== I want to do something small ==&lt;br /&gt;
Small tasks that need to be done, or large tasks that can be split in small tasks are collected at the [[Tiny_Tasks]] list&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Volunteering_Guide&amp;diff=13761</id>
		<title>Volunteering Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Volunteering_Guide&amp;diff=13761"/>
		<updated>2025-07-18T17:42:45Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[File:Volunteers needed.png|frameless|right|Volunteers requested :-)]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1ex solid #491d88; background: #fec859; color: #331a38; padding: 1em; width: 60%; font-size: 120%; margin: 1em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This page describes how to become part of the organization, where you are more than welcome!&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Want to help out during the event doing one or more things on the field? Check the [[Angel_Guide]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{VolunteeringHeader}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 800px&amp;quot;&amp;gt;&lt;br /&gt;
Welcome to the &#039;&#039;&#039;WHY2025&#039;&#039;&#039; volunteering page. This page has the goal to make it easy to understand &#039;&#039;&#039;WHY2025&#039;&#039;&#039; and start contributing to it. You&#039;ll find information on why this event exists, how it is organized, how decisions are made, and how you can contribute.&lt;br /&gt;
&lt;br /&gt;
== Why is there an WHY2025? ==&lt;br /&gt;
Ultimately &#039;&#039;&#039;WHY2025&#039;&#039;&#039; wants to share knowledge about hacking with the world. This helps improve the world by making technology accessible, sharable, and understandable. We believe that sharing this knowledge creates a better world: whatever this knowledge entails. From creative use to technology to actual creation and philosophy. Therefore the range of knowledge and programmed content is very broad, but always leans towards technology and systems.&lt;br /&gt;
&lt;br /&gt;
People that subscribe to this goal found that this can be done in various ways, but the ultimate would be to create a temporary outdoor physical utopia. Also known as a &amp;quot;hacker camp&amp;quot;. These have been organized &#039;&#039;&#039;since 1993&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WHY2025&#039;&#039;&#039; can be described as two things:&lt;br /&gt;
&lt;br /&gt;
# a physical event where people that like hacking / having a deep passion for technology meet and elevate each other.&lt;br /&gt;
# a place where knowledge is presented on stages and archived on the internet for anyone to see, use and access.&lt;br /&gt;
&lt;br /&gt;
== How is WHY2025 organized? ==&lt;br /&gt;
&#039;&#039;&#039;WHY2025&#039;&#039;&#039; is organized in various ways. Most importantly it is organized by volunteers who assemble in groups about a specific subject. Legally &#039;&#039;&#039;WHY2025&#039;&#039;&#039; is organized by the IFCAT foundation: it performs bureaucratic work on request of the organization. The foundation has handed off all operational decisions to volunteers / teams: aka (to be) experts.&lt;br /&gt;
&lt;br /&gt;
=== Organizational Concepts ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WHY2025&#039;&#039;&#039; is a fully volunteer-driven event. But where do you start volunteering? Knowing what the structure looks like might help.&lt;br /&gt;
&lt;br /&gt;
A simple view of &#039;&#039;&#039;WHY2025&#039;&#039;&#039; yields the following six key concepts:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Roles&#039;&#039;&#039;: description of responsibilities. It is a description of &#039;what&#039; the team should accomplish, it does not state &#039;how&#039; something needs to be done. For example: the &#039;Deco&#039; role states &amp;quot;make the whole event pretty&amp;quot; and &amp;quot;impress visitors with a memorable atmosphere&amp;quot;. A decent list of roles can be found here: [[roles]].&lt;br /&gt;
* &#039;&#039;&#039;Teams&#039;&#039;&#039;: a group of people that are (or want to become) experts on a certain subject. Some teams are established and also help on other events such as CCC and EMF. Others are new or unique to WHY, such as the Flags or NUTS. In the end, teams make decisions based on expertise and intent to create a great event. A list of teams can be found here: [[teams]]. A team fulfills one or more roles and consists of many team members.&lt;br /&gt;
* &#039;&#039;&#039;Team member&#039;&#039;&#039;: Somebody that is actively doing stuff for a team.&lt;br /&gt;
* &#039;&#039;&#039;First Contacts&#039;&#039;&#039;: How a team is organized internally, what communication structure they choose, and how they meet is theirs to decide. To lower the barrier for new volunteers, teams share several contact details such as a first-line contact. A team has one or more first-line contacts.&lt;br /&gt;
* &#039;&#039;&#039;Angel&#039;&#039;&#039;: Angels are on-event volunteers that perform mostly designed tasks. They do not need to be fully invested in what a team does or how the organization works. An angel usually works in a predefined timeslot (called a shift). A team can have a need for many angels.&lt;br /&gt;
* &#039;&#039;&#039;Wiki&#039;&#039;&#039;: The wiki is the central information repository for organizing &#039;&#039;&#039;WHY2025&#039;&#039;&#039;. The wiki can be reached at &#039;&#039;&#039;[http://wiki.why2025.org https://wiki.why2025.org]&#039;&#039;&#039;. You&#039;ll find a volunteering section as well as many pages aimed at visiting.&lt;br /&gt;
* &#039;&#039;&#039;Projectleiding&#039;&#039;&#039;: A team that tracks the health and progress of the entire organization. One team member from the projectleiding (PL) team is connected to every other team to assist the team with navigating the organization, bootstrapping, legal, financial. As the organization matures, the activities of PL dwindle. PL does not determine the color of the bikeshed, &#039;&#039;&#039;WHY2025&#039;&#039;&#039; is organized team first.&lt;br /&gt;
* &#039;&#039;&#039;Orga&#039;&#039;&#039;: a simplification that points to the group of people that organizes this event: all angels and/or team members.&lt;br /&gt;
&lt;br /&gt;
== How to join the crew ==&lt;br /&gt;
&lt;br /&gt;
If you want to join a specific [[teams|team]], you can just talk to the people who are already on the team. For many teams, there will be a listed email address. Just send a mail, it doesn&#039;t have to be a very long one, something like  &amp;quot;Hi, I&#039;d like to join this team; how can I help?&amp;quot; is enough. Please note that some teams might already be fully staffed, and are not looking for more volunteers.&lt;br /&gt;
&lt;br /&gt;
Some teams haven&#039;t really started yet, and as such, their team page is pretty empty. Don&#039;t let that stop you, because these are the teams that need your help the most. If there&#039;s no team email address, that means we&#039;re looking for someone to &amp;quot;bootstrap&amp;quot; the team into existence. The list of [[Vacancies]] is a good starting point for those who want to take the lead in getting a team up and running. If you are not sure how to start your desired team you can always contact the assigned member from the [[Team:Projectleiding]].&lt;br /&gt;
&lt;br /&gt;
If you want to join the crew, and don&#039;t know which team would suit you, then you can talk to someone from the future [[Team:Volunteers]] and they can help you with that. You can email &#039;&#039;&#039;volunteers@why2025.org&#039;&#039;&#039;. If you don&#039;t know what you want to do, feel free to describe what you&#039;re good at, so we can find a good match. Or you can join our general orga meetings or any of the [[IRC|IRC channels]] and ask around. Another option is to look at the [[Roles]] page to see which of the responsibilities you find attractive, and then figure out which team does that role.&lt;br /&gt;
&lt;br /&gt;
=== General communication channels ===&lt;br /&gt;
&lt;br /&gt;
If you want to say hi and meet us, there are many opportunities:&lt;br /&gt;
&lt;br /&gt;
* [[IRC]], the old and reliable chat protocol&lt;br /&gt;
* [[Mailing lists]], for somewhat more structured communication&lt;br /&gt;
* [[Meetings]], both physical and [[Jitsi|online]&lt;br /&gt;
&lt;br /&gt;
The wiki itself (that is, the website you&#039;re looking at now) is also used for communication. Signing up for teams and meetings is done on the wiki, and sometimes there&#039;s a discussion about the contents of pages. Please [[Special:CreateAccount|create an account]] to unlock the page editing feature.&lt;br /&gt;
&lt;br /&gt;
=== Team-specific communication channels ===&lt;br /&gt;
&lt;br /&gt;
Go to the [[Teams]] page, and then the team specific page, to find out where the team members reside.&lt;br /&gt;
&lt;br /&gt;
== How many pieces? &amp;lt;!-- If this title doesn&#039;t make sense to you, please just know that it will probably cause a smile on some orga members&#039; faces, as it&#039;s an inside joke referring to the OHM2013 teardown. --&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;WHY2025&#039;&#039;&#039; organization is huge and has numerous moving pieces. It&#039;s hard to describe everything in detail, especially because we always fail to come up with good definitions. We&#039;re constantly figuring things out and we often find that clear boundaries are impossible in a chaotic organization like ours. When you talk to different people, they&#039;ll probably have a different idea of how it works. And they&#039;re probably both right, because there are so many valid perspectives. But we can come up with some basic explanations that should give some insight into the &amp;quot;structure&amp;quot; of the organization.&lt;br /&gt;
&lt;br /&gt;
There are two kinds of volunteers, and both are vitally important:&lt;br /&gt;
&lt;br /&gt;
; Angels: visitors who, at the event, sign up to do shifts. This can be anything from bartending to driving a luggage shuttle golf cart, helping with preparing the volunteer food, etcetera. Generally, these tasks are prepared by the orga and come with instructions, so you can just start doing them when you arrive on the job. You can even decide to become an angel at the event itself. More on this at [[Angel]]&lt;br /&gt;
; Orga: the term &amp;quot;orga&amp;quot; has become really broad, and now includes anyone who is involved with the preparations of the event. If you join the crew long before the event starts, then you&#039;re orga.&lt;br /&gt;
&lt;br /&gt;
Within the orga, some people maintain direct contact with [[Team:Projectleiding]]. These so-called &amp;quot;first-line contacts&amp;quot;, or &amp;quot;team leads&amp;quot;, are responsible for a team&#039;s budget and decision making. Every team does one or multiple [[roles]]. A role is a collection of responsibilities. This allows us to think of the organization in a more abstract manner.&lt;br /&gt;
&lt;br /&gt;
== How we work ==&lt;br /&gt;
&lt;br /&gt;
Teams are very autonomous, and it&#039;s up to the team to decide how they organize themselves. Because of that, different teams may have very different ways of reaching decisions.&lt;br /&gt;
&lt;br /&gt;
There&#039;s another page that goes into this subject in more detail: [[way of working]].&lt;br /&gt;
&lt;br /&gt;
== What we have to offer ==&lt;br /&gt;
&lt;br /&gt;
Volunteering for &#039;&#039;&#039;WHY2025&#039;&#039;&#039; is an unpaid job. Because of the way our event is designed, we&#039;re counting on everyone to help out, and that&#039;s why we can have affordable tickets instead of expensive corporate entrance fees. This does indeed mean that crew members still have to buy a ticket to be part of the event. (If you can&#039;t afford a ticket, there are options for that, but that&#039;s not related to whether you&#039;re a volunteer.) All volunteers are part of the crew because they want to be part of this organization, not for any financial gains.&lt;br /&gt;
&lt;br /&gt;
We do our best to take care of our fellow crew members. When joining the orga community, or when signing up for angel shifts, you become very important to us, and we want you to feel welcome. We have a crew area where you can hang out and get some rest. Good food is served exclusively for crew members, including angels who get food vouchers for doing a certain amount of shifts. And of course, we&#039;ll also hand out physical tokens of appreciation, such as crew t-shirts.&lt;br /&gt;
&lt;br /&gt;
For orga, there are orga meetings and field days, where we shape the details of the upcoming event. These meetings are equal parts hard work and socializing/networking/partying.&lt;br /&gt;
&lt;br /&gt;
== Other forms of participation ==&lt;br /&gt;
&lt;br /&gt;
Being part of the crew is great, but there are more different ways to participate! [[Villages]] are sub-events organized by visitors themselves. Just to be clear: when we talk about crew and orga, we&#039;re talking about the main event, not the village crews. If you want to learn more about the villages and how they organize themselves, have a look at their respective pages.&lt;br /&gt;
&lt;br /&gt;
=== Wiki gardening ===&lt;br /&gt;
&lt;br /&gt;
Are you good with wikis? We always need help structuring the information, correcting spelling and grammar, and making things look nicer with appropriate images and such. If you want to help out with these things, please [[Special:CreateAccount|create an account]] and edit away :)&lt;br /&gt;
&lt;br /&gt;
For example, this page has a lot of text and just two images. It&#039;s amazing you made it this far!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.css&amp;diff=13671</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.css&amp;diff=13671"/>
		<updated>2025-07-18T09:05:31Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* READ ME READ ME READ ME */&lt;br /&gt;
/* See https://gitlab.com/why2025/team-sysadmin/mediawiki-themes/-/tree/master/vector/why?ref_type=heads */&lt;br /&gt;
/* Prefix temporary bugfixes with either `body.theme-why` or `body.theme-why-light` for the dark and light theme respectively */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* End of intentional gap */&lt;br /&gt;
&lt;br /&gt;
/* Countdown begin */&lt;br /&gt;
&lt;br /&gt;
/* the countdown clock on the front page of the wiki. See common.js for the script. */&lt;br /&gt;
#clockdiv{&lt;br /&gt;
  font-family: Beon;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font-weight: 100;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#clockdiv &amp;gt; div{&lt;br /&gt;
  padding: 10px;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  margin-left: 10px;&lt;br /&gt;
  color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#clockdiv &amp;gt; div:nth-child(1) {  background: #5234BF;}&lt;br /&gt;
#clockdiv &amp;gt; div:nth-child(2) {  background: #B03BBF;}&lt;br /&gt;
#clockdiv &amp;gt; div:nth-child(3) {  background: #F24535;}&lt;br /&gt;
#clockdiv &amp;gt; div:nth-child(4) {  background: #FFFB96;}&lt;br /&gt;
&lt;br /&gt;
#clockdiv div &amp;gt; span{&lt;br /&gt;
  box-sizing: content-box;&lt;br /&gt;
  padding: 15px;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
  background: #00000073;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  min-width:50px;&lt;br /&gt;
  height:50px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.clocksmalltext{&lt;br /&gt;
  padding-top: 5px;&lt;br /&gt;
  font-size: 20px;&lt;br /&gt;
  color: #000000;&lt;br /&gt;
}&lt;br /&gt;
/* Countdown end */&lt;br /&gt;
&lt;br /&gt;
/* helps make the frontpage responsive */&lt;br /&gt;
.col-wrap * {&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Create two equal columns that floats next to each other */&lt;br /&gt;
.col-wrap-col-50 {&lt;br /&gt;
  float: left;&lt;br /&gt;
  width: 50%;&lt;br /&gt;
  padding: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Clear floats after the columns */&lt;br /&gt;
.col-wrap:after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  display: table;&lt;br /&gt;
  clear: both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes the two columns stack on top of each other instead of next to each other */&lt;br /&gt;
@media screen and (max-width: 1200px) {&lt;br /&gt;
  .col-wrap-col-50 {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Background colors for thumbs need to go, given the design generator creates transparent pngs. */&lt;br /&gt;
.thumbimage {&lt;br /&gt;
background-color: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fix Page Forms map / location picker */&lt;br /&gt;
.leaflet-container .leaflet-overlay-pane svg,&lt;br /&gt;
.leaflet-container .leaflet-marker-pane img,&lt;br /&gt;
.leaflet-container .leaflet-shadow-pane img,&lt;br /&gt;
.leaflet-container .leaflet-tile-pane img,&lt;br /&gt;
.leaflet-container img.leaflet-image-layer {&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
	max-height: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes vibe{&lt;br /&gt;
	0%{}&lt;br /&gt;
	2%{&lt;br /&gt;
		transform: translateX(5px) rotateZ(1deg);&lt;br /&gt;
	}&lt;br /&gt;
	4%{transform: translateX(-5px)  rotateZ(-0.1deg);}&lt;br /&gt;
	6%{transform: translateX(3px)  rotateZ(0.2deg);}&lt;br /&gt;
	8%{transform: translateX(-2px)  rotateZ(-0.2deg);}&lt;br /&gt;
	10%{transform: translateX(1px)  rotateZ(0.2deg);}&lt;br /&gt;
	12%{transform: translateX(-5px)  rotateZ(-0.2deg);}&lt;br /&gt;
	14%{transform: translateX(3px)  rotateZ(-0.1deg);}&lt;br /&gt;
	16%{transform: translateX(-5px)  rotateZ(-0.2deg);}&lt;br /&gt;
	18%{transform: translateX(5px)  rotateZ(0.2deg);}&lt;br /&gt;
	20{transform: translateX(-5px)  rotateZ(-0.2deg);}&lt;br /&gt;
	22%{transform: translateX(5px)  rotateZ(0.2deg);}&lt;br /&gt;
	24%{transform: translateX(-3px)  rotateZ(-0.2deg);}&lt;br /&gt;
	26%{transform: translateX(0px)  rotateZ(0.0deg);}&lt;br /&gt;
	100%{}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Village_Øl_Telecom h1 span, a[title=&amp;quot;Village:Øl Telecom&amp;quot;]{&lt;br /&gt;
    animation: vibe 1.5s infinite alternate;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.css&amp;diff=13668</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.css&amp;diff=13668"/>
		<updated>2025-07-18T09:01:54Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* READ ME READ ME READ ME */&lt;br /&gt;
/* See https://gitlab.com/why2025/team-sysadmin/mediawiki-themes/-/tree/master/vector/why?ref_type=heads */&lt;br /&gt;
/* Prefix temporary bugfixes with either `body.theme-why` or `body.theme-why-light` for the dark and light theme respectively */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* End of intentional gap */&lt;br /&gt;
&lt;br /&gt;
/* Countdown begin */&lt;br /&gt;
&lt;br /&gt;
/* the countdown clock on the front page of the wiki. See common.js for the script. */&lt;br /&gt;
#clockdiv{&lt;br /&gt;
  font-family: Beon;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font-weight: 100;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#clockdiv &amp;gt; div{&lt;br /&gt;
  padding: 10px;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  margin-left: 10px;&lt;br /&gt;
  color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#clockdiv &amp;gt; div:nth-child(1) {  background: #5234BF;}&lt;br /&gt;
#clockdiv &amp;gt; div:nth-child(2) {  background: #B03BBF;}&lt;br /&gt;
#clockdiv &amp;gt; div:nth-child(3) {  background: #F24535;}&lt;br /&gt;
#clockdiv &amp;gt; div:nth-child(4) {  background: #FFFB96;}&lt;br /&gt;
&lt;br /&gt;
#clockdiv div &amp;gt; span{&lt;br /&gt;
  padding: 15px;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
  background: #00000073;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  min-width:50px;&lt;br /&gt;
  height:50px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.clocksmalltext{&lt;br /&gt;
  padding-top: 5px;&lt;br /&gt;
  font-size: 20px;&lt;br /&gt;
  color: #000000;&lt;br /&gt;
}&lt;br /&gt;
/* Countdown end */&lt;br /&gt;
&lt;br /&gt;
/* helps make the frontpage responsive */&lt;br /&gt;
.col-wrap * {&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Create two equal columns that floats next to each other */&lt;br /&gt;
.col-wrap-col-50 {&lt;br /&gt;
  float: left;&lt;br /&gt;
  width: 50%;&lt;br /&gt;
  padding: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Clear floats after the columns */&lt;br /&gt;
.col-wrap:after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  display: table;&lt;br /&gt;
  clear: both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes the two columns stack on top of each other instead of next to each other */&lt;br /&gt;
@media screen and (max-width: 1200px) {&lt;br /&gt;
  .col-wrap-col-50 {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Background colors for thumbs need to go, given the design generator creates transparent pngs. */&lt;br /&gt;
.thumbimage {&lt;br /&gt;
background-color: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fix Page Forms map / location picker */&lt;br /&gt;
.leaflet-container .leaflet-overlay-pane svg,&lt;br /&gt;
.leaflet-container .leaflet-marker-pane img,&lt;br /&gt;
.leaflet-container .leaflet-shadow-pane img,&lt;br /&gt;
.leaflet-container .leaflet-tile-pane img,&lt;br /&gt;
.leaflet-container img.leaflet-image-layer {&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
	max-height: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes vibe{&lt;br /&gt;
	0%{}&lt;br /&gt;
	2%{&lt;br /&gt;
		transform: translateX(5px) rotateZ(1deg);&lt;br /&gt;
	}&lt;br /&gt;
	4%{transform: translateX(-5px)  rotateZ(-0.1deg);}&lt;br /&gt;
	6%{transform: translateX(3px)  rotateZ(0.2deg);}&lt;br /&gt;
	8%{transform: translateX(-2px)  rotateZ(-0.2deg);}&lt;br /&gt;
	10%{transform: translateX(1px)  rotateZ(0.2deg);}&lt;br /&gt;
	12%{transform: translateX(-5px)  rotateZ(-0.2deg);}&lt;br /&gt;
	14%{transform: translateX(3px)  rotateZ(-0.1deg);}&lt;br /&gt;
	16%{transform: translateX(-5px)  rotateZ(-0.2deg);}&lt;br /&gt;
	18%{transform: translateX(5px)  rotateZ(0.2deg);}&lt;br /&gt;
	20{transform: translateX(-5px)  rotateZ(-0.2deg);}&lt;br /&gt;
	22%{transform: translateX(5px)  rotateZ(0.2deg);}&lt;br /&gt;
	24%{transform: translateX(-3px)  rotateZ(-0.2deg);}&lt;br /&gt;
	26%{transform: translateX(0px)  rotateZ(0.0deg);}&lt;br /&gt;
	100%{}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Village_Øl_Telecom h1 span, a[title=&amp;quot;Village:Øl Telecom&amp;quot;]{&lt;br /&gt;
    animation: vibe 1.5s infinite alternate;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Welcome&amp;diff=13666</id>
		<title>Welcome</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Welcome&amp;diff=13666"/>
		<updated>2025-07-18T09:00:54Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Wiki banner.png|center|alt=WHAT HACKERS YEAR FOR&lt;br /&gt;
&lt;br /&gt;
8-12th August 2025, The Netherlands|WHY2025 infobanner]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The camp is organized [https://angel.why2025.org/ for and by volunteers] from and around all facets of the international hacker community. Knowledge sharing, technological advancement, experimentation, connecting with your hacker peers, and of course hacking are some of the core values of this event. During the camp there are [https://why2025.org/programme hundreds of talks] and activities to participate in.&lt;br /&gt;
&lt;br /&gt;
== The Last Online Orga Meetings ==&lt;br /&gt;
 &amp;lt;big&amp;gt;The last online organization meeting before WHY is on [https://wiki.why2025.org/Orga_Jitsi_30_July_2025 Wednesday 30th of July 2025] &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upcoming Sweatshops == &lt;br /&gt;
Come and help us in a real life sweatshops. So if you want to help us out, and help prepare the welcome package and/or the badge for the visitors. Then please come and help us out. Just put your name on the list, so we know you can come. And just know, you do NOT have to in any team, anyone willing to help us during these sweatshops is welcomed.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;big&amp;gt;The Welcome Package Sweatshop: [https://wiki.why2025.org/Welcome_Package_Sweatshop Saturday 26th of July 2025]&amp;lt;/big&amp;gt;&lt;br /&gt;
 &amp;lt;big&amp;gt;The Badge Assembly Sweatshop: [https://wiki.why2025.org/Badge_Assembly_Sweatshop Saturday 2nd of August 2025]&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-wrap&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;col-wrap-col-50&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=How to participate|content=&lt;br /&gt;
* [[Volunteering_Guide|Volunteering Guide]] – become an Angel!  [https://angel.why2025.org/ Sign up HERE]&lt;br /&gt;
* [[Self-organized Sessions]] – host your own talk, workshop, hack session, meeting&lt;br /&gt;
* [https://ctf.why2025.org Capture the Flag] - solve all the challenges &lt;br /&gt;
* [https://tokens.why2025.org Secret Token Game] - join the scavenger hunt for secret tokens&lt;br /&gt;
* [[Villages]] – create your home with like-minded people&lt;br /&gt;
* [[Projects]] – do your project at the camp&lt;br /&gt;
* [https://design.why2025.org Design] – create WHY2025 designs for your village/project&lt;br /&gt;
* [https://gitlab.com/why2025 GitLab] – edit ALL the things&lt;br /&gt;
* [[Newcomers_Guide|Newcomers Guide]] – New to the event? Don&#039;t know where to start? Begin here!&lt;br /&gt;
}}&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=&amp;quot;col-wrap-col-50&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Countdown|content=&lt;br /&gt;
&amp;lt;span style=&amp;quot;text-align:center; width:100%&amp;quot;&amp;gt;&lt;br /&gt;
{{countdown}}&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=&amp;quot;col-wrap-col-50&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Angel Counter|content=&lt;br /&gt;
&amp;lt;span style=&amp;quot;text-align:center; width:100%&amp;quot;&amp;gt;&lt;br /&gt;
{{AngelCounter}}&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=&amp;quot;col-wrap-col-50&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=General|content=&lt;br /&gt;
* [https://maps.why2025.org/ Map] - The entire field, on your screen. Magic. &lt;br /&gt;
* [https://why2025.org/programme Program] - schedule of the conference program&lt;br /&gt;
* [[Facilities]] – list of facilities at the camp&lt;br /&gt;
* [[Tickets]] – everything about tickets&lt;br /&gt;
* [[FAQ]] – many questions answered&lt;br /&gt;
* [[Code of Conduct]] - rulez on awesomeness &lt;br /&gt;
}}&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=&amp;quot;col-wrap-col-50&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Camping|content=&lt;br /&gt;
* [[Location]] – how to get there&lt;br /&gt;
* [[Camping]] – general camping info&lt;br /&gt;
* [[Shuttle_Service|Shuttle service]] – from the train to the camp&lt;br /&gt;
* [[What to bring]] – this might help you packing&lt;br /&gt;
}}&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=&amp;quot;col-wrap-col-50&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Staying informed|content=&lt;br /&gt;
* Visit the [https://why2025.org/ website]&lt;br /&gt;
* Join the [https://lists.why2025.org/mailman/listinfo/orga mailing list]&lt;br /&gt;
* The main IRC-Channel is [ircs://irc.oftc.net/why2025 #why2025] on oftc.&lt;br /&gt;
&lt;br /&gt;
* Follow us on Social Media:&lt;br /&gt;
** [[File:Mastodon.svg|25px|link=https://chaos.social/@why2025camp|Mastodon]] - [[File:Bluesky.svg|25px|alt=Bluesky Logo|link=https://bsky.app/profile/why2025.bsky.social|Bluesky]] - [[File:LinkedIn.png|25px|alt=LinkedIn|LinkedIn|link=https://www.linkedin.com/company/why2025/|LinkedIn]]&lt;br /&gt;
&lt;br /&gt;
More: [[Staying informed]]&lt;br /&gt;
}}&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=&amp;quot;col-wrap-col-50&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Visitor initiatives|content=&lt;br /&gt;
* [[Carpooling]] - share your car with others&lt;br /&gt;
* [[Ticket_Exchange|Ticket Exchange]] - not coming anymore, sell your tickets here&lt;br /&gt;
* [[POIDH|Pics or It Didn&#039;t Happen]] - sharing is caring, go here to share pics and video&lt;br /&gt;
}}&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=&amp;quot;col-wrap-col-50&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Wiki stats|content=&lt;br /&gt;
* Pages: {{NUMBEROFPAGES}}&lt;br /&gt;
* Articles: {{NUMBEROFARTICLES}}&lt;br /&gt;
* Files: {{NUMBEROFFILES}}&lt;br /&gt;
* Edits: {{NUMBEROFEDITS}}&lt;br /&gt;
* Users: {{NUMBEROFUSERS}}&lt;br /&gt;
}}&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== About WHY2025 ==&lt;br /&gt;
[[File:Map glow.png|thumb| Go to [http://maps.why2025.org maps.why2025.org] for a online version, or [https://wiki.why2025.org/index.php?title=Team:Terrain#Current_State for technical maps]]]&lt;br /&gt;
The camp is built by and for volunteers from across all corners of the international hacker community. Every edition brings together over 3,750 hackers from around the world. At its core, the event thrives on knowledge sharing, technological exploration, hands-on experimentation, and forging connections with fellow hackers. And, of course, hacking in all its glorious forms. Throughout the camp, you&#039;ll find hundreds of talks, workshops, and activities—each an opportunity to learn, build, break, and rethink the boundaries of technology.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WHY2025&#039;&#039;&#039; is an international non-profit outdoor hacker camp/conference taking place in the Netherlands in the summer of 2025.&lt;br /&gt;
&lt;br /&gt;
It is the successor of a string of similar events happening every four years: &lt;br /&gt;
[https://en.wikipedia.org/wiki/Galactic_Hacker_Party GHP], [https://nl.wikipedia.org/wiki/Hacking_at_the_End_of_the_Universe HEU], [https://nl.wikipedia.org/wiki/Hacking_in_Progress HIP], [https://en.wikipedia.org/wiki/Hackers_at_Large HAL], [https://en.wikipedia.org/wiki/What_the_Hack WTH], [https://en.wikipedia.org/wiki/Hacking_at_Random HAR], [https://en.wikipedia.org/wiki/Observe._Hack._Make. OHM], [https://en.wikipedia.org/wiki/Still_Hacking_Anyway SHA] and [https://en.wikipedia.org/wiki/May_Contain_Hackers MCH].&lt;br /&gt;
&lt;br /&gt;
Similar events are [https://www.emfcamp.org/ EMF] in the UK and [https://en.wikipedia.org/wiki/Chaos_Communication_Camp CCC Camp] in Germany.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.css&amp;diff=13664</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.css&amp;diff=13664"/>
		<updated>2025-07-18T08:53:30Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* READ ME READ ME READ ME */&lt;br /&gt;
/* See https://gitlab.com/why2025/team-sysadmin/mediawiki-themes/-/tree/master/vector/why?ref_type=heads */&lt;br /&gt;
/* Prefix temporary bugfixes with either `body.theme-why` or `body.theme-why-light` for the dark and light theme respectively */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* End of intentional gap */&lt;br /&gt;
&lt;br /&gt;
/* Countdown begin */&lt;br /&gt;
&lt;br /&gt;
/* the countdown clock on the front page of the wiki. See common.js for the script. */&lt;br /&gt;
#clockdiv{&lt;br /&gt;
  font-family: Beon;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font-weight: 100;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 30px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#clockdiv &amp;gt; div{&lt;br /&gt;
  padding: 10px;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  margin-left: 10px;&lt;br /&gt;
  color: white;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#clockdiv &amp;gt; div:nth-child(1) {  background: #5234BF;}&lt;br /&gt;
#clockdiv &amp;gt; div:nth-child(2) {  background: #B03BBF;}&lt;br /&gt;
#clockdiv &amp;gt; div:nth-child(3) {  background: #F24535;}&lt;br /&gt;
#clockdiv &amp;gt; div:nth-child(4) {  background: #FFFB96;}&lt;br /&gt;
&lt;br /&gt;
#clockdiv div &amp;gt; span{&lt;br /&gt;
  padding: 15px;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
  background: #00000073;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  min-width:50px;&lt;br /&gt;
  height:50px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.clocksmalltext{&lt;br /&gt;
  padding-top: 5px;&lt;br /&gt;
  font-size: 20px;&lt;br /&gt;
  color: #000000;&lt;br /&gt;
}&lt;br /&gt;
/* Countdown end */&lt;br /&gt;
&lt;br /&gt;
/* helps make the frontpage responsive */&lt;br /&gt;
.col-wrap * {&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Create two equal columns that floats next to each other */&lt;br /&gt;
.col-wrap-col-50 {&lt;br /&gt;
  float: left;&lt;br /&gt;
  width: 50%;&lt;br /&gt;
  padding: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Clear floats after the columns */&lt;br /&gt;
.col-wrap:after {&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  display: table;&lt;br /&gt;
  clear: both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsive layout - makes the two columns stack on top of each other instead of next to each other */&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
  .col-wrap-col-50 {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Background colors for thumbs need to go, given the design generator creates transparent pngs. */&lt;br /&gt;
.thumbimage {&lt;br /&gt;
background-color: transparent !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fix Page Forms map / location picker */&lt;br /&gt;
.leaflet-container .leaflet-overlay-pane svg,&lt;br /&gt;
.leaflet-container .leaflet-marker-pane img,&lt;br /&gt;
.leaflet-container .leaflet-shadow-pane img,&lt;br /&gt;
.leaflet-container .leaflet-tile-pane img,&lt;br /&gt;
.leaflet-container img.leaflet-image-layer {&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
	max-height: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes vibe{&lt;br /&gt;
	0%{}&lt;br /&gt;
	2%{&lt;br /&gt;
		transform: translateX(5px) rotateZ(1deg);&lt;br /&gt;
	}&lt;br /&gt;
	4%{transform: translateX(-5px)  rotateZ(-0.1deg);}&lt;br /&gt;
	6%{transform: translateX(3px)  rotateZ(0.2deg);}&lt;br /&gt;
	8%{transform: translateX(-2px)  rotateZ(-0.2deg);}&lt;br /&gt;
	10%{transform: translateX(1px)  rotateZ(0.2deg);}&lt;br /&gt;
	12%{transform: translateX(-5px)  rotateZ(-0.2deg);}&lt;br /&gt;
	14%{transform: translateX(3px)  rotateZ(-0.1deg);}&lt;br /&gt;
	16%{transform: translateX(-5px)  rotateZ(-0.2deg);}&lt;br /&gt;
	18%{transform: translateX(5px)  rotateZ(0.2deg);}&lt;br /&gt;
	20{transform: translateX(-5px)  rotateZ(-0.2deg);}&lt;br /&gt;
	22%{transform: translateX(5px)  rotateZ(0.2deg);}&lt;br /&gt;
	24%{transform: translateX(-3px)  rotateZ(-0.2deg);}&lt;br /&gt;
	26%{transform: translateX(0px)  rotateZ(0.0deg);}&lt;br /&gt;
	100%{}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Village_Øl_Telecom h1 span, a[title=&amp;quot;Village:Øl Telecom&amp;quot;]{&lt;br /&gt;
    animation: vibe 1.5s infinite alternate;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=User:Okarin&amp;diff=13662</id>
		<title>User:Okarin</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=User:Okarin&amp;diff=13662"/>
		<updated>2025-07-18T08:47:47Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UserInfo&lt;br /&gt;
|EMail=okarin@why2025.org&lt;br /&gt;
|IRC=Okarin&lt;br /&gt;
|Mastodon=Okarin@hsnl.social&lt;br /&gt;
|DECT=OKAB (probably)&lt;br /&gt;
|Languages=NL EN ES&lt;br /&gt;
|HackerSpace=Hackalot&lt;br /&gt;
|NickName={{PAGENAME}}&lt;br /&gt;
|Signal=Okarin.42&lt;br /&gt;
|Village=Village:̸̡̛̯̳͎͔̟̠̪̲͖̦̒̆̀̈̉̒͊̚̕͝&lt;br /&gt;
}}&lt;br /&gt;
Tickets sold:&lt;br /&gt;
{{MqttFeed|why2025/ticketshop/quotas/Event Visitors/paid_orders}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-wrap&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;col-wrap-col-50&amp;quot;&amp;gt;test a&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div class=&amp;quot;col-wrap-col-50&amp;quot;&amp;gt;test b&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Welcome&amp;diff=13537</id>
		<title>Welcome</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Welcome&amp;diff=13537"/>
		<updated>2025-07-16T22:07:18Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Wiki banner.png|center|alt=WHAT HACKERS YEAR FOR&lt;br /&gt;
&lt;br /&gt;
8-12th August 2025, The Netherlands|WHY2025 infobanner]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* This wiki has all relevant information for visitors of WHY2025.&lt;br /&gt;
* When: 8th to 12th August 2025&lt;br /&gt;
* Where: [https://www.openstreetmap.org/?mlat=52.6873&amp;amp;mlon=4.7521#map=16/52.6925/4.7421&amp;amp;layers=P Geestmerambacht, 42km North of Amsterdam]&lt;br /&gt;
&lt;br /&gt;
The camp is organized [https://angel.why2025.org/ for and by volunteers] from and around all facets of the international hacker community. Knowledge sharing, technological advancement, experimentation, connecting with your hacker peers, and of course hacking are some of the core values of this event. During the camp there are [https://why2025.org/programme hundreds of talks] and activities to participate in.&lt;br /&gt;
&lt;br /&gt;
== The Last Online Orga Meetings ==&lt;br /&gt;
 &amp;lt;big&amp;gt;The last online organization before WHY is on [https://wiki.why2025.org/Orga_Jitsi_30_July_2025 Wednesday 30th of July 2025] &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upcoming Sweatshops == &lt;br /&gt;
Come and help us in a real life sweatshops. So if you want to help us out, and help prepare the welcome package and/or the badge for the visitors. Then please come and help us out. Just put your name on the list, so we know you can come. And just know, you do NOT have to in any team, anyone willing to help us during these sweatshops is welcomed.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;big&amp;gt;The Welcome Package Sweatshop: [https://wiki.why2025.org/Welcome_Package_Sweatshop Saturday 26th of July 2025]&amp;lt;/big&amp;gt;&lt;br /&gt;
 &amp;lt;big&amp;gt;The Badge Assembly Sweatshop: [https://wiki.why2025.org/Badge_Assembly_Sweatshop Saturday 2nd of August 2025]&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td  style=&amp;quot;vertical-align: top; width:50%&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=How to participate|content=&lt;br /&gt;
* [[Volunteering_Guide|Volunteering Guide]] – become an Angel!  [https://angel.why2025.org/ Sign up HERE]&lt;br /&gt;
* [[Self-organized Sessions]] – host your own talk, workshop, hack session, meeting&lt;br /&gt;
* [https://ctf.why2025.org Capture the Flag] - solve all the challenges &lt;br /&gt;
* [https://tokens.why2025.org Secret Token Game] - join the scavage hunt for secret tokens&lt;br /&gt;
* [[Villages]] – create your home with like-minded people&lt;br /&gt;
* [[Projects]] – do your project at the camp&lt;br /&gt;
* [https://design.why2025.org Design] – create WHY2025 designs for your village/project&lt;br /&gt;
* [https://gitlab.com/why2025 GitLab] – edit ALL the things&lt;br /&gt;
* [[Newcomers_Guide|Newcomers Guide]] – New to the event? Don&#039;t know where to start? Begin here!&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align: top; width:50%; padding-right:10px;&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Countdown|content=&lt;br /&gt;
&amp;lt;span style=&amp;quot;text-align:center; width:100%&amp;quot;&amp;gt;&lt;br /&gt;
{{countdown}}&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align: top; width:50%; padding-right:10px;&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=General|content=&lt;br /&gt;
* [https://maps.why2025.org/ Map] - The entire field, on your screen. Magic. &lt;br /&gt;
* [https://why2025.org/programme Program] - schedule of the conference program&lt;br /&gt;
* [[Facilities]] – list of facilities at the camp&lt;br /&gt;
* [[Tickets]] – everything about tickets&lt;br /&gt;
* [[FAQ]] – many questions answered&lt;br /&gt;
* [[Code of Conduct]] - rulez on awesomeness &lt;br /&gt;
&lt;br /&gt;
=== Visitor initiatives ===&lt;br /&gt;
* [[Carpooling]] - share your car with others&lt;br /&gt;
* [[Ticket_Exchange|Ticket Exchange]] - not coming anymore, sell your tickets here&lt;br /&gt;
* [[POIDH|Pics or It Didn&#039;t Happen]] - sharing is caring, go here to share pics and video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align: top; width:50%; padding-right:10px;&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Angel Counter|content=&lt;br /&gt;
&amp;lt;span style=&amp;quot;text-align:center; width:100%&amp;quot;&amp;gt;&lt;br /&gt;
{{AngelCounter}}&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td  style=&amp;quot;vertical-align: top; width:50%&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Camping|content=&lt;br /&gt;
* [[Location]] – how to get there&lt;br /&gt;
* [[Camping]] – general camping info&lt;br /&gt;
* [[Shuttle_Service|Shuttle service]] – from the train to the camp&lt;br /&gt;
* [[What to bring]] – this might help you packing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{whybox|title=Staying informed|content=&lt;br /&gt;
* Visit the [https://why2025.org/ website]&lt;br /&gt;
* Join the [https://lists.why2025.org/mailman/listinfo/orga mailing list]&lt;br /&gt;
* The main IRC-Channel is [ircs://irc.oftc.net/why2025 #why2025] on oftc.&lt;br /&gt;
&lt;br /&gt;
* Follow us on Social Media:&lt;br /&gt;
** [[File:Mastodon.svg|25px|link=https://chaos.social/@why2025camp|Mastodon]] - [[File:Bluesky.svg|25px|alt=Bluesky Logo|link=https://bsky.app/profile/why2025.bsky.social|Bluesky]] - [[File:LinkedIn.png|25px|alt=LinkedIn|LinkedIn|link=https://www.linkedin.com/company/why2025/|LinkedIn]]&lt;br /&gt;
&lt;br /&gt;
More: [[Staying informed]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
{{whybox|title=The terrain map|content=&lt;br /&gt;
{{Map}}&lt;br /&gt;
The full map, including the rest of the world, [https://map.why2025.org can be seen here].&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== About WHY2025 ==&lt;br /&gt;
[[File:Map glow.png|thumb| Go to [http://maps.why2025.org maps.why2025.org] for a online version, or [https://wiki.why2025.org/index.php?title=Team:Terrain#Current_State for technical maps]]]&lt;br /&gt;
The camp is built by and for volunteers from across all corners of the international hacker community. Every edition brings together over 3,750 hackers from around the world. At its core, the event thrives on knowledge sharing, technological exploration, hands-on experimentation, and forging connections with fellow hackers. And, of course, hacking in all its glorious forms. Throughout the camp, you&#039;ll find hundreds of talks, workshops, and activities—each an opportunity to learn, build, break, and rethink the boundaries of technology.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WHY2025&#039;&#039;&#039; is an international non-profit outdoor hacker camp/conference taking place in the Netherlands in the summer of 2025.&lt;br /&gt;
&lt;br /&gt;
It is the successor of a string of similar events happening every four years: &lt;br /&gt;
[https://en.wikipedia.org/wiki/Galactic_Hacker_Party GHP], [https://nl.wikipedia.org/wiki/Hacking_at_the_End_of_the_Universe HEU], [https://nl.wikipedia.org/wiki/Hacking_in_Progress HIP], [https://en.wikipedia.org/wiki/Hackers_at_Large HAL], [https://en.wikipedia.org/wiki/What_the_Hack WTH], [https://en.wikipedia.org/wiki/Hacking_at_Random HAR], [https://en.wikipedia.org/wiki/Observe._Hack._Make. OHM], [https://en.wikipedia.org/wiki/Still_Hacking_Anyway SHA] and [https://en.wikipedia.org/wiki/May_Contain_Hackers MCH].&lt;br /&gt;
&lt;br /&gt;
Similar events are [https://www.emfcamp.org/ EMF] in the UK and [https://en.wikipedia.org/wiki/Chaos_Communication_Camp CCC Camp] in Germany.&lt;br /&gt;
&lt;br /&gt;
== Wiki stats ==&lt;br /&gt;
Pages: {{NUMBEROFPAGES}}, Articles: {{NUMBEROFARTICLES}}, Files: {{NUMBEROFFILES}}, Edits: {{NUMBEROFEDITS}}, Users: {{NUMBEROFUSERS}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Welcome&amp;diff=13536</id>
		<title>Welcome</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Welcome&amp;diff=13536"/>
		<updated>2025-07-16T22:04:56Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Wiki banner.png|center|alt=WHAT HACKERS YEAR FOR&lt;br /&gt;
&lt;br /&gt;
8-12th August 2025, The Netherlands|WHY2025 infobanner]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* This wiki has all relevant information for visitors of WHY2025.&lt;br /&gt;
* When: 8th to 12th August 2025&lt;br /&gt;
* Where: [https://www.openstreetmap.org/?mlat=52.6873&amp;amp;mlon=4.7521#map=16/52.6925/4.7421&amp;amp;layers=P Geestmerambacht, 42km North of Amsterdam]&lt;br /&gt;
&lt;br /&gt;
The camp is organized [https://angel.why2025.org/ for and by volunteers] from and around all facets of the international hacker community. Knowledge sharing, technological advancement, experimentation, connecting with your hacker peers, and of course hacking are some of the core values of this event. During the camp there are [https://why2025.org/programme hundreds of talks] and activities to participate in.&lt;br /&gt;
&lt;br /&gt;
== The Last Online Orga Meetings ==&lt;br /&gt;
 &amp;lt;big&amp;gt;The last online organization before WHY is on [https://wiki.why2025.org/Orga_Jitsi_30_July_2025 Wednesday 30th of July 2025] &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upcoming Sweatshops == &lt;br /&gt;
Come and help us in a real life sweatshops. So if you want to help us out, and help prepare the welcome package and/or the badge for the visitors. Then please come and help us out. Just put your name on the list, so we know you can come. And just know, you do NOT have to in any team, anyone willing to help us during these sweatshops is welcomed.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;big&amp;gt;The Welcome Package Sweatshop: [https://wiki.why2025.org/Welcome_Package_Sweatshop Saturday 26th of July 2025]&amp;lt;/big&amp;gt;&lt;br /&gt;
 &amp;lt;big&amp;gt;The Badge Assembly Sweatshop: [https://wiki.why2025.org/Badge_Assembly_Sweatshop Saturday 2nd of August 2025]&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td  style=&amp;quot;vertical-align: top; width:50%&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=How to participate|content=&lt;br /&gt;
* [[Volunteering_Guide|Volunteering Guide]] – become an Angel!  [https://angel.why2025.org/ Sign up HERE]&lt;br /&gt;
* [[Self-organized Sessions]] – host your own talk, workshop, hack session, meeting&lt;br /&gt;
* [https://ctf.why2025.org Capture the Flag] - solve all the challenges &lt;br /&gt;
* [https://tokens.why2025.org Secret Token Game] - join the scavage hunt for secret tokens&lt;br /&gt;
* [[Villages]] – create your home with like-minded people&lt;br /&gt;
* [[Projects]] – do your project at the camp&lt;br /&gt;
* [https://design.why2025.org Design] – create WHY2025 designs for your village/project&lt;br /&gt;
* [https://gitlab.com/why2025 GitLab] – edit ALL the things&lt;br /&gt;
* [[Newcomers_Guide|Newcomers Guide]] – New to the event? Don&#039;t know where to start? Begin here!&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align: top; width:50%; padding-right:10px;&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Countdown|content=&lt;br /&gt;
&amp;lt;span style=&amp;quot;text-align:center; width:100%&amp;quot;&amp;gt;&lt;br /&gt;
{{countdown}}&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align: top; width:50%; padding-right:10px;&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Angel Counter|content=&lt;br /&gt;
&amp;lt;span style=&amp;quot;text-align:center; width:100%&amp;quot;&amp;gt;&lt;br /&gt;
{{AngelCounter}}&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align: top; width:50%; padding-right:10px;&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=General|content=&lt;br /&gt;
* [https://maps.why2025.org/ Map] - The entire field, on your screen. Magic. &lt;br /&gt;
* [https://why2025.org/programme Program] - schedule of the conference program&lt;br /&gt;
* [[Facilities]] – list of facilities at the camp&lt;br /&gt;
* [[Tickets]] – everything about tickets&lt;br /&gt;
* [[FAQ]] – many questions answered&lt;br /&gt;
* [[Code of Conduct]] - rulez on awesomeness &lt;br /&gt;
&lt;br /&gt;
=== Visitor initiatives ===&lt;br /&gt;
* [[Carpooling]] - share your car with others&lt;br /&gt;
* [[Ticket_Exchange|Ticket Exchange]] - not coming anymore, sell your tickets here&lt;br /&gt;
* [[POIDH|Pics or It Didn&#039;t Happen]] - sharing is caring, go here to share pics and video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td  style=&amp;quot;vertical-align: top; width:50%&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Camping|content=&lt;br /&gt;
* [[Location]] – how to get there&lt;br /&gt;
* [[Camping]] – general camping info&lt;br /&gt;
* [[Shuttle_Service|Shuttle service]] – from the train to the camp&lt;br /&gt;
* [[What to bring]] – this might help you packing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{whybox|title=Staying informed|content=&lt;br /&gt;
* Visit the [https://why2025.org/ website]&lt;br /&gt;
* Join the [https://lists.why2025.org/mailman/listinfo/orga mailing list]&lt;br /&gt;
* The main IRC-Channel is [ircs://irc.oftc.net/why2025 #why2025] on oftc.&lt;br /&gt;
&lt;br /&gt;
* Follow us on Social Media:&lt;br /&gt;
** [[File:Mastodon.svg|25px|link=https://chaos.social/@why2025camp|Mastodon]] - [[File:Bluesky.svg|25px|alt=Bluesky Logo|link=https://bsky.app/profile/why2025.bsky.social|Bluesky]] - [[File:LinkedIn.png|25px|alt=LinkedIn|LinkedIn|link=https://www.linkedin.com/company/why2025/|LinkedIn]]&lt;br /&gt;
&lt;br /&gt;
More: [[Staying informed]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
{{whybox|title=The terrain map|content=&lt;br /&gt;
{{Map}}&lt;br /&gt;
The full map, including the rest of the world, [https://map.why2025.org can be seen here].&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== About WHY2025 ==&lt;br /&gt;
[[File:Map glow.png|thumb| Go to [http://maps.why2025.org maps.why2025.org] for a online version, or [https://wiki.why2025.org/index.php?title=Team:Terrain#Current_State for technical maps]]]&lt;br /&gt;
The camp is built by and for volunteers from across all corners of the international hacker community. Every edition brings together over 3,750 hackers from around the world. At its core, the event thrives on knowledge sharing, technological exploration, hands-on experimentation, and forging connections with fellow hackers. And, of course, hacking in all its glorious forms. Throughout the camp, you&#039;ll find hundreds of talks, workshops, and activities—each an opportunity to learn, build, break, and rethink the boundaries of technology.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WHY2025&#039;&#039;&#039; is an international non-profit outdoor hacker camp/conference taking place in the Netherlands in the summer of 2025.&lt;br /&gt;
&lt;br /&gt;
It is the successor of a string of similar events happening every four years: &lt;br /&gt;
[https://en.wikipedia.org/wiki/Galactic_Hacker_Party GHP], [https://nl.wikipedia.org/wiki/Hacking_at_the_End_of_the_Universe HEU], [https://nl.wikipedia.org/wiki/Hacking_in_Progress HIP], [https://en.wikipedia.org/wiki/Hackers_at_Large HAL], [https://en.wikipedia.org/wiki/What_the_Hack WTH], [https://en.wikipedia.org/wiki/Hacking_at_Random HAR], [https://en.wikipedia.org/wiki/Observe._Hack._Make. OHM], [https://en.wikipedia.org/wiki/Still_Hacking_Anyway SHA] and [https://en.wikipedia.org/wiki/May_Contain_Hackers MCH].&lt;br /&gt;
&lt;br /&gt;
Similar events are [https://www.emfcamp.org/ EMF] in the UK and [https://en.wikipedia.org/wiki/Chaos_Communication_Camp CCC Camp] in Germany.&lt;br /&gt;
&lt;br /&gt;
== Wiki stats ==&lt;br /&gt;
Pages: {{NUMBEROFPAGES}}, Articles: {{NUMBEROFARTICLES}}, Files: {{NUMBEROFFILES}}, Edits: {{NUMBEROFEDITS}}, Users: {{NUMBEROFUSERS}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Welcome&amp;diff=13535</id>
		<title>Welcome</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Welcome&amp;diff=13535"/>
		<updated>2025-07-16T22:04:06Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Wiki banner.png|center|alt=WHAT HACKERS YEAR FOR&lt;br /&gt;
&lt;br /&gt;
8-12th August 2025, The Netherlands|WHY2025 infobanner]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* This wiki has all relevant information for visitors of WHY2025.&lt;br /&gt;
* When: 8th to 12th August 2025&lt;br /&gt;
* Where: [https://www.openstreetmap.org/?mlat=52.6873&amp;amp;mlon=4.7521#map=16/52.6925/4.7421&amp;amp;layers=P Geestmerambacht, 42km North of Amsterdam]&lt;br /&gt;
&lt;br /&gt;
The camp is organized [https://angel.why2025.org/ for and by volunteers] from and around all facets of the international hacker community. Knowledge sharing, technological advancement, experimentation, connecting with your hacker peers, and of course hacking are some of the core values of this event. During the camp there are [https://why2025.org/programme hundreds of talks] and activities to participate in.&lt;br /&gt;
&lt;br /&gt;
== The Last Online Orga Meetings ==&lt;br /&gt;
 &amp;lt;big&amp;gt;The last online organization before WHY is on [https://wiki.why2025.org/Orga_Jitsi_30_July_2025 Wednesday 30th of July 2025] &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upcoming Sweatshops == &lt;br /&gt;
Come and help us in a real life sweatshops. So if you want to help us out, and help prepare the welcome package and/or the badge for the visitors. Then please come and help us out. Just put your name on the list, so we know you can come. And just know, you do NOT have to in any team, anyone willing to help us during these sweatshops is welcomed.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;big&amp;gt;The Welcome Package Sweatshop: [https://wiki.why2025.org/Welcome_Package_Sweatshop Saturday 26th of July 2025]&amp;lt;/big&amp;gt;&lt;br /&gt;
 &amp;lt;big&amp;gt;The Badge Assembly Sweatshop: [https://wiki.why2025.org/Badge_Assembly_Sweatshop Saturday 2nd of August 2025]&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td  style=&amp;quot;vertical-align: top; width:50%&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=How to participate|content=&lt;br /&gt;
* [[Volunteering_Guide|Volunteering Guide]] – become an Angel!  [https://angel.why2025.org/ Sign up HERE]&lt;br /&gt;
* [[Self-organized Sessions]] – host your own talk, workshop, hack session, meeting&lt;br /&gt;
* [https://ctf.why2025.org Capture the Flag] - solve all the challenges &lt;br /&gt;
* [https://tokens.why2025.org Secret Token Game] - join the scavage hunt for secret tokens&lt;br /&gt;
* [[Villages]] – create your home with like-minded people&lt;br /&gt;
* [[Projects]] – do your project at the camp&lt;br /&gt;
* [https://design.why2025.org Design] – create WHY2025 designs for your village/project&lt;br /&gt;
* [https://gitlab.com/why2025 GitLab] – edit ALL the things&lt;br /&gt;
* [[Newcomers_Guide|Newcomers Guide]] – New to the event? Don&#039;t know where to start? Begin here!&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align: top; width:50%; padding-right:10px;&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Countdown|content=&lt;br /&gt;
&amp;lt;span style=&amp;quot;text-align:center; width:100%&amp;quot;&amp;gt;&lt;br /&gt;
{{countdown}}&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align: top; width:50%; padding-right:10px;&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Angel Counter|content=&lt;br /&gt;
&amp;lt;span style=&amp;quot;text-align:center; width:100%&amp;quot;&amp;gt;&lt;br /&gt;
{{AngelCounter}}&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align: top; width:50%; padding-right:10px;&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=General|content=&lt;br /&gt;
* [https://maps.why2025.org/ Map] - The entire field, on your screen. Magic. &lt;br /&gt;
* [https://why2025.org/programme Program] - schedule of the conference program&lt;br /&gt;
* [[Facilities]] – list of facilities at the camp&lt;br /&gt;
* [[Tickets]] – everything about tickets&lt;br /&gt;
* [[FAQ]] – many questions answered&lt;br /&gt;
* [[Code of Conduct]] - rulez on awesomeness &lt;br /&gt;
&lt;br /&gt;
=== Visitor initiatives ===&lt;br /&gt;
* [[Carpooling]] - share your car with others&lt;br /&gt;
* [[Ticket_Exchange|Ticket Exchange]] - not coming anymore, sell your tickets here&lt;br /&gt;
* [[POIDH|Pics or It Didn&#039;t Happen]] - sharing is caring, go here to share pics and video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td  style=&amp;quot;vertical-align: top; width:50%&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Camping|content=&lt;br /&gt;
* [[Location]] – how to get there&lt;br /&gt;
* [[Camping]] – general camping info&lt;br /&gt;
* [[Shuttle_Service|Shuttle service]] – from the train to the camp&lt;br /&gt;
* [[What to bring]] – this might help you packing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{whybox|title=Staying informed|content=&lt;br /&gt;
* Visit the [https://why2025.org/ website]&lt;br /&gt;
* Join the [https://lists.why2025.org/mailman/listinfo/orga mailing list]&lt;br /&gt;
* The main IRC-Channel is [ircs://irc.oftc.net/why2025 #why2025] on oftc.&lt;br /&gt;
&lt;br /&gt;
* Follow us on Social Media:&lt;br /&gt;
** [[File:Mastodon.svg|25px|link=https://chaos.social/@why2025camp|Mastodon]] - [[File:Bluesky.svg|25px|alt=Bluesky Logo|link=https://bsky.app/profile/why2025.bsky.social|Bluesky]] - [[File:LinkedIn.png|25px|alt=LinkedIn|LinkedIn|link=https://www.linkedin.com/company/why2025/|LinkedIn]]&lt;br /&gt;
&lt;br /&gt;
More: [[Staying informed]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
{{whybox|title=The terrain map|content=&lt;br /&gt;
{{Map}}&lt;br /&gt;
The full map, including the rest of the world, [https://map.why2025.org can be seen here].&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== About WHY2025 ==&lt;br /&gt;
[[File:Map glow.png|thumb| Go to [http://maps.why2025.org maps.why2025.org] for a online version, or [https://wiki.why2025.org/index.php?title=Team:Terrain#Current_State for technical maps]]]&lt;br /&gt;
The camp is built by and for volunteers from across all corners of the international hacker community. Every edition brings together over 3,750 hackers from around the world. At its core, the event thrives on knowledge sharing, technological exploration, hands-on experimentation, and forging connections with fellow hackers. And, of course, hacking in all its glorious forms. Throughout the camp, you&#039;ll find hundreds of talks, workshops, and activities—each an opportunity to learn, build, break, and rethink the boundaries of technology.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WHY2025&#039;&#039;&#039; is an international non-profit outdoor hacker camp/conference taking place in the Netherlands in the summer of 2025.&lt;br /&gt;
&lt;br /&gt;
It is the successor of a string of similar events happening every four years: &lt;br /&gt;
[https://en.wikipedia.org/wiki/Galactic_Hacker_Party GHP], [https://nl.wikipedia.org/wiki/Hacking_at_the_End_of_the_Universe HEU], [https://nl.wikipedia.org/wiki/Hacking_in_Progress HIP], [https://en.wikipedia.org/wiki/Hackers_at_Large HAL], [https://en.wikipedia.org/wiki/What_the_Hack WTH], [https://en.wikipedia.org/wiki/Hacking_at_Random HAR], [https://en.wikipedia.org/wiki/Observe._Hack._Make. OHM], [https://en.wikipedia.org/wiki/Still_Hacking_Anyway SHA] and [https://en.wikipedia.org/wiki/May_Contain_Hackers MCH].&lt;br /&gt;
&lt;br /&gt;
Similar events are [https://www.emfcamp.org/ EMF] in the UK and [https://en.wikipedia.org/wiki/Chaos_Communication_Camp CCC Camp] in Germany.&lt;br /&gt;
&lt;br /&gt;
== Wiki stats ==&lt;br /&gt;
Pages: {{NUMBEROFPAGES}}, Articles: {{NUMBEROFARTICLES}}, Files: {{NUMBEROFFILES}}, Edits: {{NUMBEROFEDITS}}, Users: {{NUMBEROFUSERS}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Welcome&amp;diff=13534</id>
		<title>Welcome</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Welcome&amp;diff=13534"/>
		<updated>2025-07-16T22:02:36Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Wiki banner.png|center|alt=WHAT HACKERS YEAR FOR&lt;br /&gt;
&lt;br /&gt;
8-12th August 2025, The Netherlands|WHY2025 infobanner]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* This wiki has all relevant information for visitors of WHY2025.&lt;br /&gt;
* When: 8th to 12th August 2025&lt;br /&gt;
* Where: [https://www.openstreetmap.org/?mlat=52.6873&amp;amp;mlon=4.7521#map=16/52.6925/4.7421&amp;amp;layers=P Geestmerambacht, 42km North of Amsterdam]&lt;br /&gt;
&lt;br /&gt;
The camp is organized [https://angel.why2025.org/ for and by volunteers] from and around all facets of the international hacker community. Knowledge sharing, technological advancement, experimentation, connecting with your hacker peers, and of course hacking are some of the core values of this event. During the camp there are [https://why2025.org/programme hundreds of talks] and activities to participate in.&lt;br /&gt;
&lt;br /&gt;
== The Last Online Orga Meetings ==&lt;br /&gt;
 &amp;lt;big&amp;gt;The last online organization before WHY is on [https://wiki.why2025.org/Orga_Jitsi_30_July_2025 Wednesday 30th of July 2025] &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upcoming Sweatshops == &lt;br /&gt;
Come and help us in a real life sweatshops. So if you want to help us out, and help prepare the welcome package and/or the badge for the visitors. Then please come and help us out. Just put your name on the list, so we know you can come. And just know, you do NOT have to in any team, anyone willing to help us during these sweatshops is welcomed.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;big&amp;gt;The Welcome Package Sweatshop: [https://wiki.why2025.org/Welcome_Package_Sweatshop Saturday 26th of July 2025]&amp;lt;/big&amp;gt;&lt;br /&gt;
 &amp;lt;big&amp;gt;The Badge Assembly Sweatshop: [https://wiki.why2025.org/Badge_Assembly_Sweatshop Saturday 2nd of August 2025]&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td  style=&amp;quot;vertical-align: top; width:50%&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=How to participate|content=&lt;br /&gt;
* [[Volunteering_Guide|Volunteering Guide]] – become an Angel!  [https://angel.why2025.org/ Sign up HERE]&lt;br /&gt;
* [[Self-organized Sessions]] – host your own talk, workshop, hack session, meeting&lt;br /&gt;
* [https://ctf.why2025.org Capture the Flag] - solve all the challenges &lt;br /&gt;
* [https://tokens.why2025.org Secret Token Game] - join the scavage hunt for secret tokens&lt;br /&gt;
* [[Villages]] – create your home with like-minded people&lt;br /&gt;
* [[Projects]] – do your project at the camp&lt;br /&gt;
* [https://design.why2025.org Design] – create WHY2025 designs for your village/project&lt;br /&gt;
* [https://gitlab.com/why2025 GitLab] – edit ALL the things&lt;br /&gt;
* [[Newcomers_Guide|Newcomers Guide]] – New to the event? Don&#039;t know where to start? Begin here!&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align: top; width:50%; padding-right:10px;&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Countdown|content=&lt;br /&gt;
&amp;lt;span style=&amp;quot;text-align:center; width:100%&amp;quot;&amp;gt;&lt;br /&gt;
{{countdown}}&lt;br /&gt;
{{AngelCounter}}&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;vertical-align: top; width:50%; padding-right:10px;&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=General|content=&lt;br /&gt;
* [https://maps.why2025.org/ Map] - The entire field, on your screen. Magic. &lt;br /&gt;
* [https://why2025.org/programme Program] - schedule of the conference program&lt;br /&gt;
* [[Facilities]] – list of facilities at the camp&lt;br /&gt;
* [[Tickets]] – everything about tickets&lt;br /&gt;
* [[FAQ]] – many questions answered&lt;br /&gt;
* [[Code of Conduct]] - rulez on awesomeness &lt;br /&gt;
&lt;br /&gt;
=== Visitor initiatives ===&lt;br /&gt;
* [[Carpooling]] - share your car with others&lt;br /&gt;
* [[Ticket_Exchange|Ticket Exchange]] - not coming anymore, sell your tickets here&lt;br /&gt;
* [[POIDH|Pics or It Didn&#039;t Happen]] - sharing is caring, go here to share pics and video&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td  style=&amp;quot;vertical-align: top; width:50%&amp;quot;&amp;gt;&lt;br /&gt;
{{whybox|title=Camping|content=&lt;br /&gt;
* [[Location]] – how to get there&lt;br /&gt;
* [[Camping]] – general camping info&lt;br /&gt;
* [[Shuttle_Service|Shuttle service]] – from the train to the camp&lt;br /&gt;
* [[What to bring]] – this might help you packing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{whybox|title=Staying informed|content=&lt;br /&gt;
* Visit the [https://why2025.org/ website]&lt;br /&gt;
* Join the [https://lists.why2025.org/mailman/listinfo/orga mailing list]&lt;br /&gt;
* The main IRC-Channel is [ircs://irc.oftc.net/why2025 #why2025] on oftc.&lt;br /&gt;
&lt;br /&gt;
* Follow us on Social Media:&lt;br /&gt;
** [[File:Mastodon.svg|25px|link=https://chaos.social/@why2025camp|Mastodon]] - [[File:Bluesky.svg|25px|alt=Bluesky Logo|link=https://bsky.app/profile/why2025.bsky.social|Bluesky]] - [[File:LinkedIn.png|25px|alt=LinkedIn|LinkedIn|link=https://www.linkedin.com/company/why2025/|LinkedIn]]&lt;br /&gt;
&lt;br /&gt;
More: [[Staying informed]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
{{whybox|title=The terrain map|content=&lt;br /&gt;
{{Map}}&lt;br /&gt;
The full map, including the rest of the world, [https://map.why2025.org can be seen here].&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== About WHY2025 ==&lt;br /&gt;
[[File:Map glow.png|thumb| Go to [http://maps.why2025.org maps.why2025.org] for a online version, or [https://wiki.why2025.org/index.php?title=Team:Terrain#Current_State for technical maps]]]&lt;br /&gt;
The camp is built by and for volunteers from across all corners of the international hacker community. Every edition brings together over 3,750 hackers from around the world. At its core, the event thrives on knowledge sharing, technological exploration, hands-on experimentation, and forging connections with fellow hackers. And, of course, hacking in all its glorious forms. Throughout the camp, you&#039;ll find hundreds of talks, workshops, and activities—each an opportunity to learn, build, break, and rethink the boundaries of technology.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WHY2025&#039;&#039;&#039; is an international non-profit outdoor hacker camp/conference taking place in the Netherlands in the summer of 2025.&lt;br /&gt;
&lt;br /&gt;
It is the successor of a string of similar events happening every four years: &lt;br /&gt;
[https://en.wikipedia.org/wiki/Galactic_Hacker_Party GHP], [https://nl.wikipedia.org/wiki/Hacking_at_the_End_of_the_Universe HEU], [https://nl.wikipedia.org/wiki/Hacking_in_Progress HIP], [https://en.wikipedia.org/wiki/Hackers_at_Large HAL], [https://en.wikipedia.org/wiki/What_the_Hack WTH], [https://en.wikipedia.org/wiki/Hacking_at_Random HAR], [https://en.wikipedia.org/wiki/Observe._Hack._Make. OHM], [https://en.wikipedia.org/wiki/Still_Hacking_Anyway SHA] and [https://en.wikipedia.org/wiki/May_Contain_Hackers MCH].&lt;br /&gt;
&lt;br /&gt;
Similar events are [https://www.emfcamp.org/ EMF] in the UK and [https://en.wikipedia.org/wiki/Chaos_Communication_Camp CCC Camp] in Germany.&lt;br /&gt;
&lt;br /&gt;
== Wiki stats ==&lt;br /&gt;
Pages: {{NUMBEROFPAGES}}, Articles: {{NUMBEROFARTICLES}}, Files: {{NUMBEROFFILES}}, Edits: {{NUMBEROFEDITS}}, Users: {{NUMBEROFUSERS}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13533</id>
		<title>Template:AngelCounter</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13533"/>
		<updated>2025-07-16T21:53:42Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://angel.why2025.org/ &amp;lt;div id=&amp;quot;clockdiv&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;sold&amp;quot;&amp;gt;{{MqttFeed|why2025/angel/users|why2025/angel/users|json|0.value}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Registered&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;available&amp;quot;&amp;gt;{{MqttFeed|why2025/angel/users|why2025/angel/users|json|2.value}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Arrived&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;]&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13532</id>
		<title>Template:AngelCounter</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13532"/>
		<updated>2025-07-16T21:52:59Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://tickets.why2025.org/ &amp;lt;div id=&amp;quot;clockdiv&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;sold&amp;quot;&amp;gt;{{MqttFeed|why2025/angel/users|why2025/angel/users|json|0.value}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Sold&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;available&amp;quot;&amp;gt;{{MqttFeed|why2025/angel/users|why2025/angel/users|json|2.value}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Available&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;]&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13531</id>
		<title>Template:AngelCounter</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13531"/>
		<updated>2025-07-16T21:51:45Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://wiki.why2025.org/ &amp;lt;div id=&amp;quot;clockdiv&amp;quot;&amp;gt; &amp;lt;div&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;registered&amp;quot;&amp;gt;&lt;br /&gt;
      {{MqttFeed|why2025/angel/users|why2025/angel/users|json|0.value}}&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;&lt;br /&gt;
      Registered &lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;available&amp;quot;&amp;gt;&lt;br /&gt;
      {{MqttFeed|why2025/angel/users|why2025/angel/users|json|2.value}}&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;&lt;br /&gt;
      Arrived&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;]&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13530</id>
		<title>Template:AngelCounter</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13530"/>
		<updated>2025-07-16T21:51:13Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://wiki.why2025.org/ &amp;lt;div id=&amp;quot;clockdiv&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;registered&amp;quot;&amp;gt;&lt;br /&gt;
      {{MqttFeed|why2025/angel/users|why2025/angel/users|json|0.value}}&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;&lt;br /&gt;
      Registered &lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;available&amp;quot;&amp;gt;&lt;br /&gt;
      {{MqttFeed|why2025/angel/users|why2025/angel/users|json|2.value}}&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;&lt;br /&gt;
      Arrived&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;]&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13529</id>
		<title>Template:AngelCounter</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13529"/>
		<updated>2025-07-16T21:50:48Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;clockdiv&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;registered&amp;quot;&amp;gt;&lt;br /&gt;
      {{MqttFeed|why2025/angel/users|why2025/angel/users|json|0.value}}&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;&lt;br /&gt;
      Registered &lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;available&amp;quot;&amp;gt;&lt;br /&gt;
      {{MqttFeed|why2025/angel/users|why2025/angel/users|json|2.value}}&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;&lt;br /&gt;
      Arrived&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13528</id>
		<title>Template:AngelCounter</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13528"/>
		<updated>2025-07-16T21:48:10Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;clockdiv&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;registered&amp;quot;&amp;gt;&lt;br /&gt;
      {{MqttFeed|why2025/angel/users|why2025/angel/users|json|0.value}}&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;&lt;br /&gt;
      Registered &lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;arrived&amp;quot;&amp;gt;&lt;br /&gt;
      {{MqttFeed|why2025/angel/users|why2025/angel/users|json|2.value}}&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;&lt;br /&gt;
      Arrived&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13527</id>
		<title>Template:AngelCounter</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13527"/>
		<updated>2025-07-16T21:46:11Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;angeldiv&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;registered&amp;quot;&amp;gt;&lt;br /&gt;
      {{MqttFeed|why2025/angel/users|why2025/angel/users|json|0.value}}&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;&lt;br /&gt;
      Registered &lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;arrived&amp;quot;&amp;gt;&lt;br /&gt;
      {{MqttFeed|why2025/angel/users|why2025/angel/users|json|2.value}}&lt;br /&gt;
    &amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;&lt;br /&gt;
      Arrived&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13526</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13526"/>
		<updated>2025-07-16T21:36:12Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
function getTimeRemaining(endtime) {&lt;br /&gt;
    var t = Date.parse(endtime) - Date.parse(new Date());&lt;br /&gt;
    var seconds = Math.floor((t / 1000) % 60);&lt;br /&gt;
    var minutes = Math.floor((t / 1000 / 60) % 60);&lt;br /&gt;
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);&lt;br /&gt;
    var days = Math.floor(t / (1000 * 60 * 60 * 24));&lt;br /&gt;
    return {&lt;br /&gt;
        &#039;total&#039;: t,&lt;br /&gt;
        &#039;days&#039;: days,&lt;br /&gt;
        &#039;hours&#039;: hours,&lt;br /&gt;
        &#039;minutes&#039;: minutes,&lt;br /&gt;
        &#039;seconds&#039;: seconds&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function initializeClock(id, endtime) {&lt;br /&gt;
    var clock = document.getElementById(id);&lt;br /&gt;
    var daysSpan = clock.querySelector(&#039;.days&#039;);&lt;br /&gt;
    var hoursSpan = clock.querySelector(&#039;.hours&#039;);&lt;br /&gt;
    var minutesSpan = clock.querySelector(&#039;.minutes&#039;);&lt;br /&gt;
    var secondsSpan = clock.querySelector(&#039;.seconds&#039;);&lt;br /&gt;
&lt;br /&gt;
    function updateClock() {&lt;br /&gt;
        var t = getTimeRemaining(endtime);&lt;br /&gt;
&lt;br /&gt;
        daysSpan.innerHTML = t.days;&lt;br /&gt;
        hoursSpan.innerHTML = (&#039;0&#039; + t.hours).slice(-2);&lt;br /&gt;
        minutesSpan.innerHTML = (&#039;0&#039; + t.minutes).slice(-2);&lt;br /&gt;
        secondsSpan.innerHTML = (&#039;0&#039; + t.seconds).slice(-2);&lt;br /&gt;
&lt;br /&gt;
        if (t.total &amp;lt;= 0) {&lt;br /&gt;
            clearInterval(timeinterval);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateClock();&lt;br /&gt;
    var timeinterval = setInterval(updateClock, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* only run this on the page that there is a clock div...  */&lt;br /&gt;
// Or just a plain access for comparison&lt;br /&gt;
// (no need to check exists first, it falls back to null)&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:Countdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var deadline = new Date(2025, 07, 8, 13, 37, 42, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;clockdiv&#039;, deadline);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:BuildupCountdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var buildupdeadline = new Date(2025, 07, 1, 0, 0, 0, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;buildupclockdiv&#039;, buildupdeadline);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var mqttinitstarted = false;&lt;br /&gt;
  var mqttClient = null;&lt;br /&gt;
  function initMqtt() {&lt;br /&gt;
    if(typeof mqtt == &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; !mqttinitstarted) {&lt;br /&gt;
      mqttinitstarted = true;&lt;br /&gt;
      (function(d, script) {&lt;br /&gt;
      script = d.createElement(&#039;script&#039;);&lt;br /&gt;
      script.type = &#039;text/javascript&#039;;&lt;br /&gt;
      script.async = true;&lt;br /&gt;
      script.onload = initMqttStep2;&lt;br /&gt;
      script.src = &#039;https://unpkg.com/mqtt@5.10.3/dist/mqtt.min.js&#039;;&lt;br /&gt;
      d.getElementsByTagName(&#039;head&#039;)[0].appendChild(script);&lt;br /&gt;
      }(document));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 function initMqttStep2(callback) {&lt;br /&gt;
    const url = &#039;wss://mqtt.why2025.org/&#039;&lt;br /&gt;
&lt;br /&gt;
    const options = {&lt;br /&gt;
      // Clean session&lt;br /&gt;
      clean: true,&lt;br /&gt;
      connectTimeout: 4000,&lt;br /&gt;
      // Authentication&lt;br /&gt;
      clientId: &#039;whywiki_&#039; + Math.floor(Math.random() * 9999999),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mqttClient = mqtt.connect(url, options);&lt;br /&gt;
    mqttClient.on(&#039;connect&#039;, function () {&lt;br /&gt;
        var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
        for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            mqttClient.subscribe(elementtopic);&lt;br /&gt;
            console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic);&lt;br /&gt;
            if(feedelements[x].attributes[&#039;data-topic2&#039;] &amp;amp;&amp;amp; feedelements[x].attributes[&#039;data-topic2&#039;].value) {&lt;br /&gt;
                var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;].value;&lt;br /&gt;
                mqttClient.subscribe(elementtopic2);&lt;br /&gt;
                console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic2);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Receive messages&lt;br /&gt;
        mqttClient.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
          // message is Buffer&lt;br /&gt;
          console.log(&amp;quot;MQTT msg:&amp;quot;+message.toString())&lt;br /&gt;
          var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
          for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;] ? feedelements[x].attributes[&#039;data-topic2&#039;].value : &amp;quot;null&amp;quot;;&lt;br /&gt;
            var elementOperation = feedelements[x].attributes[&#039;data-operation&#039;] ? feedelements[x].attributes[&#039;data-operation&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
            var elementParams = feedelements[x].attributes[&#039;data-param&#039;] ? feedelements[x].attributes[&#039;data-param&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if(elementtopic == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic2 == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value2&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic == topic || elementtopic2 == topic) {&lt;br /&gt;
                var finalValue = &amp;quot;&amp;quot;;&lt;br /&gt;
                switch(elementOperation) {&lt;br /&gt;
                case &amp;quot;json&amp;quot;:&lt;br /&gt;
                    var elementParamsArr = elementParams.split(&amp;quot;.&amp;quot;);&lt;br /&gt;
                    var displayObj = JSON.parse(feedelements[x].attributes[&#039;data-value&#039;]);&lt;br /&gt;
                    console.log(elementParamsArr);&lt;br /&gt;
&lt;br /&gt;
                    for (elementParam in elementParamsArr) {&lt;br /&gt;
                        console.log(displayObj);&lt;br /&gt;
                        console.log(elementParamsArr[elementParam]);&lt;br /&gt;
                        displayObj = displayObj[elementParamsArr[elementParam]];&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    finalValue = displayObj;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sum&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 + feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sub&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 - feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;mul&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 * feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;div&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 / feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;];&lt;br /&gt;
                }&lt;br /&gt;
                feedelements[x].innerText = finalValue;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Only make a MQTT connection for pages that use it.&lt;br /&gt;
  if (document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;).length &amp;gt; 0) {&lt;br /&gt;
    initMqtt();&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13524</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13524"/>
		<updated>2025-07-16T21:35:25Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
function getTimeRemaining(endtime) {&lt;br /&gt;
    var t = Date.parse(endtime) - Date.parse(new Date());&lt;br /&gt;
    var seconds = Math.floor((t / 1000) % 60);&lt;br /&gt;
    var minutes = Math.floor((t / 1000 / 60) % 60);&lt;br /&gt;
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);&lt;br /&gt;
    var days = Math.floor(t / (1000 * 60 * 60 * 24));&lt;br /&gt;
    return {&lt;br /&gt;
        &#039;total&#039;: t,&lt;br /&gt;
        &#039;days&#039;: days,&lt;br /&gt;
        &#039;hours&#039;: hours,&lt;br /&gt;
        &#039;minutes&#039;: minutes,&lt;br /&gt;
        &#039;seconds&#039;: seconds&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function initializeClock(id, endtime) {&lt;br /&gt;
    var clock = document.getElementById(id);&lt;br /&gt;
    var daysSpan = clock.querySelector(&#039;.days&#039;);&lt;br /&gt;
    var hoursSpan = clock.querySelector(&#039;.hours&#039;);&lt;br /&gt;
    var minutesSpan = clock.querySelector(&#039;.minutes&#039;);&lt;br /&gt;
    var secondsSpan = clock.querySelector(&#039;.seconds&#039;);&lt;br /&gt;
&lt;br /&gt;
    function updateClock() {&lt;br /&gt;
        var t = getTimeRemaining(endtime);&lt;br /&gt;
&lt;br /&gt;
        daysSpan.innerHTML = t.days;&lt;br /&gt;
        hoursSpan.innerHTML = (&#039;0&#039; + t.hours).slice(-2);&lt;br /&gt;
        minutesSpan.innerHTML = (&#039;0&#039; + t.minutes).slice(-2);&lt;br /&gt;
        secondsSpan.innerHTML = (&#039;0&#039; + t.seconds).slice(-2);&lt;br /&gt;
&lt;br /&gt;
        if (t.total &amp;lt;= 0) {&lt;br /&gt;
            clearInterval(timeinterval);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateClock();&lt;br /&gt;
    var timeinterval = setInterval(updateClock, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* only run this on the page that there is a clock div...  */&lt;br /&gt;
// Or just a plain access for comparison&lt;br /&gt;
// (no need to check exists first, it falls back to null)&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:Countdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var deadline = new Date(2025, 07, 8, 13, 37, 42, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;clockdiv&#039;, deadline);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:BuildupCountdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var buildupdeadline = new Date(2025, 07, 1, 0, 0, 0, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;buildupclockdiv&#039;, buildupdeadline);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var mqttinitstarted = false;&lt;br /&gt;
  var mqttClient = null;&lt;br /&gt;
  function initMqtt() {&lt;br /&gt;
    if(typeof mqtt == &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; !mqttinitstarted) {&lt;br /&gt;
      mqttinitstarted = true;&lt;br /&gt;
      (function(d, script) {&lt;br /&gt;
      script = d.createElement(&#039;script&#039;);&lt;br /&gt;
      script.type = &#039;text/javascript&#039;;&lt;br /&gt;
      script.async = true;&lt;br /&gt;
      script.onload = initMqttStep2;&lt;br /&gt;
      script.src = &#039;https://unpkg.com/mqtt@5.10.3/dist/mqtt.min.js&#039;;&lt;br /&gt;
      d.getElementsByTagName(&#039;head&#039;)[0].appendChild(script);&lt;br /&gt;
      }(document));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 function initMqttStep2(callback) {&lt;br /&gt;
    const url = &#039;wss://mqtt.why2025.org/&#039;&lt;br /&gt;
&lt;br /&gt;
    const options = {&lt;br /&gt;
      // Clean session&lt;br /&gt;
      clean: true,&lt;br /&gt;
      connectTimeout: 4000,&lt;br /&gt;
      // Authentication&lt;br /&gt;
      clientId: &#039;whywiki_&#039; + Math.floor(Math.random() * 9999999),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mqttClient = mqtt.connect(url, options);&lt;br /&gt;
    mqttClient.on(&#039;connect&#039;, function () {&lt;br /&gt;
        var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
        for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            mqttClient.subscribe(elementtopic);&lt;br /&gt;
            console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic);&lt;br /&gt;
            if(feedelements[x].attributes[&#039;data-topic2&#039;] &amp;amp;&amp;amp; feedelements[x].attributes[&#039;data-topic2&#039;].value) {&lt;br /&gt;
                var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;].value;&lt;br /&gt;
                mqttClient.subscribe(elementtopic2);&lt;br /&gt;
                console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic2);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Receive messages&lt;br /&gt;
        mqttClient.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
          // message is Buffer&lt;br /&gt;
          console.log(&amp;quot;MQTT msg:&amp;quot;+message.toString())&lt;br /&gt;
          var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
          for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;] ? feedelements[x].attributes[&#039;data-topic2&#039;].value : &amp;quot;null&amp;quot;;&lt;br /&gt;
            var elementOperation = feedelements[x].attributes[&#039;data-operation&#039;] ? feedelements[x].attributes[&#039;data-operation&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
            var elementParams = feedelements[x].attributes[&#039;data-param&#039;] ? feedelements[x].attributes[&#039;data-param&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if(elementtopic == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic2 == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value2&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic == topic || elementtopic2 == topic) {&lt;br /&gt;
                var finalValue = &amp;quot;&amp;quot;;&lt;br /&gt;
                switch(elementOperation) {&lt;br /&gt;
                case &amp;quot;json&amp;quot;:&lt;br /&gt;
                    var elementParamsArr = elementParams.split(&amp;quot;.&amp;quot;);&lt;br /&gt;
                    var displayObj = JSON.parse(feedelements[x].attributes[&#039;data-value&#039;]);&lt;br /&gt;
                    console.log(elementParamsArr);&lt;br /&gt;
&lt;br /&gt;
                    for (elementParam in elementParamsArr) {&lt;br /&gt;
                        console.log(displayObj);&lt;br /&gt;
                        console.log(elementParam);&lt;br /&gt;
                        displayObj = displayObj[elementParam];&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    finalValue = displayObj;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sum&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 + feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sub&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 - feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;mul&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 * feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;div&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 / feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;];&lt;br /&gt;
                }&lt;br /&gt;
                feedelements[x].innerText = finalValue;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Only make a MQTT connection for pages that use it.&lt;br /&gt;
  if (document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;).length &amp;gt; 0) {&lt;br /&gt;
    initMqtt();&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13523</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13523"/>
		<updated>2025-07-16T21:33:50Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
function getTimeRemaining(endtime) {&lt;br /&gt;
    var t = Date.parse(endtime) - Date.parse(new Date());&lt;br /&gt;
    var seconds = Math.floor((t / 1000) % 60);&lt;br /&gt;
    var minutes = Math.floor((t / 1000 / 60) % 60);&lt;br /&gt;
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);&lt;br /&gt;
    var days = Math.floor(t / (1000 * 60 * 60 * 24));&lt;br /&gt;
    return {&lt;br /&gt;
        &#039;total&#039;: t,&lt;br /&gt;
        &#039;days&#039;: days,&lt;br /&gt;
        &#039;hours&#039;: hours,&lt;br /&gt;
        &#039;minutes&#039;: minutes,&lt;br /&gt;
        &#039;seconds&#039;: seconds&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function initializeClock(id, endtime) {&lt;br /&gt;
    var clock = document.getElementById(id);&lt;br /&gt;
    var daysSpan = clock.querySelector(&#039;.days&#039;);&lt;br /&gt;
    var hoursSpan = clock.querySelector(&#039;.hours&#039;);&lt;br /&gt;
    var minutesSpan = clock.querySelector(&#039;.minutes&#039;);&lt;br /&gt;
    var secondsSpan = clock.querySelector(&#039;.seconds&#039;);&lt;br /&gt;
&lt;br /&gt;
    function updateClock() {&lt;br /&gt;
        var t = getTimeRemaining(endtime);&lt;br /&gt;
&lt;br /&gt;
        daysSpan.innerHTML = t.days;&lt;br /&gt;
        hoursSpan.innerHTML = (&#039;0&#039; + t.hours).slice(-2);&lt;br /&gt;
        minutesSpan.innerHTML = (&#039;0&#039; + t.minutes).slice(-2);&lt;br /&gt;
        secondsSpan.innerHTML = (&#039;0&#039; + t.seconds).slice(-2);&lt;br /&gt;
&lt;br /&gt;
        if (t.total &amp;lt;= 0) {&lt;br /&gt;
            clearInterval(timeinterval);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateClock();&lt;br /&gt;
    var timeinterval = setInterval(updateClock, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* only run this on the page that there is a clock div...  */&lt;br /&gt;
// Or just a plain access for comparison&lt;br /&gt;
// (no need to check exists first, it falls back to null)&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:Countdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var deadline = new Date(2025, 07, 8, 13, 37, 42, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;clockdiv&#039;, deadline);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:BuildupCountdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var buildupdeadline = new Date(2025, 07, 1, 0, 0, 0, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;buildupclockdiv&#039;, buildupdeadline);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var mqttinitstarted = false;&lt;br /&gt;
  var mqttClient = null;&lt;br /&gt;
  function initMqtt() {&lt;br /&gt;
    if(typeof mqtt == &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; !mqttinitstarted) {&lt;br /&gt;
      mqttinitstarted = true;&lt;br /&gt;
      (function(d, script) {&lt;br /&gt;
      script = d.createElement(&#039;script&#039;);&lt;br /&gt;
      script.type = &#039;text/javascript&#039;;&lt;br /&gt;
      script.async = true;&lt;br /&gt;
      script.onload = initMqttStep2;&lt;br /&gt;
      script.src = &#039;https://unpkg.com/mqtt@5.10.3/dist/mqtt.min.js&#039;;&lt;br /&gt;
      d.getElementsByTagName(&#039;head&#039;)[0].appendChild(script);&lt;br /&gt;
      }(document));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 function initMqttStep2(callback) {&lt;br /&gt;
    const url = &#039;wss://mqtt.why2025.org/&#039;&lt;br /&gt;
&lt;br /&gt;
    const options = {&lt;br /&gt;
      // Clean session&lt;br /&gt;
      clean: true,&lt;br /&gt;
      connectTimeout: 4000,&lt;br /&gt;
      // Authentication&lt;br /&gt;
      clientId: &#039;whywiki_&#039; + Math.floor(Math.random() * 9999999),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mqttClient = mqtt.connect(url, options);&lt;br /&gt;
    mqttClient.on(&#039;connect&#039;, function () {&lt;br /&gt;
        var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
        for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            mqttClient.subscribe(elementtopic);&lt;br /&gt;
            console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic);&lt;br /&gt;
            if(feedelements[x].attributes[&#039;data-topic2&#039;] &amp;amp;&amp;amp; feedelements[x].attributes[&#039;data-topic2&#039;].value) {&lt;br /&gt;
                var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;].value;&lt;br /&gt;
                mqttClient.subscribe(elementtopic2);&lt;br /&gt;
                console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic2);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Receive messages&lt;br /&gt;
        mqttClient.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
          // message is Buffer&lt;br /&gt;
          console.log(&amp;quot;MQTT msg:&amp;quot;+message.toString())&lt;br /&gt;
          var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
          for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;] ? feedelements[x].attributes[&#039;data-topic2&#039;].value : &amp;quot;null&amp;quot;;&lt;br /&gt;
            var elementOperation = feedelements[x].attributes[&#039;data-operation&#039;] ? feedelements[x].attributes[&#039;data-operation&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
            var elementParams = feedelements[x].attributes[&#039;data-param&#039;] ? feedelements[x].attributes[&#039;data-param&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if(elementtopic == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic2 == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value2&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic == topic || elementtopic2 == topic) {&lt;br /&gt;
                var finalValue = &amp;quot;&amp;quot;;&lt;br /&gt;
                switch(elementOperation) {&lt;br /&gt;
                case &amp;quot;json&amp;quot;:&lt;br /&gt;
                    var elementParamsArr = elementParams.split(&amp;quot;.&amp;quot;);&lt;br /&gt;
                    var displayObj = JSON.parse(feedelements[x].attributes[&#039;data-value&#039;]);&lt;br /&gt;
                    &lt;br /&gt;
                    for (elementParam in elementParamsArr) {&lt;br /&gt;
                        console.log(displayObj);&lt;br /&gt;
                        console.log(elementParam);&lt;br /&gt;
                        displayObj = displayObj[elementParam];&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    finalValue = displayObj;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sum&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 + feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sub&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 - feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;mul&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 * feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;div&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 / feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;];&lt;br /&gt;
                }&lt;br /&gt;
                feedelements[x].innerText = finalValue;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Only make a MQTT connection for pages that use it.&lt;br /&gt;
  if (document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;).length &amp;gt; 0) {&lt;br /&gt;
    initMqtt();&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13522</id>
		<title>Template:AngelCounter</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13522"/>
		<updated>2025-07-16T21:32:54Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://tickets.why2025.org/ &amp;lt;div id=&amp;quot;clockdiv&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;sold&amp;quot;&amp;gt;{{MqttFeed|why2025/angel/users|why2025/angel/users|json|0.value}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Sold&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;available&amp;quot;&amp;gt;{{MqttFeed|why2025/ticketshop/quotas/Event Visitors/available_number}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Available&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;]&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13521</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13521"/>
		<updated>2025-07-16T21:32:27Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
function getTimeRemaining(endtime) {&lt;br /&gt;
    var t = Date.parse(endtime) - Date.parse(new Date());&lt;br /&gt;
    var seconds = Math.floor((t / 1000) % 60);&lt;br /&gt;
    var minutes = Math.floor((t / 1000 / 60) % 60);&lt;br /&gt;
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);&lt;br /&gt;
    var days = Math.floor(t / (1000 * 60 * 60 * 24));&lt;br /&gt;
    return {&lt;br /&gt;
        &#039;total&#039;: t,&lt;br /&gt;
        &#039;days&#039;: days,&lt;br /&gt;
        &#039;hours&#039;: hours,&lt;br /&gt;
        &#039;minutes&#039;: minutes,&lt;br /&gt;
        &#039;seconds&#039;: seconds&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function initializeClock(id, endtime) {&lt;br /&gt;
    var clock = document.getElementById(id);&lt;br /&gt;
    var daysSpan = clock.querySelector(&#039;.days&#039;);&lt;br /&gt;
    var hoursSpan = clock.querySelector(&#039;.hours&#039;);&lt;br /&gt;
    var minutesSpan = clock.querySelector(&#039;.minutes&#039;);&lt;br /&gt;
    var secondsSpan = clock.querySelector(&#039;.seconds&#039;);&lt;br /&gt;
&lt;br /&gt;
    function updateClock() {&lt;br /&gt;
        var t = getTimeRemaining(endtime);&lt;br /&gt;
&lt;br /&gt;
        daysSpan.innerHTML = t.days;&lt;br /&gt;
        hoursSpan.innerHTML = (&#039;0&#039; + t.hours).slice(-2);&lt;br /&gt;
        minutesSpan.innerHTML = (&#039;0&#039; + t.minutes).slice(-2);&lt;br /&gt;
        secondsSpan.innerHTML = (&#039;0&#039; + t.seconds).slice(-2);&lt;br /&gt;
&lt;br /&gt;
        if (t.total &amp;lt;= 0) {&lt;br /&gt;
            clearInterval(timeinterval);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateClock();&lt;br /&gt;
    var timeinterval = setInterval(updateClock, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* only run this on the page that there is a clock div...  */&lt;br /&gt;
// Or just a plain access for comparison&lt;br /&gt;
// (no need to check exists first, it falls back to null)&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:Countdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var deadline = new Date(2025, 07, 8, 13, 37, 42, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;clockdiv&#039;, deadline);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:BuildupCountdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var buildupdeadline = new Date(2025, 07, 1, 0, 0, 0, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;buildupclockdiv&#039;, buildupdeadline);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var mqttinitstarted = false;&lt;br /&gt;
  var mqttClient = null;&lt;br /&gt;
  function initMqtt() {&lt;br /&gt;
    if(typeof mqtt == &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; !mqttinitstarted) {&lt;br /&gt;
      mqttinitstarted = true;&lt;br /&gt;
      (function(d, script) {&lt;br /&gt;
      script = d.createElement(&#039;script&#039;);&lt;br /&gt;
      script.type = &#039;text/javascript&#039;;&lt;br /&gt;
      script.async = true;&lt;br /&gt;
      script.onload = initMqttStep2;&lt;br /&gt;
      script.src = &#039;https://unpkg.com/mqtt@5.10.3/dist/mqtt.min.js&#039;;&lt;br /&gt;
      d.getElementsByTagName(&#039;head&#039;)[0].appendChild(script);&lt;br /&gt;
      }(document));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 function initMqttStep2(callback) {&lt;br /&gt;
    const url = &#039;wss://mqtt.why2025.org/&#039;&lt;br /&gt;
&lt;br /&gt;
    const options = {&lt;br /&gt;
      // Clean session&lt;br /&gt;
      clean: true,&lt;br /&gt;
      connectTimeout: 4000,&lt;br /&gt;
      // Authentication&lt;br /&gt;
      clientId: &#039;whywiki_&#039; + Math.floor(Math.random() * 9999999),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mqttClient = mqtt.connect(url, options);&lt;br /&gt;
    mqttClient.on(&#039;connect&#039;, function () {&lt;br /&gt;
        var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
        for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            mqttClient.subscribe(elementtopic);&lt;br /&gt;
            console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic);&lt;br /&gt;
            if(feedelements[x].attributes[&#039;data-topic2&#039;] &amp;amp;&amp;amp; feedelements[x].attributes[&#039;data-topic2&#039;].value) {&lt;br /&gt;
                var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;].value;&lt;br /&gt;
                mqttClient.subscribe(elementtopic2);&lt;br /&gt;
                console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic2);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Receive messages&lt;br /&gt;
        mqttClient.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
          // message is Buffer&lt;br /&gt;
          console.log(&amp;quot;MQTT msg:&amp;quot;+message.toString())&lt;br /&gt;
          var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
          for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;] ? feedelements[x].attributes[&#039;data-topic2&#039;].value : &amp;quot;null&amp;quot;;&lt;br /&gt;
            var elementOperation = feedelements[x].attributes[&#039;data-operation&#039;] ? feedelements[x].attributes[&#039;data-operation&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
            var elementParams = feedelements[x].attributes[&#039;data-param&#039;] ? feedelements[x].attributes[&#039;data-param&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if(elementtopic == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic2 == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value2&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic == topic || elementtopic2 == topic) {&lt;br /&gt;
                var finalValue = &amp;quot;&amp;quot;;&lt;br /&gt;
                switch(elementOperation) {&lt;br /&gt;
                case &amp;quot;json&amp;quot;:&lt;br /&gt;
                    var elementParamsArr = elementParams.split(&amp;quot;.&amp;quot;);&lt;br /&gt;
                    var displayObj = JSON.parse(feedelements[x].attributes[&#039;data-value&#039;]);&lt;br /&gt;
                    &lt;br /&gt;
                    for (elementParam in elementParamsArr) {&lt;br /&gt;
                        displayObj = displayObj[elementParam];&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    finalValue = displayObj;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sum&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 + feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sub&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 - feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;mul&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 * feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;div&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 / feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;];&lt;br /&gt;
                }&lt;br /&gt;
                feedelements[x].innerText = finalValue;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Only make a MQTT connection for pages that use it.&lt;br /&gt;
  if (document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;).length &amp;gt; 0) {&lt;br /&gt;
    initMqtt();&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13520</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13520"/>
		<updated>2025-07-16T21:31:45Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
function getTimeRemaining(endtime) {&lt;br /&gt;
    var t = Date.parse(endtime) - Date.parse(new Date());&lt;br /&gt;
    var seconds = Math.floor((t / 1000) % 60);&lt;br /&gt;
    var minutes = Math.floor((t / 1000 / 60) % 60);&lt;br /&gt;
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);&lt;br /&gt;
    var days = Math.floor(t / (1000 * 60 * 60 * 24));&lt;br /&gt;
    return {&lt;br /&gt;
        &#039;total&#039;: t,&lt;br /&gt;
        &#039;days&#039;: days,&lt;br /&gt;
        &#039;hours&#039;: hours,&lt;br /&gt;
        &#039;minutes&#039;: minutes,&lt;br /&gt;
        &#039;seconds&#039;: seconds&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function initializeClock(id, endtime) {&lt;br /&gt;
    var clock = document.getElementById(id);&lt;br /&gt;
    var daysSpan = clock.querySelector(&#039;.days&#039;);&lt;br /&gt;
    var hoursSpan = clock.querySelector(&#039;.hours&#039;);&lt;br /&gt;
    var minutesSpan = clock.querySelector(&#039;.minutes&#039;);&lt;br /&gt;
    var secondsSpan = clock.querySelector(&#039;.seconds&#039;);&lt;br /&gt;
&lt;br /&gt;
    function updateClock() {&lt;br /&gt;
        var t = getTimeRemaining(endtime);&lt;br /&gt;
&lt;br /&gt;
        daysSpan.innerHTML = t.days;&lt;br /&gt;
        hoursSpan.innerHTML = (&#039;0&#039; + t.hours).slice(-2);&lt;br /&gt;
        minutesSpan.innerHTML = (&#039;0&#039; + t.minutes).slice(-2);&lt;br /&gt;
        secondsSpan.innerHTML = (&#039;0&#039; + t.seconds).slice(-2);&lt;br /&gt;
&lt;br /&gt;
        if (t.total &amp;lt;= 0) {&lt;br /&gt;
            clearInterval(timeinterval);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateClock();&lt;br /&gt;
    var timeinterval = setInterval(updateClock, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* only run this on the page that there is a clock div...  */&lt;br /&gt;
// Or just a plain access for comparison&lt;br /&gt;
// (no need to check exists first, it falls back to null)&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:Countdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var deadline = new Date(2025, 07, 8, 13, 37, 42, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;clockdiv&#039;, deadline);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:BuildupCountdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var buildupdeadline = new Date(2025, 07, 1, 0, 0, 0, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;buildupclockdiv&#039;, buildupdeadline);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var mqttinitstarted = false;&lt;br /&gt;
  var mqttClient = null;&lt;br /&gt;
  function initMqtt() {&lt;br /&gt;
    if(typeof mqtt == &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; !mqttinitstarted) {&lt;br /&gt;
      mqttinitstarted = true;&lt;br /&gt;
      (function(d, script) {&lt;br /&gt;
      script = d.createElement(&#039;script&#039;);&lt;br /&gt;
      script.type = &#039;text/javascript&#039;;&lt;br /&gt;
      script.async = true;&lt;br /&gt;
      script.onload = initMqttStep2;&lt;br /&gt;
      script.src = &#039;https://unpkg.com/mqtt@5.10.3/dist/mqtt.min.js&#039;;&lt;br /&gt;
      d.getElementsByTagName(&#039;head&#039;)[0].appendChild(script);&lt;br /&gt;
      }(document));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 function initMqttStep2(callback) {&lt;br /&gt;
    const url = &#039;wss://mqtt.why2025.org/&#039;&lt;br /&gt;
&lt;br /&gt;
    const options = {&lt;br /&gt;
      // Clean session&lt;br /&gt;
      clean: true,&lt;br /&gt;
      connectTimeout: 4000,&lt;br /&gt;
      // Authentication&lt;br /&gt;
      clientId: &#039;whywiki_&#039; + Math.floor(Math.random() * 9999999),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mqttClient = mqtt.connect(url, options);&lt;br /&gt;
    mqttClient.on(&#039;connect&#039;, function () {&lt;br /&gt;
        var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
        for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            mqttClient.subscribe(elementtopic);&lt;br /&gt;
            console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic);&lt;br /&gt;
            if(feedelements[x].attributes[&#039;data-topic2&#039;] &amp;amp;&amp;amp; feedelements[x].attributes[&#039;data-topic2&#039;].value) {&lt;br /&gt;
                var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;].value;&lt;br /&gt;
                mqttClient.subscribe(elementtopic2);&lt;br /&gt;
                console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic2);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Receive messages&lt;br /&gt;
        mqttClient.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
          // message is Buffer&lt;br /&gt;
          console.log(&amp;quot;MQTT msg:&amp;quot;+message.toString())&lt;br /&gt;
          var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
          for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;] ? feedelements[x].attributes[&#039;data-topic2&#039;].value : &amp;quot;null&amp;quot;;&lt;br /&gt;
            var elementOperation = feedelements[x].attributes[&#039;data-operation&#039;] ? feedelements[x].attributes[&#039;data-operation&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
            var elementParams = feedelements[x].attributes[&#039;data-param&#039;] ? feedelements[x].attributes[&#039;data-param&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if(elementtopic == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic2 == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value2&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic == topic || elementtopic2 == topic) {&lt;br /&gt;
                var finalValue = &amp;quot;&amp;quot;;&lt;br /&gt;
                switch(elementOperation) {&lt;br /&gt;
                case &amp;quot;json&amp;quot;:&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sum&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 + feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sub&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 - feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;mul&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 * feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;div&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 / feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;];&lt;br /&gt;
                }&lt;br /&gt;
                feedelements[x].innerText = finalValue;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Only make a MQTT connection for pages that use it.&lt;br /&gt;
  if (document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;).length &amp;gt; 0) {&lt;br /&gt;
    initMqtt();&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13519</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13519"/>
		<updated>2025-07-16T21:29:44Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
function getTimeRemaining(endtime) {&lt;br /&gt;
    var t = Date.parse(endtime) - Date.parse(new Date());&lt;br /&gt;
    var seconds = Math.floor((t / 1000) % 60);&lt;br /&gt;
    var minutes = Math.floor((t / 1000 / 60) % 60);&lt;br /&gt;
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);&lt;br /&gt;
    var days = Math.floor(t / (1000 * 60 * 60 * 24));&lt;br /&gt;
    return {&lt;br /&gt;
        &#039;total&#039;: t,&lt;br /&gt;
        &#039;days&#039;: days,&lt;br /&gt;
        &#039;hours&#039;: hours,&lt;br /&gt;
        &#039;minutes&#039;: minutes,&lt;br /&gt;
        &#039;seconds&#039;: seconds&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function initializeClock(id, endtime) {&lt;br /&gt;
    var clock = document.getElementById(id);&lt;br /&gt;
    var daysSpan = clock.querySelector(&#039;.days&#039;);&lt;br /&gt;
    var hoursSpan = clock.querySelector(&#039;.hours&#039;);&lt;br /&gt;
    var minutesSpan = clock.querySelector(&#039;.minutes&#039;);&lt;br /&gt;
    var secondsSpan = clock.querySelector(&#039;.seconds&#039;);&lt;br /&gt;
&lt;br /&gt;
    function updateClock() {&lt;br /&gt;
        var t = getTimeRemaining(endtime);&lt;br /&gt;
&lt;br /&gt;
        daysSpan.innerHTML = t.days;&lt;br /&gt;
        hoursSpan.innerHTML = (&#039;0&#039; + t.hours).slice(-2);&lt;br /&gt;
        minutesSpan.innerHTML = (&#039;0&#039; + t.minutes).slice(-2);&lt;br /&gt;
        secondsSpan.innerHTML = (&#039;0&#039; + t.seconds).slice(-2);&lt;br /&gt;
&lt;br /&gt;
        if (t.total &amp;lt;= 0) {&lt;br /&gt;
            clearInterval(timeinterval);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateClock();&lt;br /&gt;
    var timeinterval = setInterval(updateClock, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* only run this on the page that there is a clock div...  */&lt;br /&gt;
// Or just a plain access for comparison&lt;br /&gt;
// (no need to check exists first, it falls back to null)&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:Countdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var deadline = new Date(2025, 07, 8, 13, 37, 42, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;clockdiv&#039;, deadline);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:BuildupCountdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var buildupdeadline = new Date(2025, 07, 1, 0, 0, 0, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;buildupclockdiv&#039;, buildupdeadline);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var mqttinitstarted = false;&lt;br /&gt;
  var mqttClient = null;&lt;br /&gt;
  function initMqtt() {&lt;br /&gt;
    if(typeof mqtt == &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; !mqttinitstarted) {&lt;br /&gt;
      mqttinitstarted = true;&lt;br /&gt;
      (function(d, script) {&lt;br /&gt;
      script = d.createElement(&#039;script&#039;);&lt;br /&gt;
      script.type = &#039;text/javascript&#039;;&lt;br /&gt;
      script.async = true;&lt;br /&gt;
      script.onload = initMqttStep2;&lt;br /&gt;
      script.src = &#039;https://unpkg.com/mqtt@5.10.3/dist/mqtt.min.js&#039;;&lt;br /&gt;
      d.getElementsByTagName(&#039;head&#039;)[0].appendChild(script);&lt;br /&gt;
      }(document));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 function initMqttStep2(callback) {&lt;br /&gt;
    const url = &#039;wss://mqtt.why2025.org/&#039;&lt;br /&gt;
&lt;br /&gt;
    const options = {&lt;br /&gt;
      // Clean session&lt;br /&gt;
      clean: true,&lt;br /&gt;
      connectTimeout: 4000,&lt;br /&gt;
      // Authentication&lt;br /&gt;
      clientId: &#039;whywiki_&#039; + Math.floor(Math.random() * 9999999),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mqttClient = mqtt.connect(url, options);&lt;br /&gt;
    mqttClient.on(&#039;connect&#039;, function () {&lt;br /&gt;
        var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
        for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            mqttClient.subscribe(elementtopic);&lt;br /&gt;
            console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic);&lt;br /&gt;
            if(feedelements[x].attributes[&#039;data-topic2&#039;] &amp;amp;&amp;amp; feedelements[x].attributes[&#039;data-topic2&#039;].value) {&lt;br /&gt;
                var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;].value;&lt;br /&gt;
                mqttClient.subscribe(elementtopic2);&lt;br /&gt;
                console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic2);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Receive messages&lt;br /&gt;
        mqttClient.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
          // message is Buffer&lt;br /&gt;
          console.log(&amp;quot;MQTT msg:&amp;quot;+message.toString())&lt;br /&gt;
          var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
          for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;] ? feedelements[x].attributes[&#039;data-topic2&#039;].value : &amp;quot;null&amp;quot;;&lt;br /&gt;
            var elementOperation = feedelements[x].attributes[&#039;data-operation&#039;] ? feedelements[x].attributes[&#039;data-operation&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
            var elementParams = feedelements[x].attributes[&#039;data-param&#039;] ? feedelements[x].attributes[&#039;data-param&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if(elementtopic == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic2 == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value2&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic == topic || elementtopic2 == topic) {&lt;br /&gt;
                var finalValue = &amp;quot;&amp;quot;;&lt;br /&gt;
                switch(elementOperation) {&lt;br /&gt;
                case &amp;quot;json&amp;quot;:&lt;br /&gt;
                    let elementParamsArr = elementParams.split(&amp;quot;.&amp;quot;);&lt;br /&gt;
                    var displayObj = JSON.parse(feedelements[x].attributes[&#039;data-value&#039;]);&lt;br /&gt;
                    &lt;br /&gt;
                    for (elementParam in elementParamsArr) {&lt;br /&gt;
                        displayObj = displayObj[elementParam];&lt;br /&gt;
                    }&lt;br /&gt;
                    console.log(displayObj);&lt;br /&gt;
&lt;br /&gt;
                    finalValue = displayObj;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sum&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 + feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sub&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 - feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;mul&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 * feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;div&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 / feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;];&lt;br /&gt;
                }&lt;br /&gt;
                feedelements[x].innerText = finalValue;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Only make a MQTT connection for pages that use it.&lt;br /&gt;
  if (document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;).length &amp;gt; 0) {&lt;br /&gt;
    initMqtt();&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13518</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13518"/>
		<updated>2025-07-16T21:27:28Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
function getTimeRemaining(endtime) {&lt;br /&gt;
    var t = Date.parse(endtime) - Date.parse(new Date());&lt;br /&gt;
    var seconds = Math.floor((t / 1000) % 60);&lt;br /&gt;
    var minutes = Math.floor((t / 1000 / 60) % 60);&lt;br /&gt;
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);&lt;br /&gt;
    var days = Math.floor(t / (1000 * 60 * 60 * 24));&lt;br /&gt;
    return {&lt;br /&gt;
        &#039;total&#039;: t,&lt;br /&gt;
        &#039;days&#039;: days,&lt;br /&gt;
        &#039;hours&#039;: hours,&lt;br /&gt;
        &#039;minutes&#039;: minutes,&lt;br /&gt;
        &#039;seconds&#039;: seconds&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function initializeClock(id, endtime) {&lt;br /&gt;
    var clock = document.getElementById(id);&lt;br /&gt;
    var daysSpan = clock.querySelector(&#039;.days&#039;);&lt;br /&gt;
    var hoursSpan = clock.querySelector(&#039;.hours&#039;);&lt;br /&gt;
    var minutesSpan = clock.querySelector(&#039;.minutes&#039;);&lt;br /&gt;
    var secondsSpan = clock.querySelector(&#039;.seconds&#039;);&lt;br /&gt;
&lt;br /&gt;
    function updateClock() {&lt;br /&gt;
        var t = getTimeRemaining(endtime);&lt;br /&gt;
&lt;br /&gt;
        daysSpan.innerHTML = t.days;&lt;br /&gt;
        hoursSpan.innerHTML = (&#039;0&#039; + t.hours).slice(-2);&lt;br /&gt;
        minutesSpan.innerHTML = (&#039;0&#039; + t.minutes).slice(-2);&lt;br /&gt;
        secondsSpan.innerHTML = (&#039;0&#039; + t.seconds).slice(-2);&lt;br /&gt;
&lt;br /&gt;
        if (t.total &amp;lt;= 0) {&lt;br /&gt;
            clearInterval(timeinterval);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateClock();&lt;br /&gt;
    var timeinterval = setInterval(updateClock, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* only run this on the page that there is a clock div...  */&lt;br /&gt;
// Or just a plain access for comparison&lt;br /&gt;
// (no need to check exists first, it falls back to null)&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:Countdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var deadline = new Date(2025, 07, 8, 13, 37, 42, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;clockdiv&#039;, deadline);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:BuildupCountdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var buildupdeadline = new Date(2025, 07, 1, 0, 0, 0, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;buildupclockdiv&#039;, buildupdeadline);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var mqttinitstarted = false;&lt;br /&gt;
  var mqttClient = null;&lt;br /&gt;
  function initMqtt() {&lt;br /&gt;
    if(typeof mqtt == &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; !mqttinitstarted) {&lt;br /&gt;
      mqttinitstarted = true;&lt;br /&gt;
      (function(d, script) {&lt;br /&gt;
      script = d.createElement(&#039;script&#039;);&lt;br /&gt;
      script.type = &#039;text/javascript&#039;;&lt;br /&gt;
      script.async = true;&lt;br /&gt;
      script.onload = initMqttStep2;&lt;br /&gt;
      script.src = &#039;https://unpkg.com/mqtt@5.10.3/dist/mqtt.min.js&#039;;&lt;br /&gt;
      d.getElementsByTagName(&#039;head&#039;)[0].appendChild(script);&lt;br /&gt;
      }(document));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 function initMqttStep2(callback) {&lt;br /&gt;
    const url = &#039;wss://mqtt.why2025.org/&#039;&lt;br /&gt;
&lt;br /&gt;
    const options = {&lt;br /&gt;
      // Clean session&lt;br /&gt;
      clean: true,&lt;br /&gt;
      connectTimeout: 4000,&lt;br /&gt;
      // Authentication&lt;br /&gt;
      clientId: &#039;whywiki_&#039; + Math.floor(Math.random() * 9999999),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mqttClient = mqtt.connect(url, options);&lt;br /&gt;
    mqttClient.on(&#039;connect&#039;, function () {&lt;br /&gt;
        var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
        for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            mqttClient.subscribe(elementtopic);&lt;br /&gt;
            console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic);&lt;br /&gt;
            if(feedelements[x].attributes[&#039;data-topic2&#039;] &amp;amp;&amp;amp; feedelements[x].attributes[&#039;data-topic2&#039;].value) {&lt;br /&gt;
                var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;].value;&lt;br /&gt;
                mqttClient.subscribe(elementtopic2);&lt;br /&gt;
                console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic2);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Receive messages&lt;br /&gt;
        mqttClient.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
          // message is Buffer&lt;br /&gt;
          console.log(&amp;quot;MQTT msg:&amp;quot;+message.toString())&lt;br /&gt;
          var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
          for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;] ? feedelements[x].attributes[&#039;data-topic2&#039;].value : &amp;quot;null&amp;quot;;&lt;br /&gt;
            var elementOperation = feedelements[x].attributes[&#039;data-operation&#039;] ? feedelements[x].attributes[&#039;data-operation&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
            var elementParams = feedelements[x].attributes[&#039;data-param&#039;] ? feedelements[x].attributes[&#039;data-param&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if(elementtopic == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic2 == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value2&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic == topic || elementtopic2 == topic) {&lt;br /&gt;
                var finalValue = &amp;quot;&amp;quot;;&lt;br /&gt;
                switch(elementOperation) {&lt;br /&gt;
                case &amp;quot;json&amp;quot;:&lt;br /&gt;
                    let paramarray = elementParam.split(&amp;quot;.&amp;quot;);&lt;br /&gt;
                    var displayObj = JSON.parse(feedelements[x].attributes[&#039;data-value&#039;]);&lt;br /&gt;
                    console.log(displayObj);&lt;br /&gt;
                    &lt;br /&gt;
                    finalValue = displayObj;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sum&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 + feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sub&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 - feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;mul&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 * feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;div&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 / feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;];&lt;br /&gt;
                }&lt;br /&gt;
                feedelements[x].innerText = finalValue;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Only make a MQTT connection for pages that use it.&lt;br /&gt;
  if (document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;).length &amp;gt; 0) {&lt;br /&gt;
    initMqtt();&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13517</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13517"/>
		<updated>2025-07-16T21:26:29Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
function getTimeRemaining(endtime) {&lt;br /&gt;
    var t = Date.parse(endtime) - Date.parse(new Date());&lt;br /&gt;
    var seconds = Math.floor((t / 1000) % 60);&lt;br /&gt;
    var minutes = Math.floor((t / 1000 / 60) % 60);&lt;br /&gt;
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);&lt;br /&gt;
    var days = Math.floor(t / (1000 * 60 * 60 * 24));&lt;br /&gt;
    return {&lt;br /&gt;
        &#039;total&#039;: t,&lt;br /&gt;
        &#039;days&#039;: days,&lt;br /&gt;
        &#039;hours&#039;: hours,&lt;br /&gt;
        &#039;minutes&#039;: minutes,&lt;br /&gt;
        &#039;seconds&#039;: seconds&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function initializeClock(id, endtime) {&lt;br /&gt;
    var clock = document.getElementById(id);&lt;br /&gt;
    var daysSpan = clock.querySelector(&#039;.days&#039;);&lt;br /&gt;
    var hoursSpan = clock.querySelector(&#039;.hours&#039;);&lt;br /&gt;
    var minutesSpan = clock.querySelector(&#039;.minutes&#039;);&lt;br /&gt;
    var secondsSpan = clock.querySelector(&#039;.seconds&#039;);&lt;br /&gt;
&lt;br /&gt;
    function updateClock() {&lt;br /&gt;
        var t = getTimeRemaining(endtime);&lt;br /&gt;
&lt;br /&gt;
        daysSpan.innerHTML = t.days;&lt;br /&gt;
        hoursSpan.innerHTML = (&#039;0&#039; + t.hours).slice(-2);&lt;br /&gt;
        minutesSpan.innerHTML = (&#039;0&#039; + t.minutes).slice(-2);&lt;br /&gt;
        secondsSpan.innerHTML = (&#039;0&#039; + t.seconds).slice(-2);&lt;br /&gt;
&lt;br /&gt;
        if (t.total &amp;lt;= 0) {&lt;br /&gt;
            clearInterval(timeinterval);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateClock();&lt;br /&gt;
    var timeinterval = setInterval(updateClock, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* only run this on the page that there is a clock div...  */&lt;br /&gt;
// Or just a plain access for comparison&lt;br /&gt;
// (no need to check exists first, it falls back to null)&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:Countdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var deadline = new Date(2025, 07, 8, 13, 37, 42, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;clockdiv&#039;, deadline);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:BuildupCountdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var buildupdeadline = new Date(2025, 07, 1, 0, 0, 0, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;buildupclockdiv&#039;, buildupdeadline);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var mqttinitstarted = false;&lt;br /&gt;
  var mqttClient = null;&lt;br /&gt;
  function initMqtt() {&lt;br /&gt;
    if(typeof mqtt == &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; !mqttinitstarted) {&lt;br /&gt;
      mqttinitstarted = true;&lt;br /&gt;
      (function(d, script) {&lt;br /&gt;
      script = d.createElement(&#039;script&#039;);&lt;br /&gt;
      script.type = &#039;text/javascript&#039;;&lt;br /&gt;
      script.async = true;&lt;br /&gt;
      script.onload = initMqttStep2;&lt;br /&gt;
      script.src = &#039;https://unpkg.com/mqtt@5.10.3/dist/mqtt.min.js&#039;;&lt;br /&gt;
      d.getElementsByTagName(&#039;head&#039;)[0].appendChild(script);&lt;br /&gt;
      }(document));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 function initMqttStep2(callback) {&lt;br /&gt;
    const url = &#039;wss://mqtt.why2025.org/&#039;&lt;br /&gt;
&lt;br /&gt;
    const options = {&lt;br /&gt;
      // Clean session&lt;br /&gt;
      clean: true,&lt;br /&gt;
      connectTimeout: 4000,&lt;br /&gt;
      // Authentication&lt;br /&gt;
      clientId: &#039;whywiki_&#039; + Math.floor(Math.random() * 9999999),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mqttClient = mqtt.connect(url, options);&lt;br /&gt;
    mqttClient.on(&#039;connect&#039;, function () {&lt;br /&gt;
        var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
        for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            mqttClient.subscribe(elementtopic);&lt;br /&gt;
            console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic);&lt;br /&gt;
            if(feedelements[x].attributes[&#039;data-topic2&#039;] &amp;amp;&amp;amp; feedelements[x].attributes[&#039;data-topic2&#039;].value) {&lt;br /&gt;
                var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;].value;&lt;br /&gt;
                mqttClient.subscribe(elementtopic2);&lt;br /&gt;
                console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic2);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Receive messages&lt;br /&gt;
        mqttClient.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
          // message is Buffer&lt;br /&gt;
          console.log(&amp;quot;MQTT msg:&amp;quot;+message.toString())&lt;br /&gt;
          var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
          for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;] ? feedelements[x].attributes[&#039;data-topic2&#039;].value : &amp;quot;null&amp;quot;;&lt;br /&gt;
            var elementOperation = feedelements[x].attributes[&#039;data-operation&#039;] ? feedelements[x].attributes[&#039;data-operation&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
            var elementParams = feedelements[x].attributes[&#039;data-param&#039;] ? feedelements[x].attributes[&#039;data-param&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if(elementtopic == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic2 == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value2&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic == topic || elementtopic2 == topic) {&lt;br /&gt;
                var finalValue = &amp;quot;&amp;quot;;&lt;br /&gt;
                switch(elementOperation) {&lt;br /&gt;
                case &amp;quot;json&amp;quot;:&lt;br /&gt;
                    let paramarray = elementParam.split(&amp;quot;.&amp;quot;);&lt;br /&gt;
                    var displayObj = JSON.parse(feedelements[x].attributes[&#039;data-value&#039;]);&lt;br /&gt;
                    for (elementParam in elementParams) {&lt;br /&gt;
                        displayObj = displayObj[elementParam];&lt;br /&gt;
                    }&lt;br /&gt;
                    console.log(displayObj);&lt;br /&gt;
                    &lt;br /&gt;
                    finalValue = displayObj;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sum&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 + feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sub&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 - feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;mul&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 * feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;div&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 / feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;];&lt;br /&gt;
                }&lt;br /&gt;
                feedelements[x].innerText = finalValue;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Only make a MQTT connection for pages that use it.&lt;br /&gt;
  if (document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;).length &amp;gt; 0) {&lt;br /&gt;
    initMqtt();&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13516</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13516"/>
		<updated>2025-07-16T21:25:33Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
function getTimeRemaining(endtime) {&lt;br /&gt;
    var t = Date.parse(endtime) - Date.parse(new Date());&lt;br /&gt;
    var seconds = Math.floor((t / 1000) % 60);&lt;br /&gt;
    var minutes = Math.floor((t / 1000 / 60) % 60);&lt;br /&gt;
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);&lt;br /&gt;
    var days = Math.floor(t / (1000 * 60 * 60 * 24));&lt;br /&gt;
    return {&lt;br /&gt;
        &#039;total&#039;: t,&lt;br /&gt;
        &#039;days&#039;: days,&lt;br /&gt;
        &#039;hours&#039;: hours,&lt;br /&gt;
        &#039;minutes&#039;: minutes,&lt;br /&gt;
        &#039;seconds&#039;: seconds&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function initializeClock(id, endtime) {&lt;br /&gt;
    var clock = document.getElementById(id);&lt;br /&gt;
    var daysSpan = clock.querySelector(&#039;.days&#039;);&lt;br /&gt;
    var hoursSpan = clock.querySelector(&#039;.hours&#039;);&lt;br /&gt;
    var minutesSpan = clock.querySelector(&#039;.minutes&#039;);&lt;br /&gt;
    var secondsSpan = clock.querySelector(&#039;.seconds&#039;);&lt;br /&gt;
&lt;br /&gt;
    function updateClock() {&lt;br /&gt;
        var t = getTimeRemaining(endtime);&lt;br /&gt;
&lt;br /&gt;
        daysSpan.innerHTML = t.days;&lt;br /&gt;
        hoursSpan.innerHTML = (&#039;0&#039; + t.hours).slice(-2);&lt;br /&gt;
        minutesSpan.innerHTML = (&#039;0&#039; + t.minutes).slice(-2);&lt;br /&gt;
        secondsSpan.innerHTML = (&#039;0&#039; + t.seconds).slice(-2);&lt;br /&gt;
&lt;br /&gt;
        if (t.total &amp;lt;= 0) {&lt;br /&gt;
            clearInterval(timeinterval);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateClock();&lt;br /&gt;
    var timeinterval = setInterval(updateClock, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* only run this on the page that there is a clock div...  */&lt;br /&gt;
// Or just a plain access for comparison&lt;br /&gt;
// (no need to check exists first, it falls back to null)&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:Countdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var deadline = new Date(2025, 07, 8, 13, 37, 42, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;clockdiv&#039;, deadline);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:BuildupCountdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var buildupdeadline = new Date(2025, 07, 1, 0, 0, 0, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;buildupclockdiv&#039;, buildupdeadline);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var mqttinitstarted = false;&lt;br /&gt;
  var mqttClient = null;&lt;br /&gt;
  function initMqtt() {&lt;br /&gt;
    if(typeof mqtt == &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; !mqttinitstarted) {&lt;br /&gt;
      mqttinitstarted = true;&lt;br /&gt;
      (function(d, script) {&lt;br /&gt;
      script = d.createElement(&#039;script&#039;);&lt;br /&gt;
      script.type = &#039;text/javascript&#039;;&lt;br /&gt;
      script.async = true;&lt;br /&gt;
      script.onload = initMqttStep2;&lt;br /&gt;
      script.src = &#039;https://unpkg.com/mqtt@5.10.3/dist/mqtt.min.js&#039;;&lt;br /&gt;
      d.getElementsByTagName(&#039;head&#039;)[0].appendChild(script);&lt;br /&gt;
      }(document));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 function initMqttStep2(callback) {&lt;br /&gt;
    const url = &#039;wss://mqtt.why2025.org/&#039;&lt;br /&gt;
&lt;br /&gt;
    const options = {&lt;br /&gt;
      // Clean session&lt;br /&gt;
      clean: true,&lt;br /&gt;
      connectTimeout: 4000,&lt;br /&gt;
      // Authentication&lt;br /&gt;
      clientId: &#039;whywiki_&#039; + Math.floor(Math.random() * 9999999),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mqttClient = mqtt.connect(url, options);&lt;br /&gt;
    mqttClient.on(&#039;connect&#039;, function () {&lt;br /&gt;
        var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
        for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            mqttClient.subscribe(elementtopic);&lt;br /&gt;
            console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic);&lt;br /&gt;
            if(feedelements[x].attributes[&#039;data-topic2&#039;] &amp;amp;&amp;amp; feedelements[x].attributes[&#039;data-topic2&#039;].value) {&lt;br /&gt;
                var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;].value;&lt;br /&gt;
                mqttClient.subscribe(elementtopic2);&lt;br /&gt;
                console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic2);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Receive messages&lt;br /&gt;
        mqttClient.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
          // message is Buffer&lt;br /&gt;
          console.log(&amp;quot;MQTT msg:&amp;quot;+message.toString())&lt;br /&gt;
          var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
          for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;] ? feedelements[x].attributes[&#039;data-topic2&#039;].value : &amp;quot;null&amp;quot;;&lt;br /&gt;
            var elementOperation = feedelements[x].attributes[&#039;data-operation&#039;] ? feedelements[x].attributes[&#039;data-operation&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
            var elementParams = feedelements[x].attributes[&#039;data-param&#039;] ? feedelements[x].attributes[&#039;data-param&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if(elementtopic == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic2 == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value2&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic == topic || elementtopic2 == topic) {&lt;br /&gt;
                var finalValue = &amp;quot;&amp;quot;;&lt;br /&gt;
                switch(elementOperation) {&lt;br /&gt;
                case &amp;quot;json&amp;quot;:&lt;br /&gt;
                    let paramarray = elementParam.split(&amp;quot;.&amp;quot;);&lt;br /&gt;
                    var displayObj = JSON.parse(feedelements[x].attributes[&#039;data-value&#039;])&lt;br /&gt;
                    for (elementParam in elementParams) {&lt;br /&gt;
                        displayObj = displayObj[elementParam];&lt;br /&gt;
                    }&lt;br /&gt;
                    console.log(displayObj);&lt;br /&gt;
                    &lt;br /&gt;
                    finalValue = displayObj;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sum&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 + feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sub&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 - feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;mul&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 * feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;div&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 / feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;];&lt;br /&gt;
                }&lt;br /&gt;
                feedelements[x].innerText = finalValue;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Only make a MQTT connection for pages that use it.&lt;br /&gt;
  if (document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;).length &amp;gt; 0) {&lt;br /&gt;
    initMqtt();&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13512</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13512"/>
		<updated>2025-07-16T21:11:39Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
function getTimeRemaining(endtime) {&lt;br /&gt;
    var t = Date.parse(endtime) - Date.parse(new Date());&lt;br /&gt;
    var seconds = Math.floor((t / 1000) % 60);&lt;br /&gt;
    var minutes = Math.floor((t / 1000 / 60) % 60);&lt;br /&gt;
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);&lt;br /&gt;
    var days = Math.floor(t / (1000 * 60 * 60 * 24));&lt;br /&gt;
    return {&lt;br /&gt;
        &#039;total&#039;: t,&lt;br /&gt;
        &#039;days&#039;: days,&lt;br /&gt;
        &#039;hours&#039;: hours,&lt;br /&gt;
        &#039;minutes&#039;: minutes,&lt;br /&gt;
        &#039;seconds&#039;: seconds&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function initializeClock(id, endtime) {&lt;br /&gt;
    var clock = document.getElementById(id);&lt;br /&gt;
    var daysSpan = clock.querySelector(&#039;.days&#039;);&lt;br /&gt;
    var hoursSpan = clock.querySelector(&#039;.hours&#039;);&lt;br /&gt;
    var minutesSpan = clock.querySelector(&#039;.minutes&#039;);&lt;br /&gt;
    var secondsSpan = clock.querySelector(&#039;.seconds&#039;);&lt;br /&gt;
&lt;br /&gt;
    function updateClock() {&lt;br /&gt;
        var t = getTimeRemaining(endtime);&lt;br /&gt;
&lt;br /&gt;
        daysSpan.innerHTML = t.days;&lt;br /&gt;
        hoursSpan.innerHTML = (&#039;0&#039; + t.hours).slice(-2);&lt;br /&gt;
        minutesSpan.innerHTML = (&#039;0&#039; + t.minutes).slice(-2);&lt;br /&gt;
        secondsSpan.innerHTML = (&#039;0&#039; + t.seconds).slice(-2);&lt;br /&gt;
&lt;br /&gt;
        if (t.total &amp;lt;= 0) {&lt;br /&gt;
            clearInterval(timeinterval);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateClock();&lt;br /&gt;
    var timeinterval = setInterval(updateClock, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* only run this on the page that there is a clock div...  */&lt;br /&gt;
// Or just a plain access for comparison&lt;br /&gt;
// (no need to check exists first, it falls back to null)&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:Countdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var deadline = new Date(2025, 07, 8, 13, 37, 42, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;clockdiv&#039;, deadline);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:BuildupCountdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var buildupdeadline = new Date(2025, 07, 1, 0, 0, 0, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;buildupclockdiv&#039;, buildupdeadline);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var mqttinitstarted = false;&lt;br /&gt;
  var mqttClient = null;&lt;br /&gt;
  function initMqtt() {&lt;br /&gt;
    if(typeof mqtt == &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; !mqttinitstarted) {&lt;br /&gt;
      mqttinitstarted = true;&lt;br /&gt;
      (function(d, script) {&lt;br /&gt;
      script = d.createElement(&#039;script&#039;);&lt;br /&gt;
      script.type = &#039;text/javascript&#039;;&lt;br /&gt;
      script.async = true;&lt;br /&gt;
      script.onload = initMqttStep2;&lt;br /&gt;
      script.src = &#039;https://unpkg.com/mqtt@5.10.3/dist/mqtt.min.js&#039;;&lt;br /&gt;
      d.getElementsByTagName(&#039;head&#039;)[0].appendChild(script);&lt;br /&gt;
      }(document));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 function initMqttStep2(callback) {&lt;br /&gt;
    const url = &#039;wss://mqtt.why2025.org/&#039;&lt;br /&gt;
&lt;br /&gt;
    const options = {&lt;br /&gt;
      // Clean session&lt;br /&gt;
      clean: true,&lt;br /&gt;
      connectTimeout: 4000,&lt;br /&gt;
      // Authentication&lt;br /&gt;
      clientId: &#039;whywiki_&#039; + Math.floor(Math.random() * 9999999),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mqttClient = mqtt.connect(url, options);&lt;br /&gt;
    mqttClient.on(&#039;connect&#039;, function () {&lt;br /&gt;
        var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
        for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            mqttClient.subscribe(elementtopic);&lt;br /&gt;
            console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic);&lt;br /&gt;
            if(feedelements[x].attributes[&#039;data-topic2&#039;] &amp;amp;&amp;amp; feedelements[x].attributes[&#039;data-topic2&#039;].value) {&lt;br /&gt;
                var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;].value;&lt;br /&gt;
                mqttClient.subscribe(elementtopic2);&lt;br /&gt;
                console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic2);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Receive messages&lt;br /&gt;
        mqttClient.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
          // message is Buffer&lt;br /&gt;
          console.log(&amp;quot;MQTT msg:&amp;quot;+message.toString())&lt;br /&gt;
          var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
          for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;] ? feedelements[x].attributes[&#039;data-topic2&#039;].value : &amp;quot;null&amp;quot;;&lt;br /&gt;
            var elementOperation = feedelements[x].attributes[&#039;data-operation&#039;] ? feedelements[x].attributes[&#039;data-operation&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
            var elementParam = feedelements[x].attributes[&#039;data-param&#039;] ? feedelements[x].attributes[&#039;data-param&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if(elementtopic == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic2 == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value2&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic == topic || elementtopic2 == topic) {&lt;br /&gt;
                var finalValue = &amp;quot;&amp;quot;;&lt;br /&gt;
                switch(elementOperation) {&lt;br /&gt;
                case &amp;quot;json&amp;quot;:&lt;br /&gt;
                    console.log(JSON.parse(feedelements[x].attributes[&#039;data-value&#039;]));&lt;br /&gt;
                    finalValue = JSON.parse(feedelements[x].attributes[&#039;data-value&#039;])[elementParam];&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sum&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 + feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sub&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 - feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;mul&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 * feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;div&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 / feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;];&lt;br /&gt;
                }&lt;br /&gt;
                feedelements[x].innerText = finalValue;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Only make a MQTT connection for pages that use it.&lt;br /&gt;
  if (document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;).length &amp;gt; 0) {&lt;br /&gt;
    initMqtt();&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13511</id>
		<title>Template:AngelCounter</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13511"/>
		<updated>2025-07-16T21:10:23Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://tickets.why2025.org/ &amp;lt;div id=&amp;quot;clockdiv&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;sold&amp;quot;&amp;gt;{{MqttFeed|why2025/angel/users|why2025/angel/users|json|0}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Sold&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;available&amp;quot;&amp;gt;{{MqttFeed|why2025/ticketshop/quotas/Event Visitors/available_number}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Available&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;]&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Template:MqttFeed&amp;diff=13510</id>
		<title>Template:MqttFeed</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Template:MqttFeed&amp;diff=13510"/>
		<updated>2025-07-16T21:08:45Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;mqttfeed&amp;quot; data-topic=&amp;quot;{{{1}}}&amp;quot; data-topic2=&amp;quot;{{{2|}}}&amp;quot; data-operation=&amp;quot;{{{3|}}}&amp;quot; data-param=&amp;quot;{{{4|}}}&amp;quot;&amp;gt;Loading...&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13509</id>
		<title>Template:AngelCounter</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13509"/>
		<updated>2025-07-16T21:06:54Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://tickets.why2025.org/ &amp;lt;div id=&amp;quot;clockdiv&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;sold&amp;quot;&amp;gt;{{MqttFeed|why2025/angel/users|json|0}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Sold&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;available&amp;quot;&amp;gt;{{MqttFeed|why2025/ticketshop/quotas/Event Visitors/available_number}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Available&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;]&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13508</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=MediaWiki:Common.js&amp;diff=13508"/>
		<updated>2025-07-16T21:04:15Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
function getTimeRemaining(endtime) {&lt;br /&gt;
    var t = Date.parse(endtime) - Date.parse(new Date());&lt;br /&gt;
    var seconds = Math.floor((t / 1000) % 60);&lt;br /&gt;
    var minutes = Math.floor((t / 1000 / 60) % 60);&lt;br /&gt;
    var hours = Math.floor((t / (1000 * 60 * 60)) % 24);&lt;br /&gt;
    var days = Math.floor(t / (1000 * 60 * 60 * 24));&lt;br /&gt;
    return {&lt;br /&gt;
        &#039;total&#039;: t,&lt;br /&gt;
        &#039;days&#039;: days,&lt;br /&gt;
        &#039;hours&#039;: hours,&lt;br /&gt;
        &#039;minutes&#039;: minutes,&lt;br /&gt;
        &#039;seconds&#039;: seconds&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function initializeClock(id, endtime) {&lt;br /&gt;
    var clock = document.getElementById(id);&lt;br /&gt;
    var daysSpan = clock.querySelector(&#039;.days&#039;);&lt;br /&gt;
    var hoursSpan = clock.querySelector(&#039;.hours&#039;);&lt;br /&gt;
    var minutesSpan = clock.querySelector(&#039;.minutes&#039;);&lt;br /&gt;
    var secondsSpan = clock.querySelector(&#039;.seconds&#039;);&lt;br /&gt;
&lt;br /&gt;
    function updateClock() {&lt;br /&gt;
        var t = getTimeRemaining(endtime);&lt;br /&gt;
&lt;br /&gt;
        daysSpan.innerHTML = t.days;&lt;br /&gt;
        hoursSpan.innerHTML = (&#039;0&#039; + t.hours).slice(-2);&lt;br /&gt;
        minutesSpan.innerHTML = (&#039;0&#039; + t.minutes).slice(-2);&lt;br /&gt;
        secondsSpan.innerHTML = (&#039;0&#039; + t.seconds).slice(-2);&lt;br /&gt;
&lt;br /&gt;
        if (t.total &amp;lt;= 0) {&lt;br /&gt;
            clearInterval(timeinterval);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    updateClock();&lt;br /&gt;
    var timeinterval = setInterval(updateClock, 1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* only run this on the page that there is a clock div...  */&lt;br /&gt;
// Or just a plain access for comparison&lt;br /&gt;
// (no need to check exists first, it falls back to null)&lt;br /&gt;
&lt;br /&gt;
$(function () {&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:Countdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var deadline = new Date(2025, 07, 8, 13, 37, 42, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;clockdiv&#039;, deadline);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mw.config.get(&#039;wgPageName&#039;) === &#039;Template:BuildupCountdown&#039; || mw.config.get(&#039;wgPageName&#039;) === &#039;Welcome&#039; ) {&lt;br /&gt;
        var buildupdeadline = new Date(2025, 07, 1, 0, 0, 0, 0); /* base 0 months */&lt;br /&gt;
        initializeClock(&#039;buildupclockdiv&#039;, buildupdeadline);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var mqttinitstarted = false;&lt;br /&gt;
  var mqttClient = null;&lt;br /&gt;
  function initMqtt() {&lt;br /&gt;
    if(typeof mqtt == &amp;quot;undefined&amp;quot; &amp;amp;&amp;amp; !mqttinitstarted) {&lt;br /&gt;
      mqttinitstarted = true;&lt;br /&gt;
      (function(d, script) {&lt;br /&gt;
      script = d.createElement(&#039;script&#039;);&lt;br /&gt;
      script.type = &#039;text/javascript&#039;;&lt;br /&gt;
      script.async = true;&lt;br /&gt;
      script.onload = initMqttStep2;&lt;br /&gt;
      script.src = &#039;https://unpkg.com/mqtt@5.10.3/dist/mqtt.min.js&#039;;&lt;br /&gt;
      d.getElementsByTagName(&#039;head&#039;)[0].appendChild(script);&lt;br /&gt;
      }(document));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 function initMqttStep2(callback) {&lt;br /&gt;
    const url = &#039;wss://mqtt.why2025.org/&#039;&lt;br /&gt;
&lt;br /&gt;
    const options = {&lt;br /&gt;
      // Clean session&lt;br /&gt;
      clean: true,&lt;br /&gt;
      connectTimeout: 4000,&lt;br /&gt;
      // Authentication&lt;br /&gt;
      clientId: &#039;whywiki_&#039; + Math.floor(Math.random() * 9999999),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mqttClient = mqtt.connect(url, options);&lt;br /&gt;
    mqttClient.on(&#039;connect&#039;, function () {&lt;br /&gt;
        var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
        for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            mqttClient.subscribe(elementtopic);&lt;br /&gt;
            console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic);&lt;br /&gt;
            if(feedelements[x].attributes[&#039;data-topic2&#039;] &amp;amp;&amp;amp; feedelements[x].attributes[&#039;data-topic2&#039;].value) {&lt;br /&gt;
                var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;].value;&lt;br /&gt;
                mqttClient.subscribe(elementtopic2);&lt;br /&gt;
                console.log(&amp;quot;MQTT sub on:&amp;quot; + elementtopic2);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Receive messages&lt;br /&gt;
        mqttClient.on(&#039;message&#039;, function (topic, message) {&lt;br /&gt;
          // message is Buffer&lt;br /&gt;
          console.log(&amp;quot;MQTT msg:&amp;quot;+message.toString())&lt;br /&gt;
          var feedelements = document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;);&lt;br /&gt;
          for(x = 0; x &amp;lt; feedelements.length; x++) {&lt;br /&gt;
            var elementtopic = feedelements[x].attributes[&#039;data-topic&#039;].value;&lt;br /&gt;
            var elementtopic2 = feedelements[x].attributes[&#039;data-topic2&#039;] ? feedelements[x].attributes[&#039;data-topic2&#039;].value : &amp;quot;null&amp;quot;;&lt;br /&gt;
            var elementOperation = feedelements[x].attributes[&#039;data-operation&#039;] ? feedelements[x].attributes[&#039;data-operation&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
            var elementParam = feedelements[x].attributes[&#039;data-param&#039;] ? feedelements[x].attributes[&#039;data-param&#039;].value : &amp;quot;none&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
            if(elementtopic == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic2 == topic) {&lt;br /&gt;
                feedelements[x].attributes[&#039;data-value2&#039;] = message.toString();&lt;br /&gt;
            }&lt;br /&gt;
            if(elementtopic == topic || elementtopic2 == topic) {&lt;br /&gt;
                var finalValue = &amp;quot;&amp;quot;;&lt;br /&gt;
                switch(elementOperation) {&lt;br /&gt;
                case &amp;quot;json&amp;quot;:&lt;br /&gt;
                    finalValue = JSON.parse(feedelements[x].attributes[&#039;data-value&#039;])[elementParam];&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sum&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 + feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;sub&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 - feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;mul&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 * feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;div&amp;quot;:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;]*1 / feedelements[x].attributes[&#039;data-value2&#039;]*1;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    finalValue = feedelements[x].attributes[&#039;data-value&#039;];&lt;br /&gt;
                }&lt;br /&gt;
                feedelements[x].innerText = finalValue;&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Only make a MQTT connection for pages that use it.&lt;br /&gt;
  if (document.getElementsByClassName(&amp;quot;mqttfeed&amp;quot;).length &amp;gt; 0) {&lt;br /&gt;
    initMqtt();&lt;br /&gt;
  }&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13499</id>
		<title>Template:AngelCounter</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Template:AngelCounter&amp;diff=13499"/>
		<updated>2025-07-16T20:46:37Z</updated>

		<summary type="html">&lt;p&gt;Okarin: Created page with &amp;quot;[https://tickets.why2025.org/ &amp;lt;div id=&amp;quot;clockdiv&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;sold&amp;quot;&amp;gt;{{MqttFeed|why2025/angel/users|json}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Sold&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;available&amp;quot;&amp;gt;{{MqttFeed|why2025/ticketshop/quotas/Event Visitors/available_number}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Available&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;]&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://tickets.why2025.org/ &amp;lt;div id=&amp;quot;clockdiv&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;sold&amp;quot;&amp;gt;{{MqttFeed|why2025/angel/users|json}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Sold&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;span class=&amp;quot;available&amp;quot;&amp;gt;{{MqttFeed|why2025/ticketshop/quotas/Event Visitors/available_number}}&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;clocksmalltext&amp;quot;&amp;gt;Available&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;]&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Angel_Shirts&amp;diff=13361</id>
		<title>Angel Shirts</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Angel_Shirts&amp;diff=13361"/>
		<updated>2025-07-16T09:27:43Z</updated>

		<summary type="html">&lt;p&gt;Okarin: Created page with &amp;quot;&amp;lt;p style=&amp;quot;margin-bottom: 15px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;border:5px solid #ff9900; padding: 5px;&amp;quot;&amp;gt;This page is part of Team:Volunteers&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;  As a thank you for volunteering we offer a t-shirt after completing a couple of shifts.  Team:Volunteers  == Size Distribution == File:Size_distribution.png  == Design ==   == Status == Being ordered&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;margin-bottom: 15px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;border:5px solid #ff9900; padding: 5px;&amp;quot;&amp;gt;This page is part of [[Team:Volunteers]]&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a thank you for volunteering we offer a t-shirt after completing a couple of shifts.&lt;br /&gt;
&lt;br /&gt;
[[Team:Volunteers]]&lt;br /&gt;
&lt;br /&gt;
== Size Distribution ==&lt;br /&gt;
[[File:Size_distribution.png]]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
Being ordered&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=File:Size_distribution.png&amp;diff=13359</id>
		<title>File:Size distribution.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=File:Size_distribution.png&amp;diff=13359"/>
		<updated>2025-07-16T09:27:01Z</updated>

		<summary type="html">&lt;p&gt;Okarin: The size distribution for angel shirts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
The size distribution for angel shirts&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Safety_Vests&amp;diff=13358</id>
		<title>Safety Vests</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Safety_Vests&amp;diff=13358"/>
		<updated>2025-07-16T09:25:21Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p style=&amp;quot;margin-bottom: 15px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;border:5px solid #ff9900; padding: 5px;&amp;quot;&amp;gt;This page is part of [[Team:Volunteers]]&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We need safety vests for all people on the field during buildup and teardown.&lt;br /&gt;
&lt;br /&gt;
[[Team:Volunteers]]&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
If you bring your own safety clothing please make sure it has the following properties:&lt;br /&gt;
* At least 0,14m² of fluorescent material&lt;br /&gt;
* At least 1 horizontal retro reflective stripe&lt;br /&gt;
* Retro reflective stripes over the shoulders &lt;br /&gt;
&lt;br /&gt;
== Size Distribution ==&lt;br /&gt;
[[file:Vest_distribution_why2025_final.png]]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
[[File:Safety-vest-why2025.png]]&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
Vests are currently in transport.&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=File:Safety-vest-why2025.png&amp;diff=13357</id>
		<title>File:Safety-vest-why2025.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=File:Safety-vest-why2025.png&amp;diff=13357"/>
		<updated>2025-07-16T09:24:33Z</updated>

		<summary type="html">&lt;p&gt;Okarin: A mockup of the safety vest worn at WHY2025 during buildup and teardown.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
A mockup of the safety vest worn at WHY2025 during buildup and teardown.&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Angel_Guide&amp;diff=12836</id>
		<title>Angel Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Angel_Guide&amp;diff=12836"/>
		<updated>2025-07-10T23:24:43Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[File:Volunteers needed.png|frameless|right|Volunteers requested :-)]]&lt;br /&gt;
&lt;br /&gt;
[[File:WikiBanner angel guide.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 800px&amp;quot;&amp;gt;&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Hello angel,&lt;br /&gt;
&lt;br /&gt;
Thank you for being part of the WHY2025 Community and taking the time to read up on how to participate!&lt;br /&gt;
&lt;br /&gt;
This guide tries to convey basic information about volunteering at WHY2025.&lt;br /&gt;
&lt;br /&gt;
If you feel this guide is incomplete, please contact the authors at [mailto:volunteers@why2025.org volunteers@why2025.org]. &lt;br /&gt;
&lt;br /&gt;
== Quick start ==&lt;br /&gt;
&lt;br /&gt;
Step 1: Create an [https://angel.why2025.org/ Engelsystem] account&lt;br /&gt;
&lt;br /&gt;
Step 2: Arrive at WHY2025 (in Geestmerambacht)&lt;br /&gt;
&lt;br /&gt;
Step 3: Go to [[Heaven]] and report to the welcome desk&lt;br /&gt;
&lt;br /&gt;
- Get marked as arrived in the Engelsystem&lt;br /&gt;
&lt;br /&gt;
- Get your angel badge&lt;br /&gt;
&lt;br /&gt;
Step 4: Log in to your [https://angel.why2025.org/ Engelsystem] account, read the shift descriptions and register for a shift.&lt;br /&gt;
&lt;br /&gt;
Step 5: Go to the meeting point before the start of your shift, meet your teammates and have fun!&lt;br /&gt;
&lt;br /&gt;
If you have any questions, ask the welcome angels or the shift coordinators behind the front desk in Heaven.&lt;br /&gt;
&lt;br /&gt;
== What is an angel and what do they do? ==&lt;br /&gt;
&lt;br /&gt;
Every visitor that contributes their time to WHY2025 by working one or more shifts is called an angel. During the camp we need hundreds of angels to work thousands of shifts. Angels build up the camp, check tickets, help park cars, pour drinks, organise talks, make video streams and keep us all safe and healthy.&lt;br /&gt;
&lt;br /&gt;
Please join in and make WHY2025 excellent!&lt;br /&gt;
&lt;br /&gt;
=== Perks ===&lt;br /&gt;
&lt;br /&gt;
Being an angel comes with some perks. While we hope that participation is reward enough, here is a list of things that are exclusive to angels:&lt;br /&gt;
&lt;br /&gt;
* Community acknowledgement&lt;br /&gt;
* Making it easy to meet fellow hackers&lt;br /&gt;
* Hanging out in Heaven&lt;br /&gt;
* Fantastic vegan and vegetarian meals&lt;br /&gt;
** during your shift you will receive a voucher for a meal&lt;br /&gt;
** information on allergens will be made available on the wiki&lt;br /&gt;
* A refillable water bottle&lt;br /&gt;
* Free coffee, tea and water available in Heaven&lt;br /&gt;
&lt;br /&gt;
If you have contributed a certain amount of time, you may receive access to:&lt;br /&gt;
&lt;br /&gt;
* The famous limited™ angel T-shirt in WHY2025 design&lt;br /&gt;
&lt;br /&gt;
Of course all perks are provided on a “best effort” basis. In particular, the meals are intended for angels who also worked on the day in question and were therefore unable to eat elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Expectations ===&lt;br /&gt;
&lt;br /&gt;
Volunteering at WHY2025 also comes with some simple, but important expectations of you:&lt;br /&gt;
&lt;br /&gt;
* Be on time for your shift or give Heaven early notice&lt;br /&gt;
* Be well rested, sober and not hungry&lt;br /&gt;
* Be open-minded and friendly in attitude&lt;br /&gt;
* Follow the camps moral values:&lt;br /&gt;
** Be excellent to each other&lt;br /&gt;
** Check the code of conduct&lt;br /&gt;
&lt;br /&gt;
=== Get Help/Protect Yourself ===&lt;br /&gt;
&lt;br /&gt;
If you don’t feel safe in a shift, please contact Heaven or, if urgent, the security. Your own safety comes before protecting others, especially as an angel.&lt;br /&gt;
&lt;br /&gt;
If you have the feeling that a fellow angel shouldn’t do a shift (e.g. when angel is intoxicated, extremely tired, under the influence of drugs, aggressive or a lone child without a guardian) please contact Heaven and they will have a look and send a replacement if necessary.&lt;br /&gt;
&lt;br /&gt;
== What is Heaven? ==&lt;br /&gt;
&lt;br /&gt;
Heaven is the home of all angels. It is the place where you will always receive help and have your questions answered as you begin your angel career for the current event.&lt;br /&gt;
&lt;br /&gt;
Within Heaven, you will find some of the benefits of being an angel, such as food and drinks. But there is also work to be done in Heaven. There is a helpdesk that manages all active angels. A group of so-called standby angels are waiting for tasks that spontaneously arise. And some angels are working in the kitchen and washing the dishes.&lt;br /&gt;
&lt;br /&gt;
Heaven is also the best place to call, if you have any problems with your shift.&lt;br /&gt;
&lt;br /&gt;
== The Engelsystem ==&lt;br /&gt;
&lt;br /&gt;
The Engelsystem is the central place to distribute the work to all the helping angels. It can be a bit overwhelming at the beginning, but you will get used to it and find your way around.&lt;br /&gt;
&lt;br /&gt;
As you might have seen there are many different shifts and roles for angels — some sounding more appealing than others. There are shifts where you need to have some knowledge before you can take them. This knowledge is transferred in introduction meetings or by taking an unrestricted shift in the team and getting trained on the job. You can read about the requirements in the shift description. Introduction meetings are announced in the Engelsystem under the tab “Meetings”.&lt;br /&gt;
&lt;br /&gt;
Some shifts require angels that have certain certifications, experience or training. Regular angels can’t register for these shifts. Details and contacts are listed in the Engelsystem under each shift. &lt;br /&gt;
&lt;br /&gt;
Also restrictions are in place, when angels get access to certain systems with a huge amount of data (e.g. mail-queues with emails from participants) or handling big piles of money.&lt;br /&gt;
&lt;br /&gt;
If you want to know more about an angel type, the description of the angel type usually includes contact data such as a DECT number or an email-address to ask your questions. Alternatively, you can also ask one of the persons of the respective angel type mentioned under “Supporter”.&lt;br /&gt;
&lt;br /&gt;
We asked teams to provide information about accessibility requirements for the shifts in Engelsystem. You will will find it in the description of the shifts.&lt;br /&gt;
&lt;br /&gt;
== What to bring to shifts ==&lt;br /&gt;
&lt;br /&gt;
Participating as an angel works best if you have some equipment with you. While most of the tools needed to complete a task will be provided to you, some items are personal and are best brought by yourself. Think about these items:&lt;br /&gt;
&lt;br /&gt;
* Your angel badge&lt;br /&gt;
* Refillable water bottle&lt;br /&gt;
* DECT phone (optional, bring [https://eventphone.de/doku/dect_phone_compatibility_list a qualified model] and register it at the POC desk)&lt;br /&gt;
* Solid shoes (we are camping after all)&lt;br /&gt;
* Appropriate protection if it’s sunny, cold or raining and your shift is outside&lt;br /&gt;
&lt;br /&gt;
If some special item is required (for instance for some shifts you need to bring a laptop or tablet), you’ll find that info in the description of the shift.&lt;br /&gt;
&lt;br /&gt;
== When to arrive? ==&lt;br /&gt;
&lt;br /&gt;
For visitors of the camp, day 0 (August 7th) is considered a good day to arrive. It is the day before the program starts.&lt;br /&gt;
&lt;br /&gt;
On day 0, build up is nearly completed, most infrastructure is set up and the registration desk will already be open, so you can exchange your ticket QR code for a wristband without having to queue for too long.&lt;br /&gt;
&lt;br /&gt;
In addition, the areas are not yet as crowded as during the event, so day 0 is a good opportunity to familiarise yourself with the camp field and have a look around without the fear of missing any interesting talks.&lt;br /&gt;
&lt;br /&gt;
=== Buildup and teardown ===&lt;br /&gt;
&lt;br /&gt;
The camp needs angels for builup and teardown!&lt;br /&gt;
&lt;br /&gt;
If you want to have a more detailed look behind the scenes and are not afraid of all sorts of manual labour like carrying heavy stuff and setting up chairs and tables, you are welcome to arrive earlier (up to day -6, Friday August 1st) and help with buildup. During early buildup there is little infrastructure available. &lt;br /&gt;
&lt;br /&gt;
Please let us know about your arrival date in your Engelsystem registration, and follow messages about buildup on the [https://why2025.org/Blog WHY2025 blog]. &lt;br /&gt;
&lt;br /&gt;
You are also more than welcome to help during teardown. Often teardown is less popular then buildup! We will start August 13th and work for a few days until everything is packed up.&lt;br /&gt;
&lt;br /&gt;
Food and drinks will be provided to volunteers working during buildup and teardown.&lt;br /&gt;
&lt;br /&gt;
== Where to get information ==&lt;br /&gt;
&lt;br /&gt;
This is a short list of information sources to get you started.&lt;br /&gt;
&lt;br /&gt;
* The [https://angel.why2025.org/ Engelsystem], which offers news and scheduled angel meetings&lt;br /&gt;
* The [[Welcome|WHY2025 wiki]] for instance the [[Angel|Angel page]].&lt;br /&gt;
* More questions? Try the [[FAQ|general FAQ]] or the [https://angel.why2025.org/faq Heaven FAQ]&lt;br /&gt;
* Lost? Try the [https://map.why2025.org/ map]!&lt;br /&gt;
* Go to the Infodesk in the info tent or the front desk in Heaven&lt;br /&gt;
&lt;br /&gt;
Important DECT numbers:&lt;br /&gt;
&lt;br /&gt;
* 110 Security&lt;br /&gt;
* 112 CERT&lt;br /&gt;
* 113 Awareness Team&lt;br /&gt;
* 1023 Heaven&lt;br /&gt;
* 1111 Info Desk&lt;br /&gt;
* Find more number in the [https://micropoc.de/phonebook POC Phonebook]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Angel_Guide&amp;diff=12835</id>
		<title>Angel Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Angel_Guide&amp;diff=12835"/>
		<updated>2025-07-10T23:12:18Z</updated>

		<summary type="html">&lt;p&gt;Okarin: Reverted edits by Okarin (talk) to last revision by Marjolein&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[File:Volunteers needed.png|frameless|right|Volunteers requested :-)]]&lt;br /&gt;
&lt;br /&gt;
[[File:WikiBanner angel guide.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 800px&amp;quot;&amp;gt;&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Hello angel,&lt;br /&gt;
&lt;br /&gt;
Thank you for being part of the WHY2025 Community and taking the time to read up on how to participate!&lt;br /&gt;
&lt;br /&gt;
This guide tries to convey basic information about volunteering at WHY2025.&lt;br /&gt;
&lt;br /&gt;
If you feel this guide is incomplete, please contact the authors at [mailto:volunteers@why2025.org volunteers@why2025.org]. &lt;br /&gt;
&lt;br /&gt;
== Quick start ==&lt;br /&gt;
&lt;br /&gt;
Step 1: Create an [https://angel.why2025.org/ Engelsystem] account&lt;br /&gt;
&lt;br /&gt;
Step 2: Arrive at WHY2025 (in Geestmerambacht)&lt;br /&gt;
&lt;br /&gt;
Step 3: Go to [[Heaven]] and report to the welcome desk&lt;br /&gt;
&lt;br /&gt;
- Get marked as arrived in the Engelsystem&lt;br /&gt;
&lt;br /&gt;
- Get your angel badge&lt;br /&gt;
&lt;br /&gt;
Step 4: Log in to your [https://angel.why2025.org/ Engelsystem] account, read the shift descriptions and register for a shift.&lt;br /&gt;
&lt;br /&gt;
Step 5: Go to the meeting point before the start of your shift, meet your teammates and have fun!&lt;br /&gt;
&lt;br /&gt;
If you have any questions, ask the welcome angels or the shift coordinators behind the front desk in Heaven.&lt;br /&gt;
&lt;br /&gt;
== Where to get information ==&lt;br /&gt;
&lt;br /&gt;
This is a short list of information sources to get you started.&lt;br /&gt;
&lt;br /&gt;
* The [https://angel.why2025.org/ Engelsystem], which offers news and scheduled angel meetings&lt;br /&gt;
* The [[Welcome|WHY2025 wiki]] for instance the [[Angel|Angel page]].&lt;br /&gt;
* More questions? Try the [[FAQ|general FAQ]] or the [https://angel.why2025.org/faq Heaven FAQ]&lt;br /&gt;
* Lost? Try the [https://map.why2025.org/ map]!&lt;br /&gt;
* Go to the Infodesk in the info tent or the front desk in Heaven&lt;br /&gt;
&lt;br /&gt;
Important DECT numbers:&lt;br /&gt;
&lt;br /&gt;
* 110 Security&lt;br /&gt;
* 112 CERT&lt;br /&gt;
* 113 Awareness Team&lt;br /&gt;
* 1023 Heaven&lt;br /&gt;
* 1111 Info Desk&lt;br /&gt;
* Find more number in the [https://micropoc.de/phonebook POC Phonebook]&lt;br /&gt;
&lt;br /&gt;
== What is an angel and what do they do? ==&lt;br /&gt;
&lt;br /&gt;
Every visitor that contributes their time to WHY2025 by working one or more shifts is called an angel. During the camp we need hundreds of angels to work thousands of shifts. Angels build up the camp, check tickets, help park cars, pour drinks, organise talks, make video streams and keep us all safe and healthy.&lt;br /&gt;
&lt;br /&gt;
Please join in and make WHY2025 excellent!&lt;br /&gt;
&lt;br /&gt;
=== Perks ===&lt;br /&gt;
&lt;br /&gt;
Being an angel comes with some perks. While we hope that participation is reward enough, here is a list of things that are exclusive to angels:&lt;br /&gt;
&lt;br /&gt;
* Community acknowledgement&lt;br /&gt;
* Making it easy to meet fellow hackers&lt;br /&gt;
* Hanging out in Heaven&lt;br /&gt;
* Fantastic vegan and vegetarian meals&lt;br /&gt;
** during your shift you will receive a voucher for a meal&lt;br /&gt;
** information on allergens will be made available on the wiki&lt;br /&gt;
* A refillable water bottle&lt;br /&gt;
* Free coffee, tea and water available in Heaven&lt;br /&gt;
&lt;br /&gt;
If you have contributed a certain amount of time, you may receive access to:&lt;br /&gt;
&lt;br /&gt;
* The famous limited™ angel T-shirt in WHY2025 design&lt;br /&gt;
&lt;br /&gt;
Of course all perks are provided on a “best effort” basis. In particular, the meals are intended for angels who also worked on the day in question and were therefore unable to eat elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Expectations ===&lt;br /&gt;
&lt;br /&gt;
Volunteering at WHY2025 also comes with some simple, but important expectations of you:&lt;br /&gt;
&lt;br /&gt;
* Be on time for your shift or give Heaven early notice&lt;br /&gt;
* Be well rested, sober and not hungry&lt;br /&gt;
* Be open-minded and friendly in attitude&lt;br /&gt;
* Follow the camps moral values:&lt;br /&gt;
** Be excellent to each other&lt;br /&gt;
** Check the code of conduct&lt;br /&gt;
&lt;br /&gt;
=== Get Help/Protect Yourself ===&lt;br /&gt;
&lt;br /&gt;
If you don’t feel safe in a shift, please contact Heaven or, if urgent, the security. Your own safety comes before protecting others, especially as an angel.&lt;br /&gt;
&lt;br /&gt;
If you have the feeling that a fellow angel shouldn’t do a shift (e.g. when angel is intoxicated, extremely tired, under the influence of drugs, aggressive or a lone child without a guardian) please contact Heaven and they will have a look and send a replacement if necessary.&lt;br /&gt;
&lt;br /&gt;
== What is Heaven? ==&lt;br /&gt;
&lt;br /&gt;
Heaven is the home of all angels. It is the place where you will always receive help and have your questions answered as you begin your angel career for the current event.&lt;br /&gt;
&lt;br /&gt;
Within Heaven, you will find some of the benefits of being an angel, such as food and drinks. But there is also work to be done in Heaven. There is a helpdesk that manages all active angels. A group of so-called standby angels are waiting for tasks that spontaneously arise. And some angels are working in the kitchen and washing the dishes.&lt;br /&gt;
&lt;br /&gt;
Heaven is also the best place to call, if you have any problems with your shift.&lt;br /&gt;
&lt;br /&gt;
== The Engelsystem ==&lt;br /&gt;
&lt;br /&gt;
The Engelsystem is the central place to distribute the work to all the helping angels. It can be a bit overwhelming at the beginning, but you will get used to it and find your way around.&lt;br /&gt;
&lt;br /&gt;
As you might have seen there are many different shifts and roles for angels — some sounding more appealing than others. There are shifts where you need to have some knowledge before you can take them. This knowledge is transferred in introduction meetings or by taking an unrestricted shift in the team and getting trained on the job. You can read about the requirements in the shift description. Introduction meetings are announced in the Engelsystem under the tab “Meetings”.&lt;br /&gt;
&lt;br /&gt;
Some shifts require angels that have certain certifications, skills or knowledge. Regular angels can’t register for these shifts. The description of the restricted angel type explains what is needed. When one of the supporters listed in Engelsystem confirms you meet the requirements, you can register for such a shift.&lt;br /&gt;
&lt;br /&gt;
Also restrictions are in place, when angels get access to certain systems with a huge amount of data (e.g. mail-queues with emails from participants) or handling big piles of money.&lt;br /&gt;
&lt;br /&gt;
If you want to know more about an angel type, the description of the angel type usually includes contact data such as a DECT number or an email-address to ask your questions. Alternatively, you can also ask one of the persons of the respective angel type mentioned under “Supporter”.&lt;br /&gt;
&lt;br /&gt;
We asked teams to provide information about accessibility requirements for the shifts in Engelsystem. You will will find it in the description of the shifts.&lt;br /&gt;
&lt;br /&gt;
== What to bring to shifts ==&lt;br /&gt;
&lt;br /&gt;
Participating as an angel works best if you have some equipment with you. While most of the tools needed to complete a task will be provided to you, some items are personal and are best brought by yourself. Think about these items:&lt;br /&gt;
&lt;br /&gt;
* Your angel badge&lt;br /&gt;
* Refillable water bottle&lt;br /&gt;
* DECT phone (optional, bring [https://eventphone.de/doku/dect_phone_compatibility_list a qualified model] and register it at the POC desk)&lt;br /&gt;
* Solid shoes (we are camping after all)&lt;br /&gt;
* Appropriate protection if it’s sunny, cold or raining and your shift is outside&lt;br /&gt;
&lt;br /&gt;
If some special item is required (for instance for some shifts you need to bring a laptop or tablet), you’ll find that info in the description of the shift.&lt;br /&gt;
&lt;br /&gt;
== When to arrive? ==&lt;br /&gt;
&lt;br /&gt;
For visitors of the camp, day 0 (August 7th) is considered a good day to arrive. It is the day before the program starts.&lt;br /&gt;
&lt;br /&gt;
On day 0, build up is nearly completed, most infrastructure is set up and the registration desk will already be open, so you can exchange your ticket QR code for a wristband without having to queue for too long.&lt;br /&gt;
&lt;br /&gt;
In addition, the areas are not yet as crowded as during the event, so day 0 is a good opportunity to familiarise yourself with the camp field and have a look around without the fear of missing any interesting talks.&lt;br /&gt;
&lt;br /&gt;
=== Buildup and teardown ===&lt;br /&gt;
&lt;br /&gt;
The camp needs angels for builup and teardown!&lt;br /&gt;
&lt;br /&gt;
If you want to have a more detailed look behind the scenes and are not afraid of all sorts of manual labour like carrying heavy stuff and setting up chairs and tables, you are welcome to arrive earlier (up to day -6, Friday August 1st) and help with buildup. During early buildup there is little infrastructure available. &lt;br /&gt;
&lt;br /&gt;
Please let us know about your arrival date in your Engelsystem registration, and follow messages about buildup on the [https://why2025.org/Blog WHY2025 blog]. &lt;br /&gt;
&lt;br /&gt;
You are also more than welcome to help during teardown. Often teardown is less popular then buildup! We will start August 13th and work for a few days until everything is packed up.&lt;br /&gt;
&lt;br /&gt;
Food and drinks will be provided to volunteers working during buildup and teardown.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Angel_Guide&amp;diff=12834</id>
		<title>Angel Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Angel_Guide&amp;diff=12834"/>
		<updated>2025-07-10T23:10:58Z</updated>

		<summary type="html">&lt;p&gt;Okarin: Reverted edits by Marjolein (talk) to last revision by Okarin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[File:Volunteers needed.png|frameless|right|Volunteers requested :-)]]&lt;br /&gt;
&lt;br /&gt;
[[File:WikiBanner angel guide.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 800px&amp;quot;&amp;gt;&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Hello angel,&lt;br /&gt;
&lt;br /&gt;
Thank you for being part of the WHY2025 Community and taking the time to read up on how to participate!&lt;br /&gt;
&lt;br /&gt;
This guide tries to convey basic information about volunteering at WHY2025.&lt;br /&gt;
&lt;br /&gt;
If you feel this guide is incomplete, please contact the authors at volunteers@why2025.org.&lt;br /&gt;
&lt;br /&gt;
== Quick start ==&lt;br /&gt;
&lt;br /&gt;
Step 1: Create an Engelsystem account&lt;br /&gt;
&lt;br /&gt;
Step 2: Arrive at WHY2025 (in Geestmerambacht)&lt;br /&gt;
&lt;br /&gt;
Step 3: Go to Heaven and report to the welcome desk&lt;br /&gt;
&lt;br /&gt;
- Get marked as arrived in the Engelsystem&lt;br /&gt;
&lt;br /&gt;
- Get your angel badge&lt;br /&gt;
&lt;br /&gt;
Step 4: Log in to your Engelsystem account, read the shift descriptions and register for a shift.&lt;br /&gt;
&lt;br /&gt;
Step 5: Go to the meeting point before the start of your shift, meet your teammates and have fun!&lt;br /&gt;
&lt;br /&gt;
If you have any questions, ask the welcome angels or the shift coordinators behind the front desk in Heaven.&lt;br /&gt;
&lt;br /&gt;
== Where to get information ==&lt;br /&gt;
&lt;br /&gt;
This is a short list of information sources to get you started.&lt;br /&gt;
&lt;br /&gt;
* The Engelsystem, which offers news and scheduled angel meetings&lt;br /&gt;
* The WHY2025 wiki, for instance the Angel page.&lt;br /&gt;
* More questions? Try the general FAQ or the Heaven FAQ&lt;br /&gt;
* Lost? Try the map!&lt;br /&gt;
* Go to the Infodesk in the info tent or the front desk in Heaven&lt;br /&gt;
&lt;br /&gt;
Important DECT numbers:&lt;br /&gt;
&lt;br /&gt;
* 110 Security&lt;br /&gt;
* 112 CERT&lt;br /&gt;
* 113 Awareness Team&lt;br /&gt;
* 1023 Heaven&lt;br /&gt;
* 1111 Info Desk&lt;br /&gt;
* Find more number in the POC Phonebook&lt;br /&gt;
&lt;br /&gt;
== What is an angel and what do they do? ==&lt;br /&gt;
&lt;br /&gt;
Every visitor that contributes their time to WHY2025 by working one or more shifts is called an angel. During the camp we need hundreds of angels to work thousands of shifts. Angels build up the camp, check tickets, help park cars, pour drinks, organise talks, make video streams and keep us all safe and healthy.&lt;br /&gt;
&lt;br /&gt;
Please join in and make WHY2025 excellent!&lt;br /&gt;
&lt;br /&gt;
=== Perks ===&lt;br /&gt;
&lt;br /&gt;
Being an angel comes with some perks. While we hope that participation is reward enough, here is a list of things that are exclusive to angels:&lt;br /&gt;
&lt;br /&gt;
* Community acknowledgement&lt;br /&gt;
* Making it easy to meet fellow hackers&lt;br /&gt;
* Hanging out in Heaven&lt;br /&gt;
* Fantastic vegan and vegetarian meals&lt;br /&gt;
** during your shift you will receive a voucher for a meal&lt;br /&gt;
** information on allergens will be made available on the wiki&lt;br /&gt;
* A refillable water bottle&lt;br /&gt;
* Free coffee, tea and water available in Heaven&lt;br /&gt;
&lt;br /&gt;
If you have contributed a certain amount of time, you may receive access to:&lt;br /&gt;
&lt;br /&gt;
* The famous limited™ angel T-shirt in WHY2025 design&lt;br /&gt;
&lt;br /&gt;
Of course all perks are provided on a “best effort” basis. In particular, the meals are intended for angels who also worked on the day in question and were therefore unable to eat elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Expectations ===&lt;br /&gt;
&lt;br /&gt;
Volunteering at WHY2025 also comes with some simple, but important expectations of you:&lt;br /&gt;
&lt;br /&gt;
* Be on time for your shift or give Heaven early notice&lt;br /&gt;
* Be well rested, sober and not hungry&lt;br /&gt;
* Be open-minded and friendly in attitude&lt;br /&gt;
* Follow the camps moral values:&lt;br /&gt;
** Be excellent to each other&lt;br /&gt;
** Check the code of conduct&lt;br /&gt;
&lt;br /&gt;
=== Get Help/Protect Yourself ===&lt;br /&gt;
&lt;br /&gt;
If you don’t feel safe in a shift, please contact Heaven or, if urgent, the security. Your own safety comes before protecting others, especially as an angel.&lt;br /&gt;
&lt;br /&gt;
If you have the feeling that a fellow angel shouldn’t do a shift (e.g. when angel is intoxicated, extremely tired, under the influence of drugs, aggressive or a lone child without a guardian) please contact Heaven and they will have a look and send a replacement if necessary.&lt;br /&gt;
&lt;br /&gt;
== What is Heaven? ==&lt;br /&gt;
&lt;br /&gt;
Heaven is the home of all angels. It is the place where you will always receive help and have your questions answered as you begin your angel career for the current event.&lt;br /&gt;
&lt;br /&gt;
Within Heaven, you will find some of the benefits of being an angel, such as food and drinks. But there is also work to be done in Heaven. There is a helpdesk that manages all active angels. A group of so-called standby angels are waiting for tasks that spontaneously arise. And some angels are working in the kitchen and washing the dishes.&lt;br /&gt;
&lt;br /&gt;
Heaven is also the best place to call, if you have any problems with your shift.&lt;br /&gt;
&lt;br /&gt;
== The Engelsystem ==&lt;br /&gt;
&lt;br /&gt;
The Engelsystem is the central place to distribute the work to all the helping angels. It can be a bit overwhelming at the beginning, but you will get used to it and find your way around.&lt;br /&gt;
&lt;br /&gt;
As you might have seen there are many different shifts and roles for angels — some sounding more appealing than others. There are shifts where you need to have some knowledge before you can take them. This knowledge is transferred in introduction meetings or by taking an unrestricted shift in the team and getting trained on the job. You can read about the requirements in the shift description. Introduction meetings are announced in the Engelsystem under the tab “Meetings”.&lt;br /&gt;
&lt;br /&gt;
Some shifts require angels that have certain certifications, skills or knowledge. Regular angels can’t register for these shifts. The description of the restricted angel type explains what is needed. When one of the supporters listed in Engelsystem confirms you meet the requirements, you can register for such a shift.&lt;br /&gt;
&lt;br /&gt;
Also restrictions are in place, when angels get access to certain systems with a huge amount of data (e.g. mail-queues with emails from participants) or handling big piles of money.&lt;br /&gt;
&lt;br /&gt;
If you want to know more about an angel type, the description of the angel type usually includes contact data such as a DECT number or an email-address to ask your questions. Alternatively, you can also ask one of the persons of the respective angel type mentioned under “Supporter”.&lt;br /&gt;
&lt;br /&gt;
We asked teams to provide information about accessibility requirements for the shifts in Engelsystem. You will will find it in the description of the shifts.&lt;br /&gt;
&lt;br /&gt;
== What to bring to shifts ==&lt;br /&gt;
&lt;br /&gt;
Participating as an angel works best if you have some equipment with you. While most of the tools needed to complete a task will be provided to you, some items are personal and are best brought by yourself. Think about these items:&lt;br /&gt;
&lt;br /&gt;
* Your angel badge&lt;br /&gt;
* Refillable water bottle&lt;br /&gt;
* DECT phone (optional, bring a qualified model and register it at the POC desk)&lt;br /&gt;
* Solid shoes (we are camping after all)&lt;br /&gt;
* Appropriate protection if it’s sunny, cold or raining and your shift is outside&lt;br /&gt;
&lt;br /&gt;
If some special item is required (for instance for some shifts you need to bring a laptop or tablet), you’ll find that info in the description of the shift.&lt;br /&gt;
&lt;br /&gt;
== When to arrive? ==&lt;br /&gt;
&lt;br /&gt;
For visitors of the camp, day 0 (August 7th) is considered a good day to arrive. It is the day before the program starts.&lt;br /&gt;
&lt;br /&gt;
On day 0, build up is nearly completed, most infrastructure is set up and the registration desk will already be open, so you can exchange your ticket QR code for a wristband without having to queue for too long.&lt;br /&gt;
&lt;br /&gt;
In addition, the areas are not yet as crowded as during the event, so day 0 is a good opportunity to familiarise yourself with the camp field and have a look around without the fear of missing any interesting talks.&lt;br /&gt;
&lt;br /&gt;
=== Buildup and teardown ===&lt;br /&gt;
&lt;br /&gt;
The camp needs angels for builup and teardown!&lt;br /&gt;
&lt;br /&gt;
If you want to have a more detailed look behind the scenes and are not afraid of all sorts of manual labour like carrying heavy stuff and setting up chairs and tables, you are welcome to arrive earlier (up to day -6, Friday August 1st) and help with buildup. Please let us know about your arrival date in your Engelsystem registration. That helps us coordinating the volunteers.&lt;br /&gt;
&lt;br /&gt;
However, please remember there is NO infrastructure yet. So if you would like to help, please follow messages about buildup on the WHY2025 blog or contact Team:Volunteers for more details.&lt;br /&gt;
&lt;br /&gt;
You are also more than welcome to help during teardown. Often teardown is less popular then buildup! We will start August 13th and work for a few days until everything is packed up.&lt;br /&gt;
&lt;br /&gt;
Food and drinks will be provided to volunteers working during buildup and teardown.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Angel_Guide&amp;diff=12746</id>
		<title>Angel Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Angel_Guide&amp;diff=12746"/>
		<updated>2025-07-09T21:14:45Z</updated>

		<summary type="html">&lt;p&gt;Okarin: Removed work limit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[File:Volunteers needed.png|frameless|right|Volunteers requested :-)]]&lt;br /&gt;
&lt;br /&gt;
[[File:WikiBanner angel guide.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 800px&amp;quot;&amp;gt;&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Hello angel,&lt;br /&gt;
&lt;br /&gt;
Thank you for being part of the WHY2025 Community and taking the time to read up on how to participate!&lt;br /&gt;
&lt;br /&gt;
This guide tries to convey basic information about volunteering at WHY2025.&lt;br /&gt;
&lt;br /&gt;
If you feel this guide is incomplete, please contact the authors at volunteers@why2025.org.&lt;br /&gt;
&lt;br /&gt;
== Quick start ==&lt;br /&gt;
&lt;br /&gt;
Step 1: Create an Engelsystem account&lt;br /&gt;
&lt;br /&gt;
Step 2: Arrive at WHY2025 (in Geestmerambacht)&lt;br /&gt;
&lt;br /&gt;
Step 3: Go to Heaven and report to the welcome desk&lt;br /&gt;
&lt;br /&gt;
- Get marked as arrived in the Engelsystem&lt;br /&gt;
&lt;br /&gt;
- Get your angel badge&lt;br /&gt;
&lt;br /&gt;
Step 4: Log in to your Engelsystem account, read the shift descriptions and register for a shift.&lt;br /&gt;
&lt;br /&gt;
Step 5: Go to the meeting point before the start of your shift, meet your teammates and have fun!&lt;br /&gt;
&lt;br /&gt;
If you have any questions, ask the welcome angels or the shift coordinators behind the front desk in Heaven.&lt;br /&gt;
&lt;br /&gt;
== Where to get information ==&lt;br /&gt;
&lt;br /&gt;
This is a short list of information sources to get you started.&lt;br /&gt;
&lt;br /&gt;
* The Engelsystem, which offers news and scheduled angel meetings&lt;br /&gt;
* The WHY2025 wiki, for instance the Angel page.&lt;br /&gt;
* More questions? Try the general FAQ or the Heaven FAQ&lt;br /&gt;
* Lost? Try the map!&lt;br /&gt;
* Go to the Infodesk in the info tent or the front desk in Heaven&lt;br /&gt;
&lt;br /&gt;
Important DECT numbers:&lt;br /&gt;
&lt;br /&gt;
* 110 Security&lt;br /&gt;
* 112 CERT&lt;br /&gt;
* 113 Awareness Team&lt;br /&gt;
* 1023 Heaven&lt;br /&gt;
* 1111 Info Desk&lt;br /&gt;
* Find more number in the POC Phonebook&lt;br /&gt;
&lt;br /&gt;
== What is an angel and what do they do? ==&lt;br /&gt;
&lt;br /&gt;
Every visitor that contributes their time to WHY2025 by working one or more shifts is called an angel. During the camp we need hundreds of angels to work thousands of shifts. Angels build up the camp, check tickets, help park cars, pour drinks, organise talks, make video streams and keep us all safe and healthy.&lt;br /&gt;
&lt;br /&gt;
Please join in and make WHY2025 excellent!&lt;br /&gt;
&lt;br /&gt;
=== Perks ===&lt;br /&gt;
&lt;br /&gt;
Being an angel comes with some perks. While we hope that participation is reward enough, here is a list of things that are exclusive to angels:&lt;br /&gt;
&lt;br /&gt;
* Community acknowledgement&lt;br /&gt;
* Making it easy to meet fellow hackers&lt;br /&gt;
* Hanging out in Heaven&lt;br /&gt;
* Fantastic vegan and vegetarian meals&lt;br /&gt;
** during your shift you will receive a voucher for a meal&lt;br /&gt;
** information on allergens will be made available on the wiki&lt;br /&gt;
* A refillable water bottle&lt;br /&gt;
* Free coffee, tea and water available in Heaven&lt;br /&gt;
&lt;br /&gt;
If you have contributed a certain amount of time, you may receive access to:&lt;br /&gt;
&lt;br /&gt;
* The famous limited™ angel T-shirt in WHY2025 design&lt;br /&gt;
&lt;br /&gt;
Of course all perks are provided on a “best effort” basis. In particular, the meals are intended for angels who also worked on the day in question and were therefore unable to eat elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Expectations ===&lt;br /&gt;
&lt;br /&gt;
Volunteering at WHY2025 also comes with some simple, but important expectations of you:&lt;br /&gt;
&lt;br /&gt;
* Be on time for your shift or give Heaven early notice&lt;br /&gt;
* Be well rested, sober and not hungry&lt;br /&gt;
* Be open-minded and friendly in attitude&lt;br /&gt;
* Follow the camps moral values:&lt;br /&gt;
** Be excellent to each other&lt;br /&gt;
** Check the code of conduct&lt;br /&gt;
&lt;br /&gt;
=== Get Help/Protect Yourself ===&lt;br /&gt;
&lt;br /&gt;
If you don’t feel safe in a shift, please contact Heaven or, if urgent, the security. Your own safety comes before protecting others, especially as an angel.&lt;br /&gt;
&lt;br /&gt;
If you have the feeling that a fellow angel shouldn’t do a shift (e.g. when angel is intoxicated, extremely tired, under the influence of drugs, aggressive or a lone child without a guardian) please contact Heaven and they will have a look and send a replacement if necessary.&lt;br /&gt;
&lt;br /&gt;
== What is Heaven? ==&lt;br /&gt;
&lt;br /&gt;
Heaven is the home of all angels. It is the place where you will always receive help and have your questions answered as you begin your angel career for the current event.&lt;br /&gt;
&lt;br /&gt;
Within Heaven, you will find some of the benefits of being an angel, such as food and drinks. But there is also work to be done in Heaven. There is a helpdesk that manages all active angels. A group of so-called standby angels are waiting for tasks that spontaneously arise. And some angels are working in the kitchen and washing the dishes.&lt;br /&gt;
&lt;br /&gt;
Heaven is also the best place to call, if you have any problems with your shift.&lt;br /&gt;
&lt;br /&gt;
== The Engelsystem ==&lt;br /&gt;
&lt;br /&gt;
The Engelsystem is the central place to distribute the work to all the helping angels. It can be a bit overwhelming at the beginning, but you will get used to it and find your way around.&lt;br /&gt;
&lt;br /&gt;
As you might have seen there are many different shifts and roles for angels — some sounding more appealing than others. There are shifts where you need to have some knowledge before you can take them. This knowledge is transferred in introduction meetings or by taking an unrestricted shift in the team and getting trained on the job. You can read about the requirements in the shift description. Introduction meetings are announced in the Engelsystem under the tab “Meetings”.&lt;br /&gt;
&lt;br /&gt;
Some shifts require angels that have certain certifications, skills or knowledge. Regular angels can’t register for these shifts. The description of the restricted angel type explains what is needed. When one of the supporters listed in Engelsystem confirms you meet the requirements, you can register for such a shift.&lt;br /&gt;
&lt;br /&gt;
Also restrictions are in place, when angels get access to certain systems with a huge amount of data (e.g. mail-queues with emails from participants) or handling big piles of money.&lt;br /&gt;
&lt;br /&gt;
If you want to know more about an angel type, the description of the angel type usually includes contact data such as a DECT number or an email-address to ask your questions. Alternatively, you can also ask one of the persons of the respective angel type mentioned under “Supporter”.&lt;br /&gt;
&lt;br /&gt;
We asked teams to provide information about accessibility requirements for the shifts in Engelsystem. You will will find it in the description of the shifts.&lt;br /&gt;
&lt;br /&gt;
== What to bring to shifts ==&lt;br /&gt;
&lt;br /&gt;
Participating as an angel works best if you have some equipment with you. While most of the tools needed to complete a task will be provided to you, some items are personal and are best brought by yourself. Think about these items:&lt;br /&gt;
&lt;br /&gt;
* Your angel badge&lt;br /&gt;
* Refillable water bottle&lt;br /&gt;
* DECT phone (optional, bring a qualified model and register it at the POC desk)&lt;br /&gt;
* Solid shoes (we are camping after all)&lt;br /&gt;
* Appropriate protection if it’s sunny, cold or raining and your shift is outside&lt;br /&gt;
&lt;br /&gt;
If some special item is required (for instance for some shifts you need to bring a laptop or tablet), you’ll find that info in the description of the shift.&lt;br /&gt;
&lt;br /&gt;
== When to arrive? ==&lt;br /&gt;
&lt;br /&gt;
For visitors of the camp, day 0 (August 7th) is considered a good day to arrive. It is the day before the program starts.&lt;br /&gt;
&lt;br /&gt;
On day 0, build up is nearly completed, most infrastructure is set up and the registration desk will already be open, so you can exchange your ticket QR code for a wristband without having to queue for too long.&lt;br /&gt;
&lt;br /&gt;
In addition, the areas are not yet as crowded as during the event, so day 0 is a good opportunity to familiarise yourself with the camp field and have a look around without the fear of missing any interesting talks.&lt;br /&gt;
&lt;br /&gt;
=== Buildup and teardown ===&lt;br /&gt;
&lt;br /&gt;
The camp needs angels for builup and teardown!&lt;br /&gt;
&lt;br /&gt;
If you want to have a more detailed look behind the scenes and are not afraid of all sorts of manual labour like carrying heavy stuff and setting up chairs and tables, you are welcome to arrive earlier (up to day -6, Friday August 1st) and help with buildup. Please let us know about your arrival date in your Engelsystem registration. That helps us coordinating the volunteers.&lt;br /&gt;
&lt;br /&gt;
However, please remember there is NO infrastructure yet. So if you would like to help, please follow messages about buildup on the WHY2025 blog or contact Team:Volunteers for more details.&lt;br /&gt;
&lt;br /&gt;
You are also more than welcome to help during teardown. Often teardown is less popular then buildup! We will start August 13th and work for a few days until everything is packed up.&lt;br /&gt;
&lt;br /&gt;
Food and drinks will be provided to volunteers working during buildup and teardown.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Team:Volunteers&amp;diff=12598</id>
		<title>Team:Volunteers</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Team:Volunteers&amp;diff=12598"/>
		<updated>2025-07-08T17:40:51Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Team&lt;br /&gt;
|Lead=User:Okarin&lt;br /&gt;
|Description=Team:Volunteers is responsible for managing the angels during the Event.&lt;br /&gt;
|Exclusive team=Yes&lt;br /&gt;
|Contact=volunteers@why2025.org&lt;br /&gt;
|IRC=why2025-volunteers&lt;br /&gt;
|team_is_essential_to_event=Important&lt;br /&gt;
|team_has_contact_info=Yes&lt;br /&gt;
|team_has_info_on_wiki=Yes&lt;br /&gt;
|team_has_planned_meetings=Yes&lt;br /&gt;
|team_has_enough_people=No&lt;br /&gt;
|team_needs_x_people=1&lt;br /&gt;
|team_has_drafted_budget=No&lt;br /&gt;
|team_has_informed_volunteer_team=Yes&lt;br /&gt;
|Projectleiding=User:NancyBeers&lt;br /&gt;
}}&lt;br /&gt;
==Team Members==&lt;br /&gt;
&lt;br /&gt;
{{TeamMemberEntry|User:Okarin}}&lt;br /&gt;
{{TeamMemberEntry|User:Xu}}&lt;br /&gt;
{{TeamMemberEntry|User:Igel}}&lt;br /&gt;
{{TeamMemberEntry|User:Marjolein}}&lt;br /&gt;
{{TeamMemberEntry|User:Jasper}}&lt;br /&gt;
[[File:Angel-logo.png|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;We have vacancies!&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
What would WHY2025 be without angels, all the volunteers that help make camp perfect? &lt;br /&gt;
&lt;br /&gt;
Help us help them so they can have fun helping at camp :)&lt;br /&gt;
&lt;br /&gt;
To make this happen, we need to set up all kind of things, there is fun stuff for everyone. &lt;br /&gt;
For instance, we need coordinators during the event. You can help with setting up Heaven, the place where angels can meet. We arrange food and drinks for angels, so we are setting up a complete kitchen and catering. The Engelsystem needs to be ready and filled with shifts so angels can register and select tasks. And much more.&lt;br /&gt;
&lt;br /&gt;
Most importantly we want angels to have a great time helping out all the other teams during camp. &lt;br /&gt;
Interested? Need more info? Contact {{UserLink|Okarin}} or sent an email to [mailto:volunteers@why2025.org volunteers@why2025.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
* [[Heaven]]&lt;br /&gt;
* [[Safety_Vests]]&lt;br /&gt;
* [[Angelsystem]]&lt;br /&gt;
* [[Angel_Care]]&lt;br /&gt;
* [[Water_Bottles]]&lt;br /&gt;
* [[Angel_Badges]]&lt;br /&gt;
* [[Angel_Shirts]]&lt;br /&gt;
* Recruitment&lt;br /&gt;
** Landingpage [[Angel]] (How to become an Angel)&lt;br /&gt;
** [[Shifts Guidelines]]&lt;br /&gt;
** [[Angel_Guide]]&lt;br /&gt;
** [[Volunteering_Guide]]&lt;br /&gt;
** [[recruitment poster]]&lt;br /&gt;
&lt;br /&gt;
=== Shared Projects ===&lt;br /&gt;
* Accessible volunteer shifts: [[Team:Accessibility]]&lt;br /&gt;
* Heaven decoration: [[Team:Deco]]&lt;br /&gt;
* Angel shifts for minors: [[Team:Family]]&lt;br /&gt;
&lt;br /&gt;
=== Subproject making shifts for Engelsystem ===&lt;br /&gt;
* [[Shifts for teams in Engelsystem]]&lt;br /&gt;
* [[Buildup Teardown Volunteer Capacity]]&lt;br /&gt;
&lt;br /&gt;
==Meetings==&lt;br /&gt;
https://meet.why2025.org/why-volunteers&lt;br /&gt;
&lt;br /&gt;
* 1st Apr 2025 20:00&lt;br /&gt;
* 16th Apr 2025 20:00&lt;br /&gt;
* 1st May 2025 20:00&lt;br /&gt;
* 16st May 2025 20:00&lt;br /&gt;
* 2nd Jun 2025 20:00&lt;br /&gt;
* 12nd Jun 2025 20:00&lt;br /&gt;
&lt;br /&gt;
Past dates:&lt;br /&gt;
* &amp;lt;s&amp;gt;28th Aug 2024 20:00&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;25th Sep 2024 20:00&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;29th Oct 2024 20:00&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;26th Nov 2024 20:00&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;25th Dec 2024&amp;lt;/s&amp;gt; (cancelled)&lt;br /&gt;
* &amp;lt;s&amp;gt;6th Jan 2025 20:00&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;21th Jan 2025 20:00&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;5th Feb 2025 20:00&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;14th Feb 2025 19:00&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;20th Feb 2025 20:00&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;7th Mar 2025 19:00 (Brainstorm session tasks)&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;17th Mar 2025 20:00&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Roles==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Before the event===&lt;br /&gt;
*Indexing orga vacancies&lt;br /&gt;
*On-boarding new organization members&lt;br /&gt;
*Planning heaven&#039;s amenities&lt;br /&gt;
*Planning shifts&lt;br /&gt;
*Talk to teams about volunteer needs &lt;br /&gt;
**Help teams structure their needs in shifts&lt;br /&gt;
*Setting up Engelsystem&lt;br /&gt;
*Entering shifts in the Engelsystem&lt;br /&gt;
&lt;br /&gt;
===During the event===&lt;br /&gt;
*Recruit volunteers&lt;br /&gt;
*Optimize on-boarding experience&lt;br /&gt;
*Match volunteers to tasks and shifts:&lt;br /&gt;
**Provide teams that have things that need doing with people to do it&lt;br /&gt;
**Provide people with spare time with things to do&lt;br /&gt;
**Try to optimize fun and efficiency by directing people towards tasks that fit their skills&lt;br /&gt;
*Schedule volunteers and inform volunteers about what’s expected from them&lt;br /&gt;
*Take care of the volunteers&lt;br /&gt;
**Provide basic life necessities to volunteers that help out for more than just a few hours, e.g. food and drinks.&lt;br /&gt;
**Express gratitude towards volunteers, e.g. by awarding goodies (t-shirts) and good food&lt;br /&gt;
*Manage volunteers on site from early build-up to late tear-down&lt;br /&gt;
*Schedule volunteer assignments according to priorities indicated by build-up, tear-down, and PL&lt;br /&gt;
*Keep a pool of volunteers available for unplanned ad-hoc tasks.&lt;br /&gt;
*Manage the Engelsystem&lt;br /&gt;
&lt;br /&gt;
==Design work==&lt;br /&gt;
* A [[recruitment poster]] design to recruit more Orga/volunteers (ASAP)&lt;br /&gt;
* An angel safety vest design for the [[Safety_Vests]].&lt;br /&gt;
* An angel lanyard design for the [[Angel_Badges]].&lt;br /&gt;
* An angel t-shirt design for the [[Angel_Shirts]].&lt;br /&gt;
* A design to print on the [[Water_Bottles]].&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Vacancies&amp;diff=12596</id>
		<title>Vacancies</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Vacancies&amp;diff=12596"/>
		<updated>2025-07-08T17:29:00Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All teams are starting up. That means that they are still preparing for showing their vacancies on this page. &lt;br /&gt;
&lt;br /&gt;
In the mean time: is there anything you would like to do that&#039;s not listed here yet? Ask at [ircs://irc.oftc.net/why2025 #why2025 on OFTC]. New to IRC? Use the [https://webchat.oftc.net/?randomnick=1&amp;amp;channels=why2025&amp;amp;prompt=1 web client] or send a mail at volunteers@why2025.org&lt;br /&gt;
&lt;br /&gt;
There are two tables here. One with specific vacancies, and one with teams who need general members.&lt;br /&gt;
&lt;br /&gt;
This info is accurate as of 2024-10-06.&lt;br /&gt;
&lt;br /&gt;
== Open Vacancies ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width: 100%&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
! Team, Role&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Volunteers]], Team members&lt;br /&gt;
|&lt;br /&gt;
What would WHY2025 be without angels, all the volunteers that help make camp perfect? &lt;br /&gt;
&lt;br /&gt;
Help us help them so they can have fun helping at camp :)&lt;br /&gt;
&lt;br /&gt;
Looking for Angel Kitchen Coordinator.&lt;br /&gt;
&lt;br /&gt;
Interested? Need more info? Contact {{UserLink|Okarin}} or sent an email to [mailto:volunteers@why2025.org volunteers@why2025.org]&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Parking]], Parking coordinator support&lt;br /&gt;
| &lt;br /&gt;
Are you the Dutch-/English-speaking hero who can help out everyone with a car?&lt;br /&gt;
&lt;br /&gt;
Do you want to help making parking possible, and look at the local regulations? Or do you have strong oppinions on how cars should be placed? &lt;br /&gt;
&lt;br /&gt;
We are in dire need of supporting people for the parking coordinator. Workload can vary, but we certainly need support on the field during the late build-up and the event itself. Please contact {{UserLink|Konmei}} for more information and if you are interested.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [[Team:Merch]], administrative coordinator&lt;br /&gt;
|&lt;br /&gt;
Quality inspector, distribution planner and online shop stockkeeper&lt;br /&gt;
We are looking for a Merch coordinator, who keeps an eye on the shop, handles questions, production and delivery of the WHY2025 Merch. First to feel the merch, looking at samples.[https://tickets.why2025.org/media/pub/ifcat/why2025/item-22-6fce47a6-9b15-4fce-b3ee-b065e9067b23.jpeg image of shirt]&lt;br /&gt;
&lt;br /&gt;
Let&#039;s dress the hackerscene, contact {{UserLink|Netsmurf}}!&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Accessibility]], Team members &lt;br /&gt;
| &lt;br /&gt;
We&#039;re looking for people to join the Accessibility team to make this the most accessible event ever!&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Shuttle]], Team members &lt;br /&gt;
| &lt;br /&gt;
We&#039;re looking for people to help organise the Shuttles.&lt;br /&gt;
The shuttle is, for a large amount of visitors, their first encounter with the event. They should enthusiastic and full of good energy. Really rewarding job though! Not only when arriving, but also when you bring them back to the train.&lt;br /&gt;
For questions, contact {{UserLink|crablab}}.&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Badge]], Team members&lt;br /&gt;
| &lt;br /&gt;
We can definitely use more software developers that are willing to commit to working with us on this interesting project.&lt;br /&gt;
&lt;br /&gt;
If you have experience with &#039;&#039;&#039;embedded C&#039;&#039;&#039; programming we&#039;d love for you to join the &#039;&#039;&#039;Firmware&#039;&#039;&#039; team and if you have experience with &#039;&#039;&#039;Web / Application&#039;&#039;&#039; development the &#039;&#039;&#039;BadgeHub&#039;&#039;&#039; team would love to see you help out.&lt;br /&gt;
&lt;br /&gt;
Join our &#039;&#039;&#039;Signal&#039;&#039;&#039; group for &#039;&#039;&#039;Newcomers&#039;&#039;&#039; and write us a message if you feel like joining us or just want to explore if you see it fit. https://signal.group/#CjQKICKbwZzlVup_A_smn_rUWrQVTzomGlBZgkP3Txm_P23xEhDzXQr4gvUMxUxivNZKuOEj&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Foodcourt]], Team members subteam &amp;quot;Bar&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
We are looking for team members for the Horeca team, subteam Bar. Do you like to put a smile on people&#039;s faces? &lt;br /&gt;
&lt;br /&gt;
The Bar team will organize, build and run the 3 planned Bar areas. Organizing consists of planning, designing bar set-up, ordering supplies to be delivered. &lt;br /&gt;
A few days before the event we will receive the ordered stuff and start the build up. &lt;br /&gt;
During the event on site the Angels will run the bars. &lt;br /&gt;
With a dedicated Bar-team we coordinate, re-supply and take turns solving any problems for the 3 event bars. Do you want to be part of the team closest to the Mate? Then this is the team for you! &lt;br /&gt;
&lt;br /&gt;
For questions, contact {{UserLink|K4T0}}&lt;br /&gt;
|- &lt;br /&gt;
| [[Team:PartyArea]], Team members&lt;br /&gt;
|&lt;br /&gt;
The Party Area team will organize, build and run the WHY2025 main stage with Live Music content, DJ&#039;s Silent Disco until deep in the Night&lt;br /&gt;
We are looking for Team Members that can&#039;t sleep anyway and love to organize parties !!!&lt;br /&gt;
&lt;br /&gt;
For questions, contact {{UserLink|Netsmurf}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Cohesion]], Team member&lt;br /&gt;
|&lt;br /&gt;
Team Cohesion is looking for extra team members. Both for during the event to coordinate things and in the preparation phase. Take a look at the team page for the things we are working on before the event starts if you want to lend a hand in creating policy or set up the ultimate silent lounge. For during the event we need people who are good listeners and feel up to deescalate wherever necessary. &lt;br /&gt;
Get in touch with us so you can help everyone be excellent to each other. &lt;br /&gt;
&lt;br /&gt;
For questions, contact {{UserLink|Dany}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Parking]], Team Lead&lt;br /&gt;
|&lt;br /&gt;
The Parking team is a fun vitally important team responsible for making our visitors feel welcome when they arrive for the first time at WHY2025 and making sure traffic flows and parking are done in a safe and orderly way.&lt;br /&gt;
&lt;br /&gt;
For questions, contact {{UserLink|Netsmurf}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Parking]], Team members&lt;br /&gt;
|&lt;br /&gt;
The Parking team is a fun vitally important team responsible for making our visitors feel welcome when they arrive for the first time at WHY2025 and making sure traffic flows and parking are done in a safe and orderly way.&lt;br /&gt;
&lt;br /&gt;
For questions, contact {{UserLink|Netsmurf}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Family]], Project owner&lt;br /&gt;
| &lt;br /&gt;
Even if you do not have time to be very closely involved with FamilyZone you may want to do something for/with (your?) kids.  We are very open to people to run one or two projects at the event. Check out our [[Team:Family#Projects|current project list]] for inspiration.&lt;br /&gt;
|-&lt;br /&gt;
| [[Team:Content]], Speaker Desk Volunteers&lt;br /&gt;
| &lt;br /&gt;
Team:Content is in need of volunteers for Speaker Desk (more info soon).&lt;br /&gt;
&lt;br /&gt;
Contact content@why2025.org to get involved!&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Teams who still need members ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- This table is filled from the teams page. Teams that don&#039;t need new people are not shown.&lt;br /&gt;
add &#039;|team_needs_x_people=1&#039; to the box on top of your wiki page.&lt;br /&gt;
love,&lt;br /&gt;
Boekenwuurm&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{#ask: [[Category:Team]] [[Team needs x people::&amp;gt;1]]&lt;br /&gt;
 |?Team is essential to event=essential to event&lt;br /&gt;
 |?Team has enough people=enough people&lt;br /&gt;
 |?Team needs x people = team needs x people&lt;br /&gt;
 |?E-Mail=Contact&lt;br /&gt;
 |limit=100&lt;br /&gt;
 |offset=0&lt;br /&gt;
 |link=subject&lt;br /&gt;
 |sort=&lt;br /&gt;
 |outrotemplate=plteamhealthfooter&lt;br /&gt;
 |order=asc&lt;br /&gt;
 |headers=show&lt;br /&gt;
 |searchlabel=... further results&lt;br /&gt;
 |class=sortable wikitable smwtable&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== I want to do something small ==&lt;br /&gt;
Small tasks that need to be done, or large tasks that can be split in small tasks are collected at the [[Tiny_Tasks]] list&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
	<entry>
		<id>https://wiki.why2025.org/index.php?title=Village:%CC%B8%CC%A1%CC%9B%CC%AF%CC%B3%CD%8E%CD%94%CC%9F%CC%A0%CC%AA%CC%B2%CD%96%CC%A6%CC%92%CC%86%CC%80%CC%88%CC%89%CC%92%CD%8A%CC%9A%CC%95%CD%9D&amp;diff=12164</id>
		<title>Village:̸̡̛̯̳͎͔̟̠̪̲͖̦̒̆̀̈̉̒͊̚̕͝</title>
		<link rel="alternate" type="text/html" href="https://wiki.why2025.org/index.php?title=Village:%CC%B8%CC%A1%CC%9B%CC%AF%CC%B3%CD%8E%CD%94%CC%9F%CC%A0%CC%AA%CC%B2%CD%96%CC%A6%CC%92%CC%86%CC%80%CC%88%CC%89%CC%92%CD%8A%CC%9A%CC%95%CD%9D&amp;diff=12164"/>
		<updated>2025-07-06T18:26:09Z</updated>

		<summary type="html">&lt;p&gt;Okarin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Village&lt;br /&gt;
|Has name=ZERO WIDTH NO-BREAK SPACE&lt;br /&gt;
|Has website=https://wiki.why2025.org/Village:̸̡̛̯̳͎͔̟̠̪̲͖̦̒̆̀̈̉̒͊̚̕͝&lt;br /&gt;
|Has contact=Shiz (5730)&lt;br /&gt;
|Has description=No brakes on this unicode&lt;br /&gt;
|Part of=Arcade&lt;br /&gt;
|Related to village=Village:Tilde.industries and friends, Village:Øl Telecom, Village:Chrząszczyżewoszyce, Village:DIWhy Bar&lt;br /&gt;
|Has village tag=arcade, reverse engineering, music, breaking, fixing, text rendering&lt;br /&gt;
|Village is open to newcomers=Yes&lt;br /&gt;
|Provides session location=No&lt;br /&gt;
|Location=52.69289, 4.74508&lt;br /&gt;
|Has orga contact=why@shiz.me&lt;br /&gt;
|On site orga contact=Shiz&lt;br /&gt;
|Village frab=no&lt;br /&gt;
|Village content space=no&lt;br /&gt;
|Village citizen count=12&lt;br /&gt;
|Village Needs power=Other (describe below)&lt;br /&gt;
|Village size needed=0&lt;br /&gt;
|Village hacktents num=0&lt;br /&gt;
|Village brings big stuff=No&lt;br /&gt;
|Village Special Vehicle=no&lt;br /&gt;
|Village planning notes=Located inside the Arcade 1 tent, no other specific resources needed.&lt;br /&gt;
}}&lt;br /&gt;
And a dutch hacker named Iron (the real one)&lt;br /&gt;
==TL;DR==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A collective of hardware/software/food hackers with a weird habit of finding cursed technology to break. The WHY2025 reincarnation of [https://wiki.mch2022.org/Village:Love_Live_Laugh!_Arcade_Hacking_Festival_~after_camp_ACTIVITY~_Wai-Wai!_Tent_Meeting!! Love Live Laugh! Arcade Hacking Festival ~after camp ACTIVITY~ Wai-Wai! Tent Meeting!!].&lt;br /&gt;
&lt;br /&gt;
Come discover the weird world of modern industrial game systems!&lt;br /&gt;
&lt;br /&gt;
==Equipment==&lt;br /&gt;
&lt;br /&gt;
* Cabinets for [[Project:Arcade]]&lt;br /&gt;
* Weird arcade baseboards and systems!&lt;br /&gt;
* Test &amp;amp; measurement equipment&lt;br /&gt;
** Agilent 54854A oscilloscope (20 GSa/s, 4 GHz)&lt;br /&gt;
** Tektronix 222 oscilloscope (small and cute, 10 MHz, portable, floating inputs)&lt;br /&gt;
** Tektronix TLA5202 logic analyser (68 channels, 2 GHz)&lt;br /&gt;
** Kikusui PWR800M DC power supply (0-320V, 0-12.5A, 800W)&lt;br /&gt;
* Train parts&lt;br /&gt;
** NS ICMm destination dot-matrix display&lt;br /&gt;
** NC ICMm 1st class seats?&lt;br /&gt;
* 3D printers&lt;br /&gt;
** Voron V2.4 350mm&lt;/div&gt;</summary>
		<author><name>Okarin</name></author>
	</entry>
</feed>