Skip to content

Commit f67e502

Browse files
ktaletskmfisher87
andauthored
More corrections (#92)
* Add Mac keyboard shortcut equivalents to numbered chapters - Standardized all shortcuts to use Cmd/Ctrl+Key slash syntax - Added Mac equivalents for browser DevTools (F12 or Cmd/Ctrl+Shift+I, or Cmd+Option+I on Mac) - Added Mac equivalents for JupyterLab command palette (Cmd/Ctrl+Shift+C) - Updated Source Control shortcuts (Cmd/Ctrl+Shift+G) - Standardized Cursor shortcuts (Cmd/Ctrl+L, Cmd/Ctrl+N, Cmd/Ctrl+K, Cmd/Ctrl+,) - Verified Ctrl+C for SIGINT is correct on all platforms Files updated: - 02-anatomy-of-extensions.md - 03-debugging.md - 05-developing-with-ai.md * suggestion to remove dead code * Make small commits for each "thing" * explain the concept of "good first issue" * use header targets * rework examples try to embed Loom videos * rework examples * add tip on prompt explicitly for a UI color palette when creating a theme * better wording about referring to inspiration ideas * tone it down with superlatives * clarify and combine project needs lists * small clarification * small clarification * add bonus goal suggestion * fix ci issue * fix the chapter names 3<->4 * update shutdown instructions * Clarify JupyterLab as an extensible IDE, not an operating system Addresses reviewer feedback that the OS comparison was inaccurate. JupyterLab is an IDE, and emphasizing its extensibility better leads into the workshop content about writing extensions. * Update 04-materials/06-working-on-your-own.md Co-authored-by: Matt Fisher <[email protected]> * Update 04-materials/06-working-on-your-own.md Co-authored-by: Matt Fisher <[email protected]> --------- Co-authored-by: Matt Fisher <[email protected]>
1 parent 04cfd7f commit f67e502

File tree

6 files changed

+58
-31
lines changed

6 files changed

+58
-31
lines changed

03-vocabulary.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,14 @@ These tools work in an **agentic loop**: they plan an action, use a tool to exec
116116
Examples include Cursor, Claude Code, and Cline.
117117
Unlike chat-based or autocomplete AI, agentic tools act like a team member with tools — they don't just suggest, they do.
118118

119+
Good first issue
120+
: A GitHub label that identifies issues suitable for newcomers to a project or to open source in general.
121+
The concept emerged from the "first-timers-only" movement, popularized by developers like Scott Hanselman and Kent C. Dodds, to create approachable pathways into open source contribution.
122+
These issues are typically well-scoped bugs or minor enhancements with clear requirements, making them ideal starting points for new contributors.
123+
Projects use variations like "beginner-friendly," "easy-fix," or "low-hanging fruit."
124+
By marking issues this way, maintainers signal that their project welcomes beginners, helping grow their community while inviting people who might otherwise feel excluded from open source.
125+
Resources: [goodfirstissue.dev](https://goodfirstissue.dev/), [GitHub's guide](https://opensource.guide/building-community/), [How to Create Good Good-First-Issues](https://blogs.vmware.com/opensource/2019/10/16/open-source-good-first-issues/), [Finding Good First Issues](https://community.codenewbie.org/bdougie/finding-good-first-issues-33a6).
126+
119127
LLM token
120128
: In the context of {term}`LLMs <LLM>`, a token is a unit of text (roughly 3-4 characters or ~0.75 words in English) that the model processes.
121129
API providers charge based on the number of tokens consumed—both input tokens (text sent to the model) and output tokens (text generated by the model).

04-materials/01-exploring-extensions.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717

1818
It's not just an interface for working with Notebooks.
1919
The Notebook interface has been around since 2011, and in 2018,
20-
JupyterLab was introduced to provide a more comprehensive environment, like an operating
21-
system, for interactive computation.
20+
JupyterLab was introduced as an extensible IDE (Integrated Development Environment)
21+
for interactive computation.
2222

2323

2424
## [The JupyterLab interface](https://jupyterlab.readthedocs.io/en/latest/user/interface.html)

04-materials/02-anatomy-of-extensions.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ This tutorial is inspired by many prior works.
4545
* Structure the activities around in person teaching and exercises
4646
:::
4747

48-
48+
(anatomy-setup)=
4949
## 🛠️ Setup
5050

5151
Before we get started, we need to set up:
@@ -197,7 +197,7 @@ Our extension will:
197197

198198
🚀 Let's build it together from scratch.
199199

200-
200+
(anatomy-exercise-a)=
201201
## 🏋️ Exercise A (15 minutes): Extension creation and development loop
202202

203203
### 🔧 Create a new extension from the [official template](https://github.com/jupyterlab/extension-template)
@@ -363,7 +363,7 @@ git push -u origin main
363363

364364
### 🔧 Do a complete development loop
365365

366-
0. Close the JupyterLab server with `Ctrl+C`.
366+
0. Close the JupyterLab server. You can use the shutdown menu item in the JupyterLab itself (File → Shut Down), which is more reliable, or use `Ctrl+C` in the terminal where the server is running.
367367

368368
1. Make any change to the codebase.
369369
For example, alter the text in a `console.log()` message.

04-materials/03-debugging.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 🐞 4 - Debugging: What to do when things go wrong?
1+
# 🐞 3 - Debugging: What to do when things go wrong?
22

33
:::{tip} Outcome
44
By the end of this module, we'll have looked into JupyterLab extension development errors in both the terminal and browser console, and used the browser console functionalities to gather information that will help us resolve our errors.

04-materials/04-show-and-tell.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 🪩 3 - Show & tell
1+
# 🪩 4 - Show & tell
22

33
:::{hint} Learning objectives
44
* Discover advanced applications for JupyterLab extensions

04-materials/06-working-on-your-own.md

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ All paths are valuable! Pick what excites you most.
2929
Before diving into your chosen path, make sure you have:
3030

3131
- A clear goal (extension idea or GitHub issue to work on)
32-
- Development environment ready (if building new: follow [Setup](02-anatomy-of-extensions.md#️-setup) and [Exercise A](02-anatomy-of-extensions.md#️-exercise-a-15-minutes-extension-creation-and-development-loop))
32+
- Development environment ready (if building new: follow {ref}`Setup <anatomy-setup>` and {ref}`Exercise A <anatomy-exercise-a>`)
3333
- Access to [JupyterLab API docs](https://jupyterlab.readthedocs.io/en/latest/api/) and [Extension Examples](https://github.com/jupyterlab/extension-examples)
3434

3535
## 🔨 Path 1: Build your own extension from scratch
@@ -40,10 +40,10 @@ Create something entirely new using the extension template, AI assistance, and t
4040

4141
Follow these sections from chapter 2 to start a new extension from a template:
4242

43-
1. [🛠️ Setup](02-anatomy-of-extensions.md#️-setup) - Set up your environment, Git, and GitHub repository
44-
2. [🏋️ Exercise A: Extension creation and development loop](02-anatomy-of-extensions.md#️-exercise-a-15-minutes-extension-creation-and-development-loop) - Create your extension from the template and test the development loop
43+
1. {ref}`🛠️ Setup <anatomy-setup>` - Set up your environment, Git, and GitHub repository
44+
2. {ref}`🏋️ Exercise A: Extension creation and development loop <anatomy-exercise-a>` - Create your extension from the template and test the development loop
4545

46-
Once you have your extension set up and working, return here to choose an inspiration project below.
46+
Once you have your extension set up and working, proceed to work on your extension idea or return here to find inspiration below.
4747

4848
### 💫 Inspiration
4949

@@ -81,13 +81,14 @@ To customize:
8181
Make the confetti more colorful and add a sound effect when it triggers.
8282
```
8383

84-
**Verified Setup**:
85-
- ✅ macOS 15.7, Claude Code (Claude Sonnet 4.5)
86-
-`conda` environment: Python 3.13, Node.js 22, JupyterLab
87-
- 📹 [Watch the demo](https://www.loom.com/share/2afabea0184045fa868271f9ab0ca083)
84+
**Setup**:
85+
- Tool: Claude Code
86+
- Model: Claude Sonnet 4.5
87+
88+
<div style="position: relative; padding-bottom: 62.5%; height: 0;"><iframe src="https://www.loom.com/embed/2afabea0184045fa868271f9ab0ca083" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>
8889

8990
:::{tip}
90-
This is a perfect first project - it's self-contained, purely visual, and you'll immediately see if it works. It teaches you about JupyterLab's status bar API without backend complexity.
91+
This is an ideal first project - it's self-contained, purely visual, and you'll immediately see if it works. It teaches you about JupyterLab's status bar API without backend complexity.
9192
:::
9293

9394
#### 🎨 Custom theme extension
@@ -101,6 +102,17 @@ This is a perfect first project - it's self-contained, purely visual, and you'll
101102
Create a theme based on [your favorite movie/show/game/aesthetic]
102103
```
103104

105+
:::{tip} Better Results with Color Planning
106+
For better results, ask the LLM to plan the color palette first:
107+
```
108+
Create a theme based on [your theme]. First, suggest a UI color palette
109+
of 6 colors (background, foreground, accent, etc.) that match this theme,
110+
then implement the theme using those colors.
111+
```
112+
113+
This explicit request for a color palette triggers more thoughtful planning before implementation!
114+
:::
115+
104116
**Example**:
105117
```
106118
Create a theme based on Netflix show KPop Demon Hunters
@@ -110,7 +122,7 @@ Create a theme based on Netflix show KPop Demon Hunters
110122
- A new theme appears in Settings → Theme menu
111123
- Theme includes custom colors matching your chosen aesthetic
112124
- JupyterLab interface reflects the theme's visual style
113-
- Theme can be toggled on/off
125+
- Theme can be toggled on/off in Settings → Theme menu
114126

115127
**What to watch for**:
116128

@@ -144,10 +156,16 @@ Use [specific colors] for accent elements.
144156
- Consider color palettes - extract 3-5 main colors from your chosen image (AI can help you with it!)
145157
- Free image sources: Unsplash, Pexels, Wallhaven
146158

159+
**Setup**:
160+
- Tool: Cursor
161+
- Model: Claude Sonnet 4.5
162+
163+
<div style="position: relative; padding-bottom: 62.5%; height: 0;"><iframe src="https://www.loom.com/embed/eff02e3cbc63430983f9448719bfa83c" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>
164+
147165
:::{tip}
148-
This is a perfect creative project! You get immediate visual feedback, can personalize your JupyterLab environment, and learn how JupyterLab's theming system works. Plus, you'll have a custom theme you actually want to use daily.
166+
This is a solid creative project! You get immediate visual feedback, can personalize your JupyterLab environment, and learn how JupyterLab's theming system works. Plus, you'll have a custom theme you actually want to use daily.
149167

150-
Themes are also great conversation starters - share your theme with other workshop participants!
168+
Themes are also good conversation starters - share your theme with other workshop participants!
151169
:::
152170

153171
#### 📊 CPU monitor widget
@@ -193,14 +211,14 @@ Add a graph that shows CPU usage over the last 60 seconds,
193211
and highlight in red when usage is above 80%.
194212
```
195213

196-
**Verified setup**:
197-
- ✅ macOS 15.7, Cursor (Claude Sonnet 4.5 MAX)
198-
- `conda` environment: Python 3.13, Node.js 22, JupyterLab
199-
- ⚠️ Temperature data gracefully handled as N/A on macOS (expected)
200-
- 📹 [Watch the demo](https://www.loom.com/share/9f6d11d537a94a30af7559fd4d80eea2)
214+
**Setup**:
215+
- Tool: Cursor
216+
- Model: Claude Sonnet 4.5 MAX
217+
218+
<div style="position: relative; padding-bottom: 62.5%; height: 0;"><iframe src="https://www.loom.com/embed/9f6d11d537a94a30af7559fd4d80eea2" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>
201219

202220
:::{tip}
203-
This teaches you the full stack: backend API design, frontend-backend communication, error handling, and periodic updates. It's a perfect template for any monitoring or dashboard extension.
221+
This teaches you the full stack: backend API design, frontend-backend communication, error handling, and periodic updates. It's an excellent template for any monitoring or dashboard extension.
204222
:::
205223

206224
### 🌟 More extension ideas
@@ -214,9 +232,9 @@ Pick an idea that matches your comfort level and interests:
214232
4. **Pomodoro timer**: Status bar timer for focused work sessions with notifications
215233

216234
#### 🚦 Intermediate (frontend + server)
217-
1. **File size analyzer**: Scan workspace directory and show largest files/folders
218-
2. **Git status widget**: Display current branch, uncommitted changes count
219-
3. **Environment inspector**: Show installed packages and Python version
235+
1. **File size analyzer**: Scan workspace directory and show largest files/folders. Bonus goal: Add a treemap visualization (like [WinDirStat](https://windirstat.net/)) to visually represent file sizes
236+
2. **Git status widget**: Display current branch, uncommitted changes count in the status bar
237+
3. **Environment inspector**: Show installed packages and Python version in the sidebar
220238
4. **Todo list with persistence**: Sidebar panel that saves tasks to disk
221239

222240
#### 🎯 Advanced
@@ -248,7 +266,7 @@ Contributing to established extensions is a great way to learn real-world patter
248266
See our [Show & Tell session](04-show-and-tell.md) for a curated list of popular JupyterLab extensions and inspiration on projects to contribute to.
249267

250268
#### 🐛 Beginner-friendly JupyterLab core
251-
Want to contribute to JupyterLab itself? Here are good first issues:
269+
Want to contribute to JupyterLab itself? Here are {term}`good first issues <good first issue>`:
252270

253271
**JupyterLab Core:**
254272
- [Good First Issues](https://github.com/jupyterlab/jupyterlab/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)
@@ -259,11 +277,10 @@ Want to contribute to JupyterLab itself? Here are good first issues:
259277

260278
### ✅ Check the project needs
261279
**Check the project board or GitHub Issues** for:
280+
- {term}`"Good first issue" <good first issue>` labels
262281
- Feature requests that align with your interests
263282
- Bug reports you can reproduce
264283
- Documentation improvements
265-
266-
**Browse recent issues** and look for:
267284
- Questions you can answer
268285
- Problems you've encountered yourself
269286
- Features you wish existed
@@ -292,6 +309,7 @@ Want to contribute to JupyterLab itself? Here are good first issues:
292309

293310
3. **Make your changes**:
294311
- Start small - fix one thing at a time
312+
- Make small commits for each "thing"
295313
- Follow the project's code style
296314
- Add or update tests if applicable
297315
- Update documentation
@@ -351,6 +369,7 @@ Before opening a PR, verify:
351369
- Commit messages are clear and descriptive
352370
- PR description explains what and why
353371
- You've read and followed CONTRIBUTING.md
372+
- Remove unused or unreachable code ("dead code") and unused artifacts (imports, variables, files, commented-out code)
354373
- Tests pass in CI/CD (after opening PR)
355374

356375
### 🔧 When contributing gets stuck

0 commit comments

Comments
 (0)