From 7939bccb99d2bc73a31b8e4bfc7dacd9eb4cc9ca Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 09:29:46 -0700 Subject: [PATCH 01/20] 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 --- 04-materials/02-anatomy-of-extensions.md | 12 ++++++------ 04-materials/03-debugging.md | 7 +++---- 04-materials/05-developing-with-ai.md | 24 +++++++++++++----------- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/04-materials/02-anatomy-of-extensions.md b/04-materials/02-anatomy-of-extensions.md index 360a03f4..739228df 100644 --- a/04-materials/02-anatomy-of-extensions.md +++ b/04-materials/02-anatomy-of-extensions.md @@ -320,8 +320,8 @@ Our extension will: ...JupyterLab automatically opened in your browser when you started the server. ::: -2. Confirm the extension was loaded. Open your browser's dev console (F12 or - `CTRL+SHIFT+I`) and... +2. Confirm the extension was loaded. Open your browser's dev console (`F12` or + `Cmd/Ctrl+Shift+I`, or `Cmd+Option+I` on Mac) and... :::{important} ๐Ÿ‘€ You should notice... :class: simple @@ -363,7 +363,7 @@ git push -u origin main ### ๐Ÿ”ง Do a complete development loop -0. Close the JupyterLab server with `CTRL+C`. +0. Close the JupyterLab server with `Ctrl+C`. 1. Make any change to the codebase. For example, alter the text in a `console.log()` message. @@ -410,7 +410,7 @@ official template and set it up for development. We know how to iterate: we learned that the JupyterLab extension development loop is... * Make a change to the code. -* Shut down JupyterLab (`CTRL+C`). +* Shut down JupyterLab (`Ctrl+C`). * Rebuild the extension with `jlpm build` [^rebuild-not-always-required]. * Start JupyterLab with `jupyter lab`. @@ -622,14 +622,14 @@ the {term}`command palette `. ### ๐Ÿงช Test -Stop your JupyterLab server (`CTRL+C`), then rebuild your extension (`jlpm +Stop your JupyterLab server (`Ctrl+C`), then rebuild your extension (`jlpm build`), then restart JupyterLab (`jupyter lab`). If everything went well, now you can test the extension in your browser. To test from the {term}`command palette `, click "View">"Commands" from the {term}`menu bar `, or use the shortcut -`CTRL+SHIFT+C`. +`Cmd/Ctrl+Shift+C`. Begin typing "Random image" and the command palette interface should autocomplete. Select "Random image with caption" and press `ENTER`. diff --git a/04-materials/03-debugging.md b/04-materials/03-debugging.md index 933a316f..78f5cf31 100644 --- a/04-materials/03-debugging.md +++ b/04-materials/03-debugging.md @@ -117,9 +117,8 @@ This is where the real magic happens! Head to your browser and open the develope :::{tip} ๐Ÿ”ง How to open DevTools -- **Windows/Linux**: Press `F12` or `Ctrl+Shift+I` -- **Mac**: Press `Cmd+Option+I` - ::: +Press `F12` or `Cmd/Ctrl+Shift+I` (or `Cmd+Option+I` on Mac) +::: ### ๐Ÿ’ฌ Console Tab @@ -186,7 +185,7 @@ From there, you can: - Temporarily modify HTML or CSS to test fixes :::{hint} -There are times where you might right-click on an element expecting to see the browser with the "Inspect" option, but are instead met with a JupyterLab menu. There are a few cases where JupyterLab prevents this default browser behavior and displays it's own context menu, but you can still access that browser menu by: holding `Shift` while right-clicking, or using the dev tools "Select an element" picker (using the keyboard shortcut `Cmd + Shift + C` for macOS or `Ctrl + Shift + C` for Windows/Linux). +There are times where you might right-click on an element expecting to see the browser with the "Inspect" option, but are instead met with a JupyterLab menu. There are a few cases where JupyterLab prevents this default browser behavior and displays it's own context menu, but you can still access that browser menu by: holding `Shift` while right-clicking, or using the dev tools "Select an element" picker (using the keyboard shortcut `Cmd/Ctrl+Shift+C`). ::: --- diff --git a/04-materials/05-developing-with-ai.md b/04-materials/05-developing-with-ai.md index 517e3f41..9edc4771 100644 --- a/04-materials/05-developing-with-ai.md +++ b/04-materials/05-developing-with-ai.md @@ -340,14 +340,14 @@ AI can suggest code that breaks your extension. With frequent commits and stagin **The Four Safety Levels:** ``` -Level 1: Unsaved โ†’ Files on disk (Cmd/Ctrl + Z to undo) +Level 1: Unsaved โ†’ Files on disk (Cmd/Ctrl+Z to undo) Level 2: Staged โ†’ git add (can unstage) Level 3: Committed โ†’ git commit (can reset) Level 4: Pushed โ†’ git push (permanent) ``` **Keep an eye on Source Control** -- Open the Source Control view (`Ctrl + Shift + G`) +- Open the Source Control view (`Cmd/Ctrl+Shift+G`) - Keep this panel visible alongside your AI chat - You'll review all AI-generated changes here before committing @@ -561,7 +561,7 @@ This tells the AI assistant to use `micromamba` with the `jupytercon2025` enviro ### Verify that Cursor recognizes the rules -1. Open the Cursor Chat panel (`Cmd/Ctrl + L`) and choose Ask Mode +1. Open the Cursor Chat panel (`Cmd/Ctrl+L`) and choose Ask Mode :::{note} **โš ๏ธ Avoid "Auto" mode** โ€” it picks the cheapest model, not the best one. @@ -664,7 +664,7 @@ Now that you're about to generate substantial code with AI, let's establish a di ```bash # After AI generates code: -# 1. Review changes in Source Control panel (Cmd/Ctrl + Shift + G) +# 1. Review changes in Source Control panel (Cmd/Ctrl+Shift+G) # 2. Test if it works - build and verify jlpm build @@ -692,7 +692,7 @@ When AI generates code that works, immediately stage those files (`git add`). Th ::: **Keep Source Control panel visible:** -- `Ctrl + Shift + G` to open +- `Cmd/Ctrl+Shift+G` to open - Shows all modified files with diff preview - Click any file to see exactly what changed - Stage/unstage with + and - buttons @@ -718,7 +718,7 @@ With the right context and a detailed prompt, AI can build complete features in :::{dropdown} Cursor prompting quick tips - **Use @ precisely**: `@code` (symbol), `@file` (e.g., `@src/index.ts`), `@folder` (e.g., `@src/utils/`). This steers Cursor to the exact context you want. -- **Reference specific lines**: Select the lines and press `Cmd/Ctrl + L` to add them to the current chat as an `@` selection. Want a fresh chat? Press `Cmd/Ctrl + N` โ€” the `@` reference carries over. Selection is prioritized; lineโ€‘range mentions via `@` arenโ€™t supported. +- **Reference specific lines**: Select the lines and press `Cmd/Ctrl+L` to add them to the current chat as an `@` selection. Want a fresh chat? Press `Cmd/Ctrl+N` โ€” the `@` reference carries over. Selection is prioritized; lineโ€‘range mentions via `@` aren't supported. - **Bias autoโ€‘context**: Cursor autoโ€‘pulls from your session (active file, recent edits). Keep the relevant file active and close noisy, unrelated large files. Use `@` when you need deterministic precision. - **Docs as context**: After adding docs to Cursor, mention them with `@` (e.g., `@JupyterLab API`). ::: @@ -792,7 +792,7 @@ jupyter lab **Test the new features**: - Open the image viewer widget - Try each filter button -- Check the browser console for errors (`F12` or `Cmd+Option+I`) +- Check the browser console for errors (`F12` or `Cmd/Ctrl+Shift+I`, or `Cmd+Option+I` on Mac) - Check the terminal running `jupyter lab` for Python errors - Find at least 3 decisions you might have made differently @@ -841,7 +841,7 @@ AI can understand what your extension looks like! This is powerful for debugging - **Windows:** Use Snipping Tool or `Win + Shift + S` - **Linux:** Use your screenshot tool (varies by desktop environment) -3. **Open Cursor chat** (`Cmd/Ctrl + L`) and drag or paste the screenshot into the chat +3. **Open Cursor chat** (`Cmd/Ctrl+L`) and drag or paste the screenshot into the chat 4. **Try one of these prompts with your screenshot:** @@ -1042,7 +1042,7 @@ As you work through phases, keep an eye on **context window percentage** (shown 3. Use `@JupyterLab API` (or `@Lumino API`) in chat to use precise documentation when implementing a function. ::: -1. **Start a NEW chat** for Phase 1 (`Cmd/Ctrl + L` to focus on chat panel, then `Cmd/Ctrl + N` to start a new chat) +1. **Start a NEW chat** for Phase 1 (`Cmd/Ctrl+L` to focus on chat panel, then `Cmd/Ctrl+N` to start a new chat) 2. **Reference the plan:** @@ -1056,7 +1056,7 @@ As you work through phases, keep an eye on **context window percentage** (shown Note the `@plans/...` syntax tells AI to read that specific file. 3. **Review changes in Source Control** (keep this panel open!) - - Open `Ctrl + Shift + G` to see all modified files + - Open `Cmd/Ctrl+Shift+G` to see all modified files - Click each file to review the diff - Look for unexpected changes or files you didn't anticipate @@ -1066,7 +1066,7 @@ As you work through phases, keep an eye on **context window percentage** (shown jupyter lab ``` - Try the new filter buttons - - Check browser console (`F12`) for errors + - Check browser console (`F12` or `Cmd/Ctrl+Shift+I`, or `Cmd+Option+I` on Mac) for errors - Verify backend logs in terminal 5. **Stage and commit after Phase 1 works:** @@ -1109,6 +1109,8 @@ As you work through phases, keep an eye on **context window percentage** (shown jlpm build jupyter lab + # Check browser console for errors (F12 or Cmd/Ctrl+Shift+I, or Cmd+Option+I on Mac) + # Stage and commit (review each file first!) git add src/widget.ts git add jupytercon2025_extension_workshop/routes.py From 0ebfd5588175e613497082120533be52c197e3af Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 09:45:16 -0700 Subject: [PATCH 02/20] suggestion to remove dead code --- 04-materials/06-working-on-your-own.md | 1 + 1 file changed, 1 insertion(+) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index 42ef2f34..ee5224b9 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -351,6 +351,7 @@ Before opening a PR, verify: - Commit messages are clear and descriptive - PR description explains what and why - You've read and followed CONTRIBUTING.md +- Remove unused or unreachable code ("dead code") and unused artifacts (imports, variables, files, commented-out code) - Tests pass in CI/CD (after opening PR) ### ๐Ÿ”ง When contributing gets stuck From 9bbb66c479f3be08820c077799150d0997dd3d75 Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 09:46:49 -0700 Subject: [PATCH 03/20] Make small commits for each "thing" --- 04-materials/06-working-on-your-own.md | 1 + 1 file changed, 1 insertion(+) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index ee5224b9..79c43444 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -292,6 +292,7 @@ Want to contribute to JupyterLab itself? Here are good first issues: 3. **Make your changes**: - Start small - fix one thing at a time + - Make small commits for each "thing" - Follow the project's code style - Add or update tests if applicable - Update documentation From ea063a51afa151734b79942fa4900d72a1a3a43f Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 09:56:46 -0700 Subject: [PATCH 04/20] explain the concept of "good first issue" --- 03-vocabulary.md | 12 ++++++++++++ 04-materials/06-working-on-your-own.md | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/03-vocabulary.md b/03-vocabulary.md index 57ad7b12..661a8d87 100644 --- a/03-vocabulary.md +++ b/03-vocabulary.md @@ -116,6 +116,18 @@ These tools work in an **agentic loop**: they plan an action, use a tool to exec Examples include Cursor, Claude Code, and Cline. Unlike chat-based or autocomplete AI, agentic tools act like a team member with tools โ€” they don't just suggest, they do. +Good first issue +: A GitHub label that identifies issues suitable for newcomers to a project or to open source in general. +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. +These issues are typically well-scoped bugs or minor enhancements with clear requirements, making them ideal starting points for new contributors. +Projects use variations like "beginner-friendly," "easy-fix," or "low-hanging fruit." +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. +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). + LLM token : In the context of {term}`LLMs `, a token is a unit of text (roughly 3-4 characters or ~0.75 words in English) that the model processes. 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). diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index 79c43444..b0b68b1b 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -248,7 +248,7 @@ Contributing to established extensions is a great way to learn real-world patter 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. #### ๐Ÿ› Beginner-friendly JupyterLab core -Want to contribute to JupyterLab itself? Here are good first issues: +Want to contribute to JupyterLab itself? Here are {term}`good first issues `: **JupyterLab Core:** - [Good First Issues](https://github.com/jupyterlab/jupyterlab/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) @@ -259,6 +259,7 @@ Want to contribute to JupyterLab itself? Here are good first issues: ### โœ… Check the project needs **Check the project board or GitHub Issues** for: +- {term}`"Good first issue" ` labels - Feature requests that align with your interests - Bug reports you can reproduce - Documentation improvements From 970594540e9fc7a925581370d6b5475e4cd2bacc Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 10:00:27 -0700 Subject: [PATCH 05/20] use header targets --- 04-materials/02-anatomy-of-extensions.md | 4 ++-- 04-materials/06-working-on-your-own.md | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/04-materials/02-anatomy-of-extensions.md b/04-materials/02-anatomy-of-extensions.md index 739228df..2f51e484 100644 --- a/04-materials/02-anatomy-of-extensions.md +++ b/04-materials/02-anatomy-of-extensions.md @@ -45,7 +45,7 @@ This tutorial is inspired by many prior works. * Structure the activities around in person teaching and exercises ::: - +(anatomy-setup)= ## ๐Ÿ› ๏ธ Setup Before we get started, we need to set up: @@ -197,7 +197,7 @@ Our extension will: ๐Ÿš€ Let's build it together from scratch. - +(anatomy-exercise-a)= ## ๐Ÿ‹๏ธ Exercise A (15 minutes): Extension creation and development loop ### ๐Ÿ”ง Create a new extension from the [official template](https://github.com/jupyterlab/extension-template) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index b0b68b1b..c2880fa8 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -29,7 +29,7 @@ All paths are valuable! Pick what excites you most. Before diving into your chosen path, make sure you have: - A clear goal (extension idea or GitHub issue to work on) -- 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)) +- Development environment ready (if building new: follow [Setup](02-anatomy-of-extensions.md#anatomy-setup) and [Exercise A](02-anatomy-of-extensions.md#anatomy-exercise-a)) - Access to [JupyterLab API docs](https://jupyterlab.readthedocs.io/en/latest/api/) and [Extension Examples](https://github.com/jupyterlab/extension-examples) ## ๐Ÿ”จ Path 1: Build your own extension from scratch @@ -40,8 +40,8 @@ Create something entirely new using the extension template, AI assistance, and t Follow these sections from chapter 2 to start a new extension from a template: -1. [๐Ÿ› ๏ธ Setup](02-anatomy-of-extensions.md#๏ธ-setup) - Set up your environment, Git, and GitHub repository -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 +1. [๐Ÿ› ๏ธ Setup](02-anatomy-of-extensions.md#anatomy-setup) - Set up your environment, Git, and GitHub repository +2. [๐Ÿ‹๏ธ Exercise A: Extension creation and development loop](02-anatomy-of-extensions.md#anatomy-exercise-a) - Create your extension from the template and test the development loop Once you have your extension set up and working, return here to choose an inspiration project below. From f9b2850fd347dba75135f173442bff5363f828d6 Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 10:17:47 -0700 Subject: [PATCH 06/20] rework examples try to embed Loom videos --- 04-materials/06-working-on-your-own.md | 31 ++++++++++++++++---------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index c2880fa8..85d1fe63 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -81,13 +81,14 @@ To customize: Make the confetti more colorful and add a sound effect when it triggers. ``` -**Verified Setup**: -- โœ… macOS 15.7, Claude Code (Claude Sonnet 4.5) -- โœ… `conda` environment: Python 3.13, Node.js 22, JupyterLab -- ๐Ÿ“น [Watch the demo](https://www.loom.com/share/2afabea0184045fa868271f9ab0ca083) +**Setup**: +- Tool: Claude Code +- Model: Claude Sonnet 4.5 + +
:::{tip} -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. +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. ::: #### ๐ŸŽจ Custom theme extension @@ -144,8 +145,14 @@ Use [specific colors] for accent elements. - Consider color palettes - extract 3-5 main colors from your chosen image (AI can help you with it!) - Free image sources: Unsplash, Pexels, Wallhaven +**Setup**: +- Tool: Cursor +- Model: Claude Sonnet 4.5 + +
+ :::{tip} -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. +This is an excellent 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. Themes are also great conversation starters - share your theme with other workshop participants! ::: @@ -193,14 +200,14 @@ Add a graph that shows CPU usage over the last 60 seconds, and highlight in red when usage is above 80%. ``` -**Verified setup**: -- โœ… macOS 15.7, Cursor (Claude Sonnet 4.5 MAX) -- โœ… `conda` environment: Python 3.13, Node.js 22, JupyterLab -- โš ๏ธ Temperature data gracefully handled as N/A on macOS (expected) -- ๐Ÿ“น [Watch the demo](https://www.loom.com/share/9f6d11d537a94a30af7559fd4d80eea2) +**Setup**: +- Tool: Cursor +- Model: Claude Sonnet 4.5 MAX + +
:::{tip} -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. +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. ::: ### ๐ŸŒŸ More extension ideas From 7696f847fdcb1b3aa4f72e6f32af0208df9d969f Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 10:18:46 -0700 Subject: [PATCH 07/20] rework examples --- 04-materials/06-working-on-your-own.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index 85d1fe63..f314234a 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -111,7 +111,7 @@ Create a theme based on Netflix show KPop Demon Hunters - A new theme appears in Settings โ†’ Theme menu - Theme includes custom colors matching your chosen aesthetic - JupyterLab interface reflects the theme's visual style -- Theme can be toggled on/off +- Theme can be toggled on/off in Settings โ†’ Theme menu **What to watch for**: From 69e783c60a8ca043692af5c4eb785c19fa944aae Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 10:22:00 -0700 Subject: [PATCH 08/20] add tip on prompt explicitly for a UI color palette when creating a theme --- 04-materials/06-working-on-your-own.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index f314234a..1ea2428c 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -102,6 +102,17 @@ This is an ideal first project - it's self-contained, purely visual, and you'll Create a theme based on [your favorite movie/show/game/aesthetic] ``` +:::{tip} Better Results with Color Planning +For better results, ask the LLM to plan the color palette first: +``` +Create a theme based on [your theme]. First, suggest a UI color palette +of 6 colors (background, foreground, accent, etc.) that match this theme, +then implement the theme using those colors. +``` + +This explicit request for a color palette triggers more thoughtful planning before implementation! +::: + **Example**: ``` Create a theme based on Netflix show KPop Demon Hunters From 6f002785d8baae4e3397995f5d832b5d4669223f Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 10:26:17 -0700 Subject: [PATCH 09/20] better wording about referring to inspiration ideas --- 04-materials/06-working-on-your-own.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index 1ea2428c..e34e20ec 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -43,7 +43,7 @@ Follow these sections from chapter 2 to start a new extension from a template: 1. [๐Ÿ› ๏ธ Setup](02-anatomy-of-extensions.md#anatomy-setup) - Set up your environment, Git, and GitHub repository 2. [๐Ÿ‹๏ธ Exercise A: Extension creation and development loop](02-anatomy-of-extensions.md#anatomy-exercise-a) - Create your extension from the template and test the development loop -Once you have your extension set up and working, return here to choose an inspiration project below. +Once you have your extension set up and working, proceed to work on your extension idea or return here to find inspiration below. ### ๐Ÿ’ซ Inspiration From 5d8faeb355c623cdd809a1936cc51361f8560154 Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 10:29:11 -0700 Subject: [PATCH 10/20] tone it down with superlatives --- 04-materials/06-working-on-your-own.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index e34e20ec..9477b823 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -163,9 +163,9 @@ Use [specific colors] for accent elements.
:::{tip} -This is an excellent 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. +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. -Themes are also great conversation starters - share your theme with other workshop participants! +Themes are also good conversation starters - share your theme with other workshop participants! ::: #### ๐Ÿ“Š CPU monitor widget From a74b08a1b58c9757657905aea08587bb245b8067 Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 10:32:05 -0700 Subject: [PATCH 11/20] clarify and combine project needs lists --- 04-materials/06-working-on-your-own.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index 9477b823..52e43360 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -281,8 +281,6 @@ Want to contribute to JupyterLab itself? Here are {term}`good first issues Date: Fri, 31 Oct 2025 10:33:41 -0700 Subject: [PATCH 12/20] small clarification --- 04-materials/06-working-on-your-own.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index 52e43360..1bb2e435 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -234,7 +234,7 @@ Pick an idea that matches your comfort level and interests: #### ๐Ÿšฆ Intermediate (frontend + server) 1. **File size analyzer**: Scan workspace directory and show largest files/folders 2. **Git status widget**: Display current branch, uncommitted changes count -3. **Environment inspector**: Show installed packages and Python version +3. **Environment inspector**: Show installed packages and Python version in the sidebar 4. **Todo list with persistence**: Sidebar panel that saves tasks to disk #### ๐ŸŽฏ Advanced From b19af6de890fcc0e65a180947b4786366982257f Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 10:34:03 -0700 Subject: [PATCH 13/20] small clarification --- 04-materials/06-working-on-your-own.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index 1bb2e435..5ad0f43c 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -233,7 +233,7 @@ Pick an idea that matches your comfort level and interests: #### ๐Ÿšฆ Intermediate (frontend + server) 1. **File size analyzer**: Scan workspace directory and show largest files/folders -2. **Git status widget**: Display current branch, uncommitted changes count +2. **Git status widget**: Display current branch, uncommitted changes count in the status bar 3. **Environment inspector**: Show installed packages and Python version in the sidebar 4. **Todo list with persistence**: Sidebar panel that saves tasks to disk From a9ce00cd9f18a8e7999255b2e919b563ddd141e9 Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 10:36:18 -0700 Subject: [PATCH 14/20] add bonus goal suggestion --- 04-materials/06-working-on-your-own.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index 5ad0f43c..087d1d02 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -232,7 +232,7 @@ Pick an idea that matches your comfort level and interests: 4. **Pomodoro timer**: Status bar timer for focused work sessions with notifications #### ๐Ÿšฆ Intermediate (frontend + server) -1. **File size analyzer**: Scan workspace directory and show largest files/folders +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 2. **Git status widget**: Display current branch, uncommitted changes count in the status bar 3. **Environment inspector**: Show installed packages and Python version in the sidebar 4. **Todo list with persistence**: Sidebar panel that saves tasks to disk From e6881bb9f94a51f3bcc3a6a3e8a7b5029098b789 Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 10:42:10 -0700 Subject: [PATCH 15/20] fix ci issue --- 03-vocabulary.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/03-vocabulary.md b/03-vocabulary.md index 661a8d87..b85e29c5 100644 --- a/03-vocabulary.md +++ b/03-vocabulary.md @@ -122,11 +122,7 @@ The concept emerged from the "first-timers-only" movement, popularized by develo These issues are typically well-scoped bugs or minor enhancements with clear requirements, making them ideal starting points for new contributors. Projects use variations like "beginner-friendly," "easy-fix," or "low-hanging fruit." 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. -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). +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). LLM token : In the context of {term}`LLMs `, a token is a unit of text (roughly 3-4 characters or ~0.75 words in English) that the model processes. From 9f67aa7e1589726fcbf196fed061de38716f3878 Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 13:31:56 -0700 Subject: [PATCH 16/20] fix the chapter names 3<->4 --- 04-materials/03-debugging.md | 2 +- 04-materials/04-show-and-tell.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/04-materials/03-debugging.md b/04-materials/03-debugging.md index 78f5cf31..c9200135 100644 --- a/04-materials/03-debugging.md +++ b/04-materials/03-debugging.md @@ -1,4 +1,4 @@ -# ๐Ÿž 4 - Debugging: What to do when things go wrong? +# ๐Ÿž 3 - Debugging: What to do when things go wrong? :::{tip} Outcome 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. diff --git a/04-materials/04-show-and-tell.md b/04-materials/04-show-and-tell.md index f75a2cc5..b4bd7dd2 100644 --- a/04-materials/04-show-and-tell.md +++ b/04-materials/04-show-and-tell.md @@ -1,4 +1,4 @@ -# ๐Ÿชฉ 3 - Show & tell +# ๐Ÿชฉ 4 - Show & tell :::{hint} Learning objectives * Discover advanced applications for JupyterLab extensions From d5aeccb5145c35ad8d8d045632df6deea4912a6a Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 13:36:07 -0700 Subject: [PATCH 17/20] update shutdown instructions --- 04-materials/02-anatomy-of-extensions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-materials/02-anatomy-of-extensions.md b/04-materials/02-anatomy-of-extensions.md index 2f51e484..c090ca1f 100644 --- a/04-materials/02-anatomy-of-extensions.md +++ b/04-materials/02-anatomy-of-extensions.md @@ -363,7 +363,7 @@ git push -u origin main ### ๐Ÿ”ง Do a complete development loop -0. Close the JupyterLab server with `Ctrl+C`. +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. 1. Make any change to the codebase. For example, alter the text in a `console.log()` message. From 1ac6265e58f095f4dbb6403540ce69b119fb889d Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 13:43:13 -0700 Subject: [PATCH 18/20] 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. --- 04-materials/01-exploring-extensions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/04-materials/01-exploring-extensions.md b/04-materials/01-exploring-extensions.md index 6c3d1c1a..84a7fdea 100644 --- a/04-materials/01-exploring-extensions.md +++ b/04-materials/01-exploring-extensions.md @@ -17,8 +17,8 @@ It's not just an interface for working with Notebooks. The Notebook interface has been around since 2011, and in 2018, -JupyterLab was introduced to provide a more comprehensive environment, like an operating -system, for interactive computation. +JupyterLab was introduced as an extensible IDE (Integrated Development Environment) +for interactive computation. ## [The JupyterLab interface](https://jupyterlab.readthedocs.io/en/latest/user/interface.html) From ccb1c2dc85af9a03829769cc8a6feed22ca87d68 Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 14:04:52 -0700 Subject: [PATCH 19/20] Update 04-materials/06-working-on-your-own.md Co-authored-by: Matt Fisher <3608264+mfisher87@users.noreply.github.com> --- 04-materials/06-working-on-your-own.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index 087d1d02..576d0506 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -40,8 +40,8 @@ Create something entirely new using the extension template, AI assistance, and t Follow these sections from chapter 2 to start a new extension from a template: -1. [๐Ÿ› ๏ธ Setup](02-anatomy-of-extensions.md#anatomy-setup) - Set up your environment, Git, and GitHub repository -2. [๐Ÿ‹๏ธ Exercise A: Extension creation and development loop](02-anatomy-of-extensions.md#anatomy-exercise-a) - Create your extension from the template and test the development loop +1. {ref}`๐Ÿ› ๏ธ Setup ` - Set up your environment, Git, and GitHub repository +2. {ref}`๐Ÿ‹๏ธ Exercise A: Extension creation and development loop ` - Create your extension from the template and test the development loop Once you have your extension set up and working, proceed to work on your extension idea or return here to find inspiration below. From 53cbb5dcc5ee9bfcdeabcd68331d3f97323effea Mon Sep 17 00:00:00 2001 From: Konstantin Taletskiy Date: Fri, 31 Oct 2025 14:10:09 -0700 Subject: [PATCH 20/20] Update 04-materials/06-working-on-your-own.md Co-authored-by: Matt Fisher <3608264+mfisher87@users.noreply.github.com> --- 04-materials/06-working-on-your-own.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-materials/06-working-on-your-own.md b/04-materials/06-working-on-your-own.md index 576d0506..532b8668 100644 --- a/04-materials/06-working-on-your-own.md +++ b/04-materials/06-working-on-your-own.md @@ -29,7 +29,7 @@ All paths are valuable! Pick what excites you most. Before diving into your chosen path, make sure you have: - A clear goal (extension idea or GitHub issue to work on) -- Development environment ready (if building new: follow [Setup](02-anatomy-of-extensions.md#anatomy-setup) and [Exercise A](02-anatomy-of-extensions.md#anatomy-exercise-a)) +- Development environment ready (if building new: follow {ref}`Setup ` and {ref}`Exercise A `) - Access to [JupyterLab API docs](https://jupyterlab.readthedocs.io/en/latest/api/) and [Extension Examples](https://github.com/jupyterlab/extension-examples) ## ๐Ÿ”จ Path 1: Build your own extension from scratch