<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Topics tagged with opensource]]></title><description><![CDATA[A list of topics that have been tagged with opensource]]></description><link>http://forum.d2learn.org/tags/opensource</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 22:38:24 GMT</lastBuildDate><atom:link href="http://forum.d2learn.org/tags/opensource.rss" rel="self" type="application/rss+xml"/><pubDate>Invalid Date</pubDate><ttl>60</ttl><item><title><![CDATA[[xlings | PR]: 优化非xlings工具安装软件的检测, 并修复windows下系统中已安装vscode后重复安装的问题]]></title><description><![CDATA[<p dir="auto"><img src="/assets/uploads/files/1753202866355-7b7a15fb-f3f1-400b-9120-3443fb667026-image.png" alt="7b7a15fb-f3f1-400b-9120-3443fb667026-image.png" class=" img-fluid img-markdown" /></p>
<ul>
<li>issues详情: <a href="https://github.com/d2learn/xlings/issues/104" rel="nofollow ugc">https://github.com/d2learn/xlings/issues/104</a></li>
<li>pr详情: <a href="https://github.com/d2learn/xlings/pull/105" rel="nofollow ugc">https://github.com/d2learn/xlings/pull/105</a></li>
</ul>
<hr />
<h2>修复代码&amp;测试结果</h2>
<p dir="auto"><img src="/assets/uploads/files/1753202701376-f9ac3a8d-12eb-40f4-868c-b4281fafcd2f-image.png" alt="f9ac3a8d-12eb-40f4-868c-b4281fafcd2f-image.png" class=" img-fluid img-markdown" /></p>
<h2>验证步骤</h2>
<p dir="auto">1.更新xlings到最新版本</p>
<pre><code class="language-bash">irm https://d2learn.org/xlings-install.ps1.txt | iex
</code></pre>
<p dir="auto">2.更新包索引</p>
<pre><code class="language-bash">xim --update index
</code></pre>
<p dir="auto">3.测试</p>
<pre><code class="language-bash">xlings remove code
xlings self clean
xlings install code
</code></pre>
<p dir="auto">预期输出</p>
<pre><code>code@system - already installed
</code></pre>
]]></description><link>http://forum.d2learn.org/topic/117/xlings-pr-优化非xlings工具安装软件的检测-并修复windows下系统中已安装vscode后重复安装的问题</link><guid isPermaLink="true">http://forum.d2learn.org/topic/117/xlings-pr-优化非xlings工具安装软件的检测-并修复windows下系统中已安装vscode后重复安装的问题</guid><dc:creator><![CDATA[SPeak]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[xlings多语言初步支持 - i18n]]></title><description><![CDATA[<p dir="auto">通过检测环境, 自动匹配主机语言</p>
<p dir="auto">PR: <a href="https://github.com/d2learn/xlings/pull/88" rel="nofollow ugc">https://github.com/d2learn/xlings/pull/88</a></p>
<hr />
<h2>xlings帮助信息</h2>
<p dir="auto"><img src="/assets/uploads/files/1748440200196-444b4f23-3ac7-400a-b7e3-1037ce2bd026-image.png" alt="444b4f23-3ac7-400a-b7e3-1037ce2bd026-image.png" class=" img-fluid img-markdown" /></p>
<h2>xim帮助信息</h2>
<pre><code class="language-bash">speak@speak-pc ~&gt; xim

	XIM - Xlings Installation Manager

xim version: pre-v0.0.2

Usage1: $ xlings install [command] [target]
Usage2: $ xim [command] [target]

Commands:
  -i,   install,   install software/package/env
  -r,   remove,    remove the software/package/env
  -u,   update,    update the software/package/env
  -l,   list,      list all installed software/packages/env
  -s,   search,    search for a software/package
  -h,   help,      display this help message

SysCommands:
  --detect,        detect local software/packages
  --update,        update [self | index]
  --add-xpkg,      add xpkg file to index database
  --xpkg-args,     xpkg args
  --add-indexrepo, add indexrepo to repo manager
  --disable-info,  disable info display

Examples:
  xim vscode     -- install vscode
  xim -r vscode  -- remove/uninstall vscode
  xim -l         -- list all installed software/packages
  xim -s code    -- search for software/package with 'code'

More: https://d2learn.org/xlings


</code></pre>
<p dir="auto"><img src="/assets/uploads/files/1748440340778-f4919fb2-ed80-4795-be33-5a0afb76f862-image.png" alt="f4919fb2-ed80-4795-be33-5a0afb76f862-image.png" class=" img-fluid img-markdown" /></p>
<h2>d2x帮助信息</h2>
<pre><code class="language-bash">d2x version: pre-v0.0.2

Usage: $ d2x [command] [target]

Commands:
	 new,      	 create new d2x project
	 book,     	 open project's book
	 run,      	 run sourcecode file
	 checker,  	 run checker for d2x project's exercises
	 help,     	 help info

More: https://d2learn.org/xlings
</code></pre>
<p dir="auto"><img src="/assets/uploads/files/1748440406925-01526306-ad34-4419-bf24-464f8e410a54-image.png" alt="01526306-ad34-4419-bf24-464f8e410a54-image.png" class=" img-fluid img-markdown" /></p>
]]></description><link>http://forum.d2learn.org/topic/92/xlings多语言初步支持-i18n</link><guid isPermaLink="true">http://forum.d2learn.org/topic/92/xlings多语言初步支持-i18n</guid><dc:creator><![CDATA[SPeak]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[TechTalks: Android系统真的要闭源了? -- AOSP项目政策(可能)变化解读]]></title><description><![CDATA[<p dir="auto">@blogkj 1.4和2.3里大概分析了以下, Google的透露出来的说法是, 认为外部开发者的贡献的改动带来的维护成本, 可能反而还影响了开发进度和提高了开发成本。所以, 基本后面Google对于AOSP社区的策略基本只做代码发布/展示的功能, 而不会去发展社区在AOSP项目的影响力, 更多以公司视角做TOB的事情, 基本放弃社区推动项目发展的想法</p>

aosp: 以公司为主推动项目的发展, 外部开发者后面基本很难参与
linux: 以社区为主推动项目发展, 所有个人和组织都要以社区里的角色进行参与

<p dir="auto">大概就是这种的差异</p>
]]></description><link>http://forum.d2learn.org/topic/76/techtalks-android系统真的要闭源了-aosp项目政策-可能-变化解读</link><guid isPermaLink="true">http://forum.d2learn.org/topic/76/techtalks-android系统真的要闭源了-aosp项目政策-可能-变化解读</guid><dc:creator><![CDATA[sunrisepeak]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[把xlings中的公开课相关命令集成到d2x工具中 - PR: d2x base]]></title><description><![CDATA[<p dir="auto"><a href="https://github.com/d2learn/xlings/pull/79" rel="nofollow ugc">https://github.com/d2learn/xlings/pull/79</a></p>
]]></description><link>http://forum.d2learn.org/topic/71/把xlings中的公开课相关命令集成到d2x工具中-pr-d2x-base</link><guid isPermaLink="true">http://forum.d2learn.org/topic/71/把xlings中的公开课相关命令集成到d2x工具中-pr-d2x-base</guid><dc:creator><![CDATA[sunrisepeak]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[xlings: 新增加XVM版本管理子模块&#x2F;工具 - Rust编写的支持基于目录的工作空间环境隔离]]></title><description><![CDATA[<h1>XVM | Xlings Version Manager - <a href="https://github.com/d2learn/xlings/tree/main/core/xvm" rel="nofollow ugc">Github</a></h1>
<p dir="auto">一个简单且通用的版本管理工具 - 支持多版本管理、支持工作空间和环境隔离、支持多版本的命令别名</p>
<p dir="auto"><img src="/assets/uploads/files/1736259066707-ab7d9843-fa0b-4463-80d9-263392561345-image.png" alt="ab7d9843-fa0b-4463-80d9-263392561345-image.png" class=" img-fluid img-markdown" /></p>
<hr />
<h2>下载安装</h2>
<p dir="auto"><strong>使用xim进行安装</strong></p>
<pre><code class="language-bash">xim --update index
xim -i xvm # 或 xlings install xvm
</code></pre>
<p dir="auto"><strong>直接下载</strong></p>
<blockquote>
<p dir="auto">直接下载压缩包&amp;解压出可执行程序</p>
</blockquote>
<p dir="auto"><a href="https://github.com/d2learn/xlings/releases/tag/xvm-dev" rel="nofollow ugc">release地址</a></p>
<p dir="auto">注: 使用时需要把xvm程序放到一个已经加入PATH的目录里</p>
<h2>基本用法</h2>
<p dir="auto"><strong>xvm add | 添加程序</strong></p>
<blockquote>
<p dir="auto">支持添加不同版本, 也支持创建命令别名</p>
</blockquote>
<pre><code class="language-bash"># xvm add [target] [version] --path [bin-path] --alias [command/bin-file]
xvm add python 2.7.18 --path python2_dir --alias python2
xvm add python 3.12.3 --path python3_dir --alias python3.12
xvm add pv 0.0.1 --alias "python --version"
</code></pre>
<ul>
<li><code>target</code>: 生效时可以使用的命令</li>
<li><code>version</code>: 这个是标识target的版本号, 建议和应用版本保持一致。如果是别名可以自定义</li>
<li><code>--path</code>: 程序所在的实际路径(可选)</li>
<li><code>--alias</code>: 在"所设置的路径"下实际执行的命令(可选), 默认为target</li>
</ul>
<blockquote>
<p dir="auto">注: 默认第一次添加的版本作为全局工作空间的默认版本</p>
</blockquote>
<p dir="auto"><strong>xvm list | 查询程序的所有版本</strong></p>
<blockquote>
<p dir="auto">支持模糊查询</p>
</blockquote>
<pre><code class="language-bash"># xvm list [target]
xvm list python
xvm list p
</code></pre>
<p dir="auto"><strong>xvm use | 切换版本</strong></p>
<blockquote>
<p dir="auto">可以切换到对应的版本, 版本号支持模糊匹配</p>
</blockquote>
<pre><code class="language-bash"># xvm use [target] [version]
xvm use python 3.12.3
xvm use python 2   # -&gt; 2.7.18
</code></pre>
<p dir="auto"><strong>xvm current | 查询当前版本</strong></p>
<blockquote>
<p dir="auto">支持模糊匹配</p>
</blockquote>
<pre><code class="language-bash"># xvm current [target]
xvm current p
</code></pre>
<p dir="auto"><strong>xvm remove | 移除之前被添加的程序</strong></p>
<blockquote>
<p dir="auto">这里的移除只是从xvm的版本数据库中删除记录</p>
</blockquote>
<pre><code class="language-bash"># xvm remove [target] [version]
xvm remove pv 0.0.1
</code></pre>
<h2>工作空间和环境隔离</h2>
<blockquote>
<p dir="auto">目前xvm支持基于目录的工作空间, 可以和全局工作空间进行隔离(默认有一个全局工作空间)</p>
</blockquote>
<h3>基础命令</h3>
<p dir="auto"><strong>创建工作空间</strong></p>
<pre><code class="language-bash"># xvm workspace [target]
xvm workspace test
</code></pre>
<blockquote>
<p dir="auto">注: 工作空间, 默认时激活和继承全局工作空间版本情况的</p>
</blockquote>
<p dir="auto"><strong>设置当前工作空间激活状态</strong></p>
<blockquote>
<p dir="auto">当工作空间未激活时就会使用默认的全局空间, 激活时会覆盖全局空间</p>
</blockquote>
<pre><code class="language-bash"># xvm workspace [target]
xvm workspace test --active false
xvm workspace test --active true
</code></pre>
<p dir="auto"><strong>设置当前工作空间是否继承全局空间</strong></p>
<pre><code class="language-bash"># xvm workspace [target]
xvm workspace test --inherit false
xvm workspace test --inherit true
</code></pre>
<h3>使用场景</h3>
<blockquote>
<p dir="auto">在指定目录创建工作空间, 使用特定的版本</p>
</blockquote>
<pre><code class="language-bash"># 假设全局空间中python使用的版本是3
xvm workspace test # 创建工作空间
xvm use python 2   # 切换python版本
xvm current python # 查询当前版本
python --version   # 验证 - python2
cd ..
python --version   # 返回上级目录/版本会自动切换到全局版本python3
</code></pre>
<h2>其他</h2>
<p dir="auto"><strong>临时关闭xvm版本管理功能</strong></p>
<blockquote>
<p dir="auto">通过设置全局workspace的状态, 可以控制xvm的版本管理是否生效</p>
</blockquote>
<pre><code class="language-bash">xvm workspace global --active false
xvm workspace global --active true
</code></pre>
]]></description><link>http://forum.d2learn.org/topic/62/xlings-新增加xvm版本管理子模块-工具-rust编写的支持基于目录的工作空间环境隔离</link><guid isPermaLink="true">http://forum.d2learn.org/topic/62/xlings-新增加xvm版本管理子模块-工具-rust编写的支持基于目录的工作空间环境隔离</guid><dc:creator><![CDATA[sunrisepeak]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[[project-graph]: 通过xlings&#x2F;xim工具安装project-graph不同版本的方法 - 支持windows&#x2F;ubuntu&#x2F;archlinux]]></title><description><![CDATA[<p dir="auto">查询可以安装的版本 xim -s project-graph</p>
<p dir="auto">image.png</p>
]]></description><link>http://forum.d2learn.org/topic/58/project-graph-通过xlings-xim工具安装project-graph不同版本的方法-支持windows-ubuntu-archlinux</link><guid isPermaLink="true">http://forum.d2learn.org/topic/58/project-graph-通过xlings-xim工具安装project-graph不同版本的方法-支持windows-ubuntu-archlinux</guid><dc:creator><![CDATA[sunrisepeak]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[xlings: xim: 增加Project-Graph图&#x2F;节点绘制工具到xim-pkgindex索引仓库]]></title><description><![CDATA[<p dir="auto"><strong>issues:</strong> <a href="https://github.com/d2learn/xim-pkgindex/issues/10" rel="nofollow ugc">https://github.com/d2learn/xim-pkgindex/issues/10</a><br />
<strong>pull-request:</strong> <a href="https://github.com/d2learn/xim-pkgindex/pull/9" rel="nofollow ugc">https://github.com/d2learn/xim-pkgindex/pull/9</a><br />
<strong>xpkg包文件:</strong> <a href="https://github.com/d2learn/xim-pkgindex/blob/main/pkgs/p/project-graph.lua" rel="nofollow ugc">https://github.com/d2learn/xim-pkgindex/blob/main/pkgs/p/project-graph.lua</a></p>
<hr />
<hr />
<h2>基础信息 | Basic Info</h2>
<ul>
<li>名称: project-graph</li>
<li>协议: mit license</li>
<li>简介: 快速绘制节点图的桌面工具，可以用于项目进程拓扑图绘制、快速头脑风暴草稿</li>
<li>主页: <a href="https://project-graph.top" rel="nofollow ugc">https://project-graph.top</a></li>
<li>仓库地址: <a href="https://github.com/LiRenTech/project-graph" rel="nofollow ugc">https://github.com/LiRenTech/project-graph</a></li>
<li>支持平台: windows / linux / macos</li>
<li>d2learn交流版块: <a href="https://forum.d2learn.org/category/16/project-graph" rel="nofollow ugc">https://forum.d2learn.org/category/16/project-graph</a></li>
</ul>
<p dir="auto"><img src="/assets/uploads/files/1735566024280-bc2208df-7cc3-47f1-979b-94a051be1bea-image.png" alt="bc2208df-7cc3-47f1-979b-94a051be1bea-image.png" class=" img-fluid img-markdown" /></p>
<h2>XPackage's Pull-Request</h2>
<ul>
<li>#9</li>
</ul>
<h2>本地测试信息 | Local Test Info</h2>
<blockquote>
<p dir="auto">Paste your test console information or picture here (note: xpakcage is your xpackage's filename</p>
</blockquote>
<h3>ubuntu测试</h3>
<blockquote>
<p dir="auto"><a href="https://github.com/d2learn/xim-pkgindex/issues/10#issuecomment-2565176956" rel="nofollow ugc">windows测试</a>  | <a href="https://github.com/d2learn/xim-pkgindex/issues/10#issuecomment-2565351312" rel="nofollow ugc">archlinux测试</a></p>
</blockquote>
<p dir="auto"><strong>step1: <code>xim --add-xpkg yourPath/xpackage.lua</code></strong></p>
<blockquote>
<p dir="auto">test add to pkgindex database for xpackage</p>
</blockquote>
<p dir="auto">ubuntu</p>
<p dir="auto"><img src="https://github.com/user-attachments/assets/9ed2f209-70e7-4abf-b404-e1f569fc28fc" alt="image" class=" img-fluid img-markdown" /></p>
<p dir="auto"><strong>step2: <code>xim -s xpackage</code></strong></p>
<blockquote>
<p dir="auto">test search for xpackage</p>
</blockquote>
<p dir="auto">ubuntu</p>
<pre><code class="language-bash">[xlings:xim]: search for *project-graph* ...

{ 
  "project-graph@1.0.0" = { },
  "project-graph@nightly" = { },
  "project-graph@1.1.0" = { 
    "project-graph@latest",
    "project-graph" 
  } 
}
</code></pre>
<p dir="auto"><strong>step3: <code>xim -i xpackage</code></strong></p>
<blockquote>
<p dir="auto">test install for xpackage</p>
</blockquote>
<p dir="auto">ubuntu</p>
<p dir="auto"><img src="https://github.com/user-attachments/assets/4fb7e91d-d00b-4d4e-9fda-29a186319925" alt="image" class=" img-fluid img-markdown" /></p>
<p dir="auto"><strong>step4: <code>xim -i xpackage</code></strong></p>
<blockquote>
<p dir="auto">test installed for xpackage</p>
</blockquote>
<p dir="auto"><img src="https://github.com/user-attachments/assets/35370f98-252b-4008-82e4-d206e566e60e" alt="image" class=" img-fluid img-markdown" /></p>
<p dir="auto"><strong>step5: <code>xim -l xpackage</code></strong></p>
<blockquote>
<p dir="auto">test list for xpackage</p>
</blockquote>
<pre><code class="language-bash">speak@speak-pc:~/workspace/github/d2learn/xim-pkgindex$ xim -l project-graph
-&gt; project-graph@1.1.0 (project-graph@latest, project-graph)
</code></pre>
<p dir="auto"><strong>step6: <code>xim -r xpackage</code></strong></p>
<blockquote>
<p dir="auto">test remove/uninstall for xpackage</p>
</blockquote>
<p dir="auto"><img src="https://github.com/user-attachments/assets/e3d9919c-5c75-4e60-b0cb-f755e4970976" alt="image" class=" img-fluid img-markdown" /></p>
<p dir="auto"><strong>step7: <code>xim -r xpackage</code></strong></p>
<blockquote>
<p dir="auto">test uninstalled for xpackage</p>
</blockquote>
<p dir="auto"><img src="https://github.com/user-attachments/assets/ca61de8b-30df-4f67-885c-45475ebca402" alt="image" class=" img-fluid img-markdown" /></p>
]]></description><link>http://forum.d2learn.org/topic/57/xlings-xim-增加project-graph图-节点绘制工具到xim-pkgindex索引仓库</link><guid isPermaLink="true">http://forum.d2learn.org/topic/57/xlings-xim-增加project-graph图-节点绘制工具到xim-pkgindex索引仓库</guid><dc:creator><![CDATA[sunrisepeak]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[xlings: 如何添加一个XPackage到包索引仓库(xim-pkgindex)? - 不止软件安装, 还有环境配置]]></title><description><![CDATA[<p dir="auto"><strong>欢迎把你开发/喜欢的工具软件或一些环境的配置添加到XIM的包索引仓库中, 让更多人能一键下载安装和配置环境</strong></p>
<h2>目录</h2>
<ul>
<li>第一步: 创建个<a href="https://github.com/d2learn/xim-pkgindex/issues/new/choose" rel="nofollow ugc">Add XPackage</a> &amp; 填写基础信息</li>
<li>第二步: 复制一份<a href="https://github.com/d2learn/xim-pkgindex/blob/main/docs/xpackage-template.lua" rel="nofollow ugc">包模板文件</a></li>
<li>第三步: 修改文件名和包内容 (可以参考仓库中的包或<a href="https://github.com/d2learn/xim-pkgindex/blob/main/docs/xpackage-spec.md" rel="nofollow ugc">xpackage规范示例</a>)</li>
<li>第四步: 对包内容进行测试
<ul>
<li>添加包到索引数据库: <code>xim --add-xpkg yourLocalPath/filename.lua</code></li>
<li>搜索测试: <code>xim -s filename</code></li>
<li>安装测试: <code>xim -i filename</code></li>
<li>已经安装测试: <code>xim -i filename</code> (会显示包已安装)</li>
<li>安装列表测试: <code>xim -l filename</code></li>
<li>卸载测试: <code>xim -r filename</code></li>
<li>已卸载测试: <code>xim -r filename</code> (会显示包没有安装)</li>
</ul>
</li>
<li>第五步: 当第四步通过后, 把测试信息补充到第一步中创建的问题里</li>
<li>第六步: <a href="https://github.com/d2learn/xim-pkgindex" rel="nofollow ugc">fork项目</a>, 并把包文件放到<code>pkgs</code>目录下的对应位置</li>
<li>第七步: 发起合入Pull-Request, 把PR地址补充到问题里并在评论区@项目维护人员</li>
<li>第八步: TODO (reviewer本地验证&amp;approval)</li>
</ul>
<p dir="auto"><strong>xlings开源仓库:</strong>  <a href="https://github.com/d2learn/xlings" rel="nofollow ugc">https://github.com/d2learn/xlings</a><br />
<strong>xim包索引仓库:</strong>  <a href="https://github.com/d2learn/xim-pkgindex" rel="nofollow ugc">https://github.com/d2learn/xim-pkgindex</a></p>
<hr />
<h2>第一步 - 创建一个<a href="https://github.com/d2learn/xim-pkgindex/issues/new/choose" rel="nofollow ugc">Add XPackage</a></h2>
<p dir="auto">在<code>xim-pkgindex</code>的issues创建选择界面选择<code>Add XPackage</code>模板并先填写包的基础信息</p>
<ul>
<li>包名</li>
<li>包的简短描述</li>
<li>主页</li>
<li>开源 or 闭源</li>
<li>仓库</li>
<li>协议</li>
<li>...</li>
</ul>
<h2>第二步: 复制一份<a href="https://github.com/d2learn/xim-pkgindex/blob/main/docs/xpackage-template.lua" rel="nofollow ugc">包模板文件</a></h2>
<p dir="auto">复制一份包模板文件。一个包文件有两大部分组成: package + hooks/actions, 并且包文件的语法对应的就是lua语言的基础语法(<strong>并不需要特殊学习lua, 只要参考已有的包里的用法即可</strong>)</p>
<h3>package域</h3>
<p dir="auto"><strong>基础信息描述部分</strong></p>
<p dir="auto">基础信息部分主要是要来描述和记录这个包的相关信息的。**这些信息会在安装的时候进行显示, 但是他们不会实质的影响安装的过程。**但为了包的完整度应该尽可能的填写相关字段(至少包含<code>name</code>、<code>description</code>、<code>type</code>、<code>keywords</code>)。具体格式如下:</p>
<pre><code class="language-lua">package = {
    -- base info
    homepage = "https://example.com",

    name = "package-name",
    description = "Package description",

    authors = "Author Name",
    maintainers = "Maintainer Name or url",
    contributors = "Contributor Name or url",
    license = "MIT",
    repo = "https://example.com/repo",
    docs = "https://example.com/docs",

    -- xim pkg info
    type = "package", -- package, auto-config
    archs = {"x86_64"},
    status = "stable", -- dev, stable, deprecated
    categories = {"category1", "category2"},
    keywords = {"keyword1", "keyword2"},
    date = "2024-12-01",
    --...
}
</code></pre>
<p dir="auto"><strong>平台&amp;依赖&amp;资源描述部分 - xpm</strong></p>
<p dir="auto">xpm字段描述了这个包支持的具体的平台, 以及每个平台上安装这个包需要的依赖和网络资源。这个部分会实质性的影响安装过程且<strong>没有描述的平台/系统和版本将不会添加到用户的本地索引数据库中, 即不可查询和安装</strong></p>
<ul>
<li>系统名是xpm的中的key, 表示要支持的系统/平台</li>
<li>系统key对应的值包含:
<ul>
<li>deps是可选项, 用来描述这个包在对应平台下需要的依赖(这些依赖需要已经在索引仓库中)</li>
<li>版本项也是kv结构 <code>["key"] = {"url", "sha256"}</code>
<ul>
<li>它的key的格式一般为<code>x.x.x</code>其中x是数字, 也可以用<code>latest</code>描述(用户默认安装的版本)</li>
<li>它的值的格式为一对字符串, 第一个是网络资源url, 第二个为这个资源对应的sha256校验码(为可选项, xim会自动的下载资源并校验, 路径会存在pkginfo.install_file中)</li>
</ul>
</li>
</ul>
</li>
<li>在xpm的中系统字段和版本字段支持同级引用, 如: <code>["latest"] = { ref = "1.0.1"}</code> latest对应的值将会是<code>1.0.1</code>里的值</li>
</ul>
<pre><code class="language-lua">package = {
    -- ...
    xpm = {
        windows = {
            deps = {"dep1", "dep2"},
            ["1.0.1"] = {"url", "sha256"},
            ["1.0.0"] = {"url", "sha256"},
        },
        ubuntu = {
            deps = {"dep3", "dep4"},
            ["latest"] = { ref = "1.0.1"},
            ["1.0.1"] = {"url", "sha256"},
            ["1.0.0"] = {"url", "sha256"},
        },
    },
}
</code></pre>
<blockquote>
<p dir="auto"><strong>注:</strong></p>
<p dir="auto">1.latest版本一般会使用ref引用到一个具体的版本上</p>
<p dir="auto">2.如果没有网络资源时(例如是auto-config包)可以填写一个空列表。如: <code>["1.0.1"] = { },</code></p>
</blockquote>
<h3>hooks/actions域</h3>
<p dir="auto">hooks域主要是安装或卸载时实际对应的lua函数, 最少要包含: <code>installed</code>、<code>install</code>、<code>uninstall</code> 这三个函数, 他们描述了包对应动作下的具体行为。</p>
<p dir="auto"><strong>installed</strong></p>
<p dir="auto">用来检测对应版本是否被安装, 支持返回true/false或直接返回包含版本的字符串, 框架中会自动的检测字符串是否包含对应的版本号, 常用的实现是直接返回 <code>os.iorun("program --version")</code>。对于无法直接获取版本号的包/软件, 可以通过代码自行判断并和当前要执行的版本号进行对比, 然后返回true或false</p>
<pre><code class="language-lua">function installed()
    -- ...
end
</code></pre>
<p dir="auto"><strong>install/uninstall</strong></p>
<p dir="auto">install和uninstall主要是对应的安装和卸载, 可以使用lua代码对资源文件进行操作。通常使用os.exec函数等同与命令行</p>
<blockquote>
<p dir="auto"><strong>注:</strong> 所有的hooks都运行在和所下载资源的同级目录</p>
</blockquote>
<h2>第三步: 修改文件名和包内容 - mdbook包文件示例</h2>
<p dir="auto">把<a href="https://github.com/d2learn/xim-pkgindex/blob/main/docs/xpackage-template.lua" rel="nofollow ugc">包模板文件</a>重命令为<code>mdbook.lua</code>并修改文件内容</p>
<p dir="auto"><strong>mdbook安装的核心逻辑是, 把解压出来的执行文件复制到系统的bin目录或其他已经添加到path环境变量中的路径里</strong></p>
<h3>添加mdbook基础信息</h3>
<pre><code class="language-lua">package = {
    -- base info
    name = "mdbook",
    description = "Create book from markdown files. Like Gitbook but implemented in Rust",

    authors = "Mathieu David, Michael-F-Bryan, Matt Ickstadt",
    contributors = "https://github.com/rust-lang/mdBook/graphs/contributors",
    license = "MPL-2.0",
    repo = "https://github.com/rust-lang/mdBook",
    docs = "https://rust-lang.github.io/mdBook",

    -- xim pkg info
    type = "package",
    categories = {"book", "markdown"},
    keywords = {"book", "gitbook", "rustbook", "markdown"},
}
</code></pre>
<h3>添加xpm基础信息</h3>
<ul>
<li>主要支持平台为: windows, linux(ubuntu, debian, archlinux)</li>
<li>mdbook没有依赖, 所以不需要deps字段</li>
<li>把mdbook的不同平台的二进制执行文件包的url添加到对应版本的value中</li>
<li>windows支持0.4.40, debain支持0.4.40, 0.4.43版本</li>
<li>设置每个平台下的latest版本对应的具体版本, windows上ref到<code>0.4.40</code>, debain上ref到<code>0.4.43</code></li>
<li>由于mdbook支持所有linux系统, 所以<code>ubuntu, archlinux</code>可以直接ref到debian</li>
</ul>
<pre><code class="language-lua">package = {
    -- ...
    xpm = {
        windows = {
            ["latest"] = { ref = "0.4.40" },
            ["0.4.40"] = {
                url = "https://gitee.com/sunrisepeak/xlings-pkg/releases/download/mdbook/mdbook-v0.4.40-x86_64-pc-windows-msvc.zip",
                sha256 = nil
            }
        },
        debain = {
            ["latest"] = { ref = "0.4.43" },
            ["0.4.43"] = {
                url = "https://github.com/rust-lang/mdBook/releases/download/v0.4.43/mdbook-v0.4.43-x86_64-unknown-linux-gnu.tar.gz",
                sha256 = "d20c2f20eb1c117dc5ebeec120e2d2f6455c90fe8b4f21b7466625d8b67b9e60"
            },
            ["0.4.40"] = {
                url = "https://github.com/rust-lang/mdBook/releases/download/v0.4.40/mdbook-v0.4.40-x86_64-unknown-linux-gnu.tar.gz",
                sha256 = "9ef07fd288ba58ff3b99d1c94e6d414d431c9a61fdb20348e5beb74b823d546b"
            },
        },
        archlinux = { ref = "debain" },
        ubuntu = { ref = "debain" },
    },
}
</code></pre>
<h3>编写mdbook的hooks函数</h3>
<ul>
<li>使用import语法导入xim的platform模块, 用于获取系统的bin目录</li>
<li>由于mdbook的压缩包解压出来就是一个mdbook的可执行文件, windows上为<code>mdbook.exe</code>, linux上为<code>mdbook</code>。所以使用lua语法定义局部变量mdbook_file用于表示不同平台下的对应的文件名</li>
<li>实现<code>installed</code>函数: mdbook本身可以用<code>mdbook --version</code>查询当前版本, 所以这里就执行返回<code>os.iorun("mdbook --version")</code>这个命令运行后的字符串就可以了</li>
<li>实现<code>install</code>函数: 并且xim的框架会自动的解压下载的压缩包, 所以实际的安装就是复制这个可执行文件到bin目录</li>
<li>实现<code>uninstall</code>函数: 同理卸载mdbook, 就是直接把这个文件删除</li>
</ul>
<pre><code class="language-lua">-- package...

import("platform")

local bindir = platform.get_config_info().bindir

local mdbook_file = {
    windows = "mdbook.exe",
    linux = "mdbook",
}

function installed()
    return os.iorun("mdbook --version")
end

function install()
    os.cp(mdbook_file[os.host()], bindir)
    return true
end

function uninstall()
    os.tryrm(path.join(bindir, mdbook_file[os.host()]))
    return true
end
</code></pre>
<blockquote>
<p dir="auto"><strong>注:</strong> 更多复杂的包文件实现, 可以参考<a href="https://github.com/d2learn/xim-pkgindex" rel="nofollow ugc">索引仓库</a>中的其他包文件</p>
</blockquote>
<h2>第四步: 对包内容进行测试</h2>
<blockquote>
<p dir="auto">通过把包文件添加到索引数据库进行相关操作的测试和验证</p>
</blockquote>
<h3>添加包到索引数据库</h3>
<pre><code class="language-lua">xim --add-xpkg yourLocalPath/mdbook.lua
</code></pre>
<p dir="auto"><strong>示例</strong></p>
<pre><code class="language-bash">speak@speak-pc:~$ xim --add-xpkg mdbook.lua
[xlings:xim]: convert xpkg-file to runtime path - mdbook.lua
[xlings:xim]: add xpkg - /home/speak/mdbook.lua
[xlings:xim]: update index database
</code></pre>
<h3>搜索测试</h3>
<blockquote>
<p dir="auto">检测是是否能正常显示包可安装的版本</p>
</blockquote>
<pre><code class="language-lua">xim -s mdbook
</code></pre>
<p dir="auto"><strong>示例</strong></p>
<pre><code class="language-bash">speak@speak-pc:~$ xim -s mdbook
[xlings:xim]: search for *mdbook* ...

{ 
  "mdbook@0.4.40" = { },
  "mdbook@0.4.43" = { 
    "mdbook",
    "mdbook@latest" 
  } 
}
</code></pre>
<h3>安装测试</h3>
<blockquote>
<p dir="auto">执行包的安装命令测试资源和hooks函数是否正常执行</p>
</blockquote>
<pre><code class="language-lua">xim -i mdbook
</code></pre>
<p dir="auto"><strong>示例</strong></p>
<pre><code class="language-bash">speak@speak-pc:~$ xim -i mdbook
[xlings:xim]: create pm executor for mdbook ... 

--- [package] info

name: mdbook
version: 0.4.43
authors: Mathieu David, Michael-F-Bryan, Matt Ickstadt
contributors: https://github.com/rust-lang/mdBook/graphs/contributors
license: MPL-2.0
repo: https://github.com/rust-lang/mdBook
docs: https://rust-lang.github.io/mdBook

	Create book from markdown files. Like Gitbook but implemented in Rust

-&gt; install mdbook? (y/n)
</code></pre>
<p dir="auto">命令会执行如下动作</p>
<ul>
<li>installed</li>
<li>download - 不需要实现</li>
<li>build - 可选</li>
<li>install</li>
<li>config - 可选</li>
</ul>
<p dir="auto">安装完成后可以, 重新打开一个窗口(刷新环境), 再次运行安装看是否会重复安装</p>
<h3>安装列表测试</h3>
<blockquote>
<p dir="auto">执行list命令, 查看被安装的版本是否正确</p>
</blockquote>
<pre><code class="language-lua">xim -l mdbook
</code></pre>
<pre><code class="language-bash">speak@speak-pc:~$ xim -l mdbook
-&gt; mdbook@0.4.43 (mdbook@latest, mdbook)
</code></pre>
<h3>卸载测试</h3>
<blockquote>
<p dir="auto">测试卸载功能</p>
</blockquote>
<pre><code class="language-lua">xim -r mdbook
</code></pre>
<p dir="auto">示例</p>
<pre><code class="language-lua">speak@speak-pc:~$ xim -r mdbook
[xlings:xim]: create pm executor for mdbook ... 

--- [package] info

name: mdbook
version: 0.4.43
authors: Mathieu David, Michael-F-Bryan, Matt Ickstadt
contributors: https://github.com/rust-lang/mdBook/graphs/contributors
license: MPL-2.0
repo: https://github.com/rust-lang/mdBook
docs: https://rust-lang.github.io/mdBook

	Create book from markdown files. Like Gitbook but implemented in Rust

-&gt; uninstall/remove mdbook? (y/n)
y
xxx
[xlings:xim]: mdbook - removed

	     反馈 &amp; 交流 | Feedback &amp; Discourse
	(if encounter any problem, please report it)

	https://forum.d2learn.org/category/9/xlings
	https://github.com/d2learn/xlings/issues

[xlings:xim]: update index database
</code></pre>
<p dir="auto">同理, 卸载后可以在此执行卸载命令进行测试是否能检测到包已经被卸载</p>
<h2>第五步: 把测试信息补充到第一步中创建的问题里</h2>
<p dir="auto">把第四步中测试的log或则截图补充到第一步创建的issue里</p>
<h2>第六步: 索引仓库和包文件位置</h2>
<p dir="auto">fork包索引仓库<a href="https://github.com/d2learn/xim-pkgindex" rel="nofollow ugc">xim-pkgindex</a>, 并把包文件放到<code>pkgs</code>目录下的对应字母目录</p>
<p dir="auto">索引仓库是按文件名的首字母进行分类的</p>
<h2>第七步: 发起合入请求</h2>
<ul>
<li>先把添加的文件提交到自己fork的仓库</li>
<li>发起合入的Pull-Request</li>
<li>把PR地址补充到问题里</li>
<li>在评论区@项目维护人员</li>
</ul>
<h2>第八步: TODO (reviewer本地验证&amp;approval)</h2>
<p dir="auto">交流讨论 &amp; 验证通过后合入仓库</p>
<h2>第九步: 更新本地索引数据库</h2>
<blockquote>
<p dir="auto">xim会自动同步最新的包索引数据库到本地, 然后就可以对该包进行管理了</p>
</blockquote>
<pre><code class="language-bash">xim --update index
</code></pre>
]]></description><link>http://forum.d2learn.org/topic/53/xlings-如何添加一个xpackage到包索引仓库-xim-pkgindex-不止软件安装-还有环境配置</link><guid isPermaLink="true">http://forum.d2learn.org/topic/53/xlings-如何添加一个xpackage到包索引仓库-xim-pkgindex-不止软件安装-还有环境配置</guid><dc:creator><![CDATA[sunrisepeak]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[开源协议争议: 使用rust重写pre-commit项目引发的开源协议争议问题的思考和疑惑 -- 对于以有开源项目用其他语言重写的项目协议方面怎么界定? 不同角度是不是有不同看法?]]></title><description><![CDATA[<p dir="auto">重写从开源协议上应该是衍生物，也不需要纯净室开发</p>
]]></description><link>http://forum.d2learn.org/topic/51/开源协议争议-使用rust重写pre-commit项目引发的开源协议争议问题的思考和疑惑-对于以有开源项目用其他语言重写的项目协议方面怎么界定-不同角度是不是有不同看法</link><guid isPermaLink="true">http://forum.d2learn.org/topic/51/开源协议争议-使用rust重写pre-commit项目引发的开源协议争议问题的思考和疑惑-对于以有开源项目用其他语言重写的项目协议方面怎么界定-不同角度是不是有不同看法</guid><dc:creator><![CDATA[yigekuyou]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[[xlings更新日志]: 调整installer模块, 并增加 project-graph, wsl 安装和配置支持]]></title><description><![CDATA[<h2>Project Graph</h2>
<p dir="auto"><img src="/assets/uploads/files/1731400662746-f92c1262-cef1-422d-b85f-0305cac1a6c8-image.png" alt="f92c1262-cef1-422d-b85f-0305cac1a6c8-image.png" class=" img-fluid img-markdown" /></p>
<blockquote>
<p dir="auto">快速绘制节点图的桌面工具，可以用于项目进程拓扑图绘制、快速头脑风暴草稿</p>
</blockquote>
<p dir="auto"><strong>一键安装命令</strong></p>
<pre><code class="language-bash">xlings install project-graph
</code></pre>
<p dir="auto"><strong>基础信息</strong></p>
<pre><code class="language-bash">name: Project Graph
homepage: https://liren.zty012.de/project-graph
author: LiRenTech Team
licenses: MIT
github: https://github.com/LiRenTech/project-graph

        快速绘制节点图的桌面工具，可以用于项目进程拓扑图绘制、快速头脑风暴草稿
</code></pre>
<p dir="auto"><strong>Ref</strong></p>
<ul>
<li><a href="https://github.com/d2learn/xlings/issues/23" rel="nofollow ugc">https://github.com/d2learn/xlings/issues/23</a></li>
<li><a href="https://github.com/d2learn/xlings/blob/main/core/installer/project_graph.lua" rel="nofollow ugc">https://github.com/d2learn/xlings/blob/main/core/installer/project_graph.lua</a></li>
</ul>
<hr />
<h2>WSL - Windows Subsystem for Linux</h2>
<p dir="auto"><img src="/assets/uploads/files/1731401050436-031c2bc1-9935-48bd-9adc-548112496304-image.png" alt="031c2bc1-9935-48bd-9adc-548112496304-image.png" class=" img-fluid img-markdown" /></p>
<blockquote>
<p dir="auto">Windows系统中的Linux子系统</p>
</blockquote>
<p dir="auto"><strong>一键安装命令</strong></p>
<pre><code class="language-bash">xlings install wsl
</code></pre>
<p dir="auto"><strong>基础信息</strong></p>
<pre><code class="language-bash">name: wsl
homepage: https://learn.microsoft.com/windows/wsl
author: Microsoft
licenses: MIT
github: https://github.com/microsoft/WSL
docs: https://learn.microsoft.com/windows/wsl

        Windows Subsystem for Linux lets developers run a GNU/Linux environment directly on Windows
</code></pre>
<p dir="auto"><strong>Other</strong></p>
<ul>
<li><a href="https://github.com/d2learn/xlings/blob/main/core/installer/windows/wsl.lua" rel="nofollow ugc">https://github.com/d2learn/xlings/blob/main/core/installer/windows/wsl.lua</a></li>
</ul>
<hr />
<h2>增加windows安装器模块</h2>
<blockquote>
<p dir="auto">把只支持windows系统的软件/环境放到windows目录, 通过加载器来自动加载</p>
</blockquote>
<h2>commit</h2>
<p dir="auto"><a href="https://github.com/d2learn/xlings/commit/8cd1491cbbcec3eca51b51232209eb0f5dd59248" rel="nofollow ugc">https://github.com/d2learn/xlings/commit/8cd1491cbbcec3eca51b51232209eb0f5dd59248</a></p>
]]></description><link>http://forum.d2learn.org/topic/34/xlings更新日志-调整installer模块-并增加-project-graph-wsl-安装和配置支持</link><guid isPermaLink="true">http://forum.d2learn.org/topic/34/xlings更新日志-调整installer模块-并增加-project-graph-wsl-安装和配置支持</guid><dc:creator><![CDATA[d2learn-dev]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[[xlings]: 工具基础信息]]></title><description><![CDATA[<h1>xlings</h1>
<ul>
<li><strong>开源仓库:</strong> <a href="https://github.com/d2learn/xlings" rel="nofollow ugc">https://github.com/d2learn/xlings</a></li>
<li><strong>工具介绍页:</strong> <a href="https://d2learn.org/xlings" rel="nofollow ugc">https://d2learn.org/xlings</a></li>
<li><strong>工具文档:</strong> <a href="https://d2learn.org/docs/xlings" rel="nofollow ugc">https://d2learn.org/docs/xlings</a></li>
<li><strong>常见问题汇总:</strong> <a href="http://forum.d2learn.org/post/112">http://forum.d2learn.org/post/112</a></li>
</ul>
<hr />
<p dir="auto"><img src="/assets/uploads/files/1730714773281-4bab3757-49bd-478b-97ca-3fcd66ebf0f4-image.png" alt="4bab3757-49bd-478b-97ca-3fcd66ebf0f4-image.png" class=" img-fluid img-markdown" /></p>
<hr />
<h2>快速安装</h2>
<blockquote>
<p dir="auto">在命令行窗口执行一键安装命令</p>
</blockquote>
<h3>Linux</h3>
<pre><code class="language-bash">curl -fsSL https://d2learn.org/xlings-install.sh | bash
</code></pre>
<p dir="auto">or</p>
<pre><code class="language-bash">wget https://d2learn.org/xlings-install.sh -O - | bash
</code></pre>
<h3>Windows - PowerShell</h3>
<pre><code class="language-bash">Invoke-Expression (Invoke-Webrequest 'https://d2learn.org/xlings-install.ps1.txt' -UseBasicParsing).Content
</code></pre>
]]></description><link>http://forum.d2learn.org/topic/24/xlings-工具基础信息</link><guid isPermaLink="true">http://forum.d2learn.org/topic/24/xlings-工具基础信息</guid><dc:creator><![CDATA[d2learn-dev]]></dc:creator><pubDate>Invalid Date</pubDate></item><item><title><![CDATA[D2Learn Opensource - 简介]]></title><description><![CDATA[<h1>D2Learn Opensource</h1>
<p dir="auto">一个技术知识分享、学习、交流的开源社区。社区以<strong>d2learn动手学</strong>(从实践出发)为理念和<strong>BOOK + CODE + VIDEO + X</strong>的结构, 进行各种技术教程、代码实验、课程教学等相关项目的开发。并对这套框架进行抽象和汇总形成了基础工具<a href="https://github.com/d2learn/xlings" rel="nofollow ugc"><strong>xlings</strong></a>, 来支撑<strong>类d2x项目</strong>的快速搭建和管理, 提供:<strong>练习代码自动检测、AI智能提示引导、常用技术软件/工具便捷下载、项目模板、项目包管理、Markdown书籍</strong>等通用功能</p>
<h3><img src="http://forum.d2learn.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f415.png?v=c6uec18e3vu" class="not-responsive emoji emoji-android emoji--dog2" style="height:23px;width:auto;vertical-align:middle" title=":dog2:" alt="🐕" /> 近期活跃项目</h3>
<ul>
<li><a href="https://github.com/d2learn/xlings" rel="nofollow ugc">xlings</a> : 一个用于技术学习、软件安装、教程教学类项目搭建和管理的基础工具</li>
<li><a>d2ds</a> : 动手学数据结构项目</li>
<li><a href="https://github.com/d2learn/d2python" rel="nofollow ugc">d2python</a> : 动手学Python项目</li>
</ul>
<h3><img src="http://forum.d2learn.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f465.png?v=c6uec18e3vu" class="not-responsive emoji emoji-android emoji--busts_in_silhouette" style="height:23px;width:auto;vertical-align:middle" title=":busts_in_silhouette:" alt="👥" /> 参与社区讨论和贡献</h3>
<p dir="auto"><strong>论坛/交流</strong></p>
<ul>
<li>即时交流群(Q): 167535744</li>
<li>各项目issues: 对应项目的问题/Bug反馈、功能请求</li>
<li><a href="https://github.com/orgs/d2learn/discussions" rel="nofollow ugc">d2learn综合社区</a>: 代码/经验分享、社区发展、想法交流等社区相关问题</li>
</ul>
<p dir="auto"><strong>参与开发和维护</strong></p>
<ul>
<li>解答社区中用户的问题</li>
<li>修复项目Bug, 完善项目文档</li>
<li>参与新功能和新模块的开发</li>
<li>创建新的<strong>类d2x</strong>项目</li>
</ul>
<blockquote>
<p dir="auto">如果你有好的项目想法, 欢迎和社区维护者进行交流讨论哦 <img src="http://forum.d2learn.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f44b.png?v=c6uec18e3vu" class="not-responsive emoji emoji-android emoji--wave" style="height:23px;width:auto;vertical-align:middle" title=":wave:" alt="👋" /></p>
</blockquote>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th><img src="http://forum.d2learn.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f393.png?v=c6uec18e3vu" class="not-responsive emoji emoji-android emoji--mortar_board" style="height:23px;width:auto;vertical-align:middle" title=":mortar_board:" alt="🎓" /> <a href="https://d2learn.github.io/courses" rel="nofollow ugc">课程主页</a> - <img src="http://forum.d2learn.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4c4.png?v=c6uec18e3vu" class="not-responsive emoji emoji-android emoji--page_facing_up" style="height:23px;width:auto;vertical-align:middle" title=":page_facing_up:" alt="📄" /> <a href="https://d2learn.github.io/docs" rel="nofollow ugc">社区文档</a> - <img src="http://forum.d2learn.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f465.png?v=c6uec18e3vu" class="not-responsive emoji emoji-android emoji--busts_in_silhouette" style="height:23px;width:auto;vertical-align:middle" title=":busts_in_silhouette:" alt="👥" /> <a href="https://forum.d2learn.org" rel="nofollow ugc">社区论坛</a> -  <img src="http://forum.d2learn.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f41b.png?v=c6uec18e3vu" class="not-responsive emoji emoji-android emoji--bug" style="height:23px;width:auto;vertical-align:middle" title=":bug:" alt="🐛" /> <a href="https://github.com/orgs/d2learn/projects/1/views/1" rel="nofollow ugc">issues看板</a> -  <img src="http://forum.d2learn.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f680.png?v=c6uec18e3vu" class="not-responsive emoji emoji-android emoji--rocket" style="height:23px;width:auto;vertical-align:middle" title=":rocket:" alt="🚀" /> <a href="https://github.com/orgs/d2learn/projects/2/views/1" rel="nofollow ugc">项目开发看板</a></th>
</tr>
</thead>
</table>
]]></description><link>http://forum.d2learn.org/topic/14/d2learn-opensource-简介</link><guid isPermaLink="true">http://forum.d2learn.org/topic/14/d2learn-opensource-简介</guid><dc:creator><![CDATA[sunrisepeak]]></dc:creator><pubDate>Invalid Date</pubDate></item></channel></rss>