Compare commits

...
35 Commits
Author SHA1 Message Date
Inaki f0465d3cf1 Merge pull request #287 from nubenetes/develop
feat: add addition_method provenance metadata to inventory
2026-05-28 19:56:27 +02:00
Nubenetes Bot 4cf24af048 feat: add addition_method provenance metadata to inventory 2026-05-28 19:55:47 +02:00
Nubenetes Bot 8cacba094a docs: automated README metric synchronization [skip ci] 2026-05-28 14:44:17 +00:00
Nubenetes Bot 337536c9e6 merge: merge develop into master updating CHANGELOG.md 2026-05-28 16:43:47 +02:00
Nubenetes Bot 581e75abd8 docs: document releases v2.3.24 to v2.3.32 in CHANGELOG 2026-05-28 16:43:39 +02:00
Nubenetes Bot 87eb612aa0 docs: automated README metric synchronization [skip ci] 2026-05-28 14:37:19 +00:00
Nubenetes Bot b2cee83e9f merge: merge develop into master setting arsys logo to constant corporate sky blue 2026-05-28 16:36:53 +02:00
Nubenetes Bot 9085a4df85 fix: change arsys logo color to constant corporate sky blue (#00a2e8) for visibility in both light and dark backgrounds 2026-05-28 16:36:42 +02:00
Nubenetes Bot bab49932d1 docs: automated README metric synchronization [skip ci] 2026-05-28 14:24:51 +00:00
Nubenetes Bot b12aa57102 merge: merge develop into master adding dark mode styles for arsys logo 2026-05-28 16:24:39 +02:00
Nubenetes Bot fbf99cf8d1 fix: resolve arsys logo visibility in dark mode by adding media query style in SVG and CSS filter invert rule 2026-05-28 16:24:12 +02:00
Nubenetes Bot 228e4677ef feat: sync V2 elite curated edition and README metrics [skip ci] 2026-05-28 14:20:26 +00:00
Nubenetes Bot 4647fd6626 docs: automated README metric synchronization [skip ci] 2026-05-28 14:18:29 +00:00
Nubenetes Bot 6edf3a877c merge: merge develop into master replacing broken arsys logo with working svg 2026-05-28 16:17:54 +02:00
Nubenetes Bot 1a0bc75cca fix: replace broken arsys png with working svg and regenerate mosaics 2026-05-28 16:17:44 +02:00
Nubenetes Bot ced9bf0056 merge: merge develop into master including Arsys channel addition and video hub linter fixes 2026-05-28 16:03:18 +02:00
Nubenetes Bot c0542b09ac docs: automated README metric synchronization [skip ci] 2026-05-28 14:01:49 +00:00
Nubenetes Bot 37a03b4f23 fix: update git add pathspec in videos workflow to stage v2-docs/videos/ directory 2026-05-28 16:01:03 +02:00
Nubenetes Bot e7e588bed0 feat: sync V2 elite curated edition and README metrics [skip ci] 2026-05-28 14:00:52 +00:00
Nubenetes Bot 6e2a8c3a92 docs: automated README metric synchronization [skip ci] 2026-05-28 13:58:59 +00:00
Nubenetes Bot 12cf8e3840 fix: correct video index heading increment to resolve lint error, and feat: add Arsys channel to V1 and V2 YouTube mosaics 2026-05-28 15:58:15 +02:00
Nubenetes Bot ef4feaa941 docs: automated README metric synchronization [skip ci] 2026-05-28 09:47:36 +00:00
Nubenetes Bot 450ec74c06 Merge develop into master for release v2.3.28 2026-05-28 11:47:07 +02:00
Nubenetes Bot b578513e71 docs: update Mandate 23 in GEMINI.md and persistent memory in health_learning.json to reflect database-driven dual layout design 2026-05-28 11:46:58 +02:00
Nubenetes Bot df7adf28df docs: automated README metric synchronization [skip ci] 2026-05-28 09:45:55 +00:00
Nubenetes Bot 76c3b3d907 Merge develop into master for release v2.3.27 2026-05-28 11:45:26 +02:00
Nubenetes Bot ed189f6426 feat: run reorganize_mosaic.py automatically in publisher workflow 2026-05-28 11:45:17 +02:00
Nubenetes Bot 6e8cc4fda4 docs: automated README metric synchronization [skip ci] 2026-05-28 09:43:10 +00:00
Nubenetes Bot 0d3b751a6d Merge develop into master for release v2.3.26 2026-05-28 11:42:44 +02:00
Nubenetes Bot a7eae54c1f fix: correct heading levels in v2_video_portal.py index generator to prevent markdown lint failures 2026-05-28 11:42:32 +02:00
Nubenetes Bot 6bb523a0f0 feat: sync V2 elite curated edition and README metrics [skip ci] 2026-05-28 09:39:14 +00:00
Nubenetes Bot e385fe27eb docs: automated README metric synchronization [skip ci] 2026-05-28 09:37:35 +00:00
Nubenetes Bot 967900cd58 Merge develop into master for release v2.3.25 2026-05-28 11:37:09 +02:00
Nubenetes Bot a26adfb137 feat: migrate YouTube mosaic metadata to inventory.yaml, dynamically generate V2 categorized layout, and document V1 vs V2 layout differences 2026-05-28 11:36:57 +02:00
Nubenetes Bot 5c6fe886ae docs: automated README metric synchronization [skip ci] 2026-05-28 09:26:31 +00:00
18 changed files with 19851 additions and 1373 deletions
+1 -1
View File
@@ -78,7 +78,7 @@ jobs:
run: |
git config --global user.name "Nubenetes Bot"
git config --global user.email "bot@nubenetes.com"
git add data/inventory.yaml v2-docs/videos.md
git add data/inventory.yaml v2-docs/videos/
if git diff --staged --quiet; then
echo "No automated changes to commit."
else
@@ -63,6 +63,12 @@ jobs:
run: |
python -u src/v2_video_portal.py
- name: Execute Mosaic Reorganization
env:
PYTHONPATH: ${{ github.workspace }}
run: |
python src/reorganize_mosaic.py
- name: Run V2 Publisher (Render-Only)
env:
PYTHONPATH: ${{ github.workspace }}
+59
View File
@@ -5,6 +5,65 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [[2.3.34]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.34) - 2026-05-28
### Added
- **Link Provenance Tracking**: Added `addition_method` metadata attribute to `data/inventory.yaml` to differentiate between manually curated and automatically ingested links.
- **Database Migration**: Migrated all 18,004 existing database entries to have `addition_method: manual` by default.
- **Workflow & Optimizer Integration**: Programmed `src/agentic_curator.py` to mark automatically ingested resources as `automatic`, and updated `src/v2_optimizer.py` to default new V1 Markdown source resources to `manual`.
### Changed
- **Documentation & Memory Systems**: Added documentation for `addition_method` in `README.md`, `GEMINI.md`, and `src/memory/health_learning.json`.
## [[2.3.32]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.32) - 2026-05-28
### Changed
- **Arsys Logo Dark Mode Contrast**: Changed the Arsys logo fill color to a constant corporate electric sky blue (`#00a2e8`) inside the SVG, ensuring maximum contrast on both white (V1) and slate/black (V2) backgrounds.
- **Removed Logo CSS Inversion**: Removed the dark mode CSS filter invert rule in `extra.css` to preserve branding color integrity.
## [[2.3.31]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.31) - 2026-05-28
### Changed
- **Arsys Logo Dark Mode Adaptation**: Embedded light/dark prefers-color-scheme styles inside the Arsys SVG logo and added a CSS invert filter for the slate theme in `extra.css` to fix visibility in dark mode.
## [[2.3.30]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.30) - 2026-05-28
### Fixed
- **Wikimedia Commons URL Correction**: Replaced the broken HTML error page (downloaded due to invalid hash pathing) with a valid vector SVG file by using the correct MD5 filename-derived directory structure (`8/88/Arsys_logo.svg`) on upload.wikimedia.org.
## [[2.3.29]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.29) - 2026-05-28
### Added
- **Arsys Channel Integration**: Registered `https://www.youtube.com/@arsys` in `data/inventory.yaml` under `cloud_providers` (V2) and ordered to append at the end of V1 flat sequence.
### Fixed
- **Video Hub Heading Level Fix**: Fixed a markdown linter error (MD001) in the generated video hub index by changing the heading increment from h3 to h2 (`## Learning Dimensions`).
## [[2.3.28]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.28) - 2026-05-28
### Changed
- **Mandate 23 Documentation**: Updated `GEMINI.md` and `health_learning.json` to formally document the database-driven dual layout design of YouTube mosaics.
## [[2.3.27]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.27) - 2026-05-28
### Added
- **Workflow Automation for Mosaic**: Configured the V2 Publisher workflow to execute `src/reorganize_mosaic.py` automatically on each run.
## [[2.3.26]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.26) - 2026-05-28
### Fixed
- **Video Hub Index Heading Level Correction**: Adjusted generator code to prevent heading hierarchy lint failures.
## [[2.3.25]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.25) - 2026-05-28
### Added
- **Database Migration for YouTube Mosaic**: Migrated YouTube channel mosaic configuration from the deprecated `youtube_channels_mosaic.yaml` to the unified monolithic `data/inventory.yaml` and refactored the layout generator to dynamically read from the database.
## [[2.3.24]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.24) - 2026-05-28
### Changed
- **Restored V1 Flat YouTube Mosaic Layout**: Restored the flat list layout (11 channels per row, sorted by `order_v1`) on the V1 homepage, while preserving the advanced categorized V2 dashboard.
## [[2.3.23]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.23) - 2026-05-28
### Changed
+5 -1
View File
@@ -55,13 +55,17 @@ This file contains the accumulated instructions and long-term vision for the aut
* `source_provenance`: Identifies the origin of the discovery (Twitter, RSS, Manual).
* `social_preview_url`: OpenGraph/Social images to enrich the V2 visual experience.
* `mentions_count`: Tracks resource popularity/rediscovery frequency.
* `addition_method`: Tracks the resource addition origin ('manual' or 'automatic') to facilitate scaling metrics.
- **Persistence (MANDATORY)**: Every AI agent and workflow MUST load this file at startup, update it, and INJECT the modified YAML into the final PR payload if any change is detected. Discarding the database during a workflow run is a CRITICAL FAILURE.
- **Exhaustive Initialization**: The system supports a `FORCE_FULL_CHECK` environment variable to bypass all caches (e.g., 21-day health cache) and force a full re-validation and re-enrichment of the entire 17k+ link archive.
- **No Trusted Bypassing**: All domains, including high-trust ones (GitHub, Google, AWS), MUST be verified for link validity. Trusted status only grants a lower priority for aggressive scraper rotation, not a bypass for existence checks.
- **URL Protocol Integrity**: All URLs MUST use the complete and correct protocol prefix (`https://` or `http://`). AI agents MUST ensure that automated edits or mass cleanup tasks NEVER corrupt the protocol (e.g., by reducing `https://` to `https:/`).
- **Manual Priority**: AI agents MUST NOT overwrite existing manual descriptions or stars in the V1 archive files. Enrichment is strictly for the YAML database and the V2 portal.
23. **YouTube Mosaic Exemption**: In `docs/index.md` and `v2-docs/index.md`, only the primary visual mosaic block (the specific `<center>` block containing the highest density of YouTube links) is exempt from automated health checks and MUST NOT be included in `data/inventory.yaml`. This is a fixed visual asset. However, all other YouTube resources in these files—including links appearing before the mosaic and those in the collapsible "Top Videos" section—MUST be checked by the link cleaner and properly tracked in the inventory.
23. **YouTube Mosaic Management & Dual Layout Mandate**: The YouTube channels visual mosaic in `docs/index.md` (V1) and `v2-docs/index.md` (V2) must be generated dynamically from the centralized metadata database `data/inventory.yaml` (using the `youtube_mosaic` metadata block). The layouts for V1 and V2 must remain strictly distinct to satisfy the dual-edition mandate:
- **V1 Exhaustive Layout**: Must be rendered as a single flat, historically ordered sequence of channel logos (11 per row) using simple inline width styling (`{: style="width:7%"}`). Newly discovered channels must be appended at the end of the flat list (ordered using the `youtube_mosaic.order_v1` field).
- **V2 Elite Layout**: Must be rendered as an advanced categorized dashboard grouped into custom border-outlined card containers with neon colors corresponding to technical dimensions, optimized dimensions (`width: 48px; height: 48px`), and class hooks (`.channel-logo`) (ordered using the `youtube_mosaic.order_v2` field).
- **Automation & Persistence**: The automated Publisher and Optimizer bot workflows must execute `src/reorganize_mosaic.py` to regenerate both visual blocks from the database during every pipeline run, ensuring the layout difference persists over the entire lifecycle.
24. **Canonical URL Normalization & Semantic Deduplication**: To prevent duplication and fragmented metadata, all agents MUST normalize URLs before any inventory operation.
- **Tracking Stripping**: Systematically remove UTM parameters, social media trackers (X.com, LinkedIn), and URL fragments (except technical ones).
+40 -12
View File
@@ -138,9 +138,9 @@ Additionally, as of May 2026, Nubenetes has reached the **Platinum Operational T
<!-- HEART_STATS_START -->
| Metric | Value |
| :--- | :--- |
| **Total Technical Resources (Links)** | **17996+** |
| **Total Technical Resources (Links)** | **18004+** |
| **Specialized MD Pages** | **161** |
| **Total Commits** | **5608+** |
| **Total Commits** | **5634+** |
| **Primary AI Engine** | **Google Gemini (Agentic)** |
<!-- HEART_STATS_END -->
@@ -178,7 +178,7 @@ The growth of Nubenetes reflects the acceleration of the Cloud Native ecosystem.
| 6 | 2023 | 30 | 123 | Maintenance & Refinement |
| 7 | 2024 | 53 | 218 | Curation Strategy Pivot |
| 8 | 2025 | 5 | 20 | Stability & Research Phase |
| 9 | 2026 | 2049 | 8,462 | **Agentic AI Surge** (May 2026 Inception) |
| 9 | 2026 | 2075 | 8,569 | **Agentic AI Surge** (May 2026 Inception) |
<!-- ANNUAL_GROWTH_END -->
<!-- ANNUAL_CHART_START -->
@@ -194,8 +194,8 @@ xychart-beta
title "Nubenetes Annual Growth Metrics (20182026)"
x-axis ["2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026"]
y-axis "Volume (Commits / Estimated New Refs)" 0 --> 9000
bar [1445, 586, 8449, 2193, 1660, 123, 218, 20, 8462]
bar [350, 142, 2046, 531, 402, 30, 53, 5, 2049]
bar [1445, 586, 8449, 2193, 1660, 123, 218, 20, 8569]
bar [350, 142, 2046, 531, 402, 30, 53, 5, 2075]
```
<!-- ANNUAL_CHART_END -->
@@ -204,7 +204,7 @@ xychart-beta
| Month | Commits | Est. New Refs | Status |
| :--- | :---: | :---: | :--- |
| 2026-04 | 25 | 103 | Active Curation |
| 2026-05 | 2024 | 8,359 | **Agentic Inception (Gemini Era)** |
| 2026-05 | 2050 | 8,466 | **Agentic Inception (Gemini Era)** |
<!-- MONTHLY_SURGE_END -->
### 2.4. Content Distribution and Semantic Clustering
@@ -217,7 +217,7 @@ This chart shows the high-level distribution across the primary domains of Cloud
<!-- PILLAR_CHART_START -->
```mermaid
pie title Nubenetes Major Ecosystem Pillars
"Specialized Topics" : 3596
"Specialized Topics" : 3604
"Kubernetes Ecosystem" : 3500
"Developer Ecosystem" : 3000
"Public/Private Cloud" : 2500
@@ -238,10 +238,10 @@ Reflecting Nubenetes' mission of global access while maintaining technical Engli
<!-- SUB_ECO_CHART_START -->
```mermaid
pie title Linguistic Diversity (Global Access)
"English" : 16196
"Spanish" : 1079
"French" : 179
"Others" : 539
"English" : 16203
"Spanish" : 1080
"French" : 180
"Others" : 540
```
<!-- SUB_ECO_CHART_END -->
@@ -343,6 +343,7 @@ Nubenetes operates with two distinct editions to serve different engineering nee
- **SEO Guard:** Deployed at the domain root (`/`) to preserve 6+ years of historical backlinks and deep-links.
- **Fallback Access:** Also available at [nubenetes.com/v1/](https://nubenetes.com/v1/).
- **Source of Truth:** The `docs/` directory.
- **YouTube Mosaic:** Kept as a flat, historically ordered list of channel logos (11 per row) using simple inline width styling (`{: style="width:7%"}`). Newly added channels are appended at the end of this list.
### 5.2. V2: The Agentic Elite Edition
- **Purpose:** A high-density, enterprise-grade portal for the modern Cloud Native ecosystem (2026 and beyond).
@@ -350,6 +351,7 @@ Nubenetes operates with two distinct editions to serve different engineering nee
- **Root Redirection:** The root `index.html` automatically redirects human visitors to this portal.
- **Algorithm:** Uses the **Incremental Elite Engine** to select and classify top-tier resources.
- **Aesthetic:** "Cyber Cloud" styling (pure black backgrounds, neon cyan accents, advanced glassmorphism).
- **YouTube Mosaic:** Organized as a categorized dashboard grouped into custom border-outlined cards with neon colors, class hooks (`.channel-logo`), and optimized image properties (`width: 48px; height: 48px`).
- **Visual Standards (Elite Hierarchy):**
- **`==[Yellow Highlighting]==`**: **Platinum Standard** (5 stars) Foundational "Must-Read" assets.
- **`**Bold Text**`**: **Gold Standard** (4 stars) Highly recommended resources with strong industry momentum.
@@ -377,6 +379,7 @@ To better understand the dual-nature of the project, the following matrix detail
| **8** | **Content Format** | **Original Language**: Preserves V1 native descriptions (Spanish, French, etc.). | **Global English**: All summaries and UI are in Professional English for global access. |
| **9** | **Maintenance Type** | **Surgical Repair**: Dead links are removed or updated line-by-line. | **Full Refresh**: Orphaned files are pruned and content is re-indexed from the inventory. |
| **10** | **Target Audience** | **Researchers & Historians**: Looking for specific deep technical context. | **Architects & Decision Makers**: Looking for vetted, stable, and mature solutions. |
| **11** | **YouTube Mosaic** | **Flat Historical Sequence**: A single flat ordered list of channel logos (11 per row) in their original historical sequence (new channels appended at the end) with `{: style="width:7%"}` inline styling. | **Categorized & Styled**: Grouped into border-outlined card panels by category with neon outlines, custom logo alignment (`width:48px; height:48px`), and class hooks. |
### 5.4. The Incremental Elite Engine
To maintain the high-density quality of V2 without redundant AI costs, the `V2VisionEngine` implements an incremental synchronization strategy:
@@ -406,7 +409,31 @@ By separating these domains, Nubenetes ensures **100% Resilience**:
---
### 5.6. Multi-Language Support Policy
### 5.6. Dynamic YouTube Mosaic Engine
Nubenetes manages the YouTube channel visual mosaic dynamically to support distinct V1 and V2 layout requirements from a single database source:
- **Unified Schema (`data/inventory.yaml`)**: All channel metadata is stored under the `youtube_mosaic` key in the centralized inventory file:
```yaml
https://www.youtube.com/@GoogleGemini:
title: Google Gemini
status: online
youtube_mosaic:
category: ai_advanced_tech # Category grouping ID (V2)
image: images/google_gemini_logo.png
order_v1: 122 # Flat sequence index (V1)
order_v2: 0 # Category sorting index (V2)
```
- **Layout Generators (`src/reorganize_mosaic.py`)**:
* **V1 Flat Layout**: Sorts all channels globally by `order_v1` and formats them into a flat grid of 11 logos per row using simple inline width styling (`{: style="width:7%"}`). Newly added channels are appended at the end of the flat mosaic.
* **V2 Categorized Layout**: Groups channels by category, sorts them by `order_v2` within each group, and renders them inside custom cards with border-outline colors (e.g., purple for AI) matching the dimensions.
- **Workflow Integration**: The mosaic generation is fully integrated into the **V2 Publisher** workflow (`04.1. V2 Publisher`). During any manual or automated run (cron jobs, PR merges), `src/reorganize_mosaic.py` runs automatically to rebuild both visual sections, preserving their layout differences across the entire codebase lifecycle.
---
### 5.7. Multi-Language Support Policy
To embrace the diverse global Cloud Native community while maintaining international discoverability, Nubenetes implements a dual-layer linguistic strategy powered by a **Data-First Architecture**:
- **Linguistic Data Persistence**: Language detection is treated as a core metadata attribute. The centralized database ([`data/inventory.yaml`](data/inventory.yaml)) stores resources using specific fields:
@@ -420,6 +447,7 @@ To embrace the diverse global Cloud Native community while maintaining internati
* `hierarchy`: Persistent, **recursive technical classification** (list of up to 10 levels) for O'Reilly-style grouping.
* `content_hash` / `health_score`: Advanced fields for content drift detection and reliability tracking.
* `source_provenance` / `social_preview_url`: Data for origin tracing and V2 visual enrichment.
* `addition_method`: Origin type of the resource addition ('manual' or 'automatic') to support growth and scaling metrics.
- **Separation of Concerns (Data vs. UI)**:
* **The Database (Source of Truth)**: Holds raw data, enabling future features like language-based filtering or statistics without re-processing links.
* **The Portal (Visual Rendering)**: The `V2VisionEngine` dynamically converts the metadata into visual UI tags (e.g., `[SPANISH CONTENT]`, `[ARCHITECT LEVEL]`).
+19542 -684
View File
File diff suppressed because it is too large Load Diff
-429
View File
@@ -1,429 +0,0 @@
# Nubenetes YouTube Channel Mosaic Categorization Map
# This file defines the visual grouping of YouTube channels displayed on the homepage.
categories:
- id: "ai_advanced_tech"
name: "AI & Advanced Tech"
channels:
- title: "Google Gemini"
url: "https://www.youtube.com/@GoogleGemini"
image: "images/google_gemini_logo.png"
- title: "Google DeepMind"
url: "https://www.youtube.com/@googledeepmind"
image: "images/google_deepmind_logo.png"
- title: "Anthropic"
url: "https://www.youtube.com/@anthropic-ai"
image: "images/anthropic_logo.png"
- title: "OpenAI"
url: "https://www.youtube.com/OpenAI"
image: "images/openai_logo.png"
- title: "Meta AI"
url: "https://www.youtube.com/@aiatmeta"
image: "images/meta_ai_logo.png"
- title: "Microsoft Copilot"
url: "https://www.youtube.com/@Microsoft.Copilot"
image: "images/microsoft_copilot_logo.png"
- title: "Microsoft Reactor"
url: "https://www.youtube.com/@MicrosoftReactor"
image: "images/microsoft_reactor_logo.png"
- title: "dotcsv"
url: "https://www.youtube.com/@DotCSV"
image: "images/dotcsv.jpg"
- id: "cloud_providers"
name: "Cloud Providers & Core Infrastructure"
channels:
- title: "aws videos"
url: "https://www.youtube.com/c/amazonwebservices"
image: "images/aws_logo.jpg"
- title: "azure videos"
url: "https://www.youtube.com/c/MicrosoftAzure"
image: "images/azure_logo.jpg"
- title: "gcp videos"
url: "https://www.youtube.com/user/googlecloudplatform"
image: "images/gcp_logo.jpg"
- title: "gcp videos new"
url: "https://www.youtube.com/@googlecloudtech"
image: "images/gcp_logo_v2.png"
- title: "ibm cloud videos"
url: "https://www.youtube.com/c/IBMTechnology"
image: "images/ibm_cloud_logo.jpg"
- title: "oraclecloud videos"
url: "https://www.youtube.com/c/OracleCloudInfrastructure"
image: "images/oracle_cloud_logo.jpg"
- title: "digitalocean videos"
url: "https://www.youtube.com/c/Digitalocean"
image: "images/digital_ocean_logo.jpg"
- title: "cloudflare"
url: "https://www.youtube.com/cloudflare"
image: "images/cloudflare_logo.jpg"
- title: "scaleway cloud"
url: "https://www.youtube.com/c/Scaleway-Cloud"
image: "images/scaleway_cloud.jpg"
- title: "openstack"
url: "https://www.youtube.com/c/OpenStackFoundation"
image: "images/openstack_logo.jpg"
- title: "alibaba cloud"
url: "https://www.youtube.com/c/AlibabaCloud"
image: "images/alibaba_cloud.jpg"
- title: "linode cloud"
url: "https://www.youtube.com/c/linode"
image: "images/linode_cloud.jpg"
- title: "gaia-x"
url: "https://www.youtube.com/channel/UCB5WMc2FfrxKzfd7XIODoMw"
image: "images/gaia_x.jpg"
- title: "kyndryl"
url: "https://www.youtube.com/@kyndryl"
image: "images/kyndryl_logo.jpg"
- id: "cloud_native_kubernetes"
name: "Cloud Native Platforms & Kubernetes"
channels:
- title: "cncf videos"
url: "https://www.youtube.com/c/cloudnativefdn"
image: "images/cncf_logo.jpg"
- title: "kubernetes logo"
url: "https://www.youtube.com/kubernetescommunity"
image: "images/kubernetes_logo.png"
- title: "redhat videos"
url: "https://www.youtube.com/c/redhat"
image: "images/redhat_logo.jpg"
- title: "openshift videos"
url: "https://www.youtube.com/c/OpenShift"
image: "images/openshift_logo.jpg"
- title: "rancher logo"
url: "https://www.youtube.com/c/Rancher"
image: "images/rancher-logo.jpg"
- title: "vmware tanzu logo"
url: "https://www.youtube.com/c/VMwareTanzu"
image: "images/vmware_tanzu_logo.jpg"
- title: "argocd project"
url: "https://www.youtube.com/channel/UCOvYmppcbOPm1viN6ust3lA"
image: "images/argoproj.jpg"
- title: "fluxcd"
url: "https://www.youtube.com/channel/UCoZxt-YMhGHb20ZkvcCc5KA"
image: "images/fluxcd.jpg"
- title: "keptn"
url: "https://www.youtube.com/c/keptn"
image: "images/keptn_logo.jpg"
- title: "netbox"
url: "https://www.youtube.com/@NetBoxLabs"
image: "images/netboxlabs_logo.jpg"
- title: "kubefm"
url: "https://www.youtube.com/@kubefm"
image: "images/kubefm_logo.jpg"
- title: "container days"
url: "https://www.youtube.com/c/ContainerDays"
image: "images/containerdays.jpg"
- title: "tetrate"
url: "https://www.youtube.com/c/Tetrate"
image: "images/tetrate_logo.jpg"
- id: "devops_cicd_iac"
name: "DevOps, CI/CD, IaC & GitOps"
channels:
- title: "docker videos"
url: "https://www.youtube.com/c/DockerIo"
image: "images/docker_logo.jpg"
- title: "cloudbees videos"
url: "https://www.youtube.com/c/CloudBeesTV"
image: "images/cloudbees_logo.jpg"
- title: "jenkins videos"
url: "https://www.youtube.com/c/jenkinscicd"
image: "images/jenkins-logo.jpg"
- title: "jenkins-x videos"
url: "https://www.youtube.com/channel/UCN2kblPjXKMcjjVYmwvquvg"
image: "images/jenkins_x_logo.jpg"
- title: "spinnaker videos"
url: "https://www.youtube.com/channel/UCcxQbw8kT1-FRhFhO2QCetg"
image: "images/spinnaker_logo.jpg"
- title: "harhicorp videos"
url: "https://www.youtube.com/c/HashiCorp"
image: "images/hashicorp_logo.jpg"
- title: "pulumi videos"
url: "https://www.youtube.com/c/PulumiTV"
image: "images/pulumi_logo.jpg"
- title: "Azure Terraformer"
url: "https://www.youtube.com/@azure-terraformer"
image: "images/azure-terraformer.jpg"
- title: "Ned in the Cloud"
url: "https://www.youtube.com/@NedintheCloud"
image: "images/nedinthecloud.jpg"
- title: "github videos"
url: "https://www.youtube.com/c/GitHub"
image: "images/github_logo.jpg"
- title: "gitlab video"
url: "https://www.youtube.com/c/Gitlab"
image: "images/gitlab_logo.jpg"
- title: "gitkraken"
url: "https://www.youtube.com/c/Gitkraken"
image: "images/gitkraken_logo.jpg"
- title: "atlassian videos"
url: "https://www.youtube.com/c/Atlassian"
image: "images/atlassian_logo.jpg"
- title: "postman videos"
url: "https://www.youtube.com/c/postman"
image: "images/postman_logo.jpg"
- title: "swagger videos"
url: "https://www.youtube.com/c/Smartbear"
image: "images/smartbear_swagger_logo.jpg"
- title: "jfrog"
url: "https://www.youtube.com/c/JFrogInc"
image: "images/jfrog_logo.jpg"
- title: "sonatype"
url: "https://www.youtube.com/c/Sonatypeinc"
image: "images/sonatype_logo.jpg"
- title: "sonarsource sonarqube"
url: "https://www.youtube.com/channel/UCS5-gTYteN9rnFd98YxYtrA"
image: "images/sonarsource_logo.jpg"
- title: "ContinuousDeliveryFoundation"
url: "https://www.youtube.com/c/ContinuousDeliveryFoundation"
image: "images/ContinuousDeliveryFoundation.jpg"
- title: "azure devops"
url: "https://www.youtube.com/c/AzureDevOps"
image: "images/azure_devops_youtube.jpg"
- id: "observability_databases_storage"
name: "Observability, Databases & Cloud Storage"
channels:
- title: "prometheus videos"
url: "https://www.youtube.com/c/PrometheusIo"
image: "images/prometheus_logo.jpg"
- title: "grafana videos"
url: "https://www.youtube.com/c/Grafana"
image: "images/grafana_logo.jpg"
- title: "istio videos"
url: "https://www.youtube.com/c/Istio"
image: "images/istio_logo.jpg"
- title: "elastic videos"
url: "https://www.youtube.com/c/Elastic"
image: "images/elasticsearch_logo.jpg"
- title: "dynatrace videos"
url: "https://www.youtube.com/c/dynatrace"
image: "images/dynatrace_logo.jpg"
- title: "appdynamics videos"
url: "https://www.youtube.com/c/appdynamics"
image: "images/appdynamics_logo.jpg"
- title: "newrelic videos"
url: "https://www.youtube.com/c/NewRelicInc"
image: "images/newrelic_logo.jpg"
- title: "tigera calico"
url: "https://www.youtube.com/channel/UC8uN3yhpeBeerGNwDiQbcgw"
image: "images/tigera_calico_logo.jpg"
- title: "weavecloud"
url: "https://www.youtube.com/c/WeaveWorksInc"
image: "images/weavecloud_logo.jpg"
- title: "crunchydata"
url: "https://www.youtube.com/c/CrunchyDataPostgres"
image: "images/crunchydata_logo.jpg"
- title: "liquibase video"
url: "https://www.youtube.com/channel/UC5qMsRjObu685rTBq0PJX8w"
image: "images/liquibase_logo.jpg"
- title: "cockroachdb"
url: "https://www.youtube.com/c/cockroachdb"
image: "images/cockroachdb_logo.jpg"
- title: "mongodb"
url: "https://www.youtube.com/c/MongoDBofficial"
image: "images/mongodb_logo.jpg"
- title: "redis"
url: "https://www.youtube.com/c/Redisinc"
image: "images/redis_logo.jpg"
- title: "confluent video"
url: "https://www.youtube.com/c/Confluent"
image: "images/confluent_logo.jpg"
- title: "kubemq video"
url: "https://www.youtube.com/channel/UCud7fErZAyMC6lHT_cWZNfA"
image: "images/kubemq_logo.jpg"
- title: "openebs"
url: "https://www.youtube.com/channel/UC3ywadaAUQ1FI4YsHZ8wa0g"
image: "images/openebs_logo.jpg"
- title: "storageos"
url: "https://www.youtube.com/channel/UCm63IQg81KP9vXRWSHQpu1w"
image: "images/storageos_logo.jpg"
- title: "robin"
url: "https://www.youtube.com/channel/UCt7N400Z8gB_3yKq1qrjP2w"
image: "images/robin_logo.jpg"
- title: "portworx"
url: "https://www.youtube.com/c/Portworx"
image: "images/portworx_logo.jpg"
- id: "dev_testing_collab"
name: "Development, Testing & Collaboration"
channels:
- title: "vscode videos"
url: "https://www.youtube.com/c/Code"
image: "images/vscode_logo.jpg"
- title: "Playwright"
url: "https://www.youtube.com/@Playwrightdev"
image: "images/playwright_logo.png"
- title: "chrome developers videos"
url: "https://www.youtube.com/c/GoogleChromeDevelopers"
image: "images/chromedevtools_logo.jpg"
- title: "mozilla developer"
url: "https://www.youtube.com/c/MozillaDeveloper"
image: "images/mozilla_developer_logo.jpg"
- title: "rh devel"
url: "https://www.youtube.com/c/RedHatDevelopers"
image: "images/rh_developer_logo.jpg"
- title: "spring logo"
url: "https://www.youtube.com/user/SpringSourceDev"
image: "images/spring-logo.jpg"
- title: "quarkus logo"
url: "https://www.youtube.com/c/Quarkusio"
image: "images/quarkus-logo.jpg"
- title: "lightbend videos"
url: "https://www.youtube.com/c/Lightbend-TV"
image: "images/lightbend_logo.jpg"
- title: "lambdatest"
url: "https://www.youtube.com/c/LambdaTest"
image: "images/lambdatest.jpg"
- title: "rocket_chat"
url: "https://www.youtube.com/c/RocketChatApp"
image: "images/rocket_chat_logo.jpg"
- title: "slack"
url: "https://www.youtube.com/c/Slackhq"
image: "images/slack_logo.jpg"
- title: "mattermost"
url: "https://www.youtube.com/c/MattermostHQ"
image: "images/mattermost_logo.jpg"
- title: "microsoft365"
url: "https://www.youtube.com/c/microsoft365"
image: "images/microsoft_365_logo.jpg"
- title: "openproject"
url: "https://www.youtube.com/c/OpenProjectCommunity"
image: "images/openproject_logo.jpg"
- id: "learning_influencers_communities"
name: "Tech E-Learning, Influencers & Communities"
channels:
- title: "cloud academy"
url: "https://www.youtube.com/c/Cloudacademy"
image: "images/cloud_academy_logo.jpg"
- title: "acloudguru"
url: "https://www.youtube.com/c/AcloudGuru"
image: "images/acloudguru_logo.jpg"
- title: "devops_tv"
url: "https://www.youtube.com/c/Devopsdotcom"
image: "images/devops_tv_logo.jpg"
- title: "xebialabs"
url: "https://www.youtube.com/c/XebiaLabs"
image: "images/xebialabs_logo.jpg"
- title: "devops library"
url: "https://www.youtube.com/c/Devopslibrary"
image: "images/devops_library_logo.jpg"
- title: "codecademy"
url: "https://www.youtube.com/c/codecademy"
image: "images/codecademy.jpg"
- title: "coursera"
url: "https://www.youtube.com/user/coursera"
image: "images/coursera_logo.jpg"
- title: "academind"
url: "https://www.youtube.com/c/Academind"
image: "images/academind_logo.jpg"
- title: "guru99"
url: "https://www.youtube.com/c/guru99comm"
image: "images/guru99_logo.jpg"
- title: "intellipaat"
url: "https://www.youtube.com/c/Intellipaat"
image: "images/intellipaat_logo.jpg"
- title: "cloud quick POCs"
url: "https://www.youtube.com/channel/UCv9MUffHWyo2GgLIDLVu0KQ"
image: "images/cloudquickpocs.jpg"
- title: "thetips4you"
url: "https://www.youtube.com/c/Thetips4you"
image: "images/thethips4you.jpg"
- title: "cloud learnhub"
url: "https://www.youtube.com/channel/UC57acx8sCmE7uFHfVMvIlNg"
image: "images/cloud_learn_hub.jpg"
- title: "John Savill"
url: "https://www.youtube.com/c/NTFAQGuy"
image: "images/John_Savill.jpg"
- title: "microservice factory"
url: "https://www.youtube.com/channel/UCorFV-WGnajyfNu4zPI0AAA"
image: "images/microservice_factory.jpg"
- title: "kubedb appscode"
url: "https://www.youtube.com/c/AppsCodeInc"
image: "images/kubedb_logo.jpg"
- title: "devops toolkit"
url: "https://www.youtube.com/c/DevOpsToolkit"
image: "images/devops_toolkit.jpg"
- title: "ansible pilot"
url: "https://www.youtube.com/c/AnsiblePilot"
image: "images/ansiblepilot.jpg"
- title: "codelytv"
url: "https://www.youtube.com/CodelyTV"
image: "images/codelytv_logo.jpg"
- title: "pelado nerd"
url: "https://www.youtube.com/c/PeladoNerd"
image: "images/pelado_nerd.jpg"
- title: "hola mundo"
url: "https://www.youtube.com/c/HolaMundoDev"
image: "images/hola_mundo.jpg"
- title: "javier garzas"
url: "https://www.youtube.com/c/JavierGarz%C3%A1s"
image: "images/jgarzas.jpg"
- title: "london IAC"
url: "https://www.youtube.com/c/LondonIAC"
image: "images/londonIAC.jpg"
- title: "techworld nana"
url: "https://www.youtube.com/c/TechWorldwithNana"
image: "images/techworld_nana.jpg"
- title: "honeypot"
url: "https://www.youtube.com/c/Honeypotio"
image: "images/honeypot.jpg"
- title: "Ali Spittel"
url: "https://www.youtube.com/c/AliSpittelDev"
image: "images/aspittel.jpg"
- title: "thomas maurer"
url: "https://www.youtube.com/c/ThomasMaurerCloud"
image: "images/thomas_maurer.jpg"
- title: "freecodecamp"
url: "https://www.youtube.com/c/Freecodecamp"
image: "images/freecodecamp.jpg"
- title: "thenewstack"
url: "https://www.youtube.com/c/TheNewStack"
image: "images/thenewstack.jpg"
- title: "the cloud girl"
url: "https://www.youtube.com/c/priyankavergadia"
image: "images/thecloudgirl.jpg"
- title: "tina huang"
url: "https://www.youtube.com/c/TinaHuang1"
image: "images/tinahuang.jpg"
- title: "azure cloud native"
url: "https://www.youtube.com/channel/UC2Pk9GcHhlVV0R9CQIU6gLw"
image: "images/azure_cloud_native.jpg"
- title: "gps"
url: "https://www.youtube.com/c/MadeByGPS"
image: "images/gps.jpg"
- title: "anais urlichs"
url: "https://www.youtube.com/c/AnaisUrlichs"
image: "images/anais_urlichs.jpg"
- title: "the digital life"
url: "https://www.youtube.com/c/TheDigitalLifeTech"
image: "images/the_digital_life.jpg"
- title: "Tech with Helen"
url: "https://www.youtube.com/@techwithhelen"
image: "images/techwithhelen.jpg"
- title: "bytebytego"
url: "https://www.youtube.com/@ByteByteGo"
image: "images/bytebytego.jpg"
- title: "midulive"
url: "https://www.youtube.com/@midulive"
image: "images/midulive.jpg"
- title: "returngis"
url: "https://www.youtube.com/@returngis"
image: "images/returngis_logo.jpg"
- title: "Olena Kutsenko"
url: "https://www.youtube.com/@OlenaKutsenko"
image: "images/olena_kutsenko.jpg"
- title: "mouredev"
url: "https://www.youtube.com/@mouredev"
image: "images/mouredev.jpg"
- title: "CloudNativeMadrid"
url: "https://www.youtube.com/@CloudNativeMadrid"
image: "images/cloudnativemadrid_logo.jpg"
- title: "itopstalk"
url: "https://www.youtube.com/@ITOpsTalk"
image: "images/itopstalk_logo.png"
- title: "dzone"
url: "https://www.youtube.com/c/dzone"
image: "images/dzone_logo.jpg"
+41
View File
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="315.134px" height="88.15px" viewBox="140.08 380.418 315.134 88.15" enable-background="new 140.08 380.418 315.134 88.15"
xml:space="preserve">
<title>logos</title>
<style type="text/css">
path { fill: #00a2e8; }
</style>
<path d="M379.988,380.625c-3.113-0.493-6.072,1.525-6.746,4.604l-14.486,47.623l-15.873-52.346h-16.51l23.811,64.568
c1.842,3.318,1.076,7.476-1.824,9.922c-2.383,1.864-4.684,1.864-9.645,1.825h-1.191v11.747h3.969c6.867,0,11.906-0.278,14.764-2.699
c3.424-2.924,5.967-6.744,7.342-11.032l26.43-74.172h-10.039V380.625z M403.798,386.617c-4.648,3.81-7.283,9.549-7.143,15.557
c-0.211,4.355,1.535,8.576,4.762,11.509l0,0c2.977,2.977,9.168,5.636,18.375,7.938l0,0c2.301,0.683,4.648,1.2,7.023,1.548
c3.334,0.714,13.215,2.817,13.215,9.405c-0.031,2.951-1.697,5.642-4.326,6.984c-2.93,1.504-6.189,2.254-9.484,2.183
c-4.186,0.154-8.324-0.922-11.904-3.095c-2.637-1.862-4.377-4.738-4.803-7.938h-14.484c-0.123,5.92,2.482,11.567,7.063,15.318
c4.723,3.969,11.906,5.834,21.867,5.834s18.215-1.865,23.295-5.596c5.275-3.944,8.248-10.248,7.938-16.826
c0.223-4.302-1.41-8.492-4.484-11.509c-5.559-3.806-11.84-6.427-18.453-7.699l-5.08-1.071c-10.953-2.302-15.875-5.199-15.875-9.406
c-0.117-2.658,1.162-5.186,3.373-6.667c2.873-1.492,6.096-2.178,9.326-1.984c3.633-0.185,7.227,0.818,10.24,2.857h0.238l0.713,0.675
c0.564,0.508,1.094,1.051,1.588,1.627c1.23,2.349,3.621,3.861,6.27,3.969h9.367c-0.613-5.438-3.281-10.437-7.461-13.969
c-6.303-4.157-13.771-6.188-21.311-5.795c-7.072-0.306-14.047,1.731-19.844,5.795 M272.123,386.26
c-4.65,3.825-7.284,9.576-7.144,15.596c-0.334,4.55,1.47,8.996,4.881,12.024l0,0c2.977,2.977,9.207,5.636,18.414,7.938l0,0
c2.314,0.685,4.675,1.201,7.064,1.548c3.333,0.715,13.255,2.817,13.255,9.445c-0.016,2.966-1.686,5.675-4.326,7.024
c-2.943,1.51-6.217,2.26-9.524,2.183c-4.251,0.184-8.463-0.894-12.104-3.096c-2.632-1.865-4.372-4.739-4.802-7.937h-14.524
c-0.131,5.952,2.49,11.633,7.104,15.397c4.723,3.969,11.906,5.834,21.946,5.834s18.296-1.905,23.374-5.596
c5.299-3.96,8.275-10.3,7.938-16.906c0.223-4.313-1.408-8.517-4.484-11.549c-5.582-3.82-11.891-6.455-18.533-7.738l-5.119-1.071
c-10.993-2.342-15.874-5.238-15.874-9.445c-0.108-2.667,1.186-5.196,3.413-6.667c2.886-1.494,6.122-2.18,9.366-1.984
c3.65-0.176,7.257,0.841,10.279,2.897h0.238l0.713,0.674c0.564,0.509,1.094,1.053,1.588,1.628c1.238,2.359,3.646,3.874,6.311,3.968
h9.445c-0.697-5.342-3.375-10.228-7.5-13.691c-6.324-4.183-13.82-6.227-21.391-5.834c-7.075-0.285-14.048,1.765-19.843,5.834
M241.247,382.767c-4.999,1.119-9.748,3.15-14.009,5.993c-4.54,2.342-7.975,6.376-9.564,11.23
c-2.559,5.596-3.782,11.709-3.572,17.858v34.844h16.072v-37.105c-0.449-5.94,1.795-11.769,6.112-15.874
c4.979-3.733,11.134-5.551,17.342-5.119h3.969v-13.652c-5.626,0.028-11.231,0.694-16.708,1.984 M149.614,386.895
c-2.725,2.057-4.86,4.794-6.191,7.937c-0.159,0.675-0.357,2.302,2.222,2.302h13.096c1.267-1.892,3.144-3.292,5.318-3.968
c2.566-0.813,5.245-1.215,7.937-1.191c3.097-0.062,6.182,0.395,9.128,1.35c3.526,0.668,6.077,3.753,6.072,7.342
c0,7.342-11.231,8.73-14.922,9.207l-8.294,1.111c-6.192,0.684-12.155,2.73-17.461,5.992c-4.537,3.449-6.944,9.017-6.35,14.684
c-0.615,6.168,2.07,12.203,7.064,15.875c5.197,3.439,11.309,5.237,17.541,5.158c3.453,0,7.5-0.237,12.144-0.674
c4.328-0.358,8.559-1.474,12.5-3.294c4.088-1.422,7.471-4.364,9.445-8.215c2.887-4.773,4.27-10.305,3.969-15.874v-25.121
c0.154-5.593-2.792-10.814-7.66-13.573c-7.358-3.725-15.581-5.41-23.811-4.881c-7.631-0.495-15.21,1.557-21.549,5.834
M158.741,439.478L158.741,439.478c-2.188-2.052-3.4-4.938-3.333-7.937c-0.244-2.814,0.774-5.591,2.778-7.58
c2.507-2,5.462-3.361,8.611-3.969l0,0l6.826-1.39c3.81-0.76,7.532-1.903,11.112-3.412l3.016-1.39v10.16
c0.952,7.342-1.429,10.992-5.437,13.572c-4.028,3.452-9.227,5.228-14.525,4.961C164.514,442.578,161.312,441.511,158.741,439.478"/>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

+1 -1
View File
@@ -352,7 +352,7 @@ A curated list of awesome references collected since 2018. Microservices archite
[![ContinuousDeliveryFoundation](images/ContinuousDeliveryFoundation.jpg){: style="width:7%"}](https://www.youtube.com/c/ContinuousDeliveryFoundation) [![tina huang](images/tinahuang.jpg){: style="width:7%"}](https://www.youtube.com/c/TinaHuang1) [![azure devops](images/azure_devops_youtube.jpg){: style="width:7%"}](https://www.youtube.com/c/AzureDevOps) [![azure cloud native](images/azure_cloud_native.jpg){: style="width:7%"}](https://www.youtube.com/channel/UC2Pk9GcHhlVV0R9CQIU6gLw) [![alibaba cloud](images/alibaba_cloud.jpg){: style="width:7%"}](https://www.youtube.com/c/AlibabaCloud) [![linode cloud](images/linode_cloud.jpg){: style="width:7%"}](https://www.youtube.com/c/linode) [![gaia-x](images/gaia_x.jpg){: style="width:7%"}](https://www.youtube.com/channel/UCB5WMc2FfrxKzfd7XIODoMw) [![gps](images/gps.jpg){: style="width:7%"}](https://www.youtube.com/c/MadeByGPS) [![keptn](images/keptn_logo.jpg){: style="width:7%"}](https://www.youtube.com/c/keptn) [![anais urlichs](images/anais_urlichs.jpg){: style="width:7%"}](https://www.youtube.com/c/AnaisUrlichs) [![the digital life](images/the_digital_life.jpg){: style="width:7%"}](https://www.youtube.com/c/TheDigitalLifeTech)<br/>
[![Azure Terraformer](images/azure-terraformer.jpg){: style="width:7%"}](https://www.youtube.com/@azure-terraformer) [![Ned in the Cloud](images/nedinthecloud.jpg){: style="width:7%"}](https://www.youtube.com/@NedintheCloud) [![netbox](images/netboxlabs_logo.jpg){: style="width:7%"}](https://www.youtube.com/@NetBoxLabs) [![Tech with Helen](images/techwithhelen.jpg){: style="width:7%"}](https://www.youtube.com/@techwithhelen) [![bytebytego](images/bytebytego.jpg){: style="width:7%"}](https://www.youtube.com/@ByteByteGo) [![dotcsv](images/dotcsv.jpg){: style="width:7%"}](https://www.youtube.com/@DotCSV) [![midulive](images/midulive.jpg){: style="width:7%"}](https://www.youtube.com/@midulive) [![returngis](images/returngis_logo.jpg){: style="width:7%"}](https://www.youtube.com/@returngis) [![kubefm](images/kubefm_logo.jpg){: style="width:7%"}](https://www.youtube.com/@kubefm) [![Olena Kutsenko](images/olena_kutsenko.jpg){: style="width:7%"}](https://www.youtube.com/@OlenaKutsenko) [![mouredev](images/mouredev.jpg){: style="width:7%"}](https://www.youtube.com/@mouredev)<br/>
[![CloudNativeMadrid](images/cloudnativemadrid_logo.jpg){: style="width:7%"}](https://www.youtube.com/@CloudNativeMadrid) [![kyndryl](images/kyndryl_logo.jpg){: style="width:7%"}](https://www.youtube.com/@kyndryl) [![itopstalk](images/itopstalk_logo.png){: style="width:7%"}](https://www.youtube.com/@ITOpsTalk) [![gcp videos new](images/gcp_logo_v2.png){: style="width:7%"}](https://www.youtube.com/@googlecloudtech) [![Google Gemini](images/google_gemini_logo.png){: style="width:7%"}](https://www.youtube.com/@GoogleGemini) [![Google DeepMind](images/google_deepmind_logo.png){: style="width:7%"}](https://www.youtube.com/@googledeepmind) [![Anthropic](images/anthropic_logo.png){: style="width:7%"}](https://www.youtube.com/@anthropic-ai) [![Microsoft Copilot](images/microsoft_copilot_logo.png){: style="width:7%"}](https://www.youtube.com/@Microsoft.Copilot) [![OpenAI](images/openai_logo.png){: style="width:7%"}](https://www.youtube.com/OpenAI) [![Meta AI](images/meta_ai_logo.png){: style="width:7%"}](https://www.youtube.com/@aiatmeta) [![Microsoft Reactor](images/microsoft_reactor_logo.png){: style="width:7%"}](https://www.youtube.com/@MicrosoftReactor)<br/>
[![Playwright](images/playwright_logo.png){: style="width:7%"}](https://www.youtube.com/@Playwrightdev)
[![Playwright](images/playwright_logo.png){: style="width:7%"}](https://www.youtube.com/@Playwrightdev) [![Arsys](images/arsys_logo.svg){: style="width:7%"}](https://www.youtube.com/@arsys)
</center>
+3
View File
@@ -50,3 +50,6 @@ reset max-width with the following CSS: */
}
+2 -1
View File
@@ -165,7 +165,8 @@ async def evaluate_extracted_assets(raw_assets: List[Dict]) -> Dict[str, Dict]:
"reputation_status": "Vetted" if not data.get("reputation_penalty") else "Suspicious",
"reputation_summary": data.get("reputation_summary", ""),
"source_provenance": d["asset"].get("source_type", "Social"), "social_preview_url": d["rich_meta"].get("og_image", ""),
"category": primary_cat, "status": "online", "last_checked": datetime.now().timestamp(), **d["gh_meta"]
"category": primary_cat, "status": "online", "last_checked": datetime.now().timestamp(),
"addition_method": "automatic", **d["gh_meta"]
}
if "youtube.com" in url or "youtu.be" in url:
title_desc = f"{data['title']} {data['desc']}".lower()
+18 -1
View File
@@ -1,3 +1,20 @@
{
"blacklisted_domains": []
"blacklisted_domains": [],
"youtube_mosaic_layout_mandate": {
"v1_exhaustive": "Flat list of logos (11 per row) using order_v1 and inline width:7%",
"v2_elite": "Categorized neon-bordered card dashboard using order_v2 and width:48px",
"central_database": "data/inventory.yaml under the youtube_mosaic key",
"automation_scripts": [
"src/reorganize_mosaic.py",
"src/v2_optimizer.py"
]
},
"addition_method_tracking": {
"field": "addition_method",
"values": ["manual", "automatic"],
"rules": {
"manual": "Assigned to all pre-existing entries and any new entries discovered by the V2 Optimizer from V1 Markdown source files (assumed manually added).",
"automatic": "Assigned to resources ingested automatically via curation workflows from X/Twitter, RSS, or GitHub trending."
}
}
}
+58 -206
View File
@@ -1,179 +1,65 @@
import re
import yaml
import os
# Map category IDs to outline border colors (V2 only)
COLOR_MAP = {
"ai_advanced_tech": "#8b5cf6", # Purple
"cloud_providers": "#3b82f6", # Blue
"cloud_native_kubernetes": "#10b981", # Emerald Green
"devops_cicd_iac": "#f59e0b", # Amber Orange
"observability_databases_storage": "#ec4899", # Pink
"dev_testing_collab": "#14b8a6", # Teal
"learning_influencers_communities": "#64748b" # Slate Gray
# Map category IDs to their friendly names and outline border colors (V2 only)
CATEGORIES = {
"ai_advanced_tech": {"name": "AI & Advanced Tech", "color": "#8b5cf6"},
"cloud_providers": {"name": "Cloud Providers & Core Infrastructure", "color": "#3b82f6"},
"cloud_native_kubernetes": {"name": "Cloud Native Platforms & Kubernetes", "color": "#10b981"},
"devops_cicd_iac": {"name": "DevOps, CI/CD, IaC & GitOps", "color": "#f59e0b"},
"observability_databases_storage": {"name": "Observability, Databases & Cloud Storage", "color": "#ec4899"},
"dev_testing_collab": {"name": "Development, Testing & Collaboration", "color": "#14b8a6"},
"learning_influencers_communities": {"name": "Tech E-Learning, Influencers & Communities", "color": "#64748b"}
}
ORIGINAL_V1_ORDER = [
{'title': 'docker videos', 'url': 'https://www.youtube.com/c/DockerIo'},
{'title': 'cncf videos', 'url': 'https://www.youtube.com/c/cloudnativefdn'},
{'title': 'kubernetes logo', 'url': 'https://www.youtube.com/kubernetescommunity'},
{'title': 'redhat videos', 'url': 'https://www.youtube.com/c/redhat'},
{'title': 'openshift videos', 'url': 'https://www.youtube.com/c/OpenShift'},
{'title': 'rancher logo', 'url': 'https://www.youtube.com/c/Rancher'},
{'title': 'cloudbees videos', 'url': 'https://www.youtube.com/c/CloudBeesTV'},
{'title': 'jenkins videos', 'url': 'https://www.youtube.com/c/jenkinscicd'},
{'title': 'jenkins-x videos', 'url': 'https://www.youtube.com/channel/UCN2kblPjXKMcjjVYmwvquvg'},
{'title': 'spinnaker videos', 'url': 'https://www.youtube.com/channel/UCcxQbw8kT1-FRhFhO2QCetg'},
{'title': 'vmware tanzu logo', 'url': 'https://www.youtube.com/c/VMwareTanzu'},
{'title': 'ibm cloud videos', 'url': 'https://www.youtube.com/c/IBMTechnology'},
{'title': 'aws videos', 'url': 'https://www.youtube.com/c/amazonwebservices'},
{'title': 'gcp videos', 'url': 'https://www.youtube.com/user/googlecloudplatform'},
{'title': 'azure videos', 'url': 'https://www.youtube.com/c/MicrosoftAzure'},
{'title': 'oraclecloud videos', 'url': 'https://www.youtube.com/c/OracleCloudInfrastructure'},
{'title': 'digitalocean videos', 'url': 'https://www.youtube.com/c/Digitalocean'},
{'title': 'cloudflare', 'url': 'https://www.youtube.com/cloudflare'},
{'title': 'scaleway cloud', 'url': 'https://www.youtube.com/c/Scaleway-Cloud'},
{'title': 'openstack', 'url': 'https://www.youtube.com/c/OpenStackFoundation'},
{'title': 'harhicorp videos', 'url': 'https://www.youtube.com/c/HashiCorp'},
{'title': 'pulumi videos', 'url': 'https://www.youtube.com/c/PulumiTV'},
{'title': 'dzone videos', 'url': 'https://www.youtube.com/c/dzone'},
{'title': 'prometheus videos', 'url': 'https://www.youtube.com/c/PrometheusIo'},
{'title': 'grafana videos', 'url': 'https://www.youtube.com/c/Grafana'},
{'title': 'istio videos', 'url': 'https://www.youtube.com/c/Istio'},
{'title': 'elastic videos', 'url': 'https://www.youtube.com/c/Elastic'},
{'title': 'dynatrace videos', 'url': 'https://www.youtube.com/c/dynatrace'},
{'title': 'appdynamics videos', 'url': 'https://www.youtube.com/c/appdynamics'},
{'title': 'newrelic videos', 'url': 'https://www.youtube.com/c/NewRelicInc'},
{'title': 'tigera calico', 'url': 'https://www.youtube.com/channel/UC8uN3yhpeBeerGNwDiQbcgw'},
{'title': 'weavecloud', 'url': 'https://www.youtube.com/c/WeaveWorksInc'},
{'title': 'lambdatest', 'url': 'https://www.youtube.com/c/LambdaTest'},
{'title': 'atlassian videos', 'url': 'https://www.youtube.com/c/Atlassian'},
{'title': 'vscode videos', 'url': 'https://www.youtube.com/c/Code'},
{'title': 'github videos', 'url': 'https://www.youtube.com/c/GitHub'},
{'title': 'gitlab video', 'url': 'https://www.youtube.com/c/Gitlab'},
{'title': 'gitkraken', 'url': 'https://www.youtube.com/c/Gitkraken'},
{'title': 'rocketchat videos', 'url': 'https://www.youtube.com/c/RocketChatApp'},
{'title': 'slack videos', 'url': 'https://www.youtube.com/c/Slackhq'},
{'title': 'mattermost videos', 'url': 'https://www.youtube.com/c/MattermostHQ'},
{'title': 'microsoft365', 'url': 'https://www.youtube.com/c/microsoft365'},
{'title': 'openproject', 'url': 'https://www.youtube.com/c/OpenProjectCommunity'},
{'title': 'tetrate', 'url': 'https://www.youtube.com/c/Tetrate'},
{'title': 'rh devel', 'url': 'https://www.youtube.com/c/RedHatDevelopers'},
{'title': 'spring logo', 'url': 'https://www.youtube.com/user/SpringSourceDev'},
{'title': 'quarkus logo', 'url': 'https://www.youtube.com/c/Quarkusio'},
{'title': 'lightbend videos', 'url': 'https://www.youtube.com/c/Lightbend-TV'},
{'title': 'postman videos', 'url': 'https://www.youtube.com/c/postman'},
{'title': 'swagger videos', 'url': 'https://www.youtube.com/c/Smartbear'},
{'title': 'jfrog', 'url': 'https://www.youtube.com/c/JFrogInc'},
{'title': 'sonatype', 'url': 'https://www.youtube.com/c/Sonatypeinc'},
{'title': 'sonarsource sonarqube', 'url': 'https://www.youtube.com/channel/UCS5-gTYteN9rnFd98YxYtrA'},
{'title': 'chrome developers videos', 'url': 'https://www.youtube.com/c/GoogleChromeDevelopers'},
{'title': 'mozilla developer', 'url': 'https://www.youtube.com/c/MozillaDeveloper'},
{'title': 'crunchydata', 'url': 'https://www.youtube.com/c/CrunchyDataPostgres'},
{'title': 'liquibase video', 'url': 'https://www.youtube.com/channel/UC5qMsRjObu685rTBq0PJX8w'},
{'title': 'cockroachdb', 'url': 'https://www.youtube.com/c/cockroachdb'},
{'title': 'mongodb', 'url': 'https://www.youtube.com/c/MongoDBofficial'},
{'title': 'redis', 'url': 'https://www.youtube.com/c/Redisinc'},
{'title': 'confluent video', 'url': 'https://www.youtube.com/c/Confluent'},
{'title': 'kubemq video', 'url': 'https://www.youtube.com/channel/UCud7fErZAyMC6lHT_cWZNfA'},
{'title': 'openebs', 'url': 'https://www.youtube.com/channel/UC3ywadaAUQ1FI4YsHZ8wa0g'},
{'title': 'storageos', 'url': 'https://www.youtube.com/channel/UCm63IQg81KP9vXRWSHQpu1w'},
{'title': 'robin', 'url': 'https://www.youtube.com/channel/UCt7N400Z8gB_3yKq1qrjP2w'},
{'title': 'portworx', 'url': 'https://www.youtube.com/c/Portworx'},
{'title': 'cloud academy', 'url': 'https://www.youtube.com/c/Cloudacademy'},
{'title': 'acloudguru', 'url': 'https://www.youtube.com/c/AcloudGuru'},
{'title': 'devops_tv', 'url': 'https://www.youtube.com/c/Devopsdotcom'},
{'title': 'xebialabs', 'url': 'https://www.youtube.com/c/XebiaLabs'},
{'title': 'devops library', 'url': 'https://www.youtube.com/c/Devopslibrary'},
{'title': 'codecademy', 'url': 'https://www.youtube.com/c/codecademy'},
{'title': 'coursera', 'url': 'https://www.youtube.com/user/coursera'},
{'title': 'academind', 'url': 'https://www.youtube.com/c/Academind'},
{'title': 'guru99', 'url': 'https://www.youtube.com/c/guru99comm'},
{'title': 'intellipaat', 'url': 'https://www.youtube.com/c/Intellipaat'},
{'title': 'cloud quick POCs', 'url': 'https://www.youtube.com/channel/UCv9MUffHWyo2GgLIDLVu0KQ'},
{'title': 'thetips4you', 'url': 'https://www.youtube.com/c/Thetips4you'},
{'title': 'cloud learnhub', 'url': 'https://www.youtube.com/channel/UC57acx8sCmE7uFHfVMvIlNg'},
{'title': 'John Savill', 'url': 'https://www.youtube.com/c/NTFAQGuy'},
{'title': 'microservice factory', 'url': 'https://www.youtube.com/channel/UCorFV-WGnajyfNu4zPI0AAA'},
{'title': 'kubedb appscode', 'url': 'https://www.youtube.com/c/AppsCodeInc'},
{'title': 'devops toolkit', 'url': 'https://www.youtube.com/c/DevOpsToolkit'},
{'title': 'ansible pilot', 'url': 'https://www.youtube.com/c/AnsiblePilot'},
{'title': 'codelytv', 'url': 'https://www.youtube.com/CodelyTV'},
{'title': 'pelado nerd', 'url': 'https://www.youtube.com/c/PeladoNerd'},
{'title': 'hola mundo', 'url': 'https://www.youtube.com/c/HolaMundoDev'},
{'title': 'javier garzas', 'url': 'https://www.youtube.com/c/JavierGarz%C3%A1s'},
{'title': 'london IAC', 'url': 'https://www.youtube.com/c/LondonIAC'},
{'title': 'techworld nana', 'url': 'https://www.youtube.com/c/TechWorldwithNana'},
{'title': 'honeypot', 'url': 'https://www.youtube.com/c/Honeypotio'},
{'title': 'Ali Spittel', 'url': 'https://www.youtube.com/c/AliSpittelDev'},
{'title': 'thomas maurer', 'url': 'https://www.youtube.com/c/ThomasMaurerCloud'},
{'title': 'freecodecamp', 'url': 'https://www.youtube.com/c/Freecodecamp'},
{'title': 'thenewstack', 'url': 'https://www.youtube.com/c/TheNewStack'},
{'title': 'argocd project', 'url': 'https://www.youtube.com/channel/UCOvYmppcbOPm1viN6ust3lA'},
{'title': 'fluxcd', 'url': 'https://www.youtube.com/channel/UCoZxt-YMhGHb20ZkvcCc5KA'},
{'title': 'container days', 'url': 'https://www.youtube.com/c/ContainerDays'},
{'title': 'the cloud girl', 'url': 'https://www.youtube.com/c/priyankavergadia'},
{'title': 'ContinuousDeliveryFoundation', 'url': 'https://www.youtube.com/c/ContinuousDeliveryFoundation'},
{'title': 'tina huang', 'url': 'https://www.youtube.com/c/TinaHuang1'},
{'title': 'azure devops', 'url': 'https://www.youtube.com/c/AzureDevOps'},
{'title': 'azure cloud native', 'url': 'https://www.youtube.com/channel/UC2Pk9GcHhlVV0R9CQIU6gLw'},
{'title': 'alibaba cloud', 'url': 'https://www.youtube.com/c/AlibabaCloud'},
{'title': 'linode cloud', 'url': 'https://www.youtube.com/c/linode'},
{'title': 'gaia-x', 'url': 'https://www.youtube.com/channel/UCB5WMc2FfrxKzfd7XIODoMw'},
{'title': 'gps', 'url': 'https://www.youtube.com/c/MadeByGPS'},
{'title': 'keptn', 'url': 'https://www.youtube.com/c/keptn'},
{'title': 'anais urlichs', 'url': 'https://www.youtube.com/c/AnaisUrlichs'},
{'title': 'the digital life', 'url': 'https://www.youtube.com/c/TheDigitalLifeTech'},
{'title': 'Azure Terraformer', 'url': 'https://www.youtube.com/@azure-terraformer'},
{'title': 'Ned in the Cloud', 'url': 'https://www.youtube.com/@NedintheCloud'},
{'title': 'netbox', 'url': 'https://www.youtube.com/@NetBoxLabs'},
{'title': 'Tech with Helen', 'url': 'https://www.youtube.com/@techwithhelen'},
{'title': 'bytebytego', 'url': 'https://www.youtube.com/@ByteByteGo'},
{'title': 'dotcsv', 'url': 'https://www.youtube.com/@DotCSV'},
{'title': 'midulive', 'url': 'https://www.youtube.com/@midulive'},
{'title': 'returngis', 'url': 'https://www.youtube.com/@returngis'},
{'title': 'kubefm', 'url': 'https://www.youtube.com/@kubefm'},
{'title': 'Olena Kutsenko', 'url': 'https://www.youtube.com/@OlenaKutsenko'},
{'title': 'mouredev', 'url': 'https://www.youtube.com/@mouredev'},
{'title': 'CloudNativeMadrid', 'url': 'https://www.youtube.com/@CloudNativeMadrid'},
{'title': 'kyndryl', 'url': 'https://www.youtube.com/@kyndryl'},
{'title': 'itopstalk', 'url': 'https://www.youtube.com/@ITOpsTalk'},
{'title': 'gcp videos', 'url': 'https://www.youtube.com/@googlecloudtech'},
{'title': 'Google Gemini', 'url': 'https://www.youtube.com/@GoogleGemini'},
{'title': 'Google DeepMind', 'url': 'https://www.youtube.com/@googledeepmind'},
{'title': 'Anthropic', 'url': 'https://www.youtube.com/@anthropic-ai'},
{'title': 'Microsoft Copilot', 'url': 'https://www.youtube.com/@Microsoft.Copilot'},
{'title': 'OpenAI', 'url': 'https://www.youtube.com/OpenAI'},
{'title': 'Meta AI', 'url': 'https://www.youtube.com/@aiatmeta'},
{'title': 'Microsoft Reactor', 'url': 'https://www.youtube.com/@MicrosoftReactor'},
{'title': 'Playwright', 'url': 'https://www.youtube.com/@Playwrightdev'},
]
def normalize_url(url):
url = url.lower().strip()
if url.endswith('/'):
url = url[:-1]
return url
def build_v2_mosaic_markdown(yaml_path):
with open(yaml_path, 'r', encoding='utf-8') as f:
data = yaml.safe_load(f)
def load_inventory_channels():
repo_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
inventory_path = os.path.join(repo_root, 'data', 'inventory.yaml')
with open(inventory_path, 'r', encoding='utf-8') as f:
inventory = yaml.safe_load(f) or {}
channels = []
for url, entry in inventory.items():
if isinstance(entry, dict) and 'youtube_mosaic' in entry:
metadata = entry['youtube_mosaic']
channels.append({
'title': entry.get('title', 'Unknown Channel'),
'url': url,
'image': metadata.get('image', ''),
'category': metadata.get('category', 'learning_influencers_communities'),
'order_v1': metadata.get('order_v1', 9999),
'order_v2': metadata.get('order_v2', 9999)
})
return channels
def build_v2_mosaic_markdown_from_channels(channels):
# Group channels by category
grouped = {cat_id: [] for cat_id in CATEGORIES.keys()}
for chan in channels:
cat_id = chan['category']
if cat_id in grouped:
grouped[cat_id].append(chan)
else:
grouped.setdefault('learning_influencers_communities', []).append(chan)
lines = []
lines.append('<center markdown="1">')
lines.append('') # Mandatory blank line after center tag
for cat in data['categories']:
color = COLOR_MAP.get(cat['id'], '#64748b')
for cat_id, cat_info in CATEGORIES.items():
cat_chans = grouped[cat_id]
if not cat_chans:
continue
# Sort within category by order_v2
cat_chans.sort(key=lambda x: x['order_v2'])
# Open category block container
# Note: markdown="1" is required inside the HTML tag to process markdown links correctly
lines.append(f'<div markdown="1" style="border: 1px solid {color}; border-radius: 8px; padding: 10px; margin: 8px 0; background: rgba(255, 255, 255, 0.01);" title="{cat["name"]}">')
lines.append(f'<div markdown="1" style="border: 1px solid {cat_info["color"]}; border-radius: 8px; padding: 10px; margin: 8px 0; background: rgba(255, 255, 255, 0.01);" title="{cat_info["name"]}">')
lines.append('') # Mandatory blank line after block tag
# Channel links
chan_links = []
for chan in cat['channels']:
for chan in cat_chans:
chan_links.append(f"[![{chan['title']}]({chan['image']}){{: style=\"width:48px; height:48px; object-fit:contain; margin:6px;\" .channel-logo}}]({chan['url']})")
lines.append(" ".join(chan_links))
@@ -186,49 +72,15 @@ def build_v2_mosaic_markdown(yaml_path):
lines.append('</center>')
return "\n".join(lines)
def build_v1_mosaic_markdown(yaml_path):
with open(yaml_path, 'r', encoding='utf-8') as f:
data = yaml.safe_load(f)
# Index current channels by URL and Title
current_by_url = {}
current_by_title = {}
for cat in data['categories']:
for chan in cat['channels']:
norm_url = normalize_url(chan['url'])
current_by_url[norm_url] = chan
current_by_title[chan['title'].lower()] = chan
# Reconstruct the list preserving the original V1 order
ordered_channels = []
seen_urls = set()
for old_item in ORIGINAL_V1_ORDER:
old_title = old_item['title']
old_url = old_item['url']
norm_url = normalize_url(old_url)
chan_info = None
if norm_url in current_by_url:
chan_info = current_by_url[norm_url]
elif old_title.lower() in current_by_title:
chan_info = current_by_title[old_title.lower()]
if chan_info:
ordered_channels.append(chan_info)
seen_urls.add(normalize_url(chan_info['url']))
else:
# Fallback if some channel in history is not in YAML but we want to preserve it
pass
# Append any new channels not present in the original V1 sequence
for cat in data['categories']:
for chan in cat['channels']:
norm_url = normalize_url(chan['url'])
if norm_url not in seen_urls:
ordered_channels.append(chan)
seen_urls.add(norm_url)
def build_v2_mosaic_markdown(yaml_path=None):
# Backward compatible wrapper used by v2_optimizer.py
channels = load_inventory_channels()
return build_v2_mosaic_markdown_from_channels(channels)
def build_v1_mosaic_markdown_from_channels(channels):
# Sort channels by order_v1
sorted_chans = sorted(channels, key=lambda x: x['order_v1'])
# Now format into rows of 11 channels each
lines = []
lines.append('<center markdown="1">')
@@ -236,7 +88,7 @@ def build_v1_mosaic_markdown(yaml_path):
row_size = 11
formatted_channels = []
for chan in ordered_channels:
for chan in sorted_chans:
formatted_channels.append(f"[![{chan['title']}]({chan['image']}){{: style=\"width:7%\"}}]({chan['url']})")
for i in range(0, len(formatted_channels), row_size):
@@ -284,12 +136,12 @@ def update_file(file_path, new_mosaic):
def main():
repo_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
yaml_path = os.path.join(repo_root, 'data', 'youtube_channels_mosaic.yaml')
v1_path = os.path.join(repo_root, 'docs', 'index.md')
v2_path = os.path.join(repo_root, 'v2-docs', 'index.md')
new_v1_mosaic = build_v1_mosaic_markdown(yaml_path)
new_v2_mosaic = build_v2_mosaic_markdown(yaml_path)
channels = load_inventory_channels()
new_v1_mosaic = build_v1_mosaic_markdown_from_channels(channels)
new_v2_mosaic = build_v2_mosaic_markdown_from_channels(channels)
update_file(v1_path, new_v1_mosaic)
update_file(v2_path, new_v2_mosaic)
+15 -5
View File
@@ -167,12 +167,18 @@ class V2VisionEngine:
if os.path.exists("docs/index.md"):
with open("docs/index.md", "r") as f:
idx_content = f.read()
mosaics = re.findall(r'<center markdown="1">\s*\n(.*?)\n\s*</center>', idx_content, re.DOTALL)
if mosaics:
for m in mosaics:
if m.count("[![") > 5: mosaic_html = m; break
videos_match = re.search(r'\?\?\? note "Top Videos & Clips.*?\n\s+(<center.*?</center>)', idx_content, re.DOTALL)
if videos_match: videos_html = videos_match.group(1)
if videos_match:
videos_html = videos_match.group(1)
# Dynamically generate V2 categorized mosaic from youtube_channels_mosaic.yaml
try:
from src.reorganize_mosaic import build_v2_mosaic_markdown
v2_mosaic_full = build_v2_mosaic_markdown("data/youtube_channels_mosaic.yaml")
mosaic_html = v2_mosaic_full.replace('<center markdown="1">', '').replace('</center>', '').strip()
except Exception as e:
log_event(f" [!] Error generating V2 mosaic dynamically: {e}")
mosaic_html = ""
for root, _, files in os.walk(V1_DIR):
for file in files:
@@ -386,6 +392,8 @@ class V2VisionEngine:
norm_url = normalize_url(item["url"])
self.inventory[norm_url] = {k:v for k,v in item.items() if k not in ["url", "title", "original_file", "is_special", "aliases"]}
self.inventory[norm_url]["title"] = item["title"]
if "addition_method" not in self.inventory[norm_url]:
self.inventory[norm_url]["addition_method"] = "manual"
except Exception:
for l in batch: analyst_results.append(l)
@@ -495,6 +503,8 @@ class V2VisionEngine:
# Persist to inventory
self.inventory[norm_url] = {k:v for k,v in item.items() if k not in ["url", "title", "original_file", "is_special", "aliases"]}
self.inventory[norm_url]["title"] = item["title"]
if "addition_method" not in self.inventory[norm_url]:
self.inventory[norm_url]["addition_method"] = "manual"
if p_id not in project_registry or item.get("stars", 0) > project_registry[p_id].get("stars", 0):
if p_id in project_registry and project_registry[p_id].get("is_special"): item["is_special"] = True
+1 -1
View File
@@ -149,7 +149,7 @@ def generate_v2_videos():
"",
"Welcome to the **Nubenetes Elite Video Hub**. Discover highly-curated architectural video resources organized into logical learning paths:",
"",
"### Learning Dimensions",
"## Learning Dimensions",
"- 🤖 [**AI Agents and MCP**](./ai-agents.md) — Dive into agentic architectures, tool integration, and Model Context Protocol setups.",
"- 🛠️ [**DevOps, IaC, and SRE**](./devops-iac.md) — Platform engineering, infrastructure automation with Terraform, SRE, and compliance workflows utilizing AI assistants.",
"- ☁️ [**Cloud Native Core**](./cloud-native.md) — Architectural strategies, Kubernetes operations, networking, and MLOps platforms.",
+1 -1
View File
@@ -108,7 +108,7 @@
- [Automated API testing for the KIE Server 🌟](https://developers.redhat.com/blog/2020/05/01/automated-api-testing-for-the-kie-server) <span class='md-tag md-tag--info'>[COMMUNITY-TOOL]</span>
- [SysAdmin Casts](https://sysadmincasts.com) <span class='md-tag md-tag--info'>[COMMUNITY-TOOL]</span>
- [DEVOPS Library](https://devopslibrary.com) <span class='md-tag md-tag--info'>[COMMUNITY-TOOL]</span>
- [youtube: Cloud Quick POCs](https://www.youtube.com/channel/UCv9MUffHWyo2GgLIDLVu0KQ) <span class='md-tag md-tag--info'>[COMMUNITY-TOOL]</span>
- [cloud quick POCs](https://www.youtube.com/channel/UCv9MUffHWyo2GgLIDLVu0KQ) <span class='md-tag md-tag--info'>[COMMUNITY-TOOL]</span>
- [DevStack](https://devstack.in) <span class='md-tag md-tag--info'>[COMMUNITY-TOOL]</span>
- [kubernetes-advocate.medium.com 🌟](https://kubernetes-advocate.medium.com) <span class='md-tag md-tag--info'>[COMMUNITY-TOOL]</span>
- [github.com/wardviaene (kubernetes, terraform, ansible, docker, etc) 🌟](https://github.com/wardviaene) <span class='md-tag md-tag--info'>[COMMUNITY-TOOL]</span>
+44 -16
View File
File diff suppressed because one or more lines are too long
+14 -14
View File
@@ -7,8 +7,8 @@ Welcome to the **AI Agents and MCP** section of the V2 Video Hub. Explore curate
1. [Red Hat OpenShift](#red-hat-openshift)
2. [Generative AI and Large Language Models](#generative-ai-and-large-language-models)
3. [Red Hat OpenShift AI](#red-hat-openshift-ai)
4. [Neural Networks](#neural-networks)
5. [Claude Code](#claude-code)
4. [Claude Code](#claude-code)
5. [Neural Networks](#neural-networks)
6. [LLM Architecture and Post-Training](#llm-architecture-and-post-training)
7. [Agentic DevOps](#agentic-devops)
@@ -48,18 +48,6 @@ Welcome to the **AI Agents and MCP** section of the V2 Video Hub. Explore curate
</center>
## Neural Networks
??? note "🎬 ¿Qué es una Red Neuronal? Parte 1 : La Neurona | DotCSV [SPANISH CONTENT]"
!!! info "Architectural Summary"
This video deconstructs the foundational mathematical and algorithmic mechanics of a single artificial neuron, illustrating its direct relationship with linear regression, weights, biases, and activation functions. In a 2026 cloud-native landscape, mastering these core neural principles is critical for platform architects optimizing distributed micro-models and real-time AI inference engines deployed on Kubernetes-driven edge and cloud infrastructure. This granular understanding enables more efficient hardware acceleration profiling (GPUs/vGPUs/TPUs) and smarter resource allocation for decentralized machine learning pipelines.
<center markdown="1">
<iframe width="720" height="405" src="https://www.youtube.com/embed/MRIv2IwFTPg?si=F07g869i6yIfqRdg" title="¿Qué es una Red Neuronal? Parte 1 : La Neurona | DotCSV" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen loading="lazy" style="border: 1px solid var(--md-typeset-table-color); border-radius: 8px;"></iframe>
</center>
## Claude Code
??? note "🎬 Mastering Claude Code in 30 minutes"
@@ -72,6 +60,18 @@ Welcome to the **AI Agents and MCP** section of the V2 Video Hub. Explore curate
</center>
## Neural Networks
??? note "🎬 ¿Qué es una Red Neuronal? Parte 1 : La Neurona | DotCSV [SPANISH CONTENT]"
!!! info "Architectural Summary"
This video deconstructs the foundational mathematical and algorithmic mechanics of a single artificial neuron, illustrating its direct relationship with linear regression, weights, biases, and activation functions. In a 2026 cloud-native landscape, mastering these core neural principles is critical for platform architects optimizing distributed micro-models and real-time AI inference engines deployed on Kubernetes-driven edge and cloud infrastructure. This granular understanding enables more efficient hardware acceleration profiling (GPUs/vGPUs/TPUs) and smarter resource allocation for decentralized machine learning pipelines.
<center markdown="1">
<iframe width="720" height="405" src="https://www.youtube.com/embed/MRIv2IwFTPg?si=F07g869i6yIfqRdg" title="¿Qué es una Red Neuronal? Parte 1 : La Neurona | DotCSV" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen loading="lazy" style="border: 1px solid var(--md-typeset-table-color); border-radius: 8px;"></iframe>
</center>
## LLM Architecture and Post-Training
??? note "🎬 Stanford CS229: Building Large Language Models (LLMs)"