<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://performiq.com/kb/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PeterHarding</id>
	<title>PeformIQ Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://performiq.com/kb/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PeterHarding"/>
	<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php/Special:Contributions/PeterHarding"/>
	<updated>2026-09-06T04:38:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Category:Bonsai&amp;diff=5549</id>
		<title>Category:Bonsai</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Category:Bonsai&amp;diff=5549"/>
		<updated>2026-08-26T23:20:07Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;Bonsai ML links, notes and references...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bonsai ML links, notes and references...&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Using_Bonsai_QWEN_Models&amp;diff=5548</id>
		<title>Using Bonsai QWEN Models</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Using_Bonsai_QWEN_Models&amp;diff=5548"/>
		<updated>2026-08-26T23:19:50Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
See - https://www.youtube.com/watch?v=V6LmF7TuBmY (Bonsai 27B Runs Qwen 3.6 27B at 10x less memory)&lt;br /&gt;
&lt;br /&gt;
Not a corrupt download — a format mismatch. Q2_0 in that filename isn&amp;#039;t stock llama.cpp&amp;#039;s quant; it&amp;#039;s Q2_0_g128, PrismML&amp;#039;s custom ternary packing (2-bit slots, one FP16 scale per 128 weights) that only their fork&amp;#039;s kernels understand. Your stock build computes a different byte size for the ternary tensors, so its running offset drifts from what&amp;#039;s written in the header, and gguf_init_from_reader bails at the first tensor where the two disagree — here output_norm.weight.&lt;br /&gt;
&lt;br /&gt;
Corroboration: their g64 file is 7.59 GB vs 7.17 GB for the g128 one. That 0.42 GB delta is exactly one extra FP16 scale per 64 weights across ~27B weights — the scale density is the thing your build is guessing wrong.&lt;br /&gt;
&lt;br /&gt;
Two fixes, easiest first:&lt;br /&gt;
&lt;br /&gt;
1. Use the g64 file with your existing build. The model card says Ternary-Bonsai-27B-Q2_g64.gguf matches the 64-value-group Q2_0 packing already in llama.cpp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hf download prism-ml/Ternary-Bonsai-27B-gguf Ternary-Bonsai-27B-Q2_g64.gguf --local-dir ./models&lt;br /&gt;
./llama-server -m ./models/Ternary-Bonsai-27B-Q2_g64.gguf --ctx-size 16384&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Build their fork if you want the g128 file and the tuned Metal kernels:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/PrismML-Eng/llama.cpp &amp;amp;&amp;amp; cd llama.cpp&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -j   # Metal is on by default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two other things:&lt;br /&gt;
&lt;br /&gt;
--ctx-size 65536 will hurt on an M1. Weights are ~7.2 GB and the README&amp;#039;s 100K-context figure is 14.7 GB peak without KV compression. On a 16 GB machine you&amp;#039;ll swap; start at 8–16K and climb. Their throughput numbers are M4/M5 Pro — expect meaningfully less on M1.&lt;br /&gt;
Ignore the &amp;quot;Use this model&amp;quot; snippets on the HF page (llama serve -hf ...:F16) — those are auto-generated by Hugging Face, not the author&amp;#039;s instructions, and F16 is the 53.8 GB file.&lt;br /&gt;
&lt;br /&gt;
If the g64 file throws the same offset error, run python gguf-py/gguf/scripts/gguf_dump.py --no-tensors &amp;lt;file&amp;gt; and check general.file_type — that&amp;#039;ll confirm whether it&amp;#039;s a type-ID collision rather than the group size, and it&amp;#039;s worth a post in their discussions.&lt;br /&gt;
&lt;br /&gt;
Sources: Model card · File listing · PrismML llama.cpp fork&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:AI]]&lt;br /&gt;
[[Category:Bonsai]]&lt;br /&gt;
[[Category:Prism-ml]]&lt;br /&gt;
[[Category:Llama.cpp]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Category:Llama.cpp&amp;diff=5547</id>
		<title>Category:Llama.cpp</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Category:Llama.cpp&amp;diff=5547"/>
		<updated>2026-08-26T23:19:20Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;llama.cpp links, notes and references...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;llama.cpp links, notes and references...&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=AI_Notes&amp;diff=5546</id>
		<title>AI Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=AI_Notes&amp;diff=5546"/>
		<updated>2026-08-26T23:19:05Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Replaced content with &amp;quot;= A Collection of AI Related Notes =  * Using Bonsai QWEN Models       Category:AI Category:QWEN Category:Llama.cpp&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= A Collection of AI Related Notes =&lt;br /&gt;
&lt;br /&gt;
* [[Using Bonsai QWEN Models]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:AI]]&lt;br /&gt;
[[Category:QWEN]]&lt;br /&gt;
[[Category:Llama.cpp]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Using_Bonsai_QWEN_Models&amp;diff=5545</id>
		<title>Using Bonsai QWEN Models</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Using_Bonsai_QWEN_Models&amp;diff=5545"/>
		<updated>2026-08-26T23:18:19Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot; See - https://www.youtube.com/watch?v=V6LmF7TuBmY (Bonsai 27B Runs Qwen 3.6 27B at 10x less memory)  Not a corrupt download — a format mismatch. Q2_0 in that filename isn&amp;#039;t stock llama.cpp&amp;#039;s quant; it&amp;#039;s Q2_0_g128, PrismML&amp;#039;s custom ternary packing (2-bit slots, one FP16 scale per 128 weights) that only their fork&amp;#039;s kernels understand. Your stock build computes a different byte size for the ternary tensors, so its running offset drifts from what&amp;#039;s written in the header,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
See - https://www.youtube.com/watch?v=V6LmF7TuBmY (Bonsai 27B Runs Qwen 3.6 27B at 10x less memory)&lt;br /&gt;
&lt;br /&gt;
Not a corrupt download — a format mismatch. Q2_0 in that filename isn&amp;#039;t stock llama.cpp&amp;#039;s quant; it&amp;#039;s Q2_0_g128, PrismML&amp;#039;s custom ternary packing (2-bit slots, one FP16 scale per 128 weights) that only their fork&amp;#039;s kernels understand. Your stock build computes a different byte size for the ternary tensors, so its running offset drifts from what&amp;#039;s written in the header, and gguf_init_from_reader bails at the first tensor where the two disagree — here output_norm.weight.&lt;br /&gt;
&lt;br /&gt;
Corroboration: their g64 file is 7.59 GB vs 7.17 GB for the g128 one. That 0.42 GB delta is exactly one extra FP16 scale per 64 weights across ~27B weights — the scale density is the thing your build is guessing wrong.&lt;br /&gt;
&lt;br /&gt;
Two fixes, easiest first:&lt;br /&gt;
&lt;br /&gt;
1. Use the g64 file with your existing build. The model card says Ternary-Bonsai-27B-Q2_g64.gguf matches the 64-value-group Q2_0 packing already in llama.cpp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hf download prism-ml/Ternary-Bonsai-27B-gguf Ternary-Bonsai-27B-Q2_g64.gguf --local-dir ./models&lt;br /&gt;
./llama-server -m ./models/Ternary-Bonsai-27B-Q2_g64.gguf --ctx-size 16384&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Build their fork if you want the g128 file and the tuned Metal kernels:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/PrismML-Eng/llama.cpp &amp;amp;&amp;amp; cd llama.cpp&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -j   # Metal is on by default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two other things:&lt;br /&gt;
&lt;br /&gt;
--ctx-size 65536 will hurt on an M1. Weights are ~7.2 GB and the README&amp;#039;s 100K-context figure is 14.7 GB peak without KV compression. On a 16 GB machine you&amp;#039;ll swap; start at 8–16K and climb. Their throughput numbers are M4/M5 Pro — expect meaningfully less on M1.&lt;br /&gt;
Ignore the &amp;quot;Use this model&amp;quot; snippets on the HF page (llama serve -hf ...:F16) — those are auto-generated by Hugging Face, not the author&amp;#039;s instructions, and F16 is the 53.8 GB file.&lt;br /&gt;
&lt;br /&gt;
If the g64 file throws the same offset error, run python gguf-py/gguf/scripts/gguf_dump.py --no-tensors &amp;lt;file&amp;gt; and check general.file_type — that&amp;#039;ll confirm whether it&amp;#039;s a type-ID collision rather than the group size, and it&amp;#039;s worth a post in their discussions.&lt;br /&gt;
&lt;br /&gt;
Sources: Model card · File listing · PrismML llama.cpp fork&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:AI]]&lt;br /&gt;
[[Category:Bonsai]]&lt;br /&gt;
[[Category:Prism-ml]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=AI_Notes&amp;diff=5544</id>
		<title>AI Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=AI_Notes&amp;diff=5544"/>
		<updated>2026-08-26T23:17:22Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= A Collection of AI Related Notes =&lt;br /&gt;
&lt;br /&gt;
* [[Using Bonsai QWEN Models]]&lt;br /&gt;
&lt;br /&gt;
See - https://www.youtube.com/watch?v=V6LmF7TuBmY (Bonsai 27B Runs Qwen 3.6 27B at 10x less memory)&lt;br /&gt;
&lt;br /&gt;
Not a corrupt download — a format mismatch. Q2_0 in that filename isn&amp;#039;t stock llama.cpp&amp;#039;s quant; it&amp;#039;s Q2_0_g128, PrismML&amp;#039;s custom ternary packing (2-bit slots, one FP16 scale per 128 weights) that only their fork&amp;#039;s kernels understand. Your stock build computes a different byte size for the ternary tensors, so its running offset drifts from what&amp;#039;s written in the header, and gguf_init_from_reader bails at the first tensor where the two disagree — here output_norm.weight.&lt;br /&gt;
&lt;br /&gt;
Corroboration: their g64 file is 7.59 GB vs 7.17 GB for the g128 one. That 0.42 GB delta is exactly one extra FP16 scale per 64 weights across ~27B weights — the scale density is the thing your build is guessing wrong.&lt;br /&gt;
&lt;br /&gt;
Two fixes, easiest first:&lt;br /&gt;
&lt;br /&gt;
1. Use the g64 file with your existing build. The model card says Ternary-Bonsai-27B-Q2_g64.gguf matches the 64-value-group Q2_0 packing already in llama.cpp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hf download prism-ml/Ternary-Bonsai-27B-gguf Ternary-Bonsai-27B-Q2_g64.gguf --local-dir ./models&lt;br /&gt;
./llama-server -m ./models/Ternary-Bonsai-27B-Q2_g64.gguf --ctx-size 16384&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Build their fork if you want the g128 file and the tuned Metal kernels:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/PrismML-Eng/llama.cpp &amp;amp;&amp;amp; cd llama.cpp&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -j   # Metal is on by default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two other things:&lt;br /&gt;
&lt;br /&gt;
--ctx-size 65536 will hurt on an M1. Weights are ~7.2 GB and the README&amp;#039;s 100K-context figure is 14.7 GB peak without KV compression. On a 16 GB machine you&amp;#039;ll swap; start at 8–16K and climb. Their throughput numbers are M4/M5 Pro — expect meaningfully less on M1.&lt;br /&gt;
Ignore the &amp;quot;Use this model&amp;quot; snippets on the HF page (llama serve -hf ...:F16) — those are auto-generated by Hugging Face, not the author&amp;#039;s instructions, and F16 is the 53.8 GB file.&lt;br /&gt;
&lt;br /&gt;
If the g64 file throws the same offset error, run python gguf-py/gguf/scripts/gguf_dump.py --no-tensors &amp;lt;file&amp;gt; and check general.file_type — that&amp;#039;ll confirm whether it&amp;#039;s a type-ID collision rather than the group size, and it&amp;#039;s worth a post in their discussions.&lt;br /&gt;
&lt;br /&gt;
Sources: Model card · File listing · PrismML llama.cpp fork&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:AI]]&lt;br /&gt;
[[Category:QWEN]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=AI_Notes&amp;diff=5543</id>
		<title>AI Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=AI_Notes&amp;diff=5543"/>
		<updated>2026-08-26T23:16:44Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;= A Collection of AI Related Notes =  See - https://www.youtube.com/watch?v=V6LmF7TuBmY (Bonsai 27B Runs Qwen 3.6 27B at 10x less memory)  Not a corrupt download — a format mismatch. Q2_0 in that filename isn&amp;#039;t stock llama.cpp&amp;#039;s quant; it&amp;#039;s Q2_0_g128, PrismML&amp;#039;s custom ternary packing (2-bit slots, one FP16 scale per 128 weights) that only their fork&amp;#039;s kernels understand. Your stock build computes a different byte size for the ternary tensors, so its running offset drif...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= A Collection of AI Related Notes =&lt;br /&gt;
&lt;br /&gt;
See - https://www.youtube.com/watch?v=V6LmF7TuBmY (Bonsai 27B Runs Qwen 3.6 27B at 10x less memory)&lt;br /&gt;
&lt;br /&gt;
Not a corrupt download — a format mismatch. Q2_0 in that filename isn&amp;#039;t stock llama.cpp&amp;#039;s quant; it&amp;#039;s Q2_0_g128, PrismML&amp;#039;s custom ternary packing (2-bit slots, one FP16 scale per 128 weights) that only their fork&amp;#039;s kernels understand. Your stock build computes a different byte size for the ternary tensors, so its running offset drifts from what&amp;#039;s written in the header, and gguf_init_from_reader bails at the first tensor where the two disagree — here output_norm.weight.&lt;br /&gt;
&lt;br /&gt;
Corroboration: their g64 file is 7.59 GB vs 7.17 GB for the g128 one. That 0.42 GB delta is exactly one extra FP16 scale per 64 weights across ~27B weights — the scale density is the thing your build is guessing wrong.&lt;br /&gt;
&lt;br /&gt;
Two fixes, easiest first:&lt;br /&gt;
&lt;br /&gt;
1. Use the g64 file with your existing build. The model card says Ternary-Bonsai-27B-Q2_g64.gguf matches the 64-value-group Q2_0 packing already in llama.cpp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hf download prism-ml/Ternary-Bonsai-27B-gguf Ternary-Bonsai-27B-Q2_g64.gguf --local-dir ./models&lt;br /&gt;
./llama-server -m ./models/Ternary-Bonsai-27B-Q2_g64.gguf --ctx-size 16384&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Build their fork if you want the g128 file and the tuned Metal kernels:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/PrismML-Eng/llama.cpp &amp;amp;&amp;amp; cd llama.cpp&lt;br /&gt;
cmake -B build &amp;amp;&amp;amp; cmake --build build -j   # Metal is on by default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two other things:&lt;br /&gt;
&lt;br /&gt;
--ctx-size 65536 will hurt on an M1. Weights are ~7.2 GB and the README&amp;#039;s 100K-context figure is 14.7 GB peak without KV compression. On a 16 GB machine you&amp;#039;ll swap; start at 8–16K and climb. Their throughput numbers are M4/M5 Pro — expect meaningfully less on M1.&lt;br /&gt;
Ignore the &amp;quot;Use this model&amp;quot; snippets on the HF page (llama serve -hf ...:F16) — those are auto-generated by Hugging Face, not the author&amp;#039;s instructions, and F16 is the 53.8 GB file.&lt;br /&gt;
&lt;br /&gt;
If the g64 file throws the same offset error, run python gguf-py/gguf/scripts/gguf_dump.py --no-tensors &amp;lt;file&amp;gt; and check general.file_type — that&amp;#039;ll confirm whether it&amp;#039;s a type-ID collision rather than the group size, and it&amp;#039;s worth a post in their discussions.&lt;br /&gt;
&lt;br /&gt;
Sources: Model card · File listing · PrismML llama.cpp fork&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:AI]]&lt;br /&gt;
[[Category:QWEN]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=RAG&amp;diff=5542</id>
		<title>RAG</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=RAG&amp;diff=5542"/>
		<updated>2026-08-09T23:43:47Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;= RAG =   Category:AI&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RAG =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:AI]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Category:Graph_Databases&amp;diff=5541</id>
		<title>Category:Graph Databases</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Category:Graph_Databases&amp;diff=5541"/>
		<updated>2026-08-09T23:43:24Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;Graph database links, notes and references...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Graph database links, notes and references...&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Graph_Databases&amp;diff=5540</id>
		<title>Graph Databases</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Graph_Databases&amp;diff=5540"/>
		<updated>2026-08-09T23:43:04Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;= Graph Databases =  ...  Category:Graph Databases Category:AI&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Graph Databases =&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
[[Category:Graph Databases]]&lt;br /&gt;
[[Category:AI]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Anthropic_Gotchas&amp;diff=5539</id>
		<title>Anthropic Gotchas</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Anthropic_Gotchas&amp;diff=5539"/>
		<updated>2026-07-28T10:30:46Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Why am I getting this error in claude code - API Error: 400 You have reached your specified API usage limits. You will regain access on 2026-08-01 at 00:00 UTC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Identified API spend limit issue and recommended unsetting key =&lt;br /&gt;
&lt;br /&gt;
That error isn&amp;#039;t a Claude Code bug or a subscription rate limit — it&amp;#039;s the Console API spend limit on your organization/workspace. Spend limits set a maximum monthly cost an organization can incur for API usage, and each usage tier has a limit on how much you can spend per calendar month. The 2026-08-01 00:00 UTC reset date is just the start of the next calendar month (10am Aug 1 your time). &lt;br /&gt;
anthropic&lt;br /&gt;
&lt;br /&gt;
The important implication: Claude Code is billing through an API key, not your Claude subscription. That&amp;#039;s almost certainly the same auth mix-up you hit before. If you have an active Claude subscription but also have ANTHROPIC_API_KEY set in your environment, the API key takes precedence once approved.&lt;br /&gt;
&lt;br /&gt;
== Claude Code Docs ==&lt;br /&gt;
&lt;br /&gt;
To check which route is active, run /status inside Claude Code — the Login method row shows your subscription account, and an API key row appears when an API key is in use. &lt;br /&gt;
Claude Code Docs&lt;br /&gt;
&lt;br /&gt;
If you meant to use your subscription:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;$ANTHROPIC_API_KEY&amp;quot;        # if this prints anything, that&amp;#039;s your culprit&lt;br /&gt;
unset ANTHROPIC_API_KEY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then grep your shell startup files, since it&amp;#039;ll come straight back otherwise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -rn &amp;quot;ANTHROPIC_API_KEY&amp;quot; ~/.zshrc ~/.zprofile ~/.bash_profile ~/.bashrc ~/.config 2&amp;gt;/dev/null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also check project-level .env files and any devcontainer config. Then /logout and /login, picking the subscription option.&lt;br /&gt;
&lt;br /&gt;
One gotcha specific to your VS Code workflow: VS Code often inherits a different environment than your interactive shell (especially if launched from Dock/Spotlight rather than code . from a terminal), so a key can be set in one and not the other — verify with /status from inside the VS Code integrated terminal specifically.&lt;br /&gt;
&lt;br /&gt;
If you did intend to use the API key, then go to the Anthropic Console → Limits (or the workspace&amp;#039;s spend limit setting) and raise the monthly cap, and check Usage to see what burned through it. Worth also confirming you haven&amp;#039;t been paying twice all along.&lt;br /&gt;
&lt;br /&gt;
[[Category:Anthropic]]&lt;br /&gt;
[[Category:Claude]]&lt;br /&gt;
[[Category:AI]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=AI&amp;diff=5538</id>
		<title>AI</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=AI&amp;diff=5538"/>
		<updated>2026-07-28T10:29:48Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;  Category:AI Category:Machine Learning&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:AI]]&lt;br /&gt;
[[Category:Machine Learning]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Main_Page&amp;diff=5537</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Main_Page&amp;diff=5537"/>
		<updated>2026-07-28T10:29:17Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: /* Some Areas of Interest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;PerformIQ MediaWiki&amp;#039;&amp;#039;&amp;#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
This repository has been created for clients and other interested parties to explore information and software contributions developed by us which we though might be of interest to the community at large.&lt;br /&gt;
&lt;br /&gt;
= Some Areas of Interest =&lt;br /&gt;
&lt;br /&gt;
The following list some of the areas where we have been active in the last 20 years and maintain an interest:&lt;br /&gt;
&lt;br /&gt;
* [[AI]]&lt;br /&gt;
* [[Machine Learning]]&lt;br /&gt;
* [[RAG]]&lt;br /&gt;
* [[Graph Databases]]&lt;br /&gt;
* [[Docker]]&lt;br /&gt;
* [[Kubernetes]]&lt;br /&gt;
* [[FastApi]]&lt;br /&gt;
* [[Gatling]]&lt;br /&gt;
* [[Kafka]]&lt;br /&gt;
* [[MQ]]&lt;br /&gt;
* [[React]]&lt;br /&gt;
* [[Angular]]&lt;br /&gt;
* [[MongoDB]]&lt;br /&gt;
* [[Scala]]&lt;br /&gt;
* [[Python]]&lt;br /&gt;
* [[Ruby]]&lt;br /&gt;
* [[Web Based Applications]]&lt;br /&gt;
* [[Web Services]], [[SOAP]]&lt;br /&gt;
* [[MS Visual Studio]]&lt;br /&gt;
* [[Performance Analysis]] and [[Capacity Planning]]&lt;br /&gt;
* [[Load Testing]], [[SVT]]&lt;br /&gt;
* [[LoadRunner]]&lt;br /&gt;
* [[PERL]]&lt;br /&gt;
* [[Java]]&lt;br /&gt;
* [[Enterprise Software]] and [[Middleware]], [[TIBCO]],  [[MQ Series]]&lt;br /&gt;
* [[Eclipse IDE]]&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
== Papers ==&lt;br /&gt;
&lt;br /&gt;
See [[Papers]] for some historically significant papers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MediaWiki ==&lt;br /&gt;
&lt;br /&gt;
Consult the [http://meta.wikimedia.org/wiki/Help:Contents User&amp;#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
My [[MediaWiki]] notes...&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Help:Configuration_settings Configuration settings list]&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Help:FAQ MediaWiki FAQ]&lt;br /&gt;
* [http://mail.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Category:Claude&amp;diff=5536</id>
		<title>Category:Claude</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Category:Claude&amp;diff=5536"/>
		<updated>2026-07-28T10:28:07Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;Claude links, notes and references...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Claude links, notes and references...&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Anthropic_Giotchas&amp;diff=5535</id>
		<title>Anthropic Giotchas</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Anthropic_Giotchas&amp;diff=5535"/>
		<updated>2026-07-28T10:27:43Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: PeterHarding moved page Anthropic Giotchas to Anthropic Gotchas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Anthropic Gotchas]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Anthropic_Gotchas&amp;diff=5534</id>
		<title>Anthropic Gotchas</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Anthropic_Gotchas&amp;diff=5534"/>
		<updated>2026-07-28T10:27:43Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: PeterHarding moved page Anthropic Giotchas to Anthropic Gotchas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Why am I getting this error in claude code - API Error: 400 You have reached your specified API usage limits. You will regain access on 2026-08-01 at 00:00 UTC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Identified API spend limit issue and recommended unsetting key =&lt;br /&gt;
&lt;br /&gt;
That error isn&amp;#039;t a Claude Code bug or a subscription rate limit — it&amp;#039;s the Console API spend limit on your organization/workspace. Spend limits set a maximum monthly cost an organization can incur for API usage, and each usage tier has a limit on how much you can spend per calendar month. The 2026-08-01 00:00 UTC reset date is just the start of the next calendar month (10am Aug 1 your time). &lt;br /&gt;
anthropic&lt;br /&gt;
&lt;br /&gt;
The important implication: Claude Code is billing through an API key, not your Claude subscription. That&amp;#039;s almost certainly the same auth mix-up you hit before. If you have an active Claude subscription but also have ANTHROPIC_API_KEY set in your environment, the API key takes precedence once approved.&lt;br /&gt;
&lt;br /&gt;
== Claude Code Docs ==&lt;br /&gt;
&lt;br /&gt;
To check which route is active, run /status inside Claude Code — the Login method row shows your subscription account, and an API key row appears when an API key is in use. &lt;br /&gt;
Claude Code Docs&lt;br /&gt;
&lt;br /&gt;
If you meant to use your subscription:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;$ANTHROPIC_API_KEY&amp;quot;        # if this prints anything, that&amp;#039;s your culprit&lt;br /&gt;
unset ANTHROPIC_API_KEY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then grep your shell startup files, since it&amp;#039;ll come straight back otherwise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -rn &amp;quot;ANTHROPIC_API_KEY&amp;quot; ~/.zshrc ~/.zprofile ~/.bash_profile ~/.bashrc ~/.config 2&amp;gt;/dev/null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also check project-level .env files and any devcontainer config. Then /logout and /login, picking the subscription option.&lt;br /&gt;
&lt;br /&gt;
One gotcha specific to your VS Code workflow: VS Code often inherits a different environment than your interactive shell (especially if launched from Dock/Spotlight rather than code . from a terminal), so a key can be set in one and not the other — verify with /status from inside the VS Code integrated terminal specifically.&lt;br /&gt;
&lt;br /&gt;
If you did intend to use the API key, then go to the Anthropic Console → Limits (or the workspace&amp;#039;s spend limit setting) and raise the monthly cap, and check Usage to see what burned through it. Worth also confirming you haven&amp;#039;t been paying twice all along.&lt;br /&gt;
&lt;br /&gt;
[[Category:Anthropic]]&lt;br /&gt;
[[Category:Claude]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Category:Anthropic&amp;diff=5533</id>
		<title>Category:Anthropic</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Category:Anthropic&amp;diff=5533"/>
		<updated>2026-07-28T10:27:31Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;Anthropic.ai links, notes and references...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Anthropic.ai links, notes and references...&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Anthropic_Gotchas&amp;diff=5532</id>
		<title>Anthropic Gotchas</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Anthropic_Gotchas&amp;diff=5532"/>
		<updated>2026-07-28T10:27:07Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Why am I getting this error in claude code - API Error: 400 You have reached your specified API usage limits. You will regain access on 2026-08-01 at 00:00 UTC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Identified API spend limit issue and recommended unsetting key =&lt;br /&gt;
&lt;br /&gt;
That error isn&amp;#039;t a Claude Code bug or a subscription rate limit — it&amp;#039;s the Console API spend limit on your organization/workspace. Spend limits set a maximum monthly cost an organization can incur for API usage, and each usage tier has a limit on how much you can spend per calendar month. The 2026-08-01 00:00 UTC reset date is just the start of the next calendar month (10am Aug 1 your time). &lt;br /&gt;
anthropic&lt;br /&gt;
&lt;br /&gt;
The important implication: Claude Code is billing through an API key, not your Claude subscription. That&amp;#039;s almost certainly the same auth mix-up you hit before. If you have an active Claude subscription but also have ANTHROPIC_API_KEY set in your environment, the API key takes precedence once approved.&lt;br /&gt;
&lt;br /&gt;
== Claude Code Docs ==&lt;br /&gt;
&lt;br /&gt;
To check which route is active, run /status inside Claude Code — the Login method row shows your subscription account, and an API key row appears when an API key is in use. &lt;br /&gt;
Claude Code Docs&lt;br /&gt;
&lt;br /&gt;
If you meant to use your subscription:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;$ANTHROPIC_API_KEY&amp;quot;        # if this prints anything, that&amp;#039;s your culprit&lt;br /&gt;
unset ANTHROPIC_API_KEY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then grep your shell startup files, since it&amp;#039;ll come straight back otherwise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -rn &amp;quot;ANTHROPIC_API_KEY&amp;quot; ~/.zshrc ~/.zprofile ~/.bash_profile ~/.bashrc ~/.config 2&amp;gt;/dev/null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also check project-level .env files and any devcontainer config. Then /logout and /login, picking the subscription option.&lt;br /&gt;
&lt;br /&gt;
One gotcha specific to your VS Code workflow: VS Code often inherits a different environment than your interactive shell (especially if launched from Dock/Spotlight rather than code . from a terminal), so a key can be set in one and not the other — verify with /status from inside the VS Code integrated terminal specifically.&lt;br /&gt;
&lt;br /&gt;
If you did intend to use the API key, then go to the Anthropic Console → Limits (or the workspace&amp;#039;s spend limit setting) and raise the monthly cap, and check Usage to see what burned through it. Worth also confirming you haven&amp;#039;t been paying twice all along.&lt;br /&gt;
&lt;br /&gt;
[[Category:Anthropic]]&lt;br /&gt;
[[Category:Claude]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Anthropic_Gotchas&amp;diff=5531</id>
		<title>Anthropic Gotchas</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Anthropic_Gotchas&amp;diff=5531"/>
		<updated>2026-07-28T10:26:20Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;Why am I getting this error in claude code - API Error: 400 You have reached your specified API usage limits. You will regain access on 2026-08-01 at 00:00 UTC.   # Identified API spend limit issue and recommended unsetting key  That error isn&amp;#039;t a Claude Code bug or a subscription rate limit — it&amp;#039;s the Console API spend limit on your organization/workspace. Spend limits set a maximum monthly cost an organization can incur for API usage, and each usage tier has a limit...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Why am I getting this error in claude code - API Error: 400 You have reached your specified API usage limits. You will regain access on 2026-08-01 at 00:00 UTC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Identified API spend limit issue and recommended unsetting key&lt;br /&gt;
&lt;br /&gt;
That error isn&amp;#039;t a Claude Code bug or a subscription rate limit — it&amp;#039;s the Console API spend limit on your organization/workspace. Spend limits set a maximum monthly cost an organization can incur for API usage, and each usage tier has a limit on how much you can spend per calendar month. The 2026-08-01 00:00 UTC reset date is just the start of the next calendar month (10am Aug 1 your time). &lt;br /&gt;
anthropic&lt;br /&gt;
&lt;br /&gt;
The important implication: Claude Code is billing through an API key, not your Claude subscription. That&amp;#039;s almost certainly the same auth mix-up you hit before. If you have an active Claude subscription but also have ANTHROPIC_API_KEY set in your environment, the API key takes precedence once approved.&lt;br /&gt;
&lt;br /&gt;
## Claude Code Docs&lt;br /&gt;
&lt;br /&gt;
To check which route is active, run /status inside Claude Code — the Login method row shows your subscription account, and an API key row appears when an API key is in use. &lt;br /&gt;
Claude Code Docs&lt;br /&gt;
&lt;br /&gt;
If you meant to use your subscription:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;quot;$ANTHROPIC_API_KEY&amp;quot;        # if this prints anything, that&amp;#039;s your culprit&lt;br /&gt;
unset ANTHROPIC_API_KEY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then grep your shell startup files, since it&amp;#039;ll come straight back otherwise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -rn &amp;quot;ANTHROPIC_API_KEY&amp;quot; ~/.zshrc ~/.zprofile ~/.bash_profile ~/.bashrc ~/.config 2&amp;gt;/dev/null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also check project-level .env files and any devcontainer config. Then /logout and /login, picking the subscription option.&lt;br /&gt;
&lt;br /&gt;
One gotcha specific to your VS Code workflow: VS Code often inherits a different environment than your interactive shell (especially if launched from Dock/Spotlight rather than code . from a terminal), so a key can be set in one and not the other — verify with /status from inside the VS Code integrated terminal specifically.&lt;br /&gt;
&lt;br /&gt;
If you did intend to use the API key, then go to the Anthropic Console → Limits (or the workspace&amp;#039;s spend limit setting) and raise the monthly cap, and check Usage to see what burned through it. Worth also confirming you haven&amp;#039;t been paying twice all along.&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Category:Firewalls&amp;diff=5530</id>
		<title>Category:Firewalls</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Category:Firewalls&amp;diff=5530"/>
		<updated>2026-03-17T22:21:10Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;Firewall links, route and references...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firewall links, route and references...&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=3D_Imaging_Notes&amp;diff=5529</id>
		<title>3D Imaging Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=3D_Imaging_Notes&amp;diff=5529"/>
		<updated>2026-03-02T10:40:59Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Links =&lt;br /&gt;
&lt;br /&gt;
* https://www.codeproject.com/Articles/1182854/D-Face-Viewer-and-Matcher&lt;br /&gt;
&lt;br /&gt;
[[Category:Imaging]]&lt;br /&gt;
[[Category:3D]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Papers&amp;diff=5528</id>
		<title>Papers</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Papers&amp;diff=5528"/>
		<updated>2026-03-02T10:37:12Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back to [[Main Page]]&lt;br /&gt;
&lt;br /&gt;
= Significant Papers =&lt;br /&gt;
&lt;br /&gt;
[[Category:Papers]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Papers&amp;diff=5527</id>
		<title>Papers</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Papers&amp;diff=5527"/>
		<updated>2026-03-02T10:36:51Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Back to [[Index]]&lt;br /&gt;
&lt;br /&gt;
= Significant Papers =&lt;br /&gt;
&lt;br /&gt;
[[Category:Papers]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Middleware&amp;diff=5526</id>
		<title>Middleware</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Middleware&amp;diff=5526"/>
		<updated>2026-03-02T10:31:51Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Links =&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Middleware Wikipedia entry on Middleware]&lt;br /&gt;
&lt;br /&gt;
[[Category:Middleware]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Java&amp;diff=5525</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Java&amp;diff=5525"/>
		<updated>2026-03-02T10:19:08Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Full Name ==&lt;br /&gt;
&lt;br /&gt;
Java&lt;br /&gt;
&lt;br /&gt;
== Information ==&lt;br /&gt;
&lt;br /&gt;
An [[object-oriented]] programming language for portable interpretive codes that supports interaction among remote objects. [[Javascript]] ([[JScript]] or [[JavaScript]]) . When [[Javascript]] is included in an [[HTML]] file it relies upon the browser to interpret the [[Javascript]]. If [[Javascript]] is combined with [[Cascading Style Sheets]] ([[CSS]]) and later versions of [[HTML]] (4.0 and later) the result is often called [[DHTML]].&lt;br /&gt;
&lt;br /&gt;
== Related Links ==&lt;br /&gt;
&lt;br /&gt;
* https://en.wikipedia.org/wiki/Java_%28programming_language%29&lt;br /&gt;
* [https://docs.oracle.com/en/java/ Java Documentation]&lt;br /&gt;
* [https://www.oracle.com/java/technologies/  Oracle Java web-site]&lt;br /&gt;
* [[Java Enterprise Edition]]&lt;br /&gt;
* [http://www.netbeans.org/ NetBeans IDE]&lt;br /&gt;
* [[Java Beans]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Java_Class_Library Java Class Library]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Java_%28programming_language%29 Wikipedia entry on Java]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Java_Virtual_Machine JVM]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Java_Platform%2C_Enterprise_Edition JEE]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Special:Search?search=Java&amp;amp;fulltext=Search Java References on Wikipedia]&lt;br /&gt;
* [[Eclipse]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:TERMINOLOGY]]&lt;br /&gt;
[[Category:Internet]]&lt;br /&gt;
[[Category:SOFTWARE]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Performance_Analysis&amp;diff=5524</id>
		<title>Performance Analysis</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Performance_Analysis&amp;diff=5524"/>
		<updated>2026-03-02T10:01:58Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Check out [http://en.wikipedia.org/wiki/Neil_Gunther Dr Neil Gunther]&amp;#039;s site - [http://www.perfdynamics.com/ Peformance Dynamics]...&lt;br /&gt;
&lt;br /&gt;
Some interesting links:&lt;br /&gt;
&lt;br /&gt;
* https://www.perfdynamics.com/Manifesto/gcaprules.html&lt;br /&gt;
* https://www.perfdynamics.com/Manifesto/USLScalability.html&lt;br /&gt;
* https://queue.acm.org/detail.cfm?id=2789974 - Hadoop Superlinear Scalability&lt;br /&gt;
&lt;br /&gt;
= PDQ =&lt;br /&gt;
&lt;br /&gt;
[http://www.perfdynamics.com/Tools/PDQ.html Pretty Damn Quick - PDQ]&lt;br /&gt;
&lt;br /&gt;
[[Category:Performance]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Scala&amp;diff=5523</id>
		<title>Scala</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Scala&amp;diff=5523"/>
		<updated>2026-03-02T09:51:47Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Scala Notes =&lt;br /&gt;
&lt;br /&gt;
* https://en.wikipedia.org/wiki/Scala_(programming_language)&lt;br /&gt;
&lt;br /&gt;
= Use of &amp;#039;_&amp;#039; =&lt;br /&gt;
&lt;br /&gt;
From - https://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-an-underscore-in-scala&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import scala._                   // Wild card -- all of Scala is imported&lt;br /&gt;
import scala.{ Predef =&amp;gt; _, _ }  // Exception, everything except Predef&lt;br /&gt;
def f[M[_]]                      // Higher kinded type parameter&lt;br /&gt;
def f(m: M[_])                   // Existential type&lt;br /&gt;
_ + _                            // Anonymous function placeholder parameter&lt;br /&gt;
m _                              // Eta expansion of method into method value&lt;br /&gt;
m(_)                             // Partial function application&lt;br /&gt;
_ =&amp;gt; 5                           // Discarded parameter&lt;br /&gt;
case _ =&amp;gt;                        // Wild card pattern -- matches anything&lt;br /&gt;
val (a, _) = (1, 2)              // same thing&lt;br /&gt;
for (_ &amp;lt;- 1 to 10)               // same thing&lt;br /&gt;
f(xs: _*)                        // Sequence xs is passed as multiple parameters to f(ys: T*)&lt;br /&gt;
case Seq(xs @ _*)                // Identifier xs is bound to the whole matched sequence&lt;br /&gt;
var i: Int = _                   // Initialization to the default value&lt;br /&gt;
def abc_&amp;lt;&amp;gt;!                      // An underscore must separate alphanumerics from symbols on identifiers&lt;br /&gt;
t._2                             // Part of a method name, such as tuple getters&lt;br /&gt;
1_000_000                        // Numeric literal separator (Scala 2.13+)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So...&lt;br /&gt;
&lt;br /&gt;
==Existential types==&lt;br /&gt;
 def foo(l: List[Option[_]]) = ...&lt;br /&gt;
==Higher kinded type parameters==&lt;br /&gt;
 case class A[K[_],T](a: K[T])&lt;br /&gt;
==Ignored variables==&lt;br /&gt;
 val _ = 5&lt;br /&gt;
==Ignored parameters==&lt;br /&gt;
 List(1, 2, 3) foreach { _ =&amp;gt; println(&amp;quot;Hi&amp;quot;) }&lt;br /&gt;
==Ignored names of self types==&lt;br /&gt;
 trait MySeq { _: Seq[_] =&amp;gt; }&lt;br /&gt;
==Wildcard patterns==&lt;br /&gt;
 Some(5) match { case Some(_) =&amp;gt; println(&amp;quot;Yes&amp;quot;) }&lt;br /&gt;
==Wildcard patterns in interpolations==&lt;br /&gt;
 &amp;quot;abc&amp;quot; match { case s&amp;quot;a$_c&amp;quot; =&amp;gt; }&lt;br /&gt;
==Sequence wildcard in patterns==&lt;br /&gt;
 C(1, 2, 3) match { case C(vs @ _*) =&amp;gt; vs.foreach(f(_)) }&lt;br /&gt;
==Wildcard imports==&lt;br /&gt;
 import java.util._&lt;br /&gt;
==Hiding imports==&lt;br /&gt;
 import java.util.{ArrayList =&amp;gt; _, _}&lt;br /&gt;
==Joining letters to operators==&lt;br /&gt;
 def bang_!(x: Int) = 5&lt;br /&gt;
==Assignment operators==&lt;br /&gt;
 def foo_=(x: Int) { ... }&lt;br /&gt;
==Placeholder syntax==&lt;br /&gt;
 List(1, 2, 3) map (_ + 2)&lt;br /&gt;
==Method values==&lt;br /&gt;
 List(1, 2, 3) foreach println _&lt;br /&gt;
==Converting call-by-name parameters to functions==&lt;br /&gt;
 def toFunction(callByName: =&amp;gt; Int): () =&amp;gt; Int = callByName _&lt;br /&gt;
==Default initializer==&lt;br /&gt;
 var x: String = _   // unloved syntax may be eliminated&lt;br /&gt;
&lt;br /&gt;
=Other=&lt;br /&gt;
&lt;br /&gt;
* https://alvinalexander.com/scala/how-to-use-scala-match-expression-like-switch-case-statement/&lt;br /&gt;
&lt;br /&gt;
=Match Expressions=&lt;br /&gt;
&lt;br /&gt;
* https://docs.scala-lang.org/overviews/scala-book/match-expressions.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def getClassAsString(x: Any): String = x match {&lt;br /&gt;
    case s: String =&amp;gt; s + &amp;quot; is a String&amp;quot;&lt;br /&gt;
    case i: Int =&amp;gt; &amp;quot;Int&amp;quot;&lt;br /&gt;
    case f: Float =&amp;gt; &amp;quot;Float&amp;quot;&lt;br /&gt;
    case l: List[_] =&amp;gt; &amp;quot;List&amp;quot;&lt;br /&gt;
    case p: Person =&amp;gt; &amp;quot;Person&amp;quot;&lt;br /&gt;
    case _ =&amp;gt; &amp;quot;Unknown&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def isTrue(a: Any) = a match {&lt;br /&gt;
    case 0 | &amp;quot;&amp;quot; =&amp;gt; false&lt;br /&gt;
    case _ =&amp;gt; true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Version 1 - compiles to a tableswitch&lt;br /&gt;
import scala.annotation.switch&lt;br /&gt;
&lt;br /&gt;
class SwitchDemo {&lt;br /&gt;
    val i = 1&lt;br /&gt;
    val x = (i: @switch) match {&lt;br /&gt;
        case 1  =&amp;gt; &amp;quot;One&amp;quot;&lt;br /&gt;
        case 2  =&amp;gt; &amp;quot;Two&amp;quot;&lt;br /&gt;
        case _  =&amp;gt; &amp;quot;Other&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
expr match {&lt;br /&gt;
  case List(1,_,_) =&amp;gt; &amp;quot;A List with three elements&amp;quot;&lt;br /&gt;
  case List(_ *) =&amp;gt; &amp;quot;A List with zero or more elements&amp;quot;&lt;br /&gt;
  case Map(_,_) =&amp;gt; &amp;quot;A Map with any Key and Value type&amp;quot;&lt;br /&gt;
  case _ =&amp;gt; &amp;quot;Anythiong else&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Getters and Setters=&lt;br /&gt;
&lt;br /&gt;
According to the Scala docs:&lt;br /&gt;
&lt;br /&gt;
Scala does not follow the Java convention of prepending set/get to mutator and accessor methods (respectively). Instead, the following conventions are used:&lt;br /&gt;
&lt;br /&gt;
* For accessors of properties, the name of the method should be the name of the property.&lt;br /&gt;
* In some instances, it is acceptable to prepend “is” on a boolean accessor (e.g. isEmpty). This should only be the case when no corresponding mutator is provided.&lt;br /&gt;
* For mutators, the name of the method should be the name of the property with “_=” appended.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class Foo {&lt;br /&gt;
  def bar = ...&lt;br /&gt;
  def bar_=(bar: Bar) {&lt;br /&gt;
    ...&lt;br /&gt;
  }&lt;br /&gt;
  def isBaz = ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
val nums = List(1,2,3,4,5,6,7,8,9)&lt;br /&gt;
&lt;br /&gt;
nums filter (_ % 2 == 0)&lt;br /&gt;
nums reduce (_ + _)&lt;br /&gt;
nums.exists (_ &amp;gt; 5)&lt;br /&gt;
nums.takeWhile(_ &amp;lt; 8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As used in Swift for un-named or unused values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def getProps = {&lt;br /&gt;
   Config.getHost, Config.getPort, Config.getIp, Config.getMask&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
val (host, port, ignore1, ignore2) = getProps&lt;br /&gt;
&lt;br /&gt;
val (host, port, _, _) = getProps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Types=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
type StringMatcher = String =&amp;gt; (String =&amp;gt; Boolean)&lt;br /&gt;
&lt;br /&gt;
def starts: StringMatcher = (prefix:String) =&amp;gt; _ startsWith prefix&lt;br /&gt;
&lt;br /&gt;
...or...&lt;br /&gt;
&lt;br /&gt;
def starts: StringMatcher = (prefix:String) =&amp;gt; (s) =&amp;gt; s startsWith prefix&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Generating Random Strings=&lt;br /&gt;
&lt;br /&gt;
One liner:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Random.alphanumeric.take(10).mkString&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From - https://alvinalexander.com/scala/creating-random-strings-in-scala/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import scala.annotation.tailrec&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Examples of different ways to write &amp;quot;random string&amp;quot; methods in Scala.&lt;br /&gt;
 * See the main method for examples of how each method is called.&lt;br /&gt;
 * Created by Alvin Alexander, https://alvinalexander.com&lt;br /&gt;
 */&lt;br /&gt;
object RandomStringExamples {&lt;br /&gt;
  &lt;br /&gt;
  def main(args: Array[String]) {&lt;br /&gt;
    println(&amp;quot;1:  &amp;quot; + randomString(10))&lt;br /&gt;
    println(&amp;quot;2:  &amp;quot; + randomStringArray(10))&lt;br /&gt;
    println(&amp;quot;3:  &amp;quot; + randomStringRecursive(10).mkString)&lt;br /&gt;
    println(&amp;quot;3:  &amp;quot; + randomStringRecursive2(10).mkString)&lt;br /&gt;
    println(&amp;quot;4:  &amp;quot; + randomStringTailRecursive(10, Nil).mkString)&lt;br /&gt;
    println(&amp;quot;5:  &amp;quot; + randomStringRecursive2Wrapper(10))&lt;br /&gt;
    println(&amp;quot;6:  &amp;quot; + randomAlphaNumericString(10))&lt;br /&gt;
    println(&amp;quot;6:  &amp;quot; + randomAlphaNumericString(10))&lt;br /&gt;
    println(&amp;quot;6:  &amp;quot; + randomAlphaNumericString(10))&lt;br /&gt;
    println(&amp;quot;x2: &amp;quot; + x2(10, (&amp;#039;a&amp;#039; to &amp;#039;z&amp;#039;) ++ (&amp;#039;A&amp;#039; to &amp;#039;Z&amp;#039;)))&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 1 - a java-esque approach&lt;br /&gt;
  def randomString(length: Int) = {&lt;br /&gt;
    val r = new scala.util.Random&lt;br /&gt;
    val sb = new StringBuilder&lt;br /&gt;
    for (i &amp;lt;- 1 to length) {&lt;br /&gt;
      sb.append(r.nextPrintableChar)&lt;br /&gt;
    }&lt;br /&gt;
    sb.toString&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 2 - similar to #1, but using an array&lt;br /&gt;
  def randomStringUsingArray(length: Int): String = {&lt;br /&gt;
    val r = new scala.util.Random&lt;br /&gt;
    val a = new Array[Char](length)&lt;br /&gt;
    val sb = new StringBuilder&lt;br /&gt;
    for (i &amp;lt;- 0 to length-1) {&lt;br /&gt;
      a(i) = r.nextPrintableChar&lt;br /&gt;
    }&lt;br /&gt;
    a.mkString&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 3 - recursive, but not tail-recursive&lt;br /&gt;
  def randomStringRecursive(n: Int): List[Char] = {&lt;br /&gt;
    n match {&lt;br /&gt;
      case 1 =&amp;gt; List(util.Random.nextPrintableChar)&lt;br /&gt;
      case _ =&amp;gt; List(util.Random.nextPrintableChar) ++ randomStringRecursive(n-1)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 3b - recursive, but not tail-recursive&lt;br /&gt;
  def randomStringRecursive2(n: Int): String = {&lt;br /&gt;
    n match {&lt;br /&gt;
      case 1 =&amp;gt; util.Random.nextPrintableChar.toString&lt;br /&gt;
      case _ =&amp;gt; util.Random.nextPrintableChar.toString ++ randomStringRecursive2(n-1).toString&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 4 - tail recursive, no wrapper&lt;br /&gt;
  @tailrec&lt;br /&gt;
  def randomStringTailRecursive(n: Int, list: List[Char]):List[Char] = {&lt;br /&gt;
    if (n == 1) util.Random.nextPrintableChar :: list&lt;br /&gt;
    else randomStringTailRecursive(n-1, util.Random.nextPrintableChar :: list)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // 5 - a wrapper around the tail-recursive approach&lt;br /&gt;
  def randomStringRecursive2Wrapper(n: Int): String = {&lt;br /&gt;
    randomStringTailRecursive(n, Nil).mkString&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // 6 - random alphanumeric&lt;br /&gt;
  def randomAlphaNumericString(length: Int): String = {&lt;br /&gt;
    val chars = (&amp;#039;a&amp;#039; to &amp;#039;z&amp;#039;) ++ (&amp;#039;A&amp;#039; to &amp;#039;Z&amp;#039;) ++ (&amp;#039;0&amp;#039; to &amp;#039;9&amp;#039;)&lt;br /&gt;
    randomStringFromCharList(length, chars)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // 7 - random alpha&lt;br /&gt;
  def randomAlpha(length: Int): String = {&lt;br /&gt;
    val chars = (&amp;#039;a&amp;#039; to &amp;#039;z&amp;#039;) ++ (&amp;#039;A&amp;#039; to &amp;#039;Z&amp;#039;)&lt;br /&gt;
    randomStringFromCharList(length, chars)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // used by #6 and #7&lt;br /&gt;
  def randomStringFromCharList(length: Int, chars: Seq[Char]): String = {&lt;br /&gt;
    val sb = new StringBuilder&lt;br /&gt;
    for (i &amp;lt;- 1 to length) {&lt;br /&gt;
      val randomNum = util.Random.nextInt(chars.length)&lt;br /&gt;
      sb.append(chars(randomNum))&lt;br /&gt;
    }&lt;br /&gt;
    sb.toString&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  def x(length: Int, chars: Seq[Char]): String = {&lt;br /&gt;
    val list = List.range(1, length)&lt;br /&gt;
    val arr = new Array[Char](length)&lt;br /&gt;
    list.foreach{ e =&amp;gt; arr(e) = chars(util.Random.nextInt(chars.length)) }&lt;br /&gt;
    list.mkString&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // create a fake list so i can use map (or flatMap)&lt;br /&gt;
  def x2(length: Int, chars: Seq[Char]): String = {&lt;br /&gt;
    val tmpList = List.range(0, length)&lt;br /&gt;
    val charList = tmpList.map{ e =&amp;gt; chars(util.Random.nextInt(chars.length)) }&lt;br /&gt;
    return charList.mkString&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scala]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=MongoDB&amp;diff=5522</id>
		<title>MongoDB</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=MongoDB&amp;diff=5522"/>
		<updated>2026-03-02T09:48:53Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A NoSQL database which used JSON documents as its storage objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
&lt;br /&gt;
* https://en.wikipedia.org/wiki/MongoDB&lt;br /&gt;
* https://www.mongodb.com/&lt;br /&gt;
* https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
= Use with Python =&lt;br /&gt;
&lt;br /&gt;
* https://stackoverflow.com/questions/9447629/mongokit-vs-mongoengine-vs-flask-mongoalchemy-for-flask&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
[[Category:MongoDB]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Angular&amp;diff=5521</id>
		<title>Angular</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Angular&amp;diff=5521"/>
		<updated>2026-03-02T09:41:42Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Setting up a new CLI Project =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ng new project-name&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
cd project-name&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Angular]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=React&amp;diff=5520</id>
		<title>React</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=React&amp;diff=5520"/>
		<updated>2026-03-02T09:40:34Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
&lt;br /&gt;
* https://en.wikipedia.org/wiki/React_(JavaScript_library)&lt;br /&gt;
* https://reactjs.org/&lt;br /&gt;
* https://github.com/facebook/react&lt;br /&gt;
* https://github.com/ReactTraining/react-router/tree/dev/docs&lt;br /&gt;
* &lt;br /&gt;
* xxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:React]]&lt;br /&gt;
[[Category:SPA]]&lt;br /&gt;
[[Category:Web]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Kafka&amp;diff=5519</id>
		<title>Kafka</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Kafka&amp;diff=5519"/>
		<updated>2026-03-02T09:37:56Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Apache Kafka is an implementation  of a distributed event streaming platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
&lt;br /&gt;
* https://kafka.apache.org/&lt;br /&gt;
* https://kafka-tutorials.confluent.io/&lt;br /&gt;
* https://kafka.apache.org/quickstart&lt;br /&gt;
* https://docs.confluent.io/platform/current/overview.html&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
= Using with Docker =&lt;br /&gt;
&lt;br /&gt;
* https://docs.confluent.io/platform/current/quickstart/ce-docker-quickstart.html&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Kafka]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Kafka&amp;diff=5518</id>
		<title>Kafka</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Kafka&amp;diff=5518"/>
		<updated>2026-03-02T09:37:45Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overvie w=&lt;br /&gt;
&lt;br /&gt;
Apache Kafka is an implementation  of a distributed event streaming platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
&lt;br /&gt;
* https://kafka.apache.org/&lt;br /&gt;
* https://kafka-tutorials.confluent.io/&lt;br /&gt;
* https://kafka.apache.org/quickstart&lt;br /&gt;
* https://docs.confluent.io/platform/current/overview.html&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
= Using with Docker =&lt;br /&gt;
&lt;br /&gt;
* https://docs.confluent.io/platform/current/quickstart/ce-docker-quickstart.html&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Kafka]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=3D_Imaging_Notes&amp;diff=5517</id>
		<title>3D Imaging Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=3D_Imaging_Notes&amp;diff=5517"/>
		<updated>2026-02-27T23:03:28Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Links =&lt;br /&gt;
&lt;br /&gt;
* https://www.codeproject.com/Articles/1182854/D-Face-Viewer-and-Matcher&lt;br /&gt;
&lt;br /&gt;
[[Category:Imaging]]&lt;br /&gt;
[[Category:3D]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Markup_Notes&amp;diff=5516</id>
		<title>Markup Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Markup_Notes&amp;diff=5516"/>
		<updated>2026-02-25T23:02:39Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Forms of Documentation Markup = &lt;br /&gt;
&lt;br /&gt;
In the past, many solutions have evolved to facilitate the easy creation of documents and documentation. These range from lightweight human-readable formats like Markdown, to highly capable typesetting systems like TeX/LaTeX, to structured data formats like XML. The choice of markup language typically reflects a trade-off between ease of authoring, rendering fidelity, and the intended output medium.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Historical Background ==&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;markup&amp;quot; predates computers — editors and typesetters would literally mark up manuscripts with instructions for printers. With the arrival of electronic publishing in the 1960s and 70s, these conventions were formalised into machine-readable languages. Early systems were tightly coupled to specific hardware (typesetters, printers, terminals), and over time higher-level, more portable formats emerged.&lt;br /&gt;
&lt;br /&gt;
== Markup Languages and Formats ==&lt;br /&gt;
&lt;br /&gt;
=== Runoff / Roff Family (1964 onwards) ===&lt;br /&gt;
&lt;br /&gt;
The roff family traces its roots to the &amp;lt;code&amp;gt;RUNOFF&amp;lt;/code&amp;gt; program written by Jerome Saltzer at MIT in 1964. It was the dominant document formatting system on early UNIX systems.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;nroff&amp;#039;&amp;#039;&amp;#039; — formats text for fixed-width terminal output&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;troff&amp;#039;&amp;#039;&amp;#039; — the typesetting variant, targeting phototypesetting devices&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;groff&amp;#039;&amp;#039;&amp;#039; (GNU roff) — the modern open source successor, still widely used today for Unix man pages&lt;br /&gt;
&lt;br /&gt;
Roff documents use dot-prefixed commands (e.g. &amp;lt;code&amp;gt;.PP&amp;lt;/code&amp;gt; for paragraph, &amp;lt;code&amp;gt;.B&amp;lt;/code&amp;gt; for bold) and remain the standard format for Linux/Unix manual pages.&lt;br /&gt;
&lt;br /&gt;
=== SGML — Standard Generalised Markup Language (1986) ===&lt;br /&gt;
&lt;br /&gt;
SGML is a meta-language for defining markup languages, standardised as ISO 8879:1986. It introduced the concept of separating document structure from presentation, and was the parent of both HTML and XML. Its complexity limited widespread adoption outside publishing and aerospace/defence industries, but its influence is enormous.&lt;br /&gt;
&lt;br /&gt;
=== TeX and LaTeX (1978 / 1984) ===&lt;br /&gt;
&lt;br /&gt;
Created by Donald Knuth, &amp;#039;&amp;#039;&amp;#039;TeX&amp;#039;&amp;#039;&amp;#039; is a typesetting system renowned for its precise, beautiful rendering of mathematical and scientific notation. &amp;#039;&amp;#039;&amp;#039;LaTeX&amp;#039;&amp;#039;&amp;#039;, built on top of TeX by Leslie Lamport, added higher-level macros that made document authoring far more approachable. LaTeX remains the dominant format for academic papers, theses, and scientific publishing worldwide. Documents use commands such as &amp;lt;code&amp;gt;\section{}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\textbf{}&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;equation&amp;lt;/code&amp;gt; environment.&lt;br /&gt;
&lt;br /&gt;
=== RTF — Rich Text Format (1987) ===&lt;br /&gt;
&lt;br /&gt;
Developed by Microsoft for cross-application and cross-platform document exchange. RTF encodes formatting as plain-text control words (e.g. &amp;lt;code&amp;gt;\b&amp;lt;/code&amp;gt; for bold), making it human-readable in theory but verbose in practice. It was the default format for WordPad and early versions of Word, and served as a common interchange format before the dominance of OOXML and PDF.&lt;br /&gt;
&lt;br /&gt;
=== HTML — HyperText Markup Language (1991) ===&lt;br /&gt;
&lt;br /&gt;
Proposed by Tim Berners-Lee at CERN, HTML is an SGML-derived language that became the lingua franca of the World Wide Web. It separates document structure (tags like &amp;lt;code&amp;gt;&amp;amp;lt;h1&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;a&amp;amp;gt;&amp;lt;/code&amp;gt;) from presentation (originally handled inline, later delegated to CSS). HTML5 (2014) significantly expanded its capabilities to include multimedia, semantic elements, and application-level features.&lt;br /&gt;
&lt;br /&gt;
=== DocBook (1991) ===&lt;br /&gt;
&lt;br /&gt;
An XML/SGML-based markup language originally developed by HaL Computer Systems and O&amp;#039;Reilly. DocBook is specifically designed for technical documentation and supports rich semantic tagging (&amp;lt;code&amp;gt;&amp;amp;lt;procedure&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;varlistentry&amp;amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;programlisting&amp;amp;gt;&amp;lt;/code&amp;gt;, etc.). It can be transformed to HTML, PDF, man pages and other formats via XSLT stylesheets. Widely used in open source projects and technical publishing.&lt;br /&gt;
&lt;br /&gt;
=== XML — eXtensible Markup Language (1998) ===&lt;br /&gt;
&lt;br /&gt;
A simplified subset of SGML designed for general-purpose structured data. While not a document format per se, XML underpins many documentation formats (DocBook, OOXML, DITA). Its strict well-formedness rules and wide tooling support made it a foundational technology for data interchange in the 2000s, though JSON has displaced it for many API use cases.&lt;br /&gt;
&lt;br /&gt;
=== reStructuredText / RST (2002) ===&lt;br /&gt;
&lt;br /&gt;
Developed by David Goodger as part of the Python &amp;lt;code&amp;gt;docutils&amp;lt;/code&amp;gt; project. RST is a lightweight markup language designed to be readable as plain text while being processable into HTML, LaTeX, PDF, and man pages. It is the native format of Python&amp;#039;s official documentation and the Sphinx documentation generator, making it extremely prevalent in the Python ecosystem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Example RST:&lt;br /&gt;
Section Title&lt;br /&gt;
=============&lt;br /&gt;
Some **bold** text and a `hyperlink &amp;lt;http://example.com&amp;gt;`_.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AsciiDoc (2002) and Asciidoctor (2013) ===&lt;br /&gt;
&lt;br /&gt;
AsciiDoc fills a niche between Markdown&amp;#039;s simplicity and DocBook&amp;#039;s power. It was designed for writing books and technical documentation, supporting features like cross-references, includes, callouts, and multiple output formats natively. &amp;#039;&amp;#039;&amp;#039;Asciidoctor&amp;#039;&amp;#039;&amp;#039;, a Ruby reimplementation, significantly revitalised the ecosystem. It is used by the Git project, Spring Framework, and many others for their documentation.&lt;br /&gt;
&lt;br /&gt;
=== Markdown (2004) ===&lt;br /&gt;
&lt;br /&gt;
Created by John Gruber (with input from Aaron Swartz), Markdown was explicitly designed to be readable as-is in plain-text form, with its syntax inspired by email conventions. It converts to HTML and is now the de facto standard for README files, static site generators, wikis, and developer documentation. Its simplicity came at the cost of standardisation — numerous dialects emerged (GitHub Flavored Markdown, CommonMark, MultiMarkdown) with incompatible extensions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Example Markdown:&lt;br /&gt;
## Section Title&lt;br /&gt;
Some **bold** text and a [hyperlink](http://example.com).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wiki Markup ===&lt;br /&gt;
&lt;br /&gt;
Most wiki platforms developed their own lightweight markup languages before Markdown became dominant. Examples include:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;MediaWiki markup&amp;#039;&amp;#039;&amp;#039; — used by Wikipedia; uses &amp;lt;code&amp;gt;&amp;#039;&amp;#039;italic&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;== headings ==&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;TWiki / Foswiki markup&amp;#039;&amp;#039;&amp;#039; — uses &amp;lt;code&amp;gt;---+&amp;lt;/code&amp;gt; headings, &amp;lt;code&amp;gt;*bold*&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;_italic_&amp;lt;/code&amp;gt;, and TML (Topic Markup Language) for structured data&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Confluence wiki markup&amp;#039;&amp;#039;&amp;#039; — Atlassian&amp;#039;s proprietary variant&lt;br /&gt;
&lt;br /&gt;
=== Org-mode (2003) ===&lt;br /&gt;
&lt;br /&gt;
An outlining and plain-text markup system embedded within the Emacs text editor, created by Carsten Dominik. Org-mode is exceptionally powerful for note-taking, project planning, literate programming, and publishing. It can export to HTML, LaTeX, PDF, ODT and many other formats, and its &amp;lt;code&amp;gt;babel&amp;lt;/code&amp;gt; feature allows executable code blocks in dozens of languages.&lt;br /&gt;
&lt;br /&gt;
=== CommonMark and Pandoc ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CommonMark&amp;#039;&amp;#039;&amp;#039; (2014) was an effort to produce a rigorous, unambiguous specification for Markdown to resolve the fragmentation of dialects. &amp;#039;&amp;#039;&amp;#039;Pandoc&amp;#039;&amp;#039;&amp;#039;, created by John MacFarlane, is a universal document converter supporting dozens of input and output formats, and has become an essential tool for anyone working across multiple markup ecosystems.&lt;br /&gt;
&lt;br /&gt;
== Summary Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Format !! Created !! Primary Use !! Output Targets !! Complexity&lt;br /&gt;
|-&lt;br /&gt;
| Roff/groff || 1964+ || Man pages, UNIX docs || Terminal, PostScript || Medium&lt;br /&gt;
|-&lt;br /&gt;
| TeX/LaTeX || 1978/1984 || Academic &amp;amp; scientific publishing || PDF, DVI || High&lt;br /&gt;
|-&lt;br /&gt;
| SGML || 1986 || Meta-language, publishing || Varies || Very High&lt;br /&gt;
|-&lt;br /&gt;
| RTF || 1987 || Word processing interchange || Print, screen || Medium&lt;br /&gt;
|-&lt;br /&gt;
| HTML || 1991 || Web pages || Browser || Low–Medium&lt;br /&gt;
|-&lt;br /&gt;
| DocBook || 1991 || Technical documentation || HTML, PDF, man || High&lt;br /&gt;
|-&lt;br /&gt;
| XML || 1998 || Structured data &amp;amp; documents || Varies || Medium&lt;br /&gt;
|-&lt;br /&gt;
| RST || 2002 || Python/developer docs || HTML, PDF, man || Medium&lt;br /&gt;
|-&lt;br /&gt;
| AsciiDoc || 2002 || Technical books &amp;amp; docs || HTML, PDF, ePub || Medium&lt;br /&gt;
|-&lt;br /&gt;
| Org-mode || 2003 || Notes, literate programming || HTML, PDF, ODT || Medium–High&lt;br /&gt;
|-&lt;br /&gt;
| Markdown || 2004 || READMEs, wikis, web || HTML || Low&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Markdown Syntax|Markdown Syntax Reference]]&lt;br /&gt;
* [https://pandoc.org Pandoc — Universal Document Converter]&lt;br /&gt;
* [https://commonmark.org CommonMark Specification]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Help:Formatting MediaWiki Formatting Help]&lt;br /&gt;
&lt;br /&gt;
[[Category:Languages]]&lt;br /&gt;
[[Category:Documentation]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Markup_Notes&amp;diff=5515</id>
		<title>Markup Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Markup_Notes&amp;diff=5515"/>
		<updated>2026-02-25T22:58:57Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;= Forms of Documentation Markup =   In the past, many solutions have evolved to facilitate the easy creation of documents and documentation. These range from lightweight human-readable formats like Markdown, to highly capable typesetting systems like TeX/LaTeX, to structured data formats like XML. The choice of markup language typically reflects a trade-off between ease of authoring, rendering fidelity, and the intended output medium.  ---++ Historical Background  The co...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Forms of Documentation Markup = &lt;br /&gt;
&lt;br /&gt;
In the past, many solutions have evolved to facilitate the easy creation of documents and documentation. These range from lightweight human-readable formats like Markdown, to highly capable typesetting systems like TeX/LaTeX, to structured data formats like XML. The choice of markup language typically reflects a trade-off between ease of authoring, rendering fidelity, and the intended output medium.&lt;br /&gt;
&lt;br /&gt;
---++ Historical Background&lt;br /&gt;
&lt;br /&gt;
The concept of &amp;quot;markup&amp;quot; predates computers — editors and typesetters would literally mark up manuscripts with instructions for printers. With the arrival of electronic publishing in the 1960s and 70s, these conventions were formalised into machine-readable languages. Early systems were tightly coupled to specific hardware (typesetters, printers, terminals), and over time higher-level, more portable formats emerged.&lt;br /&gt;
&lt;br /&gt;
---++ Markup Languages and Formats&lt;br /&gt;
&lt;br /&gt;
---+++ Runoff / Roff Family (1964 onwards)&lt;br /&gt;
The roff family traces its roots to the =RUNOFF= program written by Jerome Saltzer at MIT in 1964. It was the dominant document formatting system on early UNIX systems.&lt;br /&gt;
   * *nroff* — formats text for fixed-width terminal output&lt;br /&gt;
   * *troff* — the typesetting variant, targeting phototypesetting devices&lt;br /&gt;
   * *groff* (GNU roff) — the modern open source successor, still widely used today for Unix man pages&lt;br /&gt;
&lt;br /&gt;
Roff documents use dot-prefixed commands (e.g. =.PP= for paragraph, =.B= for bold) and remain the standard format for Linux/Unix manual pages.&lt;br /&gt;
&lt;br /&gt;
---+++ SGML — Standard Generalised Markup Language (1986)&lt;br /&gt;
SGML is a meta-language for defining markup languages, standardised as ISO 8879:1986. It introduced the concept of separating document structure from presentation, and was the parent of both HTML and XML. Its complexity limited widespread adoption outside publishing and aerospace/defence industries, but its influence is enormous.&lt;br /&gt;
&lt;br /&gt;
---+++ TeX and LaTeX (1978 / 1984)&lt;br /&gt;
Created by Donald Knuth, *TeX* is a typesetting system renowned for its precise, beautiful rendering of mathematical and scientific notation. *LaTeX*, built on top of TeX by Leslie Lamport, added higher-level macros that made document authoring far more approachable. LaTeX remains the dominant format for academic papers, theses, and scientific publishing worldwide. Documents use commands such as =\section{}=, =\textbf{}=, and the =equation= environment.&lt;br /&gt;
&lt;br /&gt;
---+++ RTF — Rich Text Format (1987)&lt;br /&gt;
Developed by Microsoft for cross-application and cross-platform document exchange. RTF encodes formatting as plain-text control words (e.g. =\b= for bold), making it human-readable in theory but verbose in practice. It was the default format for WordPad and early versions of Word, and served as a common interchange format before the dominance of OOXML and PDF.&lt;br /&gt;
&lt;br /&gt;
---+++ HTML — HyperText Markup Language (1991)&lt;br /&gt;
Proposed by Tim Berners-Lee at CERN, HTML is an SGML-derived language that became the lingua franca of the World Wide Web. It separates document structure (tags like =&amp;lt;h1&amp;gt;=, =&amp;lt;p&amp;gt;=, =&amp;lt;a&amp;gt;=) from presentation (originally handled inline, later delegated to CSS). HTML5 (2014) significantly expanded its capabilities to include multimedia, semantic elements, and application-level features.&lt;br /&gt;
&lt;br /&gt;
---+++ DocBook (1991)&lt;br /&gt;
An XML/SGML-based markup language originally developed by HaL Computer Systems and O&amp;#039;Reilly. DocBook is specifically designed for technical documentation and supports rich semantic tagging (=&amp;lt;procedure&amp;gt;=, =&amp;lt;varlistentry&amp;gt;=, =&amp;lt;programlisting&amp;gt;=, etc.). It can be transformed to HTML, PDF, man pages and other formats via XSLT stylesheets. Widely used in open source projects and technical publishing.&lt;br /&gt;
&lt;br /&gt;
---+++ XML — eXtensible Markup Language (1998)&lt;br /&gt;
A simplified subset of SGML designed for general-purpose structured data. While not a document format per se, XML underpins many documentation formats (DocBook, OOXML, DITA). Its strict well-formedness rules and wide tooling support made it a foundational technology for data interchange in the 2000s, though JSON has displaced it for many API use cases.&lt;br /&gt;
&lt;br /&gt;
---+++ reStructuredText / RST (2002)&lt;br /&gt;
Developed by David Goodger as part of the Python =docutils= project. RST is a lightweight markup language designed to be readable as plain text while being processable into HTML, LaTeX, PDF, and man pages. It is the native format of Python&amp;#039;s official documentation and the Sphinx documentation generator, making it extremely prevalent in the Python ecosystem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;verbatim&amp;gt;&lt;br /&gt;
Example RST:&lt;br /&gt;
Section Title&lt;br /&gt;
=============&lt;br /&gt;
Some **bold** text and a `hyperlink &amp;lt;http://example.com&amp;gt;`_.&lt;br /&gt;
&amp;lt;/verbatim&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---+++ Markdown (2004)&lt;br /&gt;
Created by John Gruber (with input from Aaron Swartz), Markdown was explicitly designed to be readable as-is in plain-text form, with its syntax inspired by email conventions. It converts to HTML and is now the de facto standard for README files, static site generators, wikis, and developer documentation. Its simplicity came at the cost of standardisation — numerous dialects emerged (GitHub Flavored Markdown, CommonMark, MultiMarkdown) with incompatible extensions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;verbatim&amp;gt;&lt;br /&gt;
Example Markdown:&lt;br /&gt;
## Section Title&lt;br /&gt;
Some **bold** text and a [hyperlink](http://example.com).&lt;br /&gt;
&amp;lt;/verbatim&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---+++ AsciiDoc (2002) and Asciidoctor (2013)&lt;br /&gt;
AsciiDoc fills a niche between Markdown&amp;#039;s simplicity and DocBook&amp;#039;s power. It was designed for writing books and technical documentation, supporting features like cross-references, includes, callouts, and multiple output formats natively. *Asciidoctor*, a Ruby reimplementation, significantly revitalised the ecosystem. It is used by the Git project, Spring Framework, and many others for their documentation.&lt;br /&gt;
&lt;br /&gt;
---+++ Wiki Markup&lt;br /&gt;
Most wiki platforms developed their own lightweight markup languages before Markdown became dominant. Examples include:&lt;br /&gt;
   * *MediaWiki markup* — used by Wikipedia; uses =&amp;#039;&amp;#039;italic&amp;#039;&amp;#039;=, =&amp;#039;&amp;#039;&amp;#039;bold&amp;#039;&amp;#039;&amp;#039;=, ===headings===&lt;br /&gt;
   * *TWiki / Foswiki markup* — uses ==---+= headings, =*bold*=, =_italic_=, and TML (Topic Markup Language) for structured data&lt;br /&gt;
   * *Confluence wiki markup* — Atlassian&amp;#039;s proprietary variant&lt;br /&gt;
&lt;br /&gt;
---+++ Org-mode (2003)&lt;br /&gt;
An outlining and plain-text markup system embedded within the Emacs text editor, created by Carsten Dominik. Org-mode is exceptionally powerful for note-taking, project planning, literate programming, and publishing. It can export to HTML, LaTeX, PDF, ODT and many other formats, and its =babel= feature allows executable code blocks in dozens of languages.&lt;br /&gt;
&lt;br /&gt;
---+++ CommonMark and Pandoc&lt;br /&gt;
*CommonMark* (2014) was an effort to produce a rigorous, unambiguous specification for Markdown to resolve the fragmentation of dialects. *Pandoc*, created by John MacFarlane, is a universal document converter supporting dozens of input and output formats, and has become an essential tool for anyone working across multiple markup ecosystems.&lt;br /&gt;
&lt;br /&gt;
---++ Summary Comparison&lt;br /&gt;
&lt;br /&gt;
| *Format* | *Created* | *Primary Use* | *Output Targets* | *Complexity* |&lt;br /&gt;
| Roff/groff | 1964+ | Man pages, UNIX docs | Terminal, PostScript | Medium |&lt;br /&gt;
| TeX/LaTeX | 1978/1984 | Academic &amp;amp; scientific publishing | PDF, DVI | High |&lt;br /&gt;
| SGML | 1986 | Meta-language, publishing | Varies | Very High |&lt;br /&gt;
| RTF | 1987 | Word processing interchange | Print, screen | Medium |&lt;br /&gt;
| HTML | 1991 | Web pages | Browser | Low–Medium |&lt;br /&gt;
| DocBook | 1991 | Technical documentation | HTML, PDF, man | High |&lt;br /&gt;
| XML | 1998 | Structured data &amp;amp; documents | Varies | Medium |&lt;br /&gt;
| RST | 2002 | Python/developer docs | HTML, PDF, man | Medium |&lt;br /&gt;
| AsciiDoc | 2002 | Technical books &amp;amp; docs | HTML, PDF, ePub | Medium |&lt;br /&gt;
| Markdown | 2004 | READMEs, wikis, web | HTML | Low |&lt;br /&gt;
| Org-mode | 2003 | Notes, literate programming | HTML, PDF, ODT | Medium–High |&lt;br /&gt;
&lt;br /&gt;
---++ See Also&lt;br /&gt;
   * [[MarkdownSyntax][Markdown Syntax Reference]]&lt;br /&gt;
   * [[WikiSyntax][Foswiki Markup Reference]]&lt;br /&gt;
   * [[https://pandoc.org][Pandoc — Universal Document Converter]]&lt;br /&gt;
   * [[https://commonmark.org][CommonMark Specification]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Languages]]&lt;br /&gt;
[[Category:Documentation]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5514</id>
		<title>Foswiki Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5514"/>
		<updated>2026-01-31T21:11:28Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
* https://foswiki.org/Home/WebHome&lt;br /&gt;
* https://en.wikipedia.org/wiki/Foswiki&lt;br /&gt;
* https://foswiki.web.cern.ch/&lt;br /&gt;
* https://www.wikimatrix.org/show/Foswiki&lt;br /&gt;
* https://collab.phys.unsw.edu.au:4431/bin/view/System/TwentyMinuteTutorial&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
= Summary = &lt;br /&gt;
&lt;br /&gt;
Foswiki is a fork of TWiki that was created in 2008.&lt;br /&gt;
&lt;br /&gt;
The split happened due to disagreements within the TWiki community about governance and development direction. A significant portion of TWiki&amp;#039;s core development team and community members decided to fork the project, creating Foswiki as a separate open-source wiki platform.&lt;br /&gt;
&lt;br /&gt;
The key connection is that Foswiki started from the same TWiki codebase, so they share:&lt;br /&gt;
&lt;br /&gt;
* Similar architecture and Perl-based implementation&lt;br /&gt;
* Compatible data structures and file formats (at least initially)&lt;br /&gt;
* Similar markup syntax and features&lt;br /&gt;
* Many of the same concepts (webs, topics, plugins, etc.)&lt;br /&gt;
&lt;br /&gt;
After the fork, both projects continued independent development. Foswiki was positioned as having a more community-driven governance model, while TWiki continued under its existing leadership.&lt;br /&gt;
&lt;br /&gt;
= FosWiki Docker =&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/timlegge/docker-foswiki&lt;br /&gt;
* https://foswiki.org/Blog/UpdatingDockerFoswikiTo217&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki]]&lt;br /&gt;
[[Category:TWiki]]&lt;br /&gt;
[[Category:Foswiki]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Category:Foswiki&amp;diff=5513</id>
		<title>Category:Foswiki</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Category:Foswiki&amp;diff=5513"/>
		<updated>2026-01-30T07:21:20Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;Foswiki links, notes and references...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Foswiki links, notes and references...&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5512</id>
		<title>Foswiki Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5512"/>
		<updated>2026-01-30T07:21:06Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: /* FosWiki Docker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
* https://foswiki.org/Home/WebHome&lt;br /&gt;
* https://en.wikipedia.org/wiki/Foswiki&lt;br /&gt;
* https://foswiki.web.cern.ch/&lt;br /&gt;
* https://www.wikimatrix.org/show/Foswiki&lt;br /&gt;
* https://collab.phys.unsw.edu.au:4431/bin/view/System/TwentyMinuteTutorial&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
= Summary = &lt;br /&gt;
&lt;br /&gt;
Foswiki is a fork of TWiki that was created in 2008.&lt;br /&gt;
&lt;br /&gt;
The split happened due to disagreements within the TWiki community about governance and development direction. A significant portion of TWiki&amp;#039;s core development team and community members decided to fork the project, creating Foswiki as a separate open-source wiki platform.&lt;br /&gt;
&lt;br /&gt;
The key connection is that Foswiki started from the same TWiki codebase, so they share:&lt;br /&gt;
&lt;br /&gt;
* Similar architecture and Perl-based implementation&lt;br /&gt;
* Compatible data structures and file formats (at least initially)&lt;br /&gt;
* Similar markup syntax and features&lt;br /&gt;
* Many of the same concepts (webs, topics, plugins, etc.)&lt;br /&gt;
&lt;br /&gt;
After the fork, both projects continued independent development. Foswiki was positioned as having a more community-driven governance model, while TWiki continued under its existing leadership.&lt;br /&gt;
&lt;br /&gt;
= FosWiki Docker =&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/timlegge/docker-foswiki&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki]]&lt;br /&gt;
[[Category:TWiki]]&lt;br /&gt;
[[Category:Foswiki]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Category:FosWiki&amp;diff=5511</id>
		<title>Category:FosWiki</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Category:FosWiki&amp;diff=5511"/>
		<updated>2026-01-30T07:20:52Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;Foswiki links, notes and references...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Foswiki links, notes and references...&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Category:TWiki&amp;diff=5510</id>
		<title>Category:TWiki</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Category:TWiki&amp;diff=5510"/>
		<updated>2026-01-30T07:20:29Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;TWiki links, notes and references...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TWiki links, notes and references...&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5509</id>
		<title>Foswiki Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5509"/>
		<updated>2026-01-30T07:20:12Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
* https://foswiki.org/Home/WebHome&lt;br /&gt;
* https://en.wikipedia.org/wiki/Foswiki&lt;br /&gt;
* https://foswiki.web.cern.ch/&lt;br /&gt;
* https://www.wikimatrix.org/show/Foswiki&lt;br /&gt;
* https://collab.phys.unsw.edu.au:4431/bin/view/System/TwentyMinuteTutorial&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
= Summary = &lt;br /&gt;
&lt;br /&gt;
Foswiki is a fork of TWiki that was created in 2008.&lt;br /&gt;
&lt;br /&gt;
The split happened due to disagreements within the TWiki community about governance and development direction. A significant portion of TWiki&amp;#039;s core development team and community members decided to fork the project, creating Foswiki as a separate open-source wiki platform.&lt;br /&gt;
&lt;br /&gt;
The key connection is that Foswiki started from the same TWiki codebase, so they share:&lt;br /&gt;
&lt;br /&gt;
* Similar architecture and Perl-based implementation&lt;br /&gt;
* Compatible data structures and file formats (at least initially)&lt;br /&gt;
* Similar markup syntax and features&lt;br /&gt;
* Many of the same concepts (webs, topics, plugins, etc.)&lt;br /&gt;
&lt;br /&gt;
After the fork, both projects continued independent development. Foswiki was positioned as having a more community-driven governance model, while TWiki continued under its existing leadership.&lt;br /&gt;
&lt;br /&gt;
= FosWiki Docker =&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/timlegge/docker-foswiki&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki]]&lt;br /&gt;
[[Category:TWiki]]&lt;br /&gt;
[[Category:FosWiki]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5508</id>
		<title>Foswiki Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5508"/>
		<updated>2026-01-30T07:19:07Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
* https://foswiki.org/Home/WebHome&lt;br /&gt;
* https://en.wikipedia.org/wiki/Foswiki&lt;br /&gt;
* https://foswiki.web.cern.ch/&lt;br /&gt;
* https://www.wikimatrix.org/show/Foswiki&lt;br /&gt;
* https://collab.phys.unsw.edu.au:4431/bin/view/System/TwentyMinuteTutorial&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
= Summary = &lt;br /&gt;
&lt;br /&gt;
Foswiki is a fork of TWiki that was created in 2008.&lt;br /&gt;
&lt;br /&gt;
The split happened due to disagreements within the TWiki community about governance and development direction. A significant portion of TWiki&amp;#039;s core development team and community members decided to fork the project, creating Foswiki as a separate open-source wiki platform.&lt;br /&gt;
&lt;br /&gt;
The key connection is that Foswiki started from the same TWiki codebase, so they share:&lt;br /&gt;
&lt;br /&gt;
        Similar architecture and Perl-based implementation&lt;br /&gt;
        Compatible data structures and file formats (at least initially)&lt;br /&gt;
        Similar markup syntax and features&lt;br /&gt;
        Many of the same concepts (webs, topics, plugins, etc.)&lt;br /&gt;
&lt;br /&gt;
After the fork, both projects continued independent development. Foswiki was positioned as having a more community-driven governance model, while TWiki continued under its existing leadership.&lt;br /&gt;
&lt;br /&gt;
= FosWiki Docker =&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/timlegge/docker-foswiki&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki]]&lt;br /&gt;
[[Category:TWiki]]&lt;br /&gt;
[[Category:FosWiki]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5507</id>
		<title>Foswiki Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5507"/>
		<updated>2026-01-30T07:18:43Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
* https://foswiki.org/Home/WebHome&lt;br /&gt;
* https://en.wikipedia.org/wiki/Foswiki&lt;br /&gt;
* https://foswiki.web.cern.ch/&lt;br /&gt;
* https://www.wikimatrix.org/show/Foswiki&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
= Summary = &lt;br /&gt;
&lt;br /&gt;
Foswiki is a fork of TWiki that was created in 2008.&lt;br /&gt;
&lt;br /&gt;
The split happened due to disagreements within the TWiki community about governance and development direction. A significant portion of TWiki&amp;#039;s core development team and community members decided to fork the project, creating Foswiki as a separate open-source wiki platform.&lt;br /&gt;
&lt;br /&gt;
The key connection is that Foswiki started from the same TWiki codebase, so they share:&lt;br /&gt;
&lt;br /&gt;
        Similar architecture and Perl-based implementation&lt;br /&gt;
        Compatible data structures and file formats (at least initially)&lt;br /&gt;
        Similar markup syntax and features&lt;br /&gt;
        Many of the same concepts (webs, topics, plugins, etc.)&lt;br /&gt;
&lt;br /&gt;
After the fork, both projects continued independent development. Foswiki was positioned as having a more community-driven governance model, while TWiki continued under its existing leadership.&lt;br /&gt;
&lt;br /&gt;
= FosWiki Docker =&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/timlegge/docker-foswiki&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki]]&lt;br /&gt;
[[Category:TWiki]]&lt;br /&gt;
[[Category:FosWiki]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5506</id>
		<title>Foswiki Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5506"/>
		<updated>2026-01-30T07:13:54Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
* https://foswiki.org/Home/WebHome&lt;br /&gt;
* https://en.wikipedia.org/wiki/Foswiki&lt;br /&gt;
* https://foswiki.web.cern.ch/&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
= Summary = &lt;br /&gt;
&lt;br /&gt;
Foswiki is a fork of TWiki that was created in 2008.&lt;br /&gt;
&lt;br /&gt;
The split happened due to disagreements within the TWiki community about governance and development direction. A significant portion of TWiki&amp;#039;s core development team and community members decided to fork the project, creating Foswiki as a separate open-source wiki platform.&lt;br /&gt;
&lt;br /&gt;
The key connection is that Foswiki started from the same TWiki codebase, so they share:&lt;br /&gt;
&lt;br /&gt;
        Similar architecture and Perl-based implementation&lt;br /&gt;
        Compatible data structures and file formats (at least initially)&lt;br /&gt;
        Similar markup syntax and features&lt;br /&gt;
        Many of the same concepts (webs, topics, plugins, etc.)&lt;br /&gt;
&lt;br /&gt;
After the fork, both projects continued independent development. Foswiki was positioned as having a more community-driven governance model, while TWiki continued under its existing leadership.&lt;br /&gt;
&lt;br /&gt;
= FosWiki Docker =&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/timlegge/docker-foswiki&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki]]&lt;br /&gt;
[[Category:TWiki]]&lt;br /&gt;
[[Category:FosWiki]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5505</id>
		<title>Foswiki Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5505"/>
		<updated>2026-01-30T07:13:06Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview = &lt;br /&gt;
&lt;br /&gt;
* https://foswiki.org/Home/WebHome&lt;br /&gt;
* https://en.wikipedia.org/wiki/Foswiki&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
= Summary = &lt;br /&gt;
&lt;br /&gt;
Foswiki is a fork of TWiki that was created in 2008.&lt;br /&gt;
&lt;br /&gt;
The split happened due to disagreements within the TWiki community about governance and development direction. A significant portion of TWiki&amp;#039;s core development team and community members decided to fork the project, creating Foswiki as a separate open-source wiki platform.&lt;br /&gt;
&lt;br /&gt;
The key connection is that Foswiki started from the same TWiki codebase, so they share:&lt;br /&gt;
&lt;br /&gt;
        Similar architecture and Perl-based implementation&lt;br /&gt;
        Compatible data structures and file formats (at least initially)&lt;br /&gt;
        Similar markup syntax and features&lt;br /&gt;
        Many of the same concepts (webs, topics, plugins, etc.)&lt;br /&gt;
&lt;br /&gt;
After the fork, both projects continued independent development. Foswiki was positioned as having a more community-driven governance model, while TWiki continued under its existing leadership.&lt;br /&gt;
&lt;br /&gt;
= FosWiki Docker =&lt;br /&gt;
&lt;br /&gt;
* https://hub.docker.com/r/timlegge/docker-foswiki&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki]]&lt;br /&gt;
[[Category:TWiki]]&lt;br /&gt;
[[Category:FosWiki]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5504</id>
		<title>Foswiki Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5504"/>
		<updated>2026-01-30T07:11:44Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Foswiki is a fork of TWiki that was created in 2008.&lt;br /&gt;
&lt;br /&gt;
The split happened due to disagreements within the TWiki community about governance and development direction. A significant portion of TWiki&amp;#039;s core development team and community members decided to fork the project, creating Foswiki as a separate open-source wiki platform.&lt;br /&gt;
&lt;br /&gt;
The key connection is that Foswiki started from the same TWiki codebase, so they share:&lt;br /&gt;
&lt;br /&gt;
        Similar architecture and Perl-based implementation&lt;br /&gt;
        Compatible data structures and file formats (at least initially)&lt;br /&gt;
        Similar markup syntax and features&lt;br /&gt;
        Many of the same concepts (webs, topics, plugins, etc.)&lt;br /&gt;
&lt;br /&gt;
After the fork, both projects continued independent development. Foswiki was positioned as having a more community-driven governance model, while TWiki continued under its existing leadership.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki]]&lt;br /&gt;
[[Category:TWiki]]&lt;br /&gt;
[[Category:FosWiki]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5503</id>
		<title>Foswiki Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5503"/>
		<updated>2026-01-30T07:11:22Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Foswiki is a fork of TWiki that was created in 2008.&lt;br /&gt;
&lt;br /&gt;
The split happened due to disagreements within the TWiki community about governance and development direction. A significant portion of TWiki&amp;#039;s core development team and community members decided to fork the project, creating Foswiki as a separate open-source wiki platform.&lt;br /&gt;
&lt;br /&gt;
The key connection is that Foswiki started from the same TWiki codebase, so they share:&lt;br /&gt;
&lt;br /&gt;
        Similar architecture and Perl-based implementation&lt;br /&gt;
        Compatible data structures and file formats (at least initially)&lt;br /&gt;
        Similar markup syntax and features&lt;br /&gt;
        Many of the same concepts (webs, topics, plugins, etc.)&lt;br /&gt;
&lt;br /&gt;
After the fork, both projects continued independent development. Foswiki was positioned as having a more community-driven governance model, while TWiki continued under its existing leadership.&lt;br /&gt;
&lt;br /&gt;
Since you&amp;#039;ve been working on TWiki migration and containerization, you might find that Foswiki could be a potential migration target - the shared ancestry means there are tools and documentation for migrating from TWiki to Foswiki, though the projects have diverged over the years since 2008.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki]]&lt;br /&gt;
[[Category:TWiki]]&lt;br /&gt;
[[Category:FosWiki]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5502</id>
		<title>Foswiki Notes</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Foswiki_Notes&amp;diff=5502"/>
		<updated>2026-01-30T07:10:57Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;       Foswiki is a fork of TWiki that was created in 2008.      The split happened due to disagreements within the TWiki community about governance and development direction. A significant portion of TWiki&amp;#039;s core development team and community members decided to fork the project, creating Foswiki as a separate open-source wiki platform.      The key connection is that Foswiki started from the same TWiki codebase, so they share:          Similar architecture and Perl-bas...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Foswiki is a fork of TWiki that was created in 2008.&lt;br /&gt;
&lt;br /&gt;
    The split happened due to disagreements within the TWiki community about governance and development direction. A significant portion of TWiki&amp;#039;s core development team and community members decided to fork the project, creating Foswiki as a separate open-source wiki platform.&lt;br /&gt;
&lt;br /&gt;
    The key connection is that Foswiki started from the same TWiki codebase, so they share:&lt;br /&gt;
&lt;br /&gt;
        Similar architecture and Perl-based implementation&lt;br /&gt;
        Compatible data structures and file formats (at least initially)&lt;br /&gt;
        Similar markup syntax and features&lt;br /&gt;
        Many of the same concepts (webs, topics, plugins, etc.)&lt;br /&gt;
&lt;br /&gt;
    After the fork, both projects continued independent development. Foswiki was positioned as having a more community-driven governance model, while TWiki continued under its existing leadership.&lt;br /&gt;
&lt;br /&gt;
    Since you&amp;#039;ve been working on TWiki migration and containerization, you might find that Foswiki could be a potential migration target - the shared ancestry means there are tools and documentation for migrating from TWiki to Foswiki, though the projects have diverged over the years since 2008.&lt;br /&gt;
&lt;br /&gt;
    Is this relevant to your TWiki work, or are you considering Foswiki as an alternative?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki]]&lt;br /&gt;
[[Category:TWiki]]&lt;br /&gt;
[[Category:FosWiki]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Category:Rust&amp;diff=5501</id>
		<title>Category:Rust</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Category:Rust&amp;diff=5501"/>
		<updated>2026-01-28T05:47:56Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot;Rust links, notes and references...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rust links, notes and references...&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Rust_Examples&amp;diff=5500</id>
		<title>Rust Examples</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Rust_Examples&amp;diff=5500"/>
		<updated>2026-01-28T05:47:35Z</updated>

		<summary type="html">&lt;p&gt;PeterHarding: Created page with &amp;quot; * https://medium.com/@toyezyadav/i-replaced-my-spring-boot-microservice-with-rust-and-go-heres-the-system-design-that-saved-my-f3ccedd6e494  &amp;lt;pre&amp;gt; // src/lib.rs (Rust Service) use std::time::Instant; use sha2::{Sha256, Digest};  // Simulating the same heavy, synchronous transformation/hashing operation pub fn calculate_user_partition_key(user_id: &amp;amp;str, complexity: u32) -&amp;gt; String {     let start = Instant::now();     let mut base = user_id.to_string();      for i in 0..c...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* https://medium.com/@toyezyadav/i-replaced-my-spring-boot-microservice-with-rust-and-go-heres-the-system-design-that-saved-my-f3ccedd6e494&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// src/lib.rs (Rust Service)&lt;br /&gt;
use std::time::Instant;&lt;br /&gt;
use sha2::{Sha256, Digest};&lt;br /&gt;
&lt;br /&gt;
// Simulating the same heavy, synchronous transformation/hashing operation&lt;br /&gt;
pub fn calculate_user_partition_key(user_id: &amp;amp;str, complexity: u32) -&amp;gt; String {&lt;br /&gt;
    let start = Instant::now();&lt;br /&gt;
    let mut base = user_id.to_string();&lt;br /&gt;
&lt;br /&gt;
    for i in 0..complexity {&lt;br /&gt;
        let mut hasher = Sha256::new();&lt;br /&gt;
        // Rust&amp;#039;s zero-cost abstractions and memory safety shine here&lt;br /&gt;
        hasher.update(base.as_bytes());&lt;br /&gt;
        hasher.update(i.to_string().as_bytes());&lt;br /&gt;
        base = format!(&amp;quot;{:x}&amp;quot;, hasher.finalize());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    let duration = start.elapsed();&lt;br /&gt;
    // This is the &amp;quot;hot path&amp;quot; code. It&amp;#039;s clean, safe, and ridiculously fast.&lt;br /&gt;
    base[0..16].to_string()&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Rust]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
</feed>