diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..a06105c --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,61 @@ +name: Deploy Jekyll site to GitHub Pages + +on: + push: + branches: + - master + - copilot/update-page-with-just-the-docs-template + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: "3.2" + bundler-cache: true + + - name: Generate build info + run: | + mkdir -p _data + SHORT_SHA="${GITHUB_SHA:0:7}" + echo "sha: \"$GITHUB_SHA\"" > _data/build_info.yml + echo "short_sha: \"$SHORT_SHA\"" >> _data/build_info.yml + echo "datetime: \"$(date -u '+%Y-%m-%d %H:%M:%S UTC')\"" >> _data/build_info.yml + + - name: Setup Pages + id: pages + uses: actions/configure-pages@v5 + + - name: Build with Jekyll + run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" + env: + JEKYLL_ENV: production + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..b4eb84a --- /dev/null +++ b/Gemfile @@ -0,0 +1,4 @@ +source "https://rubygems.org" + +gem "just-the-docs", "0.12.0" +gem "webrick", "~> 1.8" diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..6194331 --- /dev/null +++ b/_config.yml @@ -0,0 +1,34 @@ +title: Peter Kirschner +description: >- + Conference talks and OSGi/Eclipse development resources by Peter Kirschner. +baseurl: "" +url: "https://peterkir.github.io" + +theme: just-the-docs + +color_scheme: light + +search_enabled: true +search_tokenizer_separator: /[\s/]+/ + +nav_sort: order + +back_to_top: true +back_to_top_text: "Back to top" + +heading_anchors: true + +aux_links: + "GitHub": + - "https://github.com/peterkir" +aux_links_new_tab: true + +footer_content: "" + +exclude: + - Gemfile.lock + - vendor/ + - node_modules/ + - "201410_EclipseCon_Europe/presentation/node_modules/" + - "201410_EclipseCon_Europe/presentation/test/" + - doc/ diff --git a/_data/build_info.yml b/_data/build_info.yml new file mode 100644 index 0000000..18a5f56 --- /dev/null +++ b/_data/build_info.yml @@ -0,0 +1,3 @@ +sha: "local" +short_sha: "local" +datetime: "local build" diff --git a/_includes/footer_custom.html b/_includes/footer_custom.html new file mode 100644 index 0000000..3e5ec01 --- /dev/null +++ b/_includes/footer_custom.html @@ -0,0 +1,7 @@ +{% if site.data.build_info %} +
+ Built: {{ site.data.build_info.datetime }} + • + SHA: {{ site.data.build_info.short_sha }} +
+{% endif %} diff --git a/_includes/head_custom.html b/_includes/head_custom.html new file mode 100644 index 0000000..d7b2287 --- /dev/null +++ b/_includes/head_custom.html @@ -0,0 +1,9 @@ + + diff --git a/_includes/header_custom.html b/_includes/header_custom.html new file mode 100644 index 0000000..cff7e35 --- /dev/null +++ b/_includes/header_custom.html @@ -0,0 +1,31 @@ + + + diff --git a/assets/css/dark-mode.css b/assets/css/dark-mode.css new file mode 100644 index 0000000..72613a8 --- /dev/null +++ b/assets/css/dark-mode.css @@ -0,0 +1,263 @@ +/* + * Dark mode support for just-the-docs v0.12 + * Activates when data-theme="dark" on , or via system preference + * when data-theme is not explicitly set to "light". + */ + +/* ─── Color variables ─────────────────────────────────────────────────── */ + +:root { + --dk-page-bg: #ffffff; + --dk-sidebar-bg: #f5f6fa; + --dk-body-text: #27262b; + --dk-heading: #27262b; + --dk-link: #2869e6; + --dk-nav-link: #5c5962; + --dk-border: #eeebee; + --dk-code-bg: #f5f6fa; + --dk-code-text: #27262b; + --dk-table-head: #f5f6fa; + --dk-header-bg: rgba(255, 255, 255, 0.75); + --dk-toggle-border: #eeebee; + --dk-footer-bg: #f5f6fa; +} + +html[data-theme="dark"] { + --dk-page-bg: #1b2024; + --dk-sidebar-bg: #22262a; + --dk-body-text: #d4d9e1; + --dk-heading: #f5f6fa; + --dk-link: #7253ed; + --dk-nav-link: #959396; + --dk-border: #44434d; + --dk-code-bg: #31333a; + --dk-code-text: #d4d9e1; + --dk-table-head: #2b2d35; + --dk-header-bg: rgba(27, 32, 36, 0.75); + --dk-toggle-border: #44434d; + --dk-footer-bg: #22262a; +} + +@media (prefers-color-scheme: dark) { + html:not([data-theme="light"]) { + --dk-page-bg: #1b2024; + --dk-sidebar-bg: #22262a; + --dk-body-text: #d4d9e1; + --dk-heading: #f5f6fa; + --dk-link: #7253ed; + --dk-nav-link: #959396; + --dk-border: #44434d; + --dk-code-bg: #31333a; + --dk-code-text: #d4d9e1; + --dk-table-head: #2b2d35; + --dk-header-bg: rgba(27, 32, 36, 0.75); + --dk-toggle-border: #44434d; + --dk-footer-bg: #22262a; + } +} + +/* ─── Override just-the-docs styles ──────────────────────────────────── */ + +body, +.main-content-wrap, +.main-content { + background-color: var(--dk-page-bg) !important; + color: var(--dk-body-text); +} + +.side-bar { + background-color: var(--dk-sidebar-bg) !important; + border-right: 1px solid var(--dk-border) !important; +} + +.site-title, +.site-title:hover, +.site-title:visited { + color: var(--dk-heading) !important; +} + +.main-header { + background-color: var(--dk-header-bg) !important; + border-bottom: 1px solid var(--dk-border) !important; +} + +.site-footer { + background-color: var(--dk-footer-bg); + border-top: 1px solid var(--dk-border) !important; + color: var(--dk-body-text); +} + +/* Headings */ +h1, h2, h3, h4, h5, h6 { + color: var(--dk-heading); +} + +/* Links */ +a { + color: var(--dk-link); +} + +a:visited { + color: var(--dk-link); +} + +/* Navigation */ +.nav-list-link { + color: var(--dk-nav-link) !important; +} + +.nav-list-link:hover, +.nav-list-link.active { + color: var(--dk-heading) !important; + background-color: transparent; +} + +.nav-list-item.active > .nav-list-link { + color: var(--dk-heading) !important; +} + +.nav-list-expander svg { + fill: var(--dk-nav-link); +} + +/* Code */ +code { + background-color: var(--dk-code-bg) !important; + color: var(--dk-code-text) !important; + border: 1px solid var(--dk-border); +} + +pre, +pre code, +.highlight { + background-color: var(--dk-code-bg) !important; + color: var(--dk-code-text); + border-color: var(--dk-border); +} + +pre code { + border: none; +} + +/* Search */ +.search-input-wrap, +.search-input-wrap .search-input { + background-color: var(--dk-sidebar-bg) !important; + color: var(--dk-body-text) !important; +} + +.search-input-wrap .search-input::placeholder { + color: var(--dk-nav-link) !important; +} + +.search-results-list-item { + background-color: var(--dk-sidebar-bg); + border-color: var(--dk-border); +} + +.search-result { + border-bottom-color: var(--dk-border); + color: var(--dk-body-text); +} + +.search-result-preview { + color: var(--dk-nav-link); +} + +/* Tables */ +.main-content table { + background-color: var(--dk-page-bg); + color: var(--dk-body-text); +} + +.main-content table th { + background-color: var(--dk-table-head) !important; + color: var(--dk-heading); + border-bottom-color: var(--dk-border); +} + +.main-content table td { + border-top-color: var(--dk-border); +} + +.main-content table tr:hover { + background-color: var(--dk-sidebar-bg); +} + +/* Horizontal rules */ +hr { + border-color: var(--dk-border); +} + +/* Blockquotes */ +blockquote { + color: var(--dk-nav-link); + border-left-color: var(--dk-border); +} + +/* Buttons */ +.btn { + background-color: var(--dk-sidebar-bg); + color: var(--dk-body-text); + border-color: var(--dk-border); +} + +.btn-primary { + background-color: var(--dk-link); + color: #ffffff; + border-color: var(--dk-link); +} + +.btn:hover { + background-color: var(--dk-code-bg); +} + +/* Labels */ +.label { + color: var(--dk-nav-link) !important; +} + +/* ─── Build info footer ───────────────────────────────────────────────── */ + +.build-info { + font-size: 0.7rem; + color: var(--dk-nav-link); + margin-top: 0.5rem; +} + +.build-info a { + color: var(--dk-link); +} + +/* ─── Theme toggle button ─────────────────────────────────────────────── */ + +.theme-toggle { + background: none; + border: 1px solid var(--dk-toggle-border); + border-radius: 4px; + cursor: pointer; + padding: 4px 8px; + color: var(--dk-body-text); + display: inline-flex; + align-items: center; + font-size: 1rem; + line-height: 1; + vertical-align: middle; + margin-left: 0.5rem; +} + +.theme-toggle:hover { + background-color: var(--dk-code-bg); +} + +/* Show moon in light mode, sun in dark mode */ +.theme-toggle .sun-icon { display: none; } +.theme-toggle .moon-icon { display: inline; } + +html[data-theme="dark"] .theme-toggle .sun-icon { display: inline; } +html[data-theme="dark"] .theme-toggle .moon-icon { display: none; } + +@media (prefers-color-scheme: dark) { + html:not([data-theme="light"]) .theme-toggle .sun-icon { display: inline; } + html:not([data-theme="light"]) .theme-toggle .moon-icon { display: none; } +} diff --git a/assets/pdfs/Building_Nano_Services_with_OSGi_Declarative_Services_ECE2016.pdf b/assets/pdfs/Building_Nano_Services_with_OSGi_Declarative_Services_ECE2016.pdf new file mode 100644 index 0000000..6837af2 Binary files /dev/null and b/assets/pdfs/Building_Nano_Services_with_OSGi_Declarative_Services_ECE2016.pdf differ diff --git a/assets/pdfs/EpicSplit_EclipsePDE_Bndtools_ECE2014.pdf b/assets/pdfs/EpicSplit_EclipsePDE_Bndtools_ECE2014.pdf new file mode 100644 index 0000000..359b9b4 Binary files /dev/null and b/assets/pdfs/EpicSplit_EclipsePDE_Bndtools_ECE2014.pdf differ diff --git a/assets/pdfs/JumpstartIoTinJavaWithOSGienRoute_JFS2016.pdf b/assets/pdfs/JumpstartIoTinJavaWithOSGienRoute_JFS2016.pdf new file mode 100644 index 0000000..9fb39d0 Binary files /dev/null and b/assets/pdfs/JumpstartIoTinJavaWithOSGienRoute_JFS2016.pdf differ diff --git a/development.md b/development.md new file mode 100644 index 0000000..22d53b2 --- /dev/null +++ b/development.md @@ -0,0 +1,46 @@ +--- +layout: default +title: Development Resources +nav_order: 3 +--- + +# Development Resources + +--- + +## OSGi Bundle Repositories (OBR) + +Pre-built OSGi Bundle Repository index files for Eclipse releases, suitable for use with BndTools and Eclipse IDE setups. + +[Browse OBR files]({{ '/static/obr/index.html' | relative_url }}){: .btn } + +Available index files for Eclipse versions: 3.6.2, 3.7.2, 3.8.2, 4.3.2, 4.4.0, 4.4.1, 4.6.0, 4.6.1 (Platform and Simultaneous releases). + +--- + +## OSGi Runtime Debugging + +Tools and configuration for debugging OSGi runtimes using the Apache Felix Web Console and related plugins. + +[OSGi Debugging Setup]({{ '/static/osgi-debug/index.html' | relative_url }}){: .btn } + +Includes Apache Felix plugins: + +- Web Console +- Declarative Services +- Event Admin +- Memory Usage +- OBR Browser +- Package Admin +- Script Console +- Subsystems + +--- + +## Project Setups + +- [GitHub projects — OSGi and bnd/bndtools](https://peterkir.github.io/idefix/bootstrap/osgi/index.html){: target="_blank" } +- [GitHub projects — peterkir](https://peterkir.github.io/idefix/bootstrap/peterkir/index.html){: target="_blank" } + +{: .note } +The `idefix` project setup links above point to the [peterkir/idefix](https://github.com/peterkir/idefix){: target="_blank" } repository's GitHub Pages site. diff --git a/index.html b/index.html deleted file mode 100644 index bca5d8b..0000000 --- a/index.html +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/index.md b/index.md new file mode 100644 index 0000000..b66784b --- /dev/null +++ b/index.md @@ -0,0 +1,25 @@ +--- +layout: home +title: Home +nav_order: 1 +--- + +# Peter Kirschner's GitHub Site + +OSGi & Eclipse enthusiast, Java developer, and conference speaker. + +--- + +## Talks + +Conference presentations on OSGi, Eclipse RCP, bndtools, and IoT. + +[View all talks](talks){: .btn .btn-primary .mr-2 } + +--- + +## Development Resources + +OSGi bundle repositories and debugging tools. + +[View development resources](development){: .btn } diff --git a/talks.md b/talks.md new file mode 100644 index 0000000..51c3a7e --- /dev/null +++ b/talks.md @@ -0,0 +1,65 @@ +--- +layout: default +title: Talks +nav_order: 2 +--- + +# Conference Talks + +--- + +## EclipseCon Europe 2017 — Eclipse RCP with bndtools + +How to build Eclipse RCP applications using bndtools instead of Eclipse PDE. + +- [Source code on GitHub](https://github.com/peterkir/example.bnd.rcp){: target="_blank" } + +{: .note } +The ECE2017 slides PDF was originally hosted on `eclipsecon.org/europe2017`, which is no longer accessible. The same slides were also used for the OSGi User Forum Germany 2017 workshop below. + +--- + +## OSGi User Forum Germany Tooling Workshop 2017 — How to Build Eclipse Products from bndtools Bundles + +Hands-on workshop demonstrating the complete bndtools-based Eclipse RCP build workflow. + +- [Source code on GitHub](https://github.com/peterkir/example.bnd.rcp){: target="_blank" } + +--- + +## EclipseCon Europe 2016 — Building Nano Services with OSGi Declarative Services + +Tutorial covering OSGi Declarative Services pattern for building modular, loosely-coupled Java applications. + +- [Slides (PDF)]({{ '/assets/pdfs/Building_Nano_Services_with_OSGi_Declarative_Services_ECE2016.pdf' | relative_url }}){: target="_blank" } +- [Exercise slides presentation](https://peterkir.github.io/ece2016/slides/index.html){: target="_blank" } +- [Exercise source code on GitHub](https://github.com/peterkir/ece2016){: target="_blank" } + +--- + +## Java Forum Stuttgart 2016 — Jumpstart IoT in Java with OSGi enRoute + +Introduction to building IoT applications in Java using the OSGi enRoute framework. + +- [Interactive slides](https://peterkir.github.io/jfs2016/jfs2016-slides/){: target="_blank" } +- [Slides (PDF)]({{ '/assets/pdfs/JumpstartIoTinJavaWithOSGienRoute_JFS2016.pdf' | relative_url }}){: target="_blank" } + +--- + +## EclipseCon Europe 2014 — An Epic Split Between OSGi Tooling Eclipse PDE and BndTools + +Explores the differences between Eclipse PDE and BndTools for OSGi development, and how to use both in a mixed-mode setup. + +- [Interactive slides](https://peterkir.github.io/201410_EclipseCon_Europe/presentation/index.html){: target="_blank" } +- [Slides (PDF)]({{ '/assets/pdfs/EpicSplit_EclipsePDE_Bndtools_ECE2014.pdf' | relative_url }}){: target="_blank" } +- [Video on YouTube](https://www.youtube.com/watch?v=5CbPWafQvPg){: target="_blank" } 📹 +- [Source code on GitHub](https://github.com/peterkir/ece2014){: target="_blank" } + +--- + +## EclipseCon Europe 2008 — Open System Engineering Environment: An Integrated Solution + +Early work on integrated tooling for embedded system engineering within Eclipse. + +{: .warning } +The original slides link (`eclipsecon.org/summiteurope2008`) is no longer available — the Eclipse Summit Europe 2008 website has been taken down.