[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EPEXDWPMA8NSC590PC6190":3,"skill-same:01M6EPEXDWPMA8NSC590PC6190":114},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6EPEXDWPMA8NSC590PC6190","r-development",null,"Modern R development practices emphasizing tidyverse patterns (dplyr 1.1 and later, native pipe, join_by, .by grouping), rlang metaprogramming, performance optimization, and package development. Use when Claude needs to write R code, create R packages, optimize R performance, or provide R programming guidance.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fcodingkaiser\u002Fr-development\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"r development","development","write","native","join","pipe","grouping","optimize","later","guidance","use","performance","programming","performance optimization","Optimization","metaprogramming","package","code","create","packages","2026-11-10 10:12:30",false,"---\nname: r-development\ndescription: Modern R development practices emphasizing tidyverse patterns (dplyr 1.1 and later, native pipe, join_by, .by grouping), rlang metaprogramming, performance optimization, and package development. Use when Claude needs to write R code, create R packages, optimize R performance, or provide R programming guidance.\n---\n\n# R Development\n\nThis skill provides comprehensive guidance for modern R development, emphasizing current best practices with tidyverse, performance optimization, and professional package development.\n\n## Core Principles\n\n1. **Use modern tidyverse patterns** - Prioritize dplyr 1.1+ features, native pipe, and current APIs\n2. **Profile before optimizing** - Use profvis and bench to identify real bottlenecks\n3. **Write readable code first** - Optimize only when necessary and after profiling\n4. **Follow tidyverse style guide** - Consistent naming, spacing, and structure\n\n## Modern Tidyverse Essentials\n\n### Native Pipe (`|>` not `%>%`)\n\nAlways use native pipe `|>` instead of magrittr `%>%` (R 4.1+):\n\n```r\n# Modern\ndata |> \n  filter(year >= 2020) |>\n  summarise(mean_value = mean(value))\n\n# Avoid legacy pipe\ndata %>% filter(year >= 2020)\n```\n\n### Join Syntax (dplyr 1.1+)\n\nUse `join_by()` for all joins:\n\n```r\n# Modern join syntax with equality\ntransactions |> \n  inner_join(companies, by = join_by(company == id))\n\n# Inequality joins\ntransactions |>\n  inner_join(companies, join_by(company == id, year >= since))\n\n# Rolling joins (closest match)\ntransactions |>\n  inner_join(companies, join_by(company == id, closest(year >= since)))\n```\n\nControl match behavior:\n\n```r\n# Expect 1:1 matches\ninner_join(x, y, by = join_by(id), multiple = \"error\")\n\n# Ensure all rows match\ninner_join(x, y, by = join_by(id), unmatched = \"error\")\n```\n\n### Per-Operation Grouping with `.by`\n\nUse `.by` instead of `group_by() |> ... |> ungroup()`:\n\n```r\n# Modern approach (always returns ungrouped)\ndata |>\n  summarise(mean_value = mean(value), .by = category)\n\n# Multiple grouping variables\ndata |>\n  summarise(total = sum(revenue), .by = c(company, year))\n```\n\n### Column Operations\n\nUse modern column selection and transformation functions:\n\n```r\n# pick() for column selection in data-masking contexts\ndata |>\n  summarise(\n    n_x_cols = ncol(pick(starts_with(\"x\"))),\n    n_y_cols = ncol(pick(starts_with(\"y\")))\n  )\n\n# across() for applying functions to multiple columns\ndata |>\n  summarise(across(where(is.numeric), mean, .names = \"mean_{.col}\"), .by = group)\n\n# reframe() for multi-row results per group\ndata |>\n  reframe(quantiles = quantile(x, c(0.25, 0.5, 0.75)), .by = group)\n```\n\n## rlang Metaprogramming\n\nFor comprehensive rlang patterns, see [references\u002Frlang-patterns.md](references\u002Frlang-patterns.md).\n\n### Quick Reference\n\n- **`{{}}`** - Forward function arguments to data-masking functions\n- **`!!`** - Inject single expressions or values\n- **`!!!`** - Inject multiple arguments from a list\n- **`.data[[]]`** - Access columns by name (character vectors)\n- **`pick()`** - Select columns inside data-masking functions\n\nExample function with embracing:\n\n```r\nmy_summary \u003C- function(data, group_var, summary_var) {\n  data |>\n    summarise(mean_val = mean({{ summary_var }}), .by = {{ group_var }})\n}\n```\n\n## Performance Optimization\n\nFor detailed performance guidance, see [references\u002Fperformance.md](references\u002Fperformance.md).\n\n### Key Strategies\n\n1. **Profile first**: Use `profvis::profvis()` and `bench::mark()`\n2. **Vectorize operations**: Avoid loops when vectorized alternatives exist\n3. **Use dtplyr**: For large data operations (lazy evaluation with data.table backend)\n4. **Parallel processing**: Use `furrr::future_map()` for parallelizable work\n5. **Memory efficiency**: Pre-allocate, use appropriate data types\n\nQuick example:\n\n```r\n# Profile code\nprofvis::profvis({\n  result \u003C- data |> \n    complex_operation() |>\n    another_operation()\n})\n\n# Benchmark alternatives\nbench::mark(\n  approach_1 = method1(data),\n  approach_2 = method2(data),\n  check = FALSE\n)\n```\n\n## Package Development\n\nFor complete package development guidance, see [references\u002Fpackage-development.md](references\u002Fpackage-development.md).\n\n### Quick Guidelines\n\n**API Design:**\n- Use `.by` parameter for per-operation grouping\n- Use `{{}}` for column arguments\n- Return tibbles consistently\n- Validate user-facing function inputs thoroughly\n\n**Dependencies:**\n- Add dependencies for significant functionality gains\n- Core tidyverse packages usually worth including: dplyr, purrr, stringr, tidyr\n- Minimize dependencies for widely-used packages\n\n**Testing:**\n- Unit tests for individual functions\n- Integration tests for workflows\n- Test edge cases and error conditions\n\n**Documentation:**\n- Document all exported functions\n- Provide usage examples\n- Explain non-obvious parameter interactions\n\n## Common Migration Patterns\n\n### Base R → Tidyverse\n\n```r\n# Data manipulation\nsubset(data, condition)         → filter(data, condition)\ndata[order(data$x), ]          → arrange(data, x)\naggregate(x ~ y, data, mean)   → summarise(data, mean(x), .by = y)\n\n# Functional programming\nsapply(x, f)                   → map(x, f)  # type-stable\nlapply(x, f)                   → map(x, f)\n\n# Strings\ngrepl(\"pattern\", text)         → str_detect(text, \"pattern\")\ngsub(\"old\", \"new\", text)       → str_replace_all(text, \"old\", \"new\")\n```\n\n### Old → New Tidyverse\n\n```r\n# Pipes\n%>%                            → |>\n\n# Grouping\ngroup_by() |> ... |> ungroup() → summarise(..., .by = x)\n\n# Joins\nby = c(\"a\" = \"b\")             → by = join_by(a == b)\n\n# Reshaping\ngather()\u002Fspread()              → pivot_longer()\u002Fpivot_wider()\n```\n\n## Additional Resources\n\n- **rlang patterns**: See [references\u002Frlang-patterns.md](references\u002Frlang-patterns.md) for comprehensive data-masking and metaprogramming guidance\n- **Performance optimization**: See [references\u002Fperformance.md](references\u002Fperformance.md) for profiling, benchmarking, and optimization strategies\n- **Package development**: See [references\u002Fpackage-development.md](references\u002Fpackage-development.md) for complete package creation guidance\n- **Object systems**: See [references\u002Fobject-systems.md](references\u002Fobject-systems.md) for S3, S4, S7, R6, and vctrs guidance\n","# R Development\n\nThis skill provides comprehensive guidance for modern R development, emphasizing current best practices with tidyverse, performance optimization, and professional package development.\n\n## Core Principles\n\n1. **Use modern tidyverse patterns** - Prioritize dplyr 1.1+ features, native pipe, and current APIs\n2. **Profile before optimizing** - Use profvis and bench to identify real bottlenecks\n3. **Write readable code first** - Optimize only when necessary and after profiling\n4. **Follow tidyverse style guide** - Consistent naming, spacing, and structure\n\n## Modern Tidyverse Essentials\n\n### Native Pipe (`|>` not `%>%`)\n\nAlways use native pipe `|>` instead of magrittr `%>%` (R 4.1+):\n\n```r\n# Modern\ndata |> \n  filter(year >= 2020) |>\n  summarise(mean_value = mean(value))\n\n# Avoid legacy pipe\ndata %>% filter(year >= 2020)\n```\n\n### Join Syntax (dplyr 1.1+)\n\nUse `join_by()` for all joins:\n\n```r\n# Modern join syntax with equality\ntransactions |> \n  inner_join(companies, by = join_by(company == id))\n\n# Inequality joins\ntransactions |>\n  inner_join(companies, join_by(company == id, year >= since))\n\n# Rolling joins (closest match)\ntransactions |>\n  inner_join(companies, join_by(company == id, closest(year >= since)))\n```\n\nControl match behavior:\n\n```r\n# Expect 1:1 matches\ninner_join(x, y, by = join_by(id), multiple = \"error\")\n\n# Ensure all rows match\ninner_join(x, y, by = join_by(id), unmatched = \"error\")\n```\n\n### Per-Operation Grouping with `.by`\n\nUse `.by` instead of `group_by() |> ... |> ungroup()`:\n\n```r\n# Modern approach (always returns ungrouped)\ndata |>\n  summarise(mean_value = mean(value), .by = category)\n\n# Multiple grouping variables\ndata |>\n  summarise(total = sum(revenue), .by = c(company, year))\n```\n\n### Column Operations\n\nUse modern column selection and transformation functions:\n\n```r\n# pick() for column selection in data-masking contexts\ndata |>\n  summarise(\n    n_x_cols = ncol(pick(starts_with(\"x\"))),\n    n_y_cols = ncol(pick(starts_with(\"y\")))\n  )\n\n# across() for applying functions to multiple columns\ndata |>\n  summarise(across(where(is.numeric), mean, .names = \"mean_{.col}\"), .by = group)\n\n# reframe() for multi-row results per group\ndata |>\n  reframe(quantiles = quantile(x, c(0.25, 0.5, 0.75)), .by = group)\n```\n\n## rlang Metaprogramming\n\nFor comprehensive rlang patterns, see [references\u002Frlang-patterns.md](references\u002Frlang-patterns.md).\n\n### Quick Reference\n\n- **`{{}}`** - Forward function arguments to data-masking functions\n- **`!!`** - Inject single expressions or values\n- **`!!!`** - Inject multiple arguments from a list\n- **`.data[[]]`** - Access columns by name (character vectors)\n- **`pick()`** - Select columns inside data-masking functions\n\nExample function with embracing:\n\n```r\nmy_summary \u003C- function(data, group_var, summary_var) {\n  data |>\n    summarise(mean_val = mean({{ summary_var }}), .by = {{ group_var }})\n}\n```\n\n## Performance Optimization\n\nFor detailed performance guidance, see [references\u002Fperformance.md](references\u002Fperformance.md).\n\n### Key Strategies\n\n1. **Profile first**: Use `profvis::profvis()` and `bench::mark()`\n2. **Vectorize operations**: Avoid loops when vectorized alternatives exist\n3. **Use dtplyr**: For large data operations (lazy evaluation with data.table backend)\n4. **Parallel processing**: Use `furrr::future_map()` for parallelizable work\n5. **Memory efficiency**: Pre-allocate, use appropriate data types\n\nQuick example:\n\n```r\n# Profile code\nprofvis::profvis({\n  result \u003C- data |> \n    complex_operation() |>\n    another_operation()\n})\n\n# Benchmark alternatives\nbench::mark(\n  approach_1 = method1(data),\n  approach_2 = method2(data),\n  check = FALSE\n)\n```\n\n## Package Development\n\nFor complete package development guidance, see [references\u002Fpackage-development.md](references\u002Fpackage-development.md).\n\n### Quick Guidelines\n\n**API Design:**\n- Use `.by` parameter for per-operation grouping\n- Use `{{}}` for column arguments\n- Return tibbles consistently\n- Validate user-facing function inputs thoroughly\n\n**Dependencies:**\n- Add dependencies for significant functionality gains\n- Core tidyverse packages usually worth including: dplyr, purrr, stringr, tidyr\n- Minimize dependencies for widely-used packages\n\n**Testing:**\n- Unit tests for individual functions\n- Integration tests for workflows\n- Test edge cases and error conditions\n\n**Documentation:**\n- Document all exported functions\n- Provide usage examples\n- Explain non-obvious parameter interactions\n\n## Common Migration Patterns\n\n### Base R → Tidyverse\n\n```r\n# Data manipulation\nsubset(data, condition)         → filter(data, condition)\ndata[order(data$x), ]          → arrange(data, x)\naggregate(x ~ y, data, mean)   → summarise(data, mean(x), .by = y)\n\n# Functional programming\nsapply(x, f)                   → map(x, f)  # type-stable\nlapply(x, f)                   → map(x, f)\n\n# Strings\ngrepl(\"pattern\", text)         → str_detect(text, \"pattern\")\ngsub(\"old\", \"new\", text)       → str_replace_all(text, \"old\", \"new\")\n```\n\n### Old → New Tidyverse\n\n```r\n# Pipes\n%>%                            → |>\n\n# Grouping\ngroup_by() |> ... |> ungroup() → summarise(..., .by = x)\n\n# Joins\nby = c(\"a\" = \"b\")             → by = join_by(a == b)\n\n# Reshaping\ngather()\u002Fspread()              → pivot_longer()\u002Fpivot_wider()\n```\n\n## Additional Resources\n\n- **rlang patterns**: See [references\u002Frlang-patterns.md](references\u002Frlang-patterns.md) for comprehensive data-masking and metaprogramming guidance\n- **Performance optimization**: See [references\u002Fperformance.md](references\u002Fperformance.md) for profiling, benchmarking, and optimization strategies\n- **Package development**: See [references\u002Fpackage-development.md](references\u002Fpackage-development.md) for complete package creation guidance\n- **Object systems**: See [references\u002Fobject-systems.md](references\u002Fobject-systems.md) for S3, S4, S7, R6, and vctrs guidance\n",{"name":5,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fcodingkaiser\u002Fr-development",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill r-development",{"tool":64,"command":65},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill r-development",{"tool":67,"command":68},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill r-development","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fcodingkaiser\u002Fr-development\u002FSKILL.md",true,[72,78,82,86,90,94,98,102,106,110],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Facf-json-example.md","REFERENCE","参考文档",13450,"https:\u002F\u002Fgithub.com\u002Fngothanhbinh204\u002FBF-Bike\u002Fblob\u002Fmain\u002Fhtml-to-wordpress-acf\u002Freferences\u002Facf-json-example.md",{"path":79,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Facf-patterns.md",15128,"https:\u002F\u002Fgithub.com\u002Fngothanhbinh204\u002FBF-Bike\u002Fblob\u002Fmain\u002Fhtml-to-wordpress-acf\u002Freferences\u002Facf-patterns.md",{"path":83,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":84,"sourceHtmlUrl":85},"references\u002Fcustom-helper-functions.md",12703,"https:\u002F\u002Fgithub.com\u002Fngothanhbinh204\u002FBF-Bike\u002Fblob\u002Fmain\u002Fhtml-to-wordpress-acf\u002Freferences\u002Fcustom-helper-functions.md",{"path":87,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":88,"sourceHtmlUrl":89},"references\u002Fcustom-post-types.md",15766,"https:\u002F\u002Fgithub.com\u002Fngothanhbinh204\u002FBF-Bike\u002Fblob\u002Fmain\u002Fhtml-to-wordpress-acf\u002Freferences\u002Fcustom-post-types.md",{"path":91,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":92,"sourceHtmlUrl":93},"references\u002Fobject-systems.md",7077,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fcodingkaiser\u002Fr-development\u002Freferences\u002Fobject-systems.md",{"path":95,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":96,"sourceHtmlUrl":97},"references\u002Fpackage-development.md",8553,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fcodingkaiser\u002Fr-development\u002Freferences\u002Fpackage-development.md",{"path":99,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":100,"sourceHtmlUrl":101},"references\u002Fperformance.md",8179,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fcodingkaiser\u002Fr-development\u002Freferences\u002Fperformance.md",{"path":103,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":104,"sourceHtmlUrl":105},"references\u002Frlang-patterns.md",6416,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fcodingkaiser\u002Fr-development\u002Freferences\u002Frlang-patterns.md",{"path":107,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":108,"sourceHtmlUrl":109},"references\u002Ftemplate-structure.md",11307,"https:\u002F\u002Fgithub.com\u002Fngothanhbinh204\u002FBF-Bike\u002Fblob\u002Fmain\u002Fhtml-to-wordpress-acf\u002Freferences\u002Ftemplate-structure.md",{"path":111,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":112,"sourceHtmlUrl":113},"skill-report.json",32780,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fcodingkaiser\u002Fr-development\u002Fskill-report.json",[115,129,139,148,154,161],{"skillNo":116,"name":117,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":125,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[120],{"categoryNo":121,"categoryName":122,"taxonomyType":123,"taxonomyTypeDesc":124},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[126,127,128],"model","model hierarchy","model hierarchy skill",{"skillNo":130,"name":131,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":135,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[134],{"categoryNo":121,"categoryName":122,"taxonomyType":123,"taxonomyTypeDesc":124},[136,137,138],"MCP","zoom","zoom mcp",{"skillNo":140,"name":141,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":144,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[145,146,147,137],"sdk","zoom apps sdk","apps",{"skillNo":149,"name":150,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":153,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[150],{"skillNo":155,"name":156,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":160,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[159],{"categoryNo":121,"categoryName":122,"taxonomyType":123,"taxonomyTypeDesc":124},[156],{"skillNo":162,"name":163,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":166,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[163]]