Wiki source code of ProjectsSheet

Last modified by Zenna Elfen on 2025/11/24 11:39

Show last authors
1 {{velocity}}
2 #set ($object = $doc.getObject('Projects.Code.ProjectsClass'))
3 #if (!$object)
4 #set ($messageKey = 'projects.sheet.description')
5 #set ($messageType = 'info')
6 #if ($doc.documentReference.name != 'ProjectsSheet')
7 #set ($messageKey = 'projects.sheet.noObject')
8 #set ($messageType = 'warning')
9 #end
10 {{$messageType}}
11 $services.localization.render($messageKey)
12 {{/$messageType}}
13 #stop
14 #end
15 #set ($discard = $xwiki.jsfx.use('uicomponents/edit/editableProperty.js', {
16 'forceSkinAction': true,
17 'language': $xcontext.locale
18 }))
19 #set ($discard = $doc.use($object))
20 #set ($editing = $xcontext.action == 'edit')
21 {{html wiki="true" clean="false"}}
22 <div class="xform">
23 <dl>
24 <dt #if (!$editing && $hasEdit)
25 class="editableProperty"
26 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('title2')))"
27 data-property-type="object"#end>
28 <label#if ($editing) for="Projects.Code.ProjectsClass_0_title2"#end>
29 $escapetool.xml($doc.displayPrettyName('title2', false, false))
30 </label>
31 <span class="xHint">
32 $escapetool.xml($services.localization.render('What''s the name of the project?'))
33 </span>
34 </dt>
35 <dd>$doc.display('title2')</dd>
36 <dt #if (!$editing && $hasEdit)
37 class="editableProperty"
38 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('shortText3')))"
39 data-property-type="object"#end>
40 <label#if ($editing) for="Projects.Code.ProjectsClass_0_shortText3"#end>
41 $escapetool.xml($doc.displayPrettyName('shortText3', false, false))
42 </label>
43 <span class="xHint">
44 $escapetool.xml($services.localization.render('What are key aspects of this project?'))
45 </span>
46 </dt>
47 <dd>$doc.display('shortText3')</dd>
48 <dt #if (!$editing && $hasEdit)
49 class="editableProperty"
50 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('shortText2')))"
51 data-property-type="object"#end>
52 <label#if ($editing) for="Projects.Code.ProjectsClass_0_shortText2"#end>
53 $escapetool.xml($doc.displayPrettyName('shortText2', false, false))
54 </label>
55 <span class="xHint">
56 $escapetool.xml($services.localization.render('What''s the projects website?'))
57 </span>
58 </dt>
59 <dd>$doc.display('shortText2')</dd>
60 <dt #if (!$editing && $hasEdit)
61 class="editableProperty"
62 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('content1')))"
63 data-property-type="object"#end>
64 <label#if ($editing) for="Projects.Code.ProjectsClass_0_content1"#end>
65 $escapetool.xml($doc.displayPrettyName('content1', false, false))
66 </label>
67 <span class="xHint">
68 $escapetool.xml($services.localization.render('Add an image for the project by clicking the image in the menu. This image will be visible in the table.'))
69 </span>
70 </dt>
71 <dd>$doc.display('content1')</dd>
72 <dt #if (!$editing && $hasEdit)
73 class="editableProperty"
74 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('data_synchronization')))"
75 data-property-type="object"#end>
76 <label#if ($editing) for="Projects.Code.ProjectsClass_0_data_synchronization"#end>
77 $escapetool.xml($doc.displayPrettyName('data_synchronization', false, false))
78 </label>
79 <span class="xHint">
80 $escapetool.xml($services.localization.render('Synchronization answers how updates flow between peers and how they determine what data to exchange. This layer is about diffing, reconciliation, order, causality tracking, and efficient exchange, not persistence or user-facing collaboration semantics. Examples: Range-Based Set Reconciliation, RIBLT, Gossip-based sync, State-based vs op-based sync, Lamport/Vector/HLC clocks, Braid Protocol'))
81 </span>
82 </dt>
83 <dd>$doc.display('data_synchronization')</dd>
84 <dt #if (!$editing && $hasEdit)
85 class="editableProperty"
86 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('longText1')))"
87 data-property-type="object"#end>
88 <label#if ($editing) for="Projects.Code.ProjectsClass_0_longText1"#end>
89 $escapetool.xml($doc.displayPrettyName('longText1', false, false))
90 </label>
91 <span class="xHint">
92 $escapetool.xml($services.localization.render('How do peers detect differences and synchronize state?'))
93 </span>
94 </dt>
95 <dd>$doc.display('longText1')</dd>
96 <dt #if (!$editing && $hasEdit)
97 class="editableProperty"
98 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('conf_res')))"
99 data-property-type="object"#end>
100 <label#if ($editing) for="Projects.Code.ProjectsClass_0_conf_res"#end>
101 $escapetool.xml($doc.displayPrettyName('conf_res', false, false))
102 </label>
103 <span class="xHint">
104 $escapetool.xml($services.localization.render('This layer defines how shared data evolves when multiple peers edit concurrently. It focuses on conflict-free merging, causality, and consistency of meaning, not transport or storage. CRDTs ensure deterministic convergence, while event-sourced or stream-driven models maintain a history of all changes and derive consistent state from it. Examples: CRDTs (Yjs, Automerge), OT, Event Sourcing, Stream Processing, Version Vectors, Peritext'))
105 </span>
106 </dt>
107 <dd>$doc.display('conf_res')</dd>
108 <dt #if (!$editing && $hasEdit)
109 class="editableProperty"
110 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('long_res')))"
111 data-property-type="object"#end>
112 <label#if ($editing) for="Projects.Code.ProjectsClass_0_long_res"#end>
113 $escapetool.xml($doc.displayPrettyName('long_res', false, false))
114 </label>
115 <span class="xHint">
116 $escapetool.xml($services.localization.render('How do peers collaboratively change shared data and merge conflicts?'))
117 </span>
118 </dt>
119 <dd>$doc.display('long_res')</dd>
120 <dt #if (!$editing && $hasEdit)
121 class="editableProperty"
122 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('list_rep')))"
123 data-property-type="object"#end>
124 <label#if ($editing) for="Projects.Code.ProjectsClass_0_list_rep"#end>
125 $escapetool.xml($doc.displayPrettyName('list_rep', false, false))
126 </label>
127 <span class="xHint">
128 $escapetool.xml($services.localization.render('This layer focuses on durability, consistency, and redundancy. It handles write-paths, crash-resilience, and replication semantics across nodes. It is the “database/storage engine” layer where data lives and survives over time, independent of sync or merging logic. Examples: SQLite, IndexedDB, LMDB, Hypercore (append-only logs), WALs, Merkle-DAGs (IPFS/IPLD), Blob/media storage'))
129 </span>
130 </dt>
131 <dd>$doc.display('list_rep')</dd>
132 <dt #if (!$editing && $hasEdit)
133 class="editableProperty"
134 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('long_rep')))"
135 data-property-type="object"#end>
136 <label#if ($editing) for="Projects.Code.ProjectsClass_0_long_rep"#end>
137 $escapetool.xml($doc.displayPrettyName('long_rep', false, false))
138 </label>
139 <span class="xHint">
140 $escapetool.xml($services.localization.render('How is data persisted locally and replicated between peers?'))
141 </span>
142 </dt>
143 <dd>$doc.display('long_rep')</dd>
144 <dt #if (!$editing && $hasEdit)
145 class="editableProperty"
146 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('list_peer')))"
147 data-property-type="object"#end>
148 <label#if ($editing) for="Projects.Code.ProjectsClass_0_list_peer"#end>
149 $escapetool.xml($doc.displayPrettyName('list_peer', false, false))
150 </label>
151 <span class="xHint">
152 $escapetool.xml($services.localization.render('Discovery occurs in two phases: 1. Peer Discovery → finding any nodes 2. Topic Discovery → finding relevant nodes or resources These mechanisms enable decentralized bootstrapping and interest-based overlays. **Examples**: DHTs (Kademlia, Pastry), mDNS, DNS-SD, Bluetooth scanning, QR bootstrapping, static peer lists, Interest-based routing, PubSub discovery (libp2p), Rendezvous protocols'))
153 </span>
154 </dt>
155 <dd>$doc.display('list_peer')</dd>
156 <dt #if (!$editing && $hasEdit)
157 class="editableProperty"
158 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('long_peer')))"
159 data-property-type="object"#end>
160 <label#if ($editing) for="Projects.Code.ProjectsClass_0_long_peer"#end>
161 $escapetool.xml($doc.displayPrettyName('long_peer', false, false))
162 </label>
163 <span class="xHint">
164 $escapetool.xml($services.localization.render('How do peers find each other, and how do they discover content in the network?'))
165 </span>
166 </dt>
167 <dd>$doc.display('long_peer')</dd>
168 <dt #if (!$editing && $hasEdit)
169 class="editableProperty"
170 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('list_ident')))"
171 data-property-type="object"#end>
172 <label#if ($editing) for="Projects.Code.ProjectsClass_0_list_ident"#end>
173 $escapetool.xml($doc.displayPrettyName('list_ident', false, false))
174 </label>
175 <span class="xHint">
176 $escapetool.xml($services.localization.render('Identity systems ensure reliable mapping between peers and cryptographic keys. They underpin authorization, federated trust, and secure overlays. Examples: PKI, Distributed Identities (DIDs), Web-of-Trust, TOFU (SSH-style), Verifiable Credentials (VCs), Peer key fingerprints (libp2p PeerIDs), Key transparency logs'))
177 </span>
178 </dt>
179 <dd>$doc.display('list_ident')</dd>
180 <dt #if (!$editing && $hasEdit)
181 class="editableProperty"
182 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('long_ident')))"
183 data-property-type="object"#end>
184 <label#if ($editing) for="Projects.Code.ProjectsClass_0_long_ident"#end>
185 $escapetool.xml($doc.displayPrettyName('long_ident', false, false))
186 </label>
187 <span class="xHint">
188 $escapetool.xml($services.localization.render('How peers identify themselves, authenticate, and establish trustworthy relationships?'))
189 </span>
190 </dt>
191 <dd>$doc.display('long_ident')</dd>
192 <dt #if (!$editing && $hasEdit)
193 class="editableProperty"
194 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('list_transport')))"
195 data-property-type="object"#end>
196 <label#if ($editing) for="Projects.Code.ProjectsClass_0_list_transport"#end>
197 $escapetool.xml($doc.displayPrettyName('list_transport', false, false))
198 </label>
199 <span class="xHint">
200 $escapetool.xml($services.localization.render('This layer provides logical connections and flow control. QUIC and WebRTC bring modern congestion control and encryption defaults; Interpeer explores transport beyond IP assumptions. **Examples**: TCP, UDP, QUIC, SCTP, WebRTC DataChannels, Interpeer transport stack. Examples: TCP, UDP, QUIC, SCTP, WebRTC DataChannels, Interpeer transport stack'))
201 </span>
202 </dt>
203 <dd>$doc.display('list_transport')</dd>
204 <dt #if (!$editing && $hasEdit)
205 class="editableProperty"
206 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('long_transport')))"
207 data-property-type="object"#end>
208 <label#if ($editing) for="Projects.Code.ProjectsClass_0_long_transport"#end>
209 $escapetool.xml($doc.displayPrettyName('long_transport', false, false))
210 </label>
211 <span class="xHint">
212 $escapetool.xml($services.localization.render('How do peers establish end-to-end byte streams and reliable delivery?'))
213 </span>
214 </dt>
215 <dd>$doc.display('long_transport')</dd>
216 <dt #if (!$editing && $hasEdit)
217 class="editableProperty"
218 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('list_phys')))"
219 data-property-type="object"#end>
220 <label#if ($editing) for="Projects.Code.ProjectsClass_0_list_phys"#end>
221 $escapetool.xml($doc.displayPrettyName('list_phys', false, false))
222 </label>
223 <span class="xHint">
224 $escapetool.xml($services.localization.render('Highly relevant for offline-first / edge networks, device-to-device communication, and mesh networks and relates to the hardware which facilitates connections. Examples: Ethernet, Wi-Fi Direct / Wi-Fi Aware (post-AWDL), Bluetooth Mesh, LoRa, NFC, Cellular, CSMA/CA, TDMA, FHSS'))
225 </span>
226 </dt>
227 <dd>$doc.display('list_phys')</dd>
228 <dt #if (!$editing && $hasEdit)
229 class="editableProperty"
230 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('long_phys')))"
231 data-property-type="object"#end>
232 <label#if ($editing) for="Projects.Code.ProjectsClass_0_long_phys"#end>
233 $escapetool.xml($doc.displayPrettyName('long_phys', false, false))
234 </label>
235 <span class="xHint">
236 $escapetool.xml($services.localization.render('How does data move across the medium?'))
237 </span>
238 </dt>
239 <dd>$doc.display('long_phys')</dd>
240 <dt #if (!$editing && $hasEdit)
241 class="editableProperty"
242 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('list_cont')))"
243 data-property-type="object"#end>
244 <label#if ($editing) for="Projects.Code.ProjectsClass_0_list_cont"#end>
245 $escapetool.xml($doc.displayPrettyName('list_cont', false, false))
246 </label>
247 <span class="xHint">
248 $escapetool.xml($services.localization.render('Content addressing ensures immutability, verifiability, and deduplication. Identity of data = cryptographic hash, enabling offline-first and tamper-evident systems. **Examples**: IPFS CIDs, BitTorrent infohashes, Git hashes, SHA-256 addressing, Named Data Networking (NDN)'))
249 </span>
250 </dt>
251 <dd>$doc.display('list_cont')</dd>
252 <dt #if (!$editing && $hasEdit)
253 class="editableProperty"
254 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('long_cont')))"
255 data-property-type="object"#end>
256 <label#if ($editing) for="Projects.Code.ProjectsClass_0_long_cont"#end>
257 $escapetool.xml($doc.displayPrettyName('long_cont', false, false))
258 </label>
259 <span class="xHint">
260 $escapetool.xml($services.localization.render('How is data addressed and verified by content, not location?'))
261 </span>
262 </dt>
263 <dd>$doc.display('long_cont')</dd>
264 <dt #if (!$editing && $hasEdit)
265 class="editableProperty"
266 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('list_p2p')))"
267 data-property-type="object"#end>
268 <label#if ($editing) for="Projects.Code.ProjectsClass_0_list_p2p"#end>
269 $escapetool.xml($doc.displayPrettyName('list_p2p', false, false))
270 </label>
271 <span class="xHint">
272 $escapetool.xml($services.localization.render('Connectivity ensures peers bypass NATs/firewalls to reach each other. **Examples**: IPv6 direct, NAT Traversal, STUN, TURN, ICE (used in WebRTC), UDP hole punching, UPnP'))
273 </span>
274 </dt>
275 <dd>$doc.display('list_p2p')</dd>
276 <dt #if (!$editing && $hasEdit)
277 class="editableProperty"
278 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('long_p2p')))"
279 data-property-type="object"#end>
280 <label#if ($editing) for="Projects.Code.ProjectsClass_0_long_p2p"#end>
281 $escapetool.xml($doc.displayPrettyName('long_p2p', false, false))
282 </label>
283 <span class="xHint">
284 $escapetool.xml($services.localization.render('How can two peers connect directly across networks, firewalls, and NATs?'))
285 </span>
286 </dt>
287 <dd>$doc.display('long_p2p')</dd>
288 <dt #if (!$editing && $hasEdit)
289 class="editableProperty"
290 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('list_sess')))"
291 data-property-type="object"#end>
292 <label#if ($editing) for="Projects.Code.ProjectsClass_0_list_sess"#end>
293 $escapetool.xml($doc.displayPrettyName('list_sess', false, false))
294 </label>
295 <span class="xHint">
296 $escapetool.xml($services.localization.render('Manages connection lifecycle, including authentication handshakes, reconnection after drops, and session continuation. **Examples**: TLS handshake semantics, Noise IK/XX patterns, session tokens, keep-alive heartbeats, reconnection strategies, session resumption tickets'))
297 </span>
298 </dt>
299 <dd>$doc.display('list_sess')</dd>
300 <dt #if (!$editing && $hasEdit)
301 class="editableProperty"
302 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('long_sess')))"
303 data-property-type="object"#end>
304 <label#if ($editing) for="Projects.Code.ProjectsClass_0_long_sess"#end>
305 $escapetool.xml($doc.displayPrettyName('long_sess', false, false))
306 </label>
307 <span class="xHint">
308 $escapetool.xml($services.localization.render('How are connections initiated, authenticated, resumed, and kept alive?'))
309 </span>
310 </dt>
311 <dd>$doc.display('long_sess')</dd>
312 <dt #if (!$editing && $hasEdit)
313 class="editableProperty"
314 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('list_mess')))"
315 data-property-type="object"#end>
316 <label#if ($editing) for="Projects.Code.ProjectsClass_0_list_mess"#end>
317 $escapetool.xml($doc.displayPrettyName('list_mess', false, false))
318 </label>
319 <span class="xHint">
320 $escapetool.xml($services.localization.render(' Serialization ensures portable data representation, forward-compatible schemas, and efficient messaging. **Examples**: IPFS CIDs, BitTorrent infohashes, Git hashes, SHA-256 addressing, Named Data Networking (NDN)'))
321 </span>
322 </dt>
323 <dd>$doc.display('list_mess')</dd>
324 <dt #if (!$editing && $hasEdit)
325 class="editableProperty"
326 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('long_mess')))"
327 data-property-type="object"#end>
328 <label#if ($editing) for="Projects.Code.ProjectsClass_0_long_mess"#end>
329 $escapetool.xml($doc.displayPrettyName('long_mess', false, false))
330 </label>
331 <span class="xHint">
332 $escapetool.xml($services.localization.render('How is data encoded, structured, and/or made interoperable between peers?'))
333 </span>
334 </dt>
335 <dd>$doc.display('long_mess')</dd>
336 <dt #if (!$editing && $hasEdit)
337 class="editableProperty"
338 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('list_blob')))"
339 data-property-type="object"#end>
340 <label#if ($editing) for="Projects.Code.ProjectsClass_0_list_blob"#end>
341 $escapetool.xml($doc.displayPrettyName('list_blob', false, false))
342 </label>
343 <span class="xHint">
344 $escapetool.xml($services.localization.render(' Bulk data syncing has different trade-offs than small collaborative state (chunking, deduplication, partial transfer, resume logic). Essential for media and archival P2P use-cases. **Examples**: BitTorrent chunking, IPFS block-store, NDN segments, rsySerialization ensures portable data representation, forward-compatible schemas, and efficient messaging. **Examples**: IPFS CIDs, BitTorrent infohashes, Git hashes, SHA-256 addressing, Named Data Networking (NDN)nc-style delta sync, ZFS send-receive, streaming blob transfers'))
345 </span>
346 </dt>
347 <dd>$doc.display('list_blob')</dd>
348 <dt #if (!$editing && $hasEdit)
349 class="editableProperty"
350 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('long_blob')))"
351 data-property-type="object"#end>
352 <label#if ($editing) for="Projects.Code.ProjectsClass_0_long_blob"#end>
353 $escapetool.xml($doc.displayPrettyName('long_blob', false, false))
354 </label>
355 <span class="xHint">
356 $escapetool.xml($services.localization.render('How are large objects transferred and deduplicated efficiently across peers?'))
357 </span>
358 </dt>
359 <dd>$doc.display('long_blob')</dd>
360 <dt #if (!$editing && $hasEdit)
361 class="editableProperty"
362 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('list_localsto')))"
363 data-property-type="object"#end>
364 <label#if ($editing) for="Projects.Code.ProjectsClass_0_list_localsto"#end>
365 $escapetool.xml($doc.displayPrettyName('list_localsto', false, false))
366 </label>
367 <span class="xHint">
368 $escapetool.xml($services.localization.render('Provides durable on-device state and local computation (event sourcing, materialization, compaction). Enables offline-first writes and deterministic replay. **Examples**: RocksDB, LevelDB, SQLite, LMDB, local WALs/append-only logs, embedded stream processors (NATS Core JetStream mode, Actyx-like edge runtimes), Kafka-like libraries'))
369 </span>
370 </dt>
371 <dd>$doc.display('list_localsto')</dd>
372 <dt #if (!$editing && $hasEdit)
373 class="editableProperty"
374 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('long_localsto')))"
375 data-property-type="object"#end>
376 <label#if ($editing) for="Projects.Code.ProjectsClass_0_long_localsto"#end>
377 $escapetool.xml($doc.displayPrettyName('long_localsto', false, false))
378 </label>
379 <span class="xHint">
380 $escapetool.xml($services.localization.render('How do nodes persist, index, and process data locally—without external servers?'))
381 </span>
382 </dt>
383 <dd>$doc.display('long_localsto')</dd>
384 <dt #if (!$editing && $hasEdit)
385 class="editableProperty"
386 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('list_crash')))"
387 data-property-type="object"#end>
388 <label#if ($editing) for="Projects.Code.ProjectsClass_0_list_crash"#end>
389 $escapetool.xml($doc.displayPrettyName('list_crash', false, false))
390 </label>
391 <span class="xHint">
392 $escapetool.xml($services.localization.render('Ensures P2P apps don’t corrupt state on crashes. Tied to local storage & stream-processing, and critical in offline-first and distributed update pipelines. Abortability is the updated term, as per Mr. Kleppmann for Atomicity as part of the [ACID abbreviation](https://www.youtube.com/watch?v=5ZjhNTM8XU8). **Examples**: IPFS CIDs, BitTorrent infohashes, Git hashes, SHA-256 addressing, Named Data Networking (NDN)'))
393 </span>
394 </dt>
395 <dd>$doc.display('list_crash')</dd>
396 <dt #if (!$editing && $hasEdit)
397 class="editableProperty"
398 data-property="$escapetool.xml($services.model.serialize($object.getPropertyReference('long_crashres')))"
399 data-property-type="object"#end>
400 <label#if ($editing) for="Projects.Code.ProjectsClass_0_long_crashres"#end>
401 $escapetool.xml($doc.displayPrettyName('long_crashres', false, false))
402 </label>
403 <span class="xHint">
404 $escapetool.xml($services.localization.render('How do nodes recover and maintain correctness under failure?'))
405 </span>
406 </dt>
407 <dd>$doc.display('long_crashres')</dd>
408 </dl>
409 </div>
410 {{/html}}
411 {{/velocity}}