<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>Hemin Won</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://heminwon.github.io/blog/</id>
  <link href="https://heminwon.github.io/blog/" rel="alternate"/>
  <link href="https://heminwon.github.io/blog/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, Hemin Won</rights>
  <subtitle>iOS Dev.</subtitle>
  <title>Hemin's Blog</title>
  <updated>2021-10-27T16:00:00.000Z</updated>
  <entry>
    <author>
      <name>Hemin Won</name>
    </author>
    <content>
      <![CDATA[<h4 id="创建你自己的根服务器-亦称“月球”"><a href="#创建你自己的根服务器-亦称“月球”" class="headerlink" title="创建你自己的根服务器(亦称“月球”)"></a>创建你自己的根服务器(亦称“月球”)</h4><p>行星上的所有ZeroTier节点实际上都位于一个数据中心。这使得在任何地方直接连接设备变得很容易，但它的缺点是没有互联网连接就无法工作。网络连接也不一定完全可靠，有时出于安全原因，用户可能希望完全“air gap”互联网外的一组节点。</p><p>在1.2.0中，ZeroTier引入了添加用户自定义根服务器的功能。已有的数据中心是行星，用户定义的根服务器被称为<strong>月球</strong>。当节点“轨道”是月球时，它会将月球的根服务器添加到其(行星)根服务器中。绕月球运行的节点仍将使用行星根服务器，但如果它们看起来更快或没有其他东西可用，它们将使用月球的根服务器。</p><p>创建月球的第一步是部署一组根服务器。在大多数情况下，我们建议使用两个。这些是常规的ZeroTier节点，但总是打开并具有静态（物理）IP地址的节点。这些静态IP可以是全球互联网IP或只能在内部访问的物理内联网IP。在后一种情况下，你的月亮根在办公室外不起作用，但这无关紧要。漫游节点只会使用行星根服务器。</p><p>我们建议根服务器不要充当网络控制器、加入网络或执行任何其他重叠功能。他们需要良好的可靠网络连接，但在其他方面只需要很少的RAM、存储或CPU。根服务器可以是小型虚拟机、VPS或云实例，也可以是<a href="https://www.raspberrypi.org/">树莓派</a>等小型设备。如果您将根服务器配置为虚拟机，请注意它们不会都驻留在同一个物理硬件上。这将违背建议两个的目的。</p><p>下一步是使用<code>zerotier-idtool</code>创建一个世界定义。您需要来自每个根服务器的theidentity<code>identity.public</code>文件。选择一个根（无论哪个），然后运行<code>zerotier-idtool initmoon &lt;identity.public of one root&gt; &gt;&gt;moon.json</code>。这个<code>zerotier-idtool</code>命令将向您的世界定义的JSON版本输出到标准输出，因此我们将它重定向到<code>moon.json</code>。</p><p>检查此文件。它将包含以下内容：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">  &quot;id&quot;: &quot;deadbeef00&quot;,</span><br><span class="line">  &quot;objtype&quot;: &quot;world&quot;,</span><br><span class="line">  &quot;roots&quot;: [</span><br><span class="line">    &#123;</span><br><span class="line">      &quot;identity&quot;: &quot;deadbeef00:0:34031483094...&quot;,</span><br><span class="line">      &quot;stableEndpoints&quot;: []</span><br><span class="line">    &#125;</span><br><span class="line">  ],</span><br><span class="line">  &quot;signingKey&quot;: &quot;b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0&quot;,</span><br><span class="line">  &quot;signingKey_SECRET&quot;: &quot;ffc5dd0b2baf1c9b220d1c9cb39633f9e2151cf350a6d0e67c913f8952bafaf3671d2226388e1406e7670dc645851bf7d3643da701fd4599fedb9914c3918db3&quot;,</span><br><span class="line">  &quot;updatesMustBeSignedBy&quot;: &quot;b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0&quot;,</span><br><span class="line">  &quot;worldType&quot;: &quot;moon&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>世界ID在技术上是任意的，可以是任何随机的64位值。根据惯例，我们使用其中一个词根的地址。</p><p>世界定义的JSON文件包含<strong>secrets</strong>，因此将其保存在安全的地方很重要。signingKey_SECRET 将允许您将来自动更新世界定义。</p><p>现在添加其他根并定义它们的稳定端点。你最终会得到一些看起来像：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">  &quot;id&quot;: &quot;deadbeef00&quot;,</span><br><span class="line">  &quot;objtype&quot;: &quot;world&quot;,</span><br><span class="line">  &quot;roots&quot;: [</span><br><span class="line">    &#123;</span><br><span class="line">      &quot;identity&quot;: &quot;deadbeef00:0:34031483094...&quot;,</span><br><span class="line">      &quot;stableEndpoints&quot;: [ &quot;10.0.0.2/9993&quot;,&quot;2001:abcd:abcd::1/9993&quot; ]</span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">      &quot;identity&quot;: &quot;feedbeef11:0:83588158384...&quot;,</span><br><span class="line">      &quot;stableEndpoints&quot;: [ &quot;10.0.0.3/9993&quot;,&quot;2001:abcd:abcd::3/9993&quot; ]</span><br><span class="line">    &#125;</span><br><span class="line">  ],</span><br><span class="line">  &quot;signingKey&quot;: &quot;b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0&quot;,</span><br><span class="line">  &quot;signingKey_SECRET&quot;: &quot;ffc5dd0b2baf1c9b220d1c9cb39633f9e2151cf350a6d0e67c913f8952bafaf3671d2226388e1406e7670dc645851bf7d3643da701fd4599fedb9914c3918db3&quot;,</span><br><span class="line">  &quot;updatesMustBeSignedBy&quot;: &quot;b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0&quot;,</span><br><span class="line">  &quot;worldType&quot;: &quot;moon&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>您使用的静态IP地址必须可以从您希望这些根服务的所有位置访问。如果您要将这些部署到物理位置使用，请使用内部IP。如果您希望它们在场外可用，请使用DMZ的公共IP或将它们托管在数据中心附近的云提供商处。提供简单静态直接IP寻址和双堆栈IPv4&#x2F;IPv6支持的低成本云主机，如<a href="https://digitalocean.com/">Digital Ocean</a>、<a href="https://vultr.com/">Vultr</a>和<a href="https://linode.com/">Linode</a>，是托管根的理想场所。在大多数情况下，这些提供商的最低价格案例就足够了。</p><p>第三步是使用<code>zerotier-idtool genmoon moon.json</code>生成实际的签名世界。在这种情况下，这将生成一个名为000000<code>000000deadbeef00.moon</code>的文件。这不包含密钥，但由JSON文件中的秘密签名。</p><p>现在转到您的根目录，创建（如果不存在）他们工作目录的子目录（通常在Linux上为<code>/var/lib/zerotier-one</code>），称为 <code>moons.d</code>，并在那里复制签名的 moon 文件。现在重新启动根，它们应该可以准备好了。</p><p>您可以通过以下两种方式之一将这些根添加到常规节点：将相同的世界定义文件放在它们的 moons.d 目录中或使用 zerotier-cli orbit 命令：zerotier-cli track deadbeef00 deadbeef00。第一个参数是世界 ID（我们可以通过删除两个前导零来缩短它），第二个参数是其任何根的地址。如果它在线且可访问，这将联系根并从中获取完整的世界定义。</p><p>一旦你“轨道”了月球，试试<code>zerotier-cli listpeers</code>。您应该看到您创建的根被列为<code>MOON</code>而不是<code>LEAF</code>。它们现在将用作替代根服务器。</p>]]>
    </content>
    <id>https://heminwon.github.io/blog/archives/zerotier-moons.html</id>
    <link href="https://heminwon.github.io/blog/archives/zerotier-moons.html"/>
    <published>2021-10-27T16:00:00.000Z</published>
    <summary>
      <![CDATA[<h4 id="创建你自己的根服务器-亦称“月球”"><a href="#创建你自己的根服务器-亦称“月球”" class="headerlink" title="创建你自己的根服务器(亦称“月球”)"></a>创建你自己的根服务器(亦称“月球”)</h4><p>行星上的所有Ze]]>
    </summary>
    <title>zerotier 专用根服务器</title>
    <updated>2021-10-27T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Hemin Won</name>
    </author>
    <category term="tech" scheme="https://heminwon.github.io/blog/categories/tech/"/>
    <content>
      <![CDATA[<p>很早就过想在github仓库下载指定分支下的某个文件(夹)，特别是对于一些资源收集归档的仓库只是想去下载自己关心的部分，要整个仓库clone的话会有不必要的时间和网络资源的浪费。当时查到可以使用<a href="https://git-scm.com/">git</a>在<code>1.7.0</code>开始支持的<a href="https://git-scm.com/docs/git-read-tree">sparse-checkout</a>的方式解决此问题，但是对于只是想下载一个文件(夹)资源的需求来说略有麻烦。</p><p>最近又有小伙伴询问此类问题的解决方式，在交流中发现<a href="https://git-scm.com/docs/git-svn">git-svn</a>可以用来github克隆指定文件夹，这说明github已经支持svn<a href="https://help.github.com/en/articles/support-for-subversion-clients">1</a>，那么通过svn实现在github下载单文件(夹)也就比较简单了，现将目前的常用解决方案整理如下：</p><hr><h4 id="git-svn"><a href="#git-svn" class="headerlink" title="git-svn"></a><a href="https://git-scm.com/docs/git-svn">git-svn</a></h4><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"># 此方法只可实现对文件夹的下载</span><br><span class="line"># 下载 master 文件夹</span><br><span class="line">$ git svn clone &lt;rul&gt;/trunk/&lt;dir&gt; &lt;localdir&gt;</span><br><span class="line"># 下载 指定brach文件夹</span><br><span class="line">$ git svn clone &lt;rul&gt;/branches/&lt;branchname&gt;/&lt;dir&gt; &lt;localdir&gt;</span><br><span class="line"># 下载 指定tag文件夹</span><br><span class="line">$ git svn clone &lt;rul&gt;/tags/&lt;tagname&gt;/&lt;dir&gt; &lt;localdir&gt;</span><br></pre></td></tr></table></figure><h4 id="svn"><a href="#svn" class="headerlink" title="svn"></a><a href="https://subversion.apache.org/">svn</a></h4><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"># 查看仓库trunk、branch及tag信息</span><br><span class="line">$ svn list &lt;url&gt;</span><br><span class="line"># 下载 master 文件夹</span><br><span class="line">$ svn checkout &lt;rul&gt;/trunk/&lt;dir&gt; &lt;localdir&gt;</span><br><span class="line"># 下载 指定brach文件夹</span><br><span class="line">$ svn checkout &lt;rul&gt;/branches/&lt;branchname&gt;/&lt;dir&gt; &lt;localdir&gt;</span><br><span class="line"># 下载 指定tag文件夹</span><br><span class="line">$ svn checkout &lt;rul&gt;/tags/&lt;tagname&gt;/&lt;dir&gt; &lt;localdir&gt;</span><br><span class="line"># 下载 单个文件</span><br><span class="line">$ svn cat &lt;rul&gt;/trunk/&lt;tagname&gt;/&lt;dir&gt;/&lt;file&gt; &gt; &lt;file&gt;</span><br></pre></td></tr></table></figure><h4 id="other-tools"><a href="#other-tools" class="headerlink" title="other tools"></a>other tools</h4><ul><li><a href="https://minhaskamal.github.io/DownGit/#/home">DownGit</a> 直接键入对应分支文件目录即可下载文件</li></ul><h4 id="参考文档"><a href="#参考文档" class="headerlink" title="参考文档"></a>参考文档</h4><ul><li><a href="http://www.worldhello.net/gotgithub/06-side-projects/svn.html#id6">用SVN操作GitHub</a> by gotgithub</li><li><a href="https://www.worldhello.net/gotgit/08-git-misc/090-sparse-checkout-and-shallow-clone.html">稀疏检出和浅克隆</a> by gotgithub</li><li><a href="http://www.worldhello.net/gotgit/04-git-model/070-git-svn.html">Git和SVN协同模型</a> by gotgithub</li></ul>]]>
    </content>
    <id>https://heminwon.github.io/blog/archives/svn-github.html</id>
    <link href="https://heminwon.github.io/blog/archives/svn-github.html"/>
    <published>2019-04-15T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>很早就过想在github仓库下载指定分支下的某个文件(夹)，特别是对于一些资源收集归档的仓库只是想去下载自己关心的部分，要整个仓库clone的话会有不必要的时间和网络资源的浪费。当时查到可以使用<a href="https://git-scm.com/">git</a>在<]]>
    </summary>
    <title>github与svn实现git仓库单文件(夹)下载</title>
    <updated>2019-04-15T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Hemin Won</name>
    </author>
    <category term="reading" scheme="https://heminwon.github.io/blog/categories/reading/"/>
    <content>
      <![CDATA[<p>工作快三年了，一直以来都是关注自身在技术方向的成长，却忽视了在其他方向的进步，正好这是一本真正从“人”（而非技术也非管理）的角度关注软件开发人员自身发展的书。</p><hr><p>这里说的『优秀的软件开发人员』是那些能够把控自己职业生涯、达成目标、享受生活的人。</p><h3 id="职业"><a href="#职业" class="headerlink" title="职业"></a>职业</h3><blockquote><p>工作是属于公司的，而职业生涯却是属于你自己的。</p><p>​     ——厄尔·南丁格尔</p></blockquote><h4 id="从非同凡响开始：绝不要做他人都在做的事"><a href="#从非同凡响开始：绝不要做他人都在做的事" class="headerlink" title="从非同凡响开始：绝不要做他人都在做的事"></a>从非同凡响开始：绝不要做他人都在做的事</h4><p>拥有商业心态，把自己当作一个企业去思考时，你才能做出良好的商业决策。把雇主当作是你软件开发企业的一个客户，想想你有什么可以卖？你的产品或服务是什么？</p><ul><li>专注于你正在提供怎样的服务，以及如何营销这项服务；</li><li>想方设法提升你的服务；</li><li>思考你可以专注为哪一特定类型的客户或行业提供特定的服务；</li><li>集中精力成为一位专家，专门为某一特定类型的客户提供专业的整体服务（记住，作为一个软件开发人员，你只有真正专注于一类客户，才能找到非常好的工作）。</li></ul><h5 id="采取行动"><a href="#采取行动" class="headerlink" title="采取行动"></a>采取行动</h5><ul><li>想象一下：有一家企业，拥有某个产品或服务。他们将如何推广这一产品或服务从而可以做到卓尔不凡？</li><li>如果只用一句话来描述你能为潜在雇主或客户提供怎样的特定服务，这句话是什么？</li><li>把你的职业当作是一个企业，将会影响你的：<ul><li>工作的方式；</li><li>处理自己的财务的方式；</li><li>寻求新工作或新客户的方式。</li></ul></li></ul><h4 id="思考未来：你的目标是什么"><a href="#思考未来：你的目标是什么" class="headerlink" title="思考未来：你的目标是什么"></a>思考未来：你的目标是什么</h4><p>大目标并不需要那么具体，但是必须足够清晰，能够让你知道自己是在向它前进还是离他越来越远。一旦你想通了自己长远的大目标是什么，下一步就是设定路线，制定通往大目标的小目标。同时你应该定期追踪并更新自己设定的目标，必要时还要调整。</p><h5 id="采取行动-1"><a href="#采取行动-1" class="headerlink" title="采取行动"></a>采取行动</h5><ul><li>坐下来，为你的职业生涯设置至少一个大目标。</li><li>将大目标分解成相应的若干小目标，例如：<ul><li>月度目标；</li><li>周目标；</li><li>每日目标。</li></ul></li><li>把你的大目标写在自己每天的必经之地，每日三省吾身——我在追求什么。</li></ul><h4 id="人际交往能力：远比你想象的重要"><a href="#人际交往能力：远比你想象的重要" class="headerlink" title="人际交往能力：远比你想象的重要"></a>人际交往能力：远比你想象的重要</h4><ul><li><p><strong>每个人都希望感到自己很重要</strong> 请谨记当你和别人打交道的时候，你应该知道的最重要的一个概念就是：以自己为核心，每个人都希望自己很重要。这是人类最深邃、最致命的欲望之一，也是社会和生活中取得伟大成就的主要动机。</p><p>不要轻率地否决同事的想法，以便于可以提出自己的想法，这样很可能会导致他们对你的想法充耳不闻，仅仅是因为你让他们感觉自己是无足轻重的。</p></li><li><p><strong>永远不要批评</strong>  如果你想去激励团队鼓舞士气，那么就用表扬代替批评吧。</p></li><li><p><strong>换位思考</strong> 思考对他人而言什么才最重要，什么是他们需要的。</p></li><li><p><strong>避免争吵</strong> 当你被拖入一场争吵之前，想想办法看看能不能逆转。做个有趣的小测试，试着认输。事实上，不仅仅要认输，更要果断站在对手一边，结果能让你大吃一惊。</p></li></ul><h4 id="破解面试之道"><a href="#破解面试之道" class="headerlink" title="破解面试之道"></a>破解面试之道</h4><ul><li>大多数面试官决定雇佣某个人是基于各种各样的非技术因素；</li><li>通过面试最快捷的方式是让面试官对你怀有好感。达成该目标有很多方法，其中大多数可以在面试之前完成；</li><li>即使你现在不需要努力找工作，也要整理一份清单，列出你想去工作的公司，以及你认识的这些公司的人。</li></ul><h4 id="你是哪类软件开发人员"><a href="#你是哪类软件开发人员" class="headerlink" title="你是哪类软件开发人员"></a>你是哪类软件开发人员</h4><ul><li><strong>专业化很重要</strong> 专业化程度越深，潜在的机会就越少，但获得这些机会的可能性就越大。</li><li><strong>选择你的专业</strong> 可以是公司项目的主要痛点，某一缺乏经验丰富的特定工作，各种会议上和用户组中常出现的话题。</li></ul><h5 id="采取行动-2"><a href="#采取行动-2" class="headerlink" title="采取行动"></a>采取行动</h5><ul><li>列出你能想到的所有软件开发的专业领域。从广义的范畴将它们逐一细化，看看你能细化到多具体。</li><li>你当前的专业领域是什么？如果没有的话，想想你会选择专攻哪个领域。</li><li>去主流的招聘网站上看看自己的专业领域市场行情如何。确定一下，专业化道路是会让自己受益，还是过度限制了自己的选择。</li></ul><h4 id="攀登晋升阶梯"><a href="#攀登晋升阶梯" class="headerlink" title="攀登晋升阶梯"></a>攀登晋升阶梯</h4><h5 id="承担责任"><a href="#承担责任" class="headerlink" title="承担责任"></a>承担责任</h5><ul><li>有一个不受重视的项目，你能去负责它吗？</li><li>你能帮助团队里的新人快速成长吗？</li><li>你能负责文档制作流程，并保证及时更新这些文档吗？</li><li>哪些工作是没有人愿意去做，你愿意承担起来，并将其简化或者自动化的？</li></ul><h5 id="引人注目"><a href="#引人注目" class="headerlink" title="引人注目"></a>引人注目</h5><ul><li><em>每天都记录自己的活动日志</em>——把这个日志以周报的形式发送给你的经理。</li><li><em>提供演讲或培训</em>——选择一个对你的团队有用的话题。</li><li><em>发表意见</em>——只要在会议上就这么做，或者只要你能得到机会就这么做。</li><li><em>保证“曝光度“</em>——定期与老板会面，确保你经常被注意到。</li></ul><h5 id="自学"><a href="#自学" class="headerlink" title="自学"></a>自学</h5><ul><li>你应该不断学习新东西，提升自己的技能。另外，不要只学软件开发。如果你把目标设定为更高级别的岗位甚至是行政岗位，你还需要学习领导力、管理和商科的相关知识。</li><li>不要玩完估计分享自己学到的东西。</li></ul><h5 id="成为问题的解决者"><a href="#成为问题的解决者" class="headerlink" title="成为问题的解决者"></a>成为问题的解决者</h5><ul><li>成为永远能为各种问题找到解决方案的人，成为勇于执行这些解决方案以获得成果的人。</li></ul><h5 id="关于政治"><a href="#关于政治" class="headerlink" title="关于政治"></a>关于政治</h5><ul><li>脚踏实地成为一个真正有价值的员工要比弄虚作假好得多</li><li>至少应该知道会发生什么，哪种人需要避开，哪种人永远不要有交集</li></ul><h4 id="成为专业人士"><a href="#成为专业人士" class="headerlink" title="成为专业人士"></a>成为专业人士</h4><p>成为专业人士是一种心态。如果我们总是与恐惧、自毁、拖延和自我怀疑作斗争，那么问题就是：我们正在像外行那样思考问题。外行毫不起眼，外行废话连篇，外行屈从于逆境。专业人士可不这么想。不管怎样，他引人注目，他恪尽职守，他始终如一。</p><h5 id="专业人士的品质"><a href="#专业人士的品质" class="headerlink" title="专业人士的品质"></a>专业人士的品质</h5><ul><li>遵守自己的原则；</li><li>专注于正确完成工作；</li><li>不惧怕承认自己错了；</li><li>持续稳定；</li><li>用于承担责任；</li><li>养成良好习惯；</li><li>追求品质，完善自我。</li></ul><h4 id="书单"><a href="#书单" class="headerlink" title="书单"></a>书单</h4><ul><li>Dale Carnegie的《人性的弱点》</li><li>Charles Duhigg的《习惯的力量》</li></ul>]]>
    </content>
    <id>https://heminwon.github.io/blog/archives/clip_the-software-developer's-life-manaual.html</id>
    <link href="https://heminwon.github.io/blog/archives/clip_the-software-developer's-life-manaual.html"/>
    <published>2019-02-02T16:00:00.000Z</published>
    <summary>
      <![CDATA[<p>工作快三年了，一直以来都是关注自身在技术方向的成长，却忽视了在其他方向的进步，正好这是一本真正从“人”（而非技术也非管理）的角度关注软件开发人员自身发展的书。</p>
<hr>
<p>这里说的『优秀的软件开发人员』是那些能够把控自己职业生涯、达成目标、享受生活的人。</p>]]>
    </summary>
    <title>《软技能-代码之外的生存指南》读书笔记</title>
    <updated>2019-02-02T16:00:00.000Z</updated>
  </entry>
</feed>
