Skip to content

Commit 9a1f416

Browse files
committed
Added a draft program
1 parent 9276c5f commit 9a1f416

File tree

5 files changed

+390
-19
lines changed

5 files changed

+390
-19
lines changed
-16.6 KB
Binary file not shown.

website/2026-plovdiv/emails.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,4 @@ function insertMailto(id, place, me) {
33
elink.href = `mailto:${me}@${place}`;
44
}
55

6-
insertMailto("mlink1", "pharo.org", "isloop");
7-
insertMailto("mlink2", "inria.fr", "stephane.ducasse");
6+
insertMailto("mlink1", "pharo.org", "isloop");

website/2026-plovdiv/index.html

Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,52 @@ <h2>Timeline (daily schedule)</h2>
167167

168168
<p>This is the default rhythm of a day. Exact details (rooms, breaks, and topics) will be published on the Program page.</p>
169169

170-
<ul>
171-
<li><b>10:00 - 11:30:</b> Practice (1h30)</li>
172-
<li><b>11:30 - 12:30:</b> Lecture / Guided session (1h)</li>
173-
<li><b>12:30 - 14:30:</b> Lunch (2h)</li>
174-
<li><b>14:30 - 15:30:</b> Lecture / Guided session (1h)</li>
175-
<li><b>15:30 - 17:30:</b> Practice / Project / Sprint (2h)</li>
176-
<li><b>17:30 - 18:00:</b> Daily demos (shared)</li>
177-
</ul>
170+
<div class="table-wrapper">
171+
<div class="table-scroll">
172+
<table class="timeline-table">
173+
<thead>
174+
<tr>
175+
<th style="width: 10rem;">Time</th>
176+
<th>Track A: Beginners</th>
177+
<th>Track B: Advanced and collaborative</th>
178+
</tr>
179+
</thead>
180+
<tbody>
181+
<tr>
182+
<td data-label="Time"><b>10:00 - 11:30</b></td>
183+
<td data-label="Track A">Guided practice (MOOC-style exercises, small steps)</td>
184+
<td data-label="Track B">Deep dive / peer session (tools, practices, micro-talks)</td>
185+
</tr>
186+
<tr>
187+
<td data-label="Time"><b>11:30 - 12:30</b></td>
188+
<td data-label="Track A">Short lecture + guided workshop</td>
189+
<td data-label="Track B">Collaborative workshop (kata, design review, group discussion)</td>
190+
</tr>
191+
192+
<tr class="shared">
193+
<td data-label="Time"><b>12:30 - 14:30</b></td>
194+
<td colspan="2"><b>Lunch</b> (shared)</td>
195+
</tr>
196+
197+
<tr>
198+
<td data-label="Time"><b>14:30 - 15:30</b></td>
199+
<td data-label="Track A">Hands-on lab (debugging, tests, refactoring basics)</td>
200+
<td data-label="Track B">Sprint planning / focused session (issues, pairing, reviews)</td>
201+
</tr>
202+
<tr>
203+
<td data-label="Time"><b>15:30 - 17:30</b></td>
204+
<td data-label="Track A">Mini-project work (pairs / small groups, mentor support)</td>
205+
<td data-label="Track B">Open source sprint / team work (PRs, code review, mentoring)</td>
206+
</tr>
207+
208+
<tr class="shared">
209+
<td data-label="Time"><b>17:30 - 18:00</b></td>
210+
<td colspan="2"><b>Daily demos</b> (shared)</td>
211+
</tr>
212+
</tbody>
213+
</table>
214+
</div>
215+
</div>
178216

179217
<h2>What you need</h2>
180218

@@ -186,14 +224,7 @@ <h2>What you need</h2>
186224
rel="noopener noreferrer"
187225
href="https://pharo.org/download"
188226
>https://pharo.org/download</a>
189-
(if you have problems with installation, don't hesitate to contact us at
190-
<!-- Obfuscated email address -->
191-
<a id="mlink1" href="#">
192-
<span class="ltrText">
193-
gro&#46;or<!-- bots -->ahp&#64;<!--
194-
-->poo<!-- go away -->lsi
195-
</span>
196-
</a>)
227+
(if you have problems with installation, don't hesitate to contact us)
197228
</li>
198229
<li>For Track B, previous experience with any OO language is enough. Prior Pharo knowledge is welcome but not required.</li>
199230
</ul>

website/2026-plovdiv/program.html

Lines changed: 162 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,134 @@
9595
<main>
9696
<h1><span style="color: var(--color-dark-gray)">isLoop 2026</span> Program</h1>
9797

98-
<p>Program will be published soon</p>
98+
<p>
99+
isLoop has two parallel tracks. Use the buttons below to view the program for each track.
100+
</p>
101+
102+
<div class="track-switch" role="tablist" aria-label="Program tracks">
103+
<button
104+
type="button"
105+
class="track-button active"
106+
data-track="a"
107+
role="tab"
108+
aria-selected="true"
109+
aria-controls="track-a"
110+
id="track-a-tab"
111+
>
112+
Track A: Beginners
113+
</button>
114+
115+
<button
116+
type="button"
117+
class="track-button"
118+
data-track="b"
119+
role="tab"
120+
aria-selected="false"
121+
aria-controls="track-b"
122+
id="track-b-tab"
123+
>
124+
Track B: Advanced and collaborative
125+
</button>
126+
</div>
127+
128+
<section id="track-a" class="track-content active" role="tabpanel" aria-labelledby="track-a-tab">
129+
<h2>Track A: Beginners</h2>
130+
131+
<p>
132+
This track is for absolute beginners in Pharo (and beginners in OO who want a solid foundation).
133+
It is structured like the Pharo MOOC: short explanations followed by lots of guided practice.
134+
</p>
135+
136+
<h3>Guided exercises</h3>
137+
<p>
138+
We will provide exercise PDFs and repositories. The list below reflects the typical path (final links will be published soon).
139+
</p>
140+
141+
<ul>
142+
<li><b>Counter</b>: packages, classes, tests, debugger workflow</li>
143+
<li><b>Dice / small embedded DSL</b>: messages as a domain language</li>
144+
<li><b>Rock-Paper-Scissors</b>: move from if/else to message sending (double dispatch)</li>
145+
<li><b>Mini project</b>: a small interactive app or simulation (in pairs or small groups)</li>
146+
</ul>
147+
148+
<h3>Day 1: Introduction to Pharo and live programming</h3>
149+
<ul>
150+
<li>Welcome and installation check (Pharo Launcher, image, tools)</li>
151+
<li>First look at Playground, Inspector, System Browser, Debugger</li>
152+
<li>Objects and messages: explore by inspecting and changing code while it runs</li>
153+
<li>Start the Counter exercise (tests + debugging)</li>
154+
</ul>
155+
156+
<h3>Day 2: Object modeling, collections, and dispatch thinking</h3>
157+
<ul>
158+
<li>Collections and blocks: the everyday toolbox</li>
159+
<li>Finish / extend the Counter exercise</li>
160+
<li>Rock-Paper-Scissors kata: refactor from conditionals to message sending</li>
161+
<li>Start the mini project</li>
162+
</ul>
163+
164+
<h3>Day 3: Design basics and finishing a complete small project</h3>
165+
<ul>
166+
<li>Refactoring clinic: smaller methods, clearer responsibilities</li>
167+
<li>Testing and debugging habits: repeatable workflow</li>
168+
<li>Finish the mini project with mentor feedback</li>
169+
<li>Prepare a short demo for the daily demo session</li>
170+
</ul>
171+
172+
<h3>Recommended resources</h3>
173+
<ul>
174+
<li><a href="https://mooc.pharo.org/" target="_blank" rel="noopener noreferrer">Pharo MOOC</a></li>
175+
<li><a href="https://pharo.org/documentation" target="_blank" rel="noopener noreferrer">Pharo documentation</a></li>
176+
<li><a href="https://pharo.org/download" target="_blank" rel="noopener noreferrer">Download Pharo</a></li>
177+
</ul>
178+
</section>
179+
180+
<section id="track-b" class="track-content" role="tabpanel" aria-labelledby="track-b-tab">
181+
<h2>Track B: Advanced and collaborative</h2>
182+
183+
<p>
184+
This track is for experienced programmers who want to deepen their Pharo practice and learn from each other.
185+
It is less lecture-driven and more sprint-oriented: peer sessions, katas, code reviews, and open source contributions.
186+
</p>
187+
188+
<h3>Core activities</h3>
189+
<ul>
190+
<li><b>Micro-talks</b>: short experience sharing (tools, idioms, workflows)</li>
191+
<li><b>Coding katas</b>: TDD and refactoring in pairs, rotating partners</li>
192+
<li><b>Open source sprint</b>: pick issues, pair, submit PRs, review</li>
193+
<li><b>Deep dives</b>: Inspector/Debugger workflows, profiling, reflection</li>
194+
</ul>
195+
196+
<h3>Day 1: Align on practices and pick sprint targets</h3>
197+
<ul>
198+
<li>Lightning round: participant micro-talks</li>
199+
<li>Tool-focused peer session (debugger workflows, inspectors, profiling)</li>
200+
<li>Sprint setup: choose repositories, issues, and small teams</li>
201+
<li>Warm-up kata + shared code review checklist</li>
202+
</ul>
203+
204+
<h3>Day 2: Open source sprint</h3>
205+
<ul>
206+
<li>Pair programming on real issues (bugfixes, features, docs)</li>
207+
<li>PRs and reviews across teams</li>
208+
<li>Short checkpoints to unblock and rescope</li>
209+
</ul>
210+
211+
<h3>Day 3: Kata, architecture jam, and wrapping contributions</h3>
212+
<ul>
213+
<li>Kata rotations: TDD and refactoring under time pressure</li>
214+
<li>Architecture jam: small design challenge and discussion of tradeoffs</li>
215+
<li>Wrap up PRs, documentation, and next steps</li>
216+
<li>Prepare a short demo for the daily demo session</li>
217+
</ul>
218+
219+
<h3>Recommended resources</h3>
220+
<ul>
221+
<li><a href="https://advanced-design-mooc.pharo.org/" target="_blank" rel="noopener noreferrer">Advanced Design MOOC</a></li>
222+
<li><a href="https://pharo.org/contribute" target="_blank" rel="noopener noreferrer">How to contribute to Pharo</a></li>
223+
<li><a href="https://pharo.org/documentation" target="_blank" rel="noopener noreferrer">Pharo documentation</a></li>
224+
</ul>
225+
</section>
99226

100227
</main>
101228

@@ -149,5 +276,39 @@ <h1><span style="color: var(--color-dark-gray)">isLoop 2026</span> Program</h1>
149276
</footer>
150277

151278
<script src="./script.js"></script>
279+
280+
<script>
281+
(function () {
282+
const buttons = document.querySelectorAll(".track-button");
283+
const panels = document.querySelectorAll(".track-content");
284+
285+
function activate(track) {
286+
buttons.forEach((b) => {
287+
const isActive = b.getAttribute("data-track") === track;
288+
b.classList.toggle("active", isActive);
289+
b.setAttribute("aria-selected", isActive ? "true" : "false");
290+
});
291+
292+
panels.forEach((p) => {
293+
p.classList.toggle("active", p.id === (track === "b" ? "track-b" : "track-a"));
294+
});
295+
296+
// Optional: reflect selection in URL for sharing
297+
history.replaceState(null, "", track === "b" ? "#track-b" : "#track-a");
298+
}
299+
300+
function initialTrack() {
301+
const h = (location.hash || "").toLowerCase();
302+
if (h === "#track-b") return "b";
303+
return "a";
304+
}
305+
306+
buttons.forEach((b) => {
307+
b.addEventListener("click", () => activate(b.getAttribute("data-track")));
308+
});
309+
310+
activate(initialTrack());
311+
})();
312+
</script>
152313
</body>
153314
</html>

0 commit comments

Comments
 (0)