<?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" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[葵中剑]]></title><description><![CDATA[Just Sword Wang's Blog]]></description><link>https://swordair.com/</link><image><url>http://swordair.com/favicon.png</url><title>葵中剑</title><link>https://swordair.com/</link></image><generator>Ghost 3.1</generator><lastBuildDate>Wed, 25 Mar 2020 18:04:02 GMT</lastBuildDate><atom:link href="https://swordair.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[现役电磨简评]]></title><description><![CDATA[<p>手工类小电磨的英文是rotary tool，当然基本就是指琢美(Dremel)。作为手工爱好者平时也常常使用，尽管现在小件常常手工打磨为主，但过往10年也用了些各种各样的电磨，算是有些经验可以随便写写，写个简评方便需要选择的人。</p><p>目前在身边的主要是把，博世GRO 12v，琢美7000，琢美Model 2050。之前的话还有一把琢美3000，不过长期借给别人了。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/all.jpg" class="kg-image"></figure><h3 id="-">国产贴牌</h3><p>一开始还买不起琢美之类的，所以就先入了国产电磨，淘宝10年前随便买的。这个神帆的牌子现在去搜索居然还有的卖，有点小感慨。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/shenfan.jpg" class="kg-image"></figure><p>查了下淘宝记录，也要90多了 ，现在好像还是90多的样子...手感已经忘记了，记得同心度凑合的水准，普通用用也没啥问题，动力有点低，震动略大。虽然没有扔掉，但是基本不会再使用。</p><h3 id="-dremel-3000">琢美 Dremel 3000</h3><p>自己真正意义上的第一款电磨，应该就是琢美3000了。查了下购买记录5年前折扣价250入的1/26套装，现在点进去要开要369。同心度非常不错，且相当稳定。那个时候更高阶款琢美4000还没有进入国内市场，更不要说当前还有更高阶的琢美4300。当时琢美3000在大路货中算是最好的电磨了。</p><p>虽然后面我并没用过4000或者4300，但经常逛贴吧也多少知道，琢美每年的品控都有下降趋势，虽同为墨西哥生产，</p>]]></description><link>https://swordair.com/my-rotary-tool-review/</link><guid isPermaLink="false">5e071e702ee3a17cbf21a97d</guid><category><![CDATA[Review]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Sat, 28 Dec 2019 16:45:13 GMT</pubDate><media:content url="http://swordair.com/content/images/2019/12/rotary-tool-cover.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://swordair.com/content/images/2019/12/rotary-tool-cover.jpg" alt="现役电磨简评"><p>手工类小电磨的英文是rotary tool，当然基本就是指琢美(Dremel)。作为手工爱好者平时也常常使用，尽管现在小件常常手工打磨为主，但过往10年也用了些各种各样的电磨，算是有些经验可以随便写写，写个简评方便需要选择的人。</p><p>目前在身边的主要是把，博世GRO 12v，琢美7000，琢美Model 2050。之前的话还有一把琢美3000，不过长期借给别人了。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/all.jpg" class="kg-image" alt="现役电磨简评"></figure><h3 id="-">国产贴牌</h3><p>一开始还买不起琢美之类的，所以就先入了国产电磨，淘宝10年前随便买的。这个神帆的牌子现在去搜索居然还有的卖，有点小感慨。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/shenfan.jpg" class="kg-image" alt="现役电磨简评"></figure><p>查了下淘宝记录，也要90多了 ，现在好像还是90多的样子...手感已经忘记了，记得同心度凑合的水准，普通用用也没啥问题，动力有点低，震动略大。虽然没有扔掉，但是基本不会再使用。</p><h3 id="-dremel-3000">琢美 Dremel 3000</h3><p>自己真正意义上的第一款电磨，应该就是琢美3000了。查了下购买记录5年前折扣价250入的1/26套装，现在点进去要开要369。同心度非常不错，且相当稳定。那个时候更高阶款琢美4000还没有进入国内市场，更不要说当前还有更高阶的琢美4300。当时琢美3000在大路货中算是最好的电磨了。</p><p>虽然后面我并没用过4000或者4300，但经常逛贴吧也多少知道，琢美每年的品控都有下降趋势，虽同为墨西哥生产，但后期4000系同心度和配件质量感觉是要抽奖一样 :)</p><p>那个时候还在沉迷给琢美3000上3爪夹头，即使是国产版，按上后也很稳定，和后来的德产版感觉不到明显区别。以前是希望可以快速的更换加具，但现在看来，这个命题和螺丝刀一样——可换头的一把螺丝刀，真正的效率远不及几把不同的专用螺丝。</p><h3 id="-dremel-7000">琢美 Dremel 7000</h3><p>为了能更快速的更换磨具，不如多买几把电磨，于是当我看到琢美7000的时候，就忍不住入手了。</p><p>琢美7000在国内无售，所以这把是我从美亚海淘回来的。价格不记得了好像100多的样子。琢美7000是很少见的用5号电池的小型电磨，4节5号电池构成了约6v的动力，但由于普通电池容量低，动力也完全比不上锂电池动力版，所以琢美7000力量很小，基本与自己用马达DIY的效果差不多。但胜在方便，我通常常年给它挂一个羊毛抛光轮，随拿随用。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/dremel-7000.jpg" class="kg-image" alt="现役电磨简评"></figure><p>现今，琢美的主流型号在国内都有销售，但依旧没有这个琢美7000。有趣的是，这个7000可以配一个宠物磨甲的套件，甚至还有一个独立的宠物版本，和这动力简直就是绝配，感觉这家伙一开始的定位就是磨甲吧...</p><h3 id="-gro-12v-35">博世GRO 12v-35</h3><p>虽然琢美本身也有12v的无线版(Dremel 8220)，但电池系统却是独立的。所以思虑再三，还是买了博世的GRO12v。由于琢美已经被博世收购，所以GRO12v的夹具与琢美都是相通用的，而电池又与所有博世的12v工具通用。没办法，自己博世12v工具太多了。</p><p>GRO12v也是国内无售，几年前从德亚海淘回来的，所以这货就相当昂贵了，算上运费要近900了，不过直接在国内购买琢美无线12v版也不便宜多少。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/bosch-gro.jpg" class="kg-image" alt="现役电磨简评"></figure><p>有趣的是，虽然这家伙很早就生产了，且还是中国制造，但却从来不在中国市场销售。博世12v家族，包括后来生产的12v曲线锯，12v修边机，12v角磨机，国内都有正常的渠道销售，唯独没有GRO12v-35，不免让人联想到，如果销售的话势必要和同门琢美一番厮杀。</p><p>动力很足，5000-3500转的参数，同心度也很出色，握感略重和粗。能通用12v博世锂电是最大的优势，出门用的主力机。</p><h3 id="-model-2050">琢美 Model 2050</h3><p>最近一直有做小件，所以又加了一支精细操作的雕刻刀。这款Model2050算是比较新的产品，我买来主要做些雕刻和修边的工作，淘宝350，感觉还是有点贵。</p><p>比较细，所以握感出色。可以无极调速最大22000转，转速貌似还行，但太小支了确实没啥力量。同心度还可以，但没达到期望值。噪音相当低，全速也不会吵到邻居，总体感觉中规中矩吧。优势就是自带一个原厂3爪夹头，但和之前说的一样，感受不到比国产版更好，而且因为动力有点低似乎驱动不了3爪夹头，所以第一天开始就被我换回来了固定夹头，发现同心度和稳定性都明显更好了。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/dremel-2050.jpg" class="kg-image" alt="现役电磨简评"></figure><p>轻巧，但并不方便，毕竟是有线的，只能在家用用，无法像GRO12v那样自由移动。</p><h3 id="--1">总结</h3><p>这些就是目前在用的电磨了，都是市面上比较主流的型号。双11的时候本来打算入琢美4300，但发现京东价格并无优势，即便已经拿到大额券的情况下也只能到760，勉强比淘宝低一些，仔细一想自己也已经有了各种各样的工具，小件也用不上4300 170W这种出力，理智保住了双手:)</p><p>工具控，也是相当的烧钱呢！</p>]]></content:encoded></item><item><title><![CDATA[2019 Life Goes On]]></title><description><![CDATA[<p>年底了总结一波，如标题，生活在继续，一如我的文字和所言所思，所行。</p><!--kg-card-begin: markdown--><h2 id>木工</h2>
<!--kg-card-end: markdown--><p>2019年总共制作了12件木工小件，除了混进了一件多年前的木鸟，其他都是在最后两个月里完成的。其实12月份的时候才下决心要每月完成一件的，结果热情比较高涨，抑或是内心比较烦躁须要静静地做点东西，总之在最后一个月里把这一年份的件数给补完了。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/wood-2019.png" class="kg-image"></figure><p>对我来说，没有什么比坐下来专心做木工更能让心绪平静下来。手中虽可能只是在重复打磨的单调动作，但那种专注的本质却是远离尘嚣的匠人的孤独。</p><p>今年的收官之作是小叶紫檀的树叶，这一片3*3*1的木材要30RMB了，也算是目前小件最贵记录了。第一次做这么昂贵的木料，感觉小叶紫檀不愧是集各种优点于一身，稳定性和油性，抛光效果，都非常出色。要不是因为太贵，真的想屯个几公斤回来，不过对我们这类兴趣爱好者来说，是什么木其实也并没有多大区别，只是好的木材的各种性能也更好却是一定的。物以稀为贵，木则更甚。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/wood-leaf.jpg" class="kg-image"></figure><p>明年这个时候，希望也能按时拿出12件小作，做为生活里时光的镌刻，让时间流逝的不至于那么的不容易被感知。</p><!--kg-card-begin: markdown--><h2 id>花草</h2>
<!--kg-card-end: markdown--><p>真正开始大量养多肉大概是2年多前的春天，从当时几十个品种中存货下来的，一定是生命力顽强的家伙。</p><p>长成最大的是两颗不知名的品种，从5cm长到20 - 30cm，也不过就是2年的时间。其他还剩下姬胧月，鲁氏石莲，蓝石莲，</p>]]></description><link>https://swordair.com/2019-life-goes-on/</link><guid isPermaLink="false">5df6ea4f2ee3a17cbf21a850</guid><category><![CDATA[Blog]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Mon, 16 Dec 2019 13:52:06 GMT</pubDate><content:encoded><![CDATA[<p>年底了总结一波，如标题，生活在继续，一如我的文字和所言所思，所行。</p><!--kg-card-begin: markdown--><h2 id>木工</h2>
<!--kg-card-end: markdown--><p>2019年总共制作了12件木工小件，除了混进了一件多年前的木鸟，其他都是在最后两个月里完成的。其实12月份的时候才下决心要每月完成一件的，结果热情比较高涨，抑或是内心比较烦躁须要静静地做点东西，总之在最后一个月里把这一年份的件数给补完了。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/wood-2019.png" class="kg-image"></figure><p>对我来说，没有什么比坐下来专心做木工更能让心绪平静下来。手中虽可能只是在重复打磨的单调动作，但那种专注的本质却是远离尘嚣的匠人的孤独。</p><p>今年的收官之作是小叶紫檀的树叶，这一片3*3*1的木材要30RMB了，也算是目前小件最贵记录了。第一次做这么昂贵的木料，感觉小叶紫檀不愧是集各种优点于一身，稳定性和油性，抛光效果，都非常出色。要不是因为太贵，真的想屯个几公斤回来，不过对我们这类兴趣爱好者来说，是什么木其实也并没有多大区别，只是好的木材的各种性能也更好却是一定的。物以稀为贵，木则更甚。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/wood-leaf.jpg" class="kg-image"></figure><p>明年这个时候，希望也能按时拿出12件小作，做为生活里时光的镌刻，让时间流逝的不至于那么的不容易被感知。</p><!--kg-card-begin: markdown--><h2 id>花草</h2>
<!--kg-card-end: markdown--><p>真正开始大量养多肉大概是2年多前的春天，从当时几十个品种中存货下来的，一定是生命力顽强的家伙。</p><p>长成最大的是两颗不知名的品种，从5cm长到20 - 30cm，也不过就是2年的时间。其他还剩下姬胧月，鲁氏石莲，蓝石莲，仙人球......确实都很坚韧不拔。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/flower.jpg" class="kg-image"></figure><p>每当我在太阳下帮它们清除枯叶都会感觉很愉悦，希望今年也能好好过冬，挨过酷夏，到明年这个时候能看到它们长的更大更美。</p><!--kg-card-begin: markdown--><h2 id>游戏</h2>
<!--kg-card-end: markdown--><p>除了感动怀旧之作<a href="http://swordair.com/recall-memories-off/">秋之回忆8</a>，今年还破天荒在steam上买了几十个游戏，当然除了dota2外并没有多少长期游玩的。其中只有两个游戏是真正花了时间的，分别是《空洞骑士》和《蔚蓝》。</p><p>空洞骑士我玩了正好50个小时通关真结局，算是比较专注的完了。作品画风着实吸引人，打击感和剧情，还有关卡设计，都非常不错，当然音乐也是一等一好听，刚开把就停不下来——可能和难度适中也有些关系...</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/hollow-knight.jpg" class="kg-image"></figure><p>相比空洞骑士，蔚蓝难太多了，简直就是我等手残党的一生之敌。所以很多时候都是断断续续的玩，但也好歹把A面难度打完了，甚至没有去打山的核心部分，早早放弃B面C面，即便如此，也已经是花掉了3000条命......</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/celeste.jpg" class="kg-image"></figure><p>额外完了一下老任的健身圈大冒险，感觉这种运动类还是挺适合我这种中年大叔的，可惜要近700RMB，有点打扰了。何况锻炼考得还是自身意志，自己这关过不了怕是买了也要吃灰。但老任还是那个老任，游戏做的是真的出色，吹爆就完事了。</p><!--kg-card-begin: markdown--><h2 id>遗憾</h2>
<!--kg-card-end: markdown--><p>没有怎么画画，亏自己常说30岁后的理想是成为一名漫画家...iPad Pro果然变成了买前生产力，买后爱奇艺...惭愧。但好歹还是用iPad Pro看了很多漫画，印象最深的无疑还是村田无敌画工的一拳超人。国漫也有看了些许，精灵之蛋是唯一凭借无敌设定和神展开留下强烈印象的作品。</p>]]></content:encoded></item><item><title><![CDATA[更新Ghost到3.x.x]]></title><description><![CDATA[<p>上次升级还是去年9月，时隔一年多了。虽然也已经没有什么真实吸引我的新功能，但每年例行的升级还是会做一下。新版本似乎已经支持了自定义路由，恰恰是我从wordpress转到ghost时最需要的功能，不过后来还是通过nginx的映射解决了，感觉现在也没啥动力再去修改配置。毫无疑问ghost的管理能力一直在加强，很多散落的静态页面也能更有效的管控起来。</p><p>有了ghost-cli，更新还是非常顺利和便捷，有命令行辅助，除了遇上一些国内下载的问题，还有就是几乎忘记了运行ghost的用户名密码外，过程平滑。当然，从2.x.x更新到3.1.1，大版本升级导致主题还是有些兼容工作要做，不过照着提示信息也能在短时间内修正好。</p><!--kg-card-begin: markdown--><pre><code>Errors
    File: error.hbs
    - The {{@blog}} helper should be replaced with {{@site}}
    - Replace {{error.code}} with {{error.statusCode}}

    File: partials/footer.hbs
    - The</code></pre>]]></description><link>https://swordair.com/update-ghost-to-3-x-x/</link><guid isPermaLink="false">5df3a0732ee3a17cbf21a7e6</guid><category><![CDATA[Ghost]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Fri, 13 Dec 2019 14:51:29 GMT</pubDate><content:encoded><![CDATA[<p>上次升级还是去年9月，时隔一年多了。虽然也已经没有什么真实吸引我的新功能，但每年例行的升级还是会做一下。新版本似乎已经支持了自定义路由，恰恰是我从wordpress转到ghost时最需要的功能，不过后来还是通过nginx的映射解决了，感觉现在也没啥动力再去修改配置。毫无疑问ghost的管理能力一直在加强，很多散落的静态页面也能更有效的管控起来。</p><p>有了ghost-cli，更新还是非常顺利和便捷，有命令行辅助，除了遇上一些国内下载的问题，还有就是几乎忘记了运行ghost的用户名密码外，过程平滑。当然，从2.x.x更新到3.1.1，大版本升级导致主题还是有些兼容工作要做，不过照着提示信息也能在短时间内修正好。</p><!--kg-card-begin: markdown--><pre><code>Errors
    File: error.hbs
    - The {{@blog}} helper should be replaced with {{@site}}
    - Replace {{error.code}} with {{error.statusCode}}

    File: partials/footer.hbs
    - The {{@blog}} helper should be replaced with {{@site}}

    File: partials/header.hbs
    - The {{@blog}} helper should be replaced with {{@site}}

    File: styles
    - The .kg-bookmark-card CSS class is required to appear styled in your theme
    - The .kg-bookmark-container CSS class is required to appear styled in your theme
    - The .kg-bookmark-content CSS class is required to appear styled in your theme
    - The .kg-bookmark-title CSS class is required to appear styled in your theme
    - The .kg-bookmark-description CSS class is required to appear styled in your theme
    - The .kg-bookmark-metadata CSS class is required to appear styled in your theme
    - The .kg-bookmark-icon CSS class is required to appear styled in your theme
    - The .kg-bookmark-author CSS class is required to appear styled in your theme
    - The .kg-bookmark-publisher CSS class is required to appear styled in your theme
    - The .kg-bookmark-thumbnail CSS class is required to appear styled in your theme


Warnings
    File: error.hbs
    - Replace {{#each}} with {{#foreach}}

    File: partials/footer.hbs
    - Assets such as CSS &amp; JS must use the {{asset}} helper
    - Assets such as CSS &amp; JS must use the {{asset}} helper
</code></pre>
<!--kg-card-end: markdown--><p>主题一些helper有更名，感觉比原来要更合理，从@blog变更为@site，也看的出，ghost的格局发生了质的变化。通过gscan.ghost.org能快速定位到主题内的问题，改完验证上传启用一气呵成。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/grayliner-pass-gscan.png" class="kg-image"></figure><p>更新后到后台看了下，设计风格并无二致，功能更加合理，特别时管理tag的能力强好多，信息展示和操作，还有自定义页面的能力，都好用不少。不过比起当初编写页面的改进，这些辅助功能的进化虽然也很惊艳，但毕竟没有Post页常用。很多新特性还在体验中，总之就是，好用！</p><p>PS：习惯性的想用pm2重启ghost，发现列表里空空如也，想了老半天才想起来要用ghost-cli操作...</p>]]></content:encoded></item><item><title><![CDATA[木道之始]]></title><description><![CDATA[<p>木道，宗次郎有一首同名的曲子，悠扬的陶笛连绵起伏意境悠长，而木与陶笛，皆为所爱。</p><p>自抛开一切繁杂，重新拿起锯挫，以一鱼为始，就犹如陶笛音符般延远。于是，找回了多年遗忘的专注，以及自诩为匠人的孤独。当笨拙地完成第二件月亮的时候，就暗自定下了一个小小的目标——每个月都要完成一件小件木器。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/wood-moon.jpg" class="kg-image"></figure><p>之后很快从柜子里挖出了当年的部分存料，大部分3*3*1的木方，紫光檀，绿檀，黄杨，崖柏，紫苏木，各种酸枝和花梨木，甚至是小叶紫檀，几乎啥好木头都有。最贵的是一块6*4*1的粉红象牙木，当时顺手买的，现在这个尺寸的怕是绝迹了。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/woods.jpg" class="kg-image"></figure><p>我的小件木工是从小鸟，小鱼和月亮开始的，这3件都做得非常累，因为没啥工具，甚至连一把锉刀都没有用，锯出差不多的形状就是砂纸伺候，但就算是120目，打磨硬木的棱角也是相当费力。所以还是不免买了些锉刀，视情况可能还会追加一些电动工具吧，至少让切割效率提升一下。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/fish-moon-and-bird.jpg" class="kg-image"></figure><p>可能是初期热情比较高涨吧，我很快就完成了2019年的目标做完了每月的小件。用一个小组合的方式，带来云朵和闪电。被同事吐槽成“云闪付”也真是够了。</p>]]></description><link>https://swordair.com/begining-of-wood-sense/</link><guid isPermaLink="false">5de91fa4813ee30244850e1f</guid><category><![CDATA[Wood]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Thu, 05 Dec 2019 16:04:50 GMT</pubDate><media:content url="http://swordair.com/content/images/2019/12/fish-moon-and-bird-cover.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://swordair.com/content/images/2019/12/fish-moon-and-bird-cover.jpg" alt="木道之始"><p>木道，宗次郎有一首同名的曲子，悠扬的陶笛连绵起伏意境悠长，而木与陶笛，皆为所爱。</p><p>自抛开一切繁杂，重新拿起锯挫，以一鱼为始，就犹如陶笛音符般延远。于是，找回了多年遗忘的专注，以及自诩为匠人的孤独。当笨拙地完成第二件月亮的时候，就暗自定下了一个小小的目标——每个月都要完成一件小件木器。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/wood-moon.jpg" class="kg-image" alt="木道之始"></figure><p>之后很快从柜子里挖出了当年的部分存料，大部分3*3*1的木方，紫光檀，绿檀，黄杨，崖柏，紫苏木，各种酸枝和花梨木，甚至是小叶紫檀，几乎啥好木头都有。最贵的是一块6*4*1的粉红象牙木，当时顺手买的，现在这个尺寸的怕是绝迹了。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/woods.jpg" class="kg-image" alt="木道之始"></figure><p>我的小件木工是从小鸟，小鱼和月亮开始的，这3件都做得非常累，因为没啥工具，甚至连一把锉刀都没有用，锯出差不多的形状就是砂纸伺候，但就算是120目，打磨硬木的棱角也是相当费力。所以还是不免买了些锉刀，视情况可能还会追加一些电动工具吧，至少让切割效率提升一下。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/fish-moon-and-bird.jpg" class="kg-image" alt="木道之始"></figure><p>可能是初期热情比较高涨吧，我很快就完成了2019年的目标做完了每月的小件。用一个小组合的方式，带来云朵和闪电。被同事吐槽成“云闪付”也真是够了。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/cloud-light.jpg" class="kg-image" alt="木道之始"></figure><p>每月一小件木器，多年后我也能渐渐把自己的木盒用自己的作品装满吧——为什么突然要这么做呢？不知道呢，大概还是心血来潮吧，到了一定的年纪就必然的多愁善感，或者只是单纯想留下一些时间的印记，有点啰嗦了，还不如就套用鸣人的一句话：</p><p>这，就是我的木道。</p>]]></content:encoded></item><item><title><![CDATA[HTTP2 分享记录]]></title><description><![CDATA[<p>这个是一个自己工作中小组内的一个简单分享，关于HTTP2各种内容。以HTTP2作为标题，结合了一些工作里的业务场景，内容主要还是要靠讲的，并且在语速比较快的情况下也说了约40分钟，所以只能偷懒上些ppt的内容了。当然作为国际部门，现在内部要求都要英文交流，所以ppt也是英文的...</p><!--kg-card-begin: markdown--><h2 id="httphistory">HTTP History</h2>
<ul>
<li>Concept Hypertext (1963)</li>
<li>HTTP 0.9 (before 1995)
<ul>
<li>Only get, no header, 1 page</li>
</ul>
</li>
<li>HTTP 1.0 (1996)
<ul>
<li>Header, response code, redirect, post. Etc, 60 pages</li>
</ul>
</li>
<li>HTTP 1.1 (1999)
<ul>
<li>Options, upgrade, cache header extends</li>
</ul>
</li>
<li>SPDY (2009 google)</li></ul>]]></description><link>https://swordair.com/http2-share-record/</link><guid isPermaLink="false">5d9b4b06813ee30244850e05</guid><category><![CDATA[HTTP/2]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Sun, 01 Dec 2019 10:23:45 GMT</pubDate><content:encoded><![CDATA[<p>这个是一个自己工作中小组内的一个简单分享，关于HTTP2各种内容。以HTTP2作为标题，结合了一些工作里的业务场景，内容主要还是要靠讲的，并且在语速比较快的情况下也说了约40分钟，所以只能偷懒上些ppt的内容了。当然作为国际部门，现在内部要求都要英文交流，所以ppt也是英文的...</p><!--kg-card-begin: markdown--><h2 id="httphistory">HTTP History</h2>
<ul>
<li>Concept Hypertext (1963)</li>
<li>HTTP 0.9 (before 1995)
<ul>
<li>Only get, no header, 1 page</li>
</ul>
</li>
<li>HTTP 1.0 (1996)
<ul>
<li>Header, response code, redirect, post. Etc, 60 pages</li>
</ul>
</li>
<li>HTTP 1.1 (1999)
<ul>
<li>Options, upgrade, cache header extends</li>
</ul>
</li>
<li>SPDY (2009 google)</li>
<li>HTTP2 (2012, 2015/5/14 published)</li>
</ul>
<h2 id="http2related">HTTP2 related</h2>
<ul>
<li>Server (google)</li>
<li>Proxy (akamai)</li>
<li>Client (google firefox)</li>
</ul>
<h2 id="http2features">HTTP2 Features</h2>
<ul>
<li><strong>One Connection</strong>
<ul>
<li>use one connection for parallelism （ares oversea）</li>
</ul>
</li>
<li>Header Compression
<ul>
<li>uses header compression to reduce overhead</li>
</ul>
</li>
<li>Server Push
<ul>
<li>allows servers to “push” responses proactively into client caches</li>
</ul>
</li>
</ul>
<h2 id="http2requirement">HTTP2 Requirement</h2>
<ul>
<li>Stage 1 (NPN)
<ul>
<li>Web server supported H2 (nginx 1.9.5+)</li>
<li>TLS certificate (Let' s Encrypt)</li>
<li>Chrome 41, Firefox 36, Edge 12, Safari 9, Opera 28</li>
</ul>
</li>
<li>Stage 2 (ALPN)
<ul>
<li>OpenSSL 1.0.2g</li>
<li>Chrome 51</li>
</ul>
</li>
</ul>
<h2 id="sitehttp11vshttp2">Site: HTTP1.1 vs HTTP2</h2>
<p>sample demo parse</p>
<h2 id="questionsaboutconnection">Questions about connection</h2>
<ul>
<li>How many connections browser can open, and why?</li>
<li>How many connections system can maintain?</li>
<li>What’s the ideal delay between Shanghai and New York?</li>
</ul>
<h2 id="windowsconnections">Windows connections</h2>
<p>ref: <a href="http://smallvoid.com/article/winnt-tcpip-max-limit.html">http://smallvoid.com/article/winnt-tcpip-max-limit.html</a></p>
<ul>
<li>TCP connection allow: TcpNumConnections = 16M</li>
<li>Max dynamic ports: MaxUserPort = 5000 （1024 to 5000）</li>
<li>TCP control block: MaxFreeTcbs = 1000 (srv = 2000)
<ul>
<li>0.5k for pagepool and 0.5k for non-pagepool</li>
</ul>
</li>
<li>TCB HashTable: MaxHashTableSize = 512 (Default = 512, Range = 64-65536)
<ul>
<li>Pagepool</li>
</ul>
</li>
<li>allocated a 1000 TCBs == 1000 connection, close connection occupy port 4min: TcpTimedWaitDelay = 240 sec</li>
<li>Without closing the connection properly: KeepAliveTime = 2 h</li>
</ul>
<p><strong>result: &lt; 1000</strong></p>
<h2 id="http1problems">Http1 problems</h2>
<ul>
<li>Head of line blocking</li>
<li>Inefficient of TCP usage rate
<ul>
<li>Slow start</li>
<li>Congestion window</li>
</ul>
</li>
<li>Etc...</li>
</ul>
<h2 id="http11optimization">Http1.1 Optimization</h2>
<ul>
<li>Sprite Image</li>
<li>Domain sharding</li>
<li>Disable cookie</li>
<li>File concat</li>
</ul>
<p>Then use http2</p>
<h2 id="http11optimizationinh2">Http1.1 Optimization in H2</h2>
<ul>
<li>Sprite Image
<ul>
<li>It depends, heigh cost, bg image load when visible</li>
</ul>
</li>
<li>Domain sharding
<ul>
<li><strong>wrong</strong></li>
</ul>
</li>
<li>Disable cookie
<ul>
<li><strong>wrong</strong></li>
</ul>
</li>
<li>File concat
<ul>
<li>It depends, unnecessary almost</li>
</ul>
</li>
</ul>
<h2 id="clientsupportdetect">Client Support detect</h2>
<ul>
<li>Upgrade header</li>
<li>TLS
<ul>
<li>NPN (Next Protocol Negotiation)</li>
<li>ALPN (Application Layer Protocol Negotiation)</li>
</ul>
</li>
<li>HTTP Alternative services</li>
</ul>
<h2 id="upgradeheader">Upgrade header</h2>
<pre><code>GET ws://example.com/ HTTP/1.1
Connection: Upgrade
Upgrade: websocket
Origin: http://swordair.com
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: xxx
</code></pre>
<pre><code>HTTP/1.1 101 Switching Protocols 
Connection: Upgrade 
Upgrade: websocket 
Sec-WebSocket-Accept: xxxxx
</code></pre>
<pre><code>GET / HTTP/1.1 Host: example.com
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: &lt;base64url encoding of HTTP/2 SETTINGS payload&gt;
</code></pre>
<pre><code>Unsupport:
HTTP/1.1 200 OK
Content-Length: 243
Content-Type: text/html
</code></pre>
<pre><code>Unsupport:
HTTP/1.1 200 OK
Content-Length: 243
Content-Type: text/html
</code></pre>
<p><strong>but, just exist in RFC actually</strong></p>
<h2 id="alpn">ALPN</h2>
<p>TLS connection ‘Client Hello’</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/alpn.png" class="kg-image"></figure><!--kg-card-begin: markdown--><h2 id="clientdoubleconfirm">Client double confirm</h2>
<p>Connection preface</p>
<pre><code>PRI * HTTP/ 2. 0\ r\ n\ r\ nSM\ r\ n\ r\ n
</code></pre>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/connect-preface.png" class="kg-image"></figure><!--kg-card-begin: markdown--><ul>
<li>SETTINGS client</li>
<li>SETTINGS ack server</li>
</ul>
<h2 id="http2basics">HTTP2 basics</h2>
<ul>
<li>TCP socket
<ul>
<li>Steam
<ul>
<li>Frame</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="http2steam">HTTP2 Steam</h2>
<ul>
<li>Steam is H2  independent, two-way frame change</li>
<li>A new request will rise a new steam</li>
<li>Steam id</li>
</ul>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/steam.png" class="kg-image"></figure><!--kg-card-begin: markdown--><h2 id="h2frame">H2 Frame</h2>
<ul>
<li>HTTP based on ‘Text splite’</li>
<li>HTTP2 based on Frame (key of one connection for parallelism)</li>
</ul>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/frame.png" class="kg-image"></figure><!--kg-card-begin: markdown--><h2 id="frametype">Frame Type</h2>
<table>
<thead>
<tr>
<th style="text-align:left">NAME</th>
<th style="text-align:left">ID</th>
<th style="text-align:left">DESC</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">DATA</td>
<td style="text-align:left">0x0</td>
<td style="text-align:left">Steam data</td>
</tr>
<tr>
<td style="text-align:left">HEADERS</td>
<td style="text-align:left">0x1</td>
<td style="text-align:left">http header</td>
</tr>
<tr>
<td style="text-align:left">PRIORTY</td>
<td style="text-align:left">0x2</td>
<td style="text-align:left">Priority of steam</td>
</tr>
<tr>
<td style="text-align:left">RST_STEAM</td>
<td style="text-align:left">0x3</td>
<td style="text-align:left">Stop steam (error)</td>
</tr>
<tr>
<td style="text-align:left">SETTINGS</td>
<td style="text-align:left">0x4</td>
<td style="text-align:left">Set connection param</td>
</tr>
<tr>
<td style="text-align:left">PUSH_PROMISE</td>
<td style="text-align:left">0x5</td>
<td style="text-align:left">Server push tips</td>
</tr>
<tr>
<td style="text-align:left">PING</td>
<td style="text-align:left">0x6</td>
<td style="text-align:left">Test connection and rtt</td>
</tr>
<tr>
<td style="text-align:left">GOAWAY</td>
<td style="text-align:left">0x7</td>
<td style="text-align:left">Steam end</td>
</tr>
<tr>
<td style="text-align:left">WINDOW_UPDATE</td>
<td style="text-align:left">0x8</td>
<td style="text-align:left">Flow control</td>
</tr>
<tr>
<td style="text-align:left">CONTINUATION</td>
<td style="text-align:left">0x9</td>
<td style="text-align:left">Extends HEADERS frame</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h2 id="headercompression">Header Compression</h2>
<ul>
<li>deflate &amp; CRIME (Compression Ratio Info-leak Made Easy)</li>
<li>Gzip is unsafe</li>
<li>HPACK
<ul>
<li>Header infos are similar</li>
<li>Index specific header and value</li>
</ul>
</li>
</ul>
<h2 id="hpacksample">HPACK sample</h2>
<pre><code>Header1: All work and no play
Header2: makes Steven
Header3: a dull boy
</code></pre>
<p>Client generate this index and send to server, server will also create one</p>
<table>
<thead>
<tr>
<th style="text-align:left">Index</th>
<th style="text-align:left">Header name</th>
<th style="text-align:left">Value</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">55</td>
<td style="text-align:left">Header1</td>
<td style="text-align:left">All work and no play</td>
</tr>
<tr>
<td style="text-align:left">56</td>
<td style="text-align:left">Header2</td>
<td style="text-align:left">makes Steven</td>
</tr>
<tr>
<td style="text-align:left">57</td>
<td style="text-align:left">Header3</td>
<td style="text-align:left">a dull boy</td>
</tr>
</tbody>
</table>
<p>Next item send: 55 56 57</p>
<p>Every connection maintain it’s index status.</p>
<h2 id="serverpush">Server Push</h2>
<ul>
<li>Reasonable push decrease 20% - 50% render time</li>
<li>Push will waste bandwidth (resource cached already)</li>
<li>Best Timing:
<ul>
<li>Server busy</li>
<li>Client idle</li>
</ul>
</li>
<li>Frame Type “PUSH_RPOMISE”</li>
<li>Client can reject use “RST_STEAM”</li>
</ul>
<h2 id="fttbinh2">FTTB in H2</h2>
<p>H2 Extra work:</p>
<ul>
<li>Window size adjust</li>
<li>Dependency tree</li>
<li>Index header</li>
<li>Header compression</li>
<li>Priority change</li>
<li>Server pre push</li>
</ul>
<p>Performance:<br>
H2 &lt;= H1</p>
<p>Experience<br>
H2 &gt; H1</p>
<h2 id="http2debug">HTTP2 debug</h2>
<ul>
<li>chrome://net-internals/ （early version）</li>
<li>Chrome debug tool -&gt; network tab</li>
<li>Session key logging (env SSLKEYLOGFILE=~/key.log) <strong>wireshark</strong></li>
<li>Firefox command mode record HTTP session log</li>
</ul>
<h2 id="tcpandudp">TCP and UDP</h2>
<ul>
<li>TCP is not fast portocal but it is reliable</li>
<li>But we need more fast net</li>
</ul>
<p>core problen is:</p>
<ul>
<li>TCP/IP is integrated in system core</li>
<li>TCP is in core space</li>
<li>UDP is in user space</li>
</ul>
<h2 id="quic">QUIC</h2>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/12/quic.png" class="kg-image"></figure><!--kg-card-begin: markdown--><ul>
<li>Quick UDP Internet Connection</li>
<li>Google</li>
<li>Based on UDP which in user space</li>
<li>Provide equivalent HTTP2 new features</li>
</ul>
<h2 id="http3">HTTP3 ?</h2>
<p>FIN</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[以木为鱼]]></title><description><![CDATA[<p>想来也有相当一段时间没有摆弄过木头，30岁前自己最喜欢的木头，也终究没能逃过年龄增长带来的喜好变化。但偶尔拿出存货的木片，在一个阳光明媚的下午静下心来琢磨，依旧是自己的向往。在家里没啥设备，只有基础的几件手工工具，做做小件也是极其费时费力的，但对于自娱自乐来说，恰恰是种种时间慢速的雕琢的作品，才有它特有的意义——因为造者投入的最有价值的东西，正是<strong>时间本身</strong>。</p><p>想了一下就做只小鱼吧——年年有余，今年鱼先准备好。材料是紫光檀(东非黑黄檀)，坚硬，触感温润如玉，是相当熟悉的木材。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/11/wood-fish-1.jpg" class="kg-image"></figure><p>手边只有平口钳，钢丝锯，锉刀，所以即便简单的形状，硬木手工加工其实还是非常费劲的。说起钢丝锯，好几次冲动想买个电动台机，但家里实在没地方放——这牵扯到一个问题，我制作这样玩件，却仍想着节约时间是否有意义？我难道不正是在这种慢慢琢磨中将时间投入进去么。果然还是懒惰嘛...</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/11/wood-fish-2.jpg" class="kg-image"></figure><p>毫无疑问自己缺乏锻炼，锯完用锉刀修完型已经累的半死，时间没话出去多少，最先吃不消的居然是胳膊。扬起的木屑，淡淡的檀木香，勾起了自己多年前与木为伴的时光，果然，自己还是一直喜欢着木头:)</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/11/wood-fish-3.jpg" class="kg-image"></figure><p>晚上拿100目砂纸打磨，紫光檀还是硬啊，又是做到胳膊酸痛。早知道还是应该先用锉刀修掉点，强行打磨棱角，</p>]]></description><link>https://swordair.com/wood-fish/</link><guid isPermaLink="false">5dc6b754813ee30244850e11</guid><category><![CDATA[Wood]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Sat, 09 Nov 2019 13:43:25 GMT</pubDate><media:content url="http://swordair.com/content/images/2019/11/wood-fish-9-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://swordair.com/content/images/2019/11/wood-fish-9-1.jpg" alt="以木为鱼"><p>想来也有相当一段时间没有摆弄过木头，30岁前自己最喜欢的木头，也终究没能逃过年龄增长带来的喜好变化。但偶尔拿出存货的木片，在一个阳光明媚的下午静下心来琢磨，依旧是自己的向往。在家里没啥设备，只有基础的几件手工工具，做做小件也是极其费时费力的，但对于自娱自乐来说，恰恰是种种时间慢速的雕琢的作品，才有它特有的意义——因为造者投入的最有价值的东西，正是<strong>时间本身</strong>。</p><p>想了一下就做只小鱼吧——年年有余，今年鱼先准备好。材料是紫光檀(东非黑黄檀)，坚硬，触感温润如玉，是相当熟悉的木材。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/11/wood-fish-1.jpg" class="kg-image" alt="以木为鱼"></figure><p>手边只有平口钳，钢丝锯，锉刀，所以即便简单的形状，硬木手工加工其实还是非常费劲的。说起钢丝锯，好几次冲动想买个电动台机，但家里实在没地方放——这牵扯到一个问题，我制作这样玩件，却仍想着节约时间是否有意义？我难道不正是在这种慢慢琢磨中将时间投入进去么。果然还是懒惰嘛...</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/11/wood-fish-2.jpg" class="kg-image" alt="以木为鱼"></figure><p>毫无疑问自己缺乏锻炼，锯完用锉刀修完型已经累的半死，时间没话出去多少，最先吃不消的居然是胳膊。扬起的木屑，淡淡的檀木香，勾起了自己多年前与木为伴的时光，果然，自己还是一直喜欢着木头:)</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/11/wood-fish-3.jpg" class="kg-image" alt="以木为鱼"></figure><p>晚上拿100目砂纸打磨，紫光檀还是硬啊，又是做到胳膊酸痛。早知道还是应该先用锉刀修掉点，强行打磨棱角，有点太莽了，累的半死磨不掉多少。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/11/wood-fish-6.jpg" class="kg-image" alt="以木为鱼"></figure><p>第二天下午继续打磨，可惜太累实在磨不动了，没有完整把鱼磨到理想的圆润，就偷懒放弃了，哈哈，换600目收一下尾。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/11/wood-fish-7.jpg" class="kg-image" alt="以木为鱼"></figure><p>要是换成以前，一定会上到5000目再抛光，但现在看来是真的懒了，最初的圆度没有达成，之后就越来越草草了事。紫光檀触感如玉，所以用1000目水砂也足够光滑了。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/11/wood-fish-8.jpg" class="kg-image" alt="以木为鱼"></figure><p>出水擦干，因为在水里洗了下，颜色有点退。嗯，怎么说呢，就这样吧，马马虎虎吧，作为长久以来恢复技能的作品，差不多可以啦......</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/11/wood-fish-9.jpg" class="kg-image" alt="以木为鱼"></figure><p>既然是年年有鱼，看来以后每年我都得做一条小木鱼了？</p><p>看着这些自己的手工造物，总有一种自己存在的时间被固化的感觉，因为不断反复琢磨的过程，不会如写代码那样稀薄，我不禁想到，如果自己的代码也如这般推敲琢磨——还是不要想了，毕竟咱不擅长写代码，擅长写Bug!</p>]]></content:encoded></item><item><title><![CDATA[泰国行小记]]></title><description><![CDATA[<p>八月初团建活动去了趟泰国，回来后便一直比较繁忙而罕有时间，乘着国庆休假的空闲补一下。在公司呆了这么久，却还是第一次团建出国——虽然自己本身也稀少出远门:)</p><p>不过，当真要静静坐下来想要写些什么了，却也难回忆出太多细节，有的只是浮潜脚踩海胆的刺痛和手机泡水里的悲惨记忆，真的是太惨了，以至于获取到留念的照片还是送修手机之后的事了。当然由于手机挂的很早，且自己也不那么热衷拍摄，到最后居然都找不出几张能放出来的照片...</p><p>一次去泰国，所以还是跟团游，更多是形式上都到一下的感觉。两天在曼谷，两天在芭堤雅，跟着车到处跑行程相当拥挤，我身子虚还真有些遭不住:)——特别是第一天，红眼航班刚到泰国，酒店刚进去办完手续就要出发去景点“大皇宫”，感觉像是通宵了一夜啊，第一天行程结束倒头就睡了。</p><p>大皇宫观光，和紫禁城观光估计没啥大差别吧。皇宫处处体现着权力，金碧辉煌，游客如织，</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/10/thailand-2.jpg" class="kg-image"></figure><p>对泰国的印象还是挺好的，当地人也都相当友善，总之每到一个景点我就集中精神去感受，天气也比较给力，蓝天白云，不冷不热。国人是真的多，类似我们这种国内过来的线路里，就像是一个旅游区结界一样，很难感受到当地人真正的生活。但是依旧可以从路线中车窗的眺望里窥见一些，特别是那些临河而建的破旧居民区。</p><p>团游的代价之一就是某些毫无意义的景点，比如泰国的中国街。没什么值得看的，破旧的房屋甚至很多都已经是危房，贩卖的东西也都是中国特色，</p>]]></description><link>https://swordair.com/travel-notes-about-thailand/</link><guid isPermaLink="false">5d94a5a0813ee30244850dfd</guid><category><![CDATA[Travel]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Thu, 03 Oct 2019 13:16:36 GMT</pubDate><content:encoded><![CDATA[<p>八月初团建活动去了趟泰国，回来后便一直比较繁忙而罕有时间，乘着国庆休假的空闲补一下。在公司呆了这么久，却还是第一次团建出国——虽然自己本身也稀少出远门:)</p><p>不过，当真要静静坐下来想要写些什么了，却也难回忆出太多细节，有的只是浮潜脚踩海胆的刺痛和手机泡水里的悲惨记忆，真的是太惨了，以至于获取到留念的照片还是送修手机之后的事了。当然由于手机挂的很早，且自己也不那么热衷拍摄，到最后居然都找不出几张能放出来的照片...</p><p>一次去泰国，所以还是跟团游，更多是形式上都到一下的感觉。两天在曼谷，两天在芭堤雅，跟着车到处跑行程相当拥挤，我身子虚还真有些遭不住:)——特别是第一天，红眼航班刚到泰国，酒店刚进去办完手续就要出发去景点“大皇宫”，感觉像是通宵了一夜啊，第一天行程结束倒头就睡了。</p><p>大皇宫观光，和紫禁城观光估计没啥大差别吧。皇宫处处体现着权力，金碧辉煌，游客如织，</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/10/thailand-2.jpg" class="kg-image"></figure><p>对泰国的印象还是挺好的，当地人也都相当友善，总之每到一个景点我就集中精神去感受，天气也比较给力，蓝天白云，不冷不热。国人是真的多，类似我们这种国内过来的线路里，就像是一个旅游区结界一样，很难感受到当地人真正的生活。但是依旧可以从路线中车窗的眺望里窥见一些，特别是那些临河而建的破旧居民区。</p><p>团游的代价之一就是某些毫无意义的景点，比如泰国的中国街。没什么值得看的，破旧的房屋甚至很多都已经是危房，贩卖的东西也都是中国特色，这种出国逛自己国家的小商品市场的感觉当真古怪的紧。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/10/thailand-1.jpg" class="kg-image"></figure><p>泰国的食物我真的相当喜欢，冬阴功汤，还有那个绿色的蘸酱，简直欲罢不能。可惜团餐吃不到几次正常的泰菜，好多都是以中国口味改良过的。但这也无可厚非，似乎同行的小伙伴很多都并不是很习惯。</p><p>行程里有一处自助餐是安排在曼谷最高建筑里，不知道是因为饿惨了的关系还是自己真的太喜欢泰餐，感觉是吃的最好的一顿。从窗户几乎可以俯瞰到整个曼谷——没什么高楼，还能看到很多处似乎是在建(豆腐渣？)的工程。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/10/thailand-3.jpg" class="kg-image"></figure><p>之后的几天不提也罢了，光脚踏海胆的刺痛现在还隐隐有感，手机(Redmi Note7 Pro)更是进海水直接挂掉了，导致后面很多等待时间我只能傻傻的站着发呆:(</p><p>回来后手机送修，维修点告诉我需要返厂。手机快递到北京后，客服电话我说明维修费用需要500，换主板则更贵，嘛，毕竟人为海水，也算合理。想了一下还是决定不修了，因为海水有强腐蚀性，修好拿回来也用不长久的，而更换主板的价格不如重新购买新机了，所以最后远路发回，而我也把主用机换成了现在Redmi K20 Pro。</p><p>手机拿回来后，居然可以开机了！应该是维修点拆开后简单处理了下。这才找回了我之前的一些照片。然后我自己把它拆了，主板到处可见腐蚀发绿的地方，简单清理后烘干勉强可以用？嗯，并不行，相机接口腐蚀太厉害估计断线了，系统直接找不到相机，然后就是很不稳定，长久放置就会开不了机，果然不修是正确的，海水的对主板的伤害远比想像的要严重。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/10/note7pro.jpg" class="kg-image"></figure><p>由于对男人不感兴趣，所以人妖全程就是看看而已，注意力主要在如何分辨男女上，总体感觉还是勉强能从形体上区分出来。当然也去看了成人秀，虽然去之前有老司机提醒我要好好去学习，然而真看下来，也觉得平平无奇，虽然很多表演现实生活里算的上刺激，但对于久经ACG黑深残的绅士，精神上怕是很难造成哪怕是一丝的划痕。</p><p>对于我这种喜欢宅在家里的人来说，难得出门一次，感觉也不赖。回来之后一如既往地继续紧张的生活和工作，好像什么都没有发生一样。唯一改变的，好像是自己有那么一点喜欢上榴莲了...hehe...</p>]]></content:encoded></item><item><title><![CDATA[极限ITX小钢炮组装手记]]></title><description><![CDATA[<p>也算是一个快20年的PCDIY老老玩家了，即便如此，漫长岁月里给自己装机子的机会也并不多。年少时憧憬着顶级的硬件而财力有限，如今则是难有精力去使用高规格硬件。关心跑分和性价比的过去的自己，以及花更多心思挑选外设的如今的自己，在经历了一波SDD和内存的起起伏伏后，终于选在这个时间节点，开启自己的严格意义上的第四次配机(虽然二奶机装了n多，但主配置只有3次)。和之前三次的主配置相比：</p><ul><li>AMD Sempron 2800 + 1G DDR2 + Radeon X700</li><li>AMD Athlon64 3800 + 4G DDR2 + GeForce 8600GT</li><li>Intel Xeon E3-1230 v2 + 16G DDR3 + GTX 660 Ti</li></ul><p>这次的配置没有多大的跳跃，反而在主配置上有明显缩水，毕竟以前至少每次内存都要翻2倍，果然年纪大了对配置已经没啥纠结了，关注点果然转移到机箱/风扇/鼠标键盘之类的东西上了：</p><ul><li>AMD Ryzen R5 2600 + 32G DDR4 + GTX1066</li></ul>]]></description><link>https://swordair.com/extreme-itx-pc-install-record/</link><guid isPermaLink="false">5cfcc4f4813ee30244850de6</guid><category><![CDATA[DIY]]></category><category><![CDATA[Hardware]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Wed, 12 Jun 2019 15:02:17 GMT</pubDate><media:content url="http://swordair.com/content/images/2019/06/a4-itx-cover.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://swordair.com/content/images/2019/06/a4-itx-cover.jpg" alt="极限ITX小钢炮组装手记"><p>也算是一个快20年的PCDIY老老玩家了，即便如此，漫长岁月里给自己装机子的机会也并不多。年少时憧憬着顶级的硬件而财力有限，如今则是难有精力去使用高规格硬件。关心跑分和性价比的过去的自己，以及花更多心思挑选外设的如今的自己，在经历了一波SDD和内存的起起伏伏后，终于选在这个时间节点，开启自己的严格意义上的第四次配机(虽然二奶机装了n多，但主配置只有3次)。和之前三次的主配置相比：</p><ul><li>AMD Sempron 2800 + 1G DDR2 + Radeon X700</li><li>AMD Athlon64 3800 + 4G DDR2 + GeForce 8600GT</li><li>Intel Xeon E3-1230 v2 + 16G DDR3 + GTX 660 Ti</li></ul><p>这次的配置没有多大的跳跃，反而在主配置上有明显缩水，毕竟以前至少每次内存都要翻2倍，果然年纪大了对配置已经没啥纠结了，关注点果然转移到机箱/风扇/鼠标键盘之类的东西上了：</p><ul><li>AMD Ryzen R5 2600 + 32G DDR4 + GTX1066</li></ul><p>没错，久违的AMD YES！近几年AMD的翻身也着实搅动了这坛DIY牙膏盛行的死水，虽然下个月3代锐龙就要开售了，现在买上代有点49年入国军的感觉，不过AM4兼容新CPU的AMD良心还是可以放心上车的，当然还是现在上代的价格也非常合理。整体上勉强算是上代的中端配置，普通用用也绝对性能过剩了吧</p><p>值得一提的是，自己故意买了过气的1066，主要是新款甜品级1660Ti是从2060阉割来的，导致各种硬配置很差，大部分都砍了输出接口或者散热或者金属背板，实在不如上代中端堆料来的良心，对我这种往往多于3屏显示的人，砍接口是最不能忍的......</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/06/pcdiy-components.jpg" class="kg-image" alt="极限ITX小钢炮组装手记"></figure><p>除了在风扇计算上有点失误外，基本没啥特别的意外。这次真的买了相当多猫头鹰风扇呢...</p><ul><li>CPU： 选R5 2600主要还是因为便宜，加上塞进ITX机箱里，TDP 65W控制起来比较简单。如果未来3代R7真如发布会所说也能控制在65W，将来可能就打算再换掉。</li><li>主板：华硕的B450ITX小板，2个m2槽位是选择它的主要原因。</li><li>内存：海盗船复仇者16G两根，难得内存跌下来，就插满吧。这条子算是马甲条里最矮的了，对ITX来说尤为重要。</li><li>SSD：Intel的760p 500G + WD 750SN 500G，口碑都挺好的，小孩子才做选择题，我全都要！</li><li>显卡：技嘉1066，有点古董了，JD上基本就是清货状态。金属背板，5输出接口，三风扇，做工比起现在的敷衍品1660要好很多。虽然相比1660Ti大概只有70%性能，但价格也不到70%这相当合理了。</li><li>电源：海盗船SF600白金，有点过剩，不过无所谓，电源必须得好点。</li><li>硅脂：MX-4，常规品。</li></ul><p>对于ITX机箱来说，最最最最重要的其实是<strong>CPU散热器</strong>，其决定了能塞进去的CPU规格，并且在各种意义上来说选择都是极为麻烦。</p><p>自己心里最理想的ITX机箱应该是Dan Case V4，不过价格略高，预订又要漫长的等待，最后选了比较皮实的zs-A4，虽然也要25天的定制时间，但总体时间可控。后来事实也证明，zs-A4的两个前置的usb 3.0 Type A端口非常实用。</p><p>决定了机箱，即决定了散热限高仅为<strong>49mm</strong>。散热器的选择面就非常狭小了，快睿C7，IDC VC45，猫头鹰L9a，乔思伯HP-400，基本也就这些可选。一度在C7和L9a之间犹豫，最后还是选了L9a，虽然设计功耗低于C7但架不住对猫头鹰的好感。买完之后，却还是出了些意外，最终使用了网上搜索也很少出现的更好的解决方案——黑峰岭(Black Ridge) ：</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/06/black-ridge-vs-l9a.jpg" class="kg-image" alt="极限ITX小钢炮组装手记"></figure><p>如果搜索这个散热器的相关信息，只能搜索一些简单的新闻。基本难觅机友装机的例子 , 毕竟作为Dan Case的配套散热，价格本来就贵的离谱，45欧加运费本来就不在考虑范围内，可是今年5月看套淘宝陆续出现了一批200以下的黑峰岭，不由得想要试试看这个所谓工包黑峰岭的效果。这家伙是专为Dan Case设计的，所以尺寸和性能都可以说是这个50mm以内的最强了吧，拿它和L9a对比一下，一个2热管，一个6热管，面积也是差了相当多。当然，猫头鹰的鳍片做工要好得多，又厚实又密集，但规模太小热管太少注定性能将将够用而已。而黑峰岭则是支持压制95W，性能应该只是略逊于AXP-100。</p><p>(2019-12-14更新，现在搜索已经有很多装机和评测了，我现在也已经用了半年，感觉确实不错)。</p><p>给黑峰岭配上猫头鹰的92x14薄扇，将热量往外吹。事实上，A4最为主要的就是要避免成为小闷罐，所以往外吹的设计感觉更合理。在不增加体积的情况下，也很难塞入向上的抽风扇，所以cpu这块往外排风应该可以大幅避免闷罐发生。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/06/black-ridge-use-l9a-fan.jpg" class="kg-image" alt="极限ITX小钢炮组装手记"></figure><p>散热器上到主板上主要遇到两个问题。其一是，散热器自带的扣具较为简陋，也没有提供背板，而且螺丝太短了。直接用螺丝往PCB上拧我还是很虚的，所以直接用了L9a的背板，并且也换用了长一些的M3螺丝固定。其二是，散热器和主板层叠的M2散热片有冲突，最后将主板的散热片去掉，在M2硬盘上安装更薄的散热片解决。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/06/black-ridge-on-main.jpg" class="kg-image" alt="极限ITX小钢炮组装手记"></figure><p>此时，散热器边缘已经与主板基本平齐，换句话说，CPU位置如果在靠主板中间的话，那么就会让散热器超出机箱的安装范围。在高度的范畴里是1mm都多不得了。</p><p>然而不只是高度上面，在深度上也是极其极限。将主板装入机箱之后，散热器已经是紧贴箱体框架的程度！此处也是哪怕多1mm-2mm，也是万万不能了！</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/06/black-ridge-in-case.jpg" class="kg-image" alt="极限ITX小钢炮组装手记"></figure><p>最难的关过去后，后面的装机就显得非常简单了，按部就班把电源放入，连上显卡转接线，风扇则是更早就装上的，这类机箱对安装顺序要求极严格，弄反顺序通常需要重新来过。虽然我没装过A4，但因为脑子里过了很多次流程，全程都很顺畅。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/06/half-done-in-case.jpg" class="kg-image" alt="极限ITX小钢炮组装手记"></figure><p>按上显卡，接上电源，最后一顿理线操作，大功告成！海盗船SF600白金的线材挺软的，加上我基本不用2.5寸硬盘区，所以就拿来理线了，空间还有剩余，省下了上定制线材的钱和功夫。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/06/case-finish-right.jpg" class="kg-image" alt="极限ITX小钢炮组装手记"></figure><p>显卡特写：</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/06/case-finish-left.jpg" class="kg-image" alt="极限ITX小钢炮组装手记"></figure><p>合上侧板，闲置时可以放进书架里，A4小机箱就是小巧。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/06/a4-itx-fin.jpg" class="kg-image" alt="极限ITX小钢炮组装手记"></figure><p>最后来说说这款机箱，我拿到的ZS-A4款式和买前看到的并不同，两侧侧板都是一样的，也就是上图这种整排开孔。而大部分我之前看到的款式都是电源位和CPU位置独立开孔，位置也是对应CPU和电源位置而高低错开的。但由于我使用的是黑峰岭散热器，散热器向上延伸，正好与电源平齐，这种一整排的开孔反而是绝配，机箱降低特殊件的情况下正巧遇上我这种少数派纯粹是个偶然。要是我用L9a，这种开孔显然会和CPU位置对不上。</p><p>整体来说ZS-A4的做工还是可以的，当然精度和量产机箱相比还是要逊色很多，但是这份粗旷也更禁得起折腾，毕竟Dan Case要贵的多，铝材也要薄的多。</p><p>虽然装过多次ITX的机箱，但ITX-A4这种极限体积的机箱还是第一次装。和普通机箱相比难度要高很多，对顺序和选件都相当要求 。但在这样小体积中，塞进主流甚至是高端硬件，最终呈现出的娇小美感着实让人欲罢不能，以后自己恐怕也不再会去装大箱子了吧。</p><p>整个硬件系统里，低速猫扇3个，基本非常安静。而显卡风扇和电源风扇都具备低载停转功能，所以整机在闲置时的噪音可以忽略。小而强大，安静而内心澎湃，这就是我心中的A4-ITX。</p><p>更新配置表，大部分购于京东，其实只要差价在合理范围内，我依旧优先选择京东。</p><!--kg-card-begin: html--><table>
	<tr><td>CPU</td><td>AMD 锐龙 R5 2600 盒</td><td>京东</td><td>999</td></tr>
	<tr><td>主板</td><td>华硕ROG STRIX B450-I GAMING</td><td>京东</td><td>909</td></tr>
	<tr><td>显卡</td><td>技嘉 GTX 1060 G1 Gaming D5X 6G</td><td>京东</td><td>1399</td></tr>
	<tr><td>内存</td><td>海盗船 复仇者LPX DDR4 3200 32GB(16G×2)套条</td><td>京东</td><td>1094</td></tr>
	<tr><td>硬盘</td><td>Intel 760P 512GB SSD M.2</td><td>京东</td><td>579</td></tr>
	<tr><td>硬盘</td><td>西部数据 SN750 500G M.2</td><td>淘宝</td><td>534</td></tr>
	<tr><td>风扇</td><td>猫头鹰 NF-A9x14 PWM x3</td><td>京东</td><td>340</td></tr>
	<tr><td>电源</td><td>海盗船 SF600 白金版</td><td>京东</td><td>899</td></tr>
	<tr><td>硅脂</td><td>ARCTIC MX-4 4g</td><td>京东</td><td>32</td></tr>
	<tr><td>CPU散热器</td><td>黑峰岭</td><td>淘宝</td><td>185</td></tr>
	<tr><td>机箱</td><td>ZS-A4 + ADT显卡延长线</td><td>淘宝</td><td>850</td></tr>
	<tr><td>总计</td><td></td><td></td><td>7820</td></tr>
</table><!--kg-card-end: html--><p>可以看到总价相当昂贵...其实除开CPU内存硬盘，小机箱其他配件都要更昂贵，特别是电源，机箱，和主板。</p><p>最后上个简单跑分。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/08/ssd-mark.png" class="kg-image" alt="极限ITX小钢炮组装手记"></figure><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/08/chess-mark.png" class="kg-image" alt="极限ITX小钢炮组装手记"></figure>]]></content:encoded></item><item><title><![CDATA[CSS in JS]]></title><description><![CDATA[<p>CSS in JS这个命题，是在内部小组的一个简单分享，现在单独拿出来整理一下。</p><p>自React流行以来，混写HTML和JS乃至CSS的做法变成日常，虽然CSS在react里只有一个简单JS实现，但只用JS解决所有问题的思路也逐渐为人们所接受。在过往的数年中，各种CSS in JS的框架也层出不穷，这里简单梳理一下，毕竟自己也是个和CSS有着相当缘分的人:)</p><h2 id="css-css-in-js">CSS &amp; CSS in JS</h2><p>CSS最初被设计为简单直观的描述性DSL，10年前甚至部分是有设计师直接使用的。不过web的持续发展不可避免的让前端细分到技术领域，我也算是一路看着CSS各种演变，从最开始的避免多类简单直接，到有多类，有原子化描述，有CSS-reset，Normalise，Minimum Page，到模块化的BEM管理，组件化的样式编写流程，语义化的组件范式，到bootstrap流行的时候达到了巅峰。</p><p>但CSS天生简单，毕竟是特型化的DSL，且设计之初就没打算搞复杂。这是的全局命名污染和冲突这一点成为无法略去之痛。现今的CSS in JS方案主要解决了这些问题：</p><ul><li>全局命名冲突</li><li>直观的开发体验</li><li>动态样式(样式根据数据变化)</li></ul><p>特别是匹配上react这类all in js的解决路数，相当干脆的感觉。</p>]]></description><link>https://swordair.com/css-in-js/</link><guid isPermaLink="false">5ccb1700813ee30244850dd9</guid><category><![CDATA[JavaScript]]></category><category><![CDATA[CSS]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Thu, 02 May 2019 17:13:51 GMT</pubDate><media:content url="http://swordair.com/content/images/2019/05/cssinjs-cover.png" medium="image"/><content:encoded><![CDATA[<img src="http://swordair.com/content/images/2019/05/cssinjs-cover.png" alt="CSS in JS"><p>CSS in JS这个命题，是在内部小组的一个简单分享，现在单独拿出来整理一下。</p><p>自React流行以来，混写HTML和JS乃至CSS的做法变成日常，虽然CSS在react里只有一个简单JS实现，但只用JS解决所有问题的思路也逐渐为人们所接受。在过往的数年中，各种CSS in JS的框架也层出不穷，这里简单梳理一下，毕竟自己也是个和CSS有着相当缘分的人:)</p><h2 id="css-css-in-js">CSS &amp; CSS in JS</h2><p>CSS最初被设计为简单直观的描述性DSL，10年前甚至部分是有设计师直接使用的。不过web的持续发展不可避免的让前端细分到技术领域，我也算是一路看着CSS各种演变，从最开始的避免多类简单直接，到有多类，有原子化描述，有CSS-reset，Normalise，Minimum Page，到模块化的BEM管理，组件化的样式编写流程，语义化的组件范式，到bootstrap流行的时候达到了巅峰。</p><p>但CSS天生简单，毕竟是特型化的DSL，且设计之初就没打算搞复杂。这是的全局命名污染和冲突这一点成为无法略去之痛。现今的CSS in JS方案主要解决了这些问题：</p><ul><li>全局命名冲突</li><li>直观的开发体验</li><li>动态样式(样式根据数据变化)</li></ul><p>特别是匹配上react这类all in js的解决路数，相当干脆的感觉。不过CSS in JS解决了某些问题，却也带来了另一些问题：</p><ul><li>性能损耗(运行时和SSR抽取)</li><li>SSR抽取样式会影响引用资源的上下文</li><li>类名的语义化效果消失</li><li>资源引用变为JS使得情况更为复杂</li></ul><p>所以，基于上面这些问题，CSS in JS更像是CSS本身的补充。对于后台系统而言可能能达到替代的程度，因为后台并不需要SSR，并不关系语义，也往往不去不分资源的Host。</p><h2 id="-">主流框架的做法</h2><p>Ant Design (The world's second most popular React UI framework)，号称是全球第二流行，颇有当年锤子自称全球第二好用的意味。它所使用样式系统是LESS，基本上作为一个团队的产品，在严格的管控下毫无问题。当然使用的人必须接受这种设定。加载antd会污染全局样式，特别是影响广泛的字体设定和box-sizing值。当然对大部分人来说也不是太大问题。</p><p>既然有世界第二，那么就有世界第一。</p><p>Material-UI (The world's most popular React UI framework)，也是我打交道非常多的UI，我是一路看着它的样式系统不停修改过来的：</p><ul><li>起初使用的是LESS</li><li>之后走了一条inline style覆盖计算的路子，但最近验证存在性能问题</li><li>1.0的时候，开发团队评估了现存CSS in JS方案，最终从Jss, Aphrodite, CSS modules, styled-components, Fela一众后选中，选定JSS，看重的是其性能和各方面的能力</li><li>如今已经已经基于JSS实现了styled-components API及Hook API，已经渐渐形成自己的一套CSS解决方案@mui/style，目前还是alpha状态</li></ul><p>可见业界的各种探索也并未停歇。</p><h2 id="css-in-js-">CSS in JS 库</h2><p>在库<a href="https://github.com/MicheleBertoli/css-in-js">React: CSS in JS techniques comparison</a>中，列举超过60种各类库，虽然这个库的作者有一段时间没有更新了，但至少记录这个曾经百花齐放的事态。</p><p>下面就列举一下比较常见的库</p><!--kg-card-begin: html--><div style="width:100%;margin-bottom: 20px;">
	<a href="https://github.com/styled-components/styled-components">styled-components/styled-components</a>
	<div style="font-size: 0.7em">Visual primitives for the component age. Use the best bits of ES6 and CSS to style your apps without stress</div>

	<a href="https://github.com/emotion-js/emotion">emotion-js/emotion</a>
	<div style="font-size: 0.7em">CSS-in-JS library designed for high performance style composition</div>

	<a href="https://github.com/Khan/aphrodite">Khan/aphrodite</a>
	<div style="font-size: 0.7em">Framework-agnostic CSS-in-JS with support for server-side rendering, browser prefixing, and minimum CSS generation</div>

	<a href="https://github.com/css-modules/css-modules">css-modules/css-modules (react-css-modules)</a>
	<div style="font-size: 0.7em">Seamless mapping of class names to CSS modules inside of React components.</div>

	<a href="https://github.com/threepointone/glamor">threepointone/glamor</a>
	<div style="font-size: 0.7em">inline css for react et al</div>

	<a href="https://github.com/paypal/glamorous">paypal/glamorous</a> <span style="font-size:0.5em;color:#f30">(DEPRECATED)</span>
	<div style="font-size: 0.7em">Maintainable CSS with React</div>

	<a href="https://github.com/FormidableLabs/radium">FormidableLabs/radium</a>
	<div style="font-size: 0.7em">A toolchain for React component styling.</div>

	<a href="https://github.com/rofrischmann/fela">rofrischmann/fela</a> (react-fela)
	<div style="font-size: 0.7em">State-Driven Styling in JavaScript</div>

	<a href="https://github.com/cssinjs/jss">cssinjs/jss (react-jss)</a>
	<div style="font-size: 0.7em">JSS is an authoring tool for CSS which uses JavaScript as a host language.</div>

	<a href="https://github.com/zeit/styled-jsx">styled-jsx</a>
	<div style="font-size: 0.7em">Full CSS support for JSX without compromises</div>

	<a href="https://github.com/styletron/styletron">styletron/styletron</a> (styletron-react)
	<div style="font-size: 0.7em">Toolkit for component-oriented styling</div>
</div><!--kg-card-end: html--><p>在这些命名里有很多glamor，glamorous，从中可以深切感受到到作者希望CSS in JS可以优雅美丽的存在的愿景。如今的CSS in JS领域其实基本已经稳定。styled-components以及后生emotion已经基本上牢牢占据前两的位置。</p><p>我特地拉一个流行库的github的star的历史记录，可以说是非常一目了然的形式：</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/05/cssinjs-github-star.png" class="kg-image" alt="CSS in JS"></figure><p>有一个结论，就是无论styled-component还是emotion，都很好的<strong>利用了es6的Tagged Template Literals(标签模板)</strong>，为CSS存在于JS中提供了优雅的展现形式。关于这部分具体内容，好像已经有点超过本篇篇幅，就放到下次继续了。</p>]]></content:encoded></item><item><title><![CDATA[书架清理]]></title><description><![CDATA[<p>平时太过忙碌，便只能趁着五一这样难得的休息日整理一下拥挤的书架。书架上摆放着各种类型的书，电气，木工，皮匠，裁缝，绘画，钢琴，历史等等，但最多的书却还是和编程有关，C，C++，C#，Java，数据库等等，但最多的专类却还是和JavaScript有关，鬼知道过去的10年我看了多少。这些年来也渐渐习惯了购买和使用电子书，纸质书都有的捧在手中阅读的感觉也悄然淡去，成为了蜗居一室中弥足珍贵的空间的单纯的消耗，而显得多余起来。于是当下，就决定丢弃一些“沙袋”。</p><p>简单清理了一下，将要丢弃1/3的书，可悲的是几乎都是技术类书籍，其他种类的书果然还是要更有时效性。而且由于过去几年前端世界迎来了巨变，使得这次淘汰的书里好大一部分是JS相关，难免唏嘘。什么jQuery，JavaScript权威指南，都是自己初入前端的标的，还有最好的语言PHP，一众CSS相关，以及手里有更新的发行版的书，堆起来也快有半个人高了。</p><p>相反基础类技术书寿命就长多了，但现阶段感觉都比不上《经济学原理》这种以前完全不看的书来的有用，视角都是随时间阶段悄然改变的，就像刚到30岁那会突然发现周围的话题怎么一下子都换成了养生一样，当注意到的时候，已经在下一个阶段里了:)</p><p>清理活动力，反倒是像D3，</p>]]></description><link>https://swordair.com/bookshelf-clean-up/</link><guid isPermaLink="false">5cc94509813ee30244850dd5</guid><category><![CDATA[Blog]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Wed, 01 May 2019 13:41:03 GMT</pubDate><content:encoded><![CDATA[<p>平时太过忙碌，便只能趁着五一这样难得的休息日整理一下拥挤的书架。书架上摆放着各种类型的书，电气，木工，皮匠，裁缝，绘画，钢琴，历史等等，但最多的书却还是和编程有关，C，C++，C#，Java，数据库等等，但最多的专类却还是和JavaScript有关，鬼知道过去的10年我看了多少。这些年来也渐渐习惯了购买和使用电子书，纸质书都有的捧在手中阅读的感觉也悄然淡去，成为了蜗居一室中弥足珍贵的空间的单纯的消耗，而显得多余起来。于是当下，就决定丢弃一些“沙袋”。</p><p>简单清理了一下，将要丢弃1/3的书，可悲的是几乎都是技术类书籍，其他种类的书果然还是要更有时效性。而且由于过去几年前端世界迎来了巨变，使得这次淘汰的书里好大一部分是JS相关，难免唏嘘。什么jQuery，JavaScript权威指南，都是自己初入前端的标的，还有最好的语言PHP，一众CSS相关，以及手里有更新的发行版的书，堆起来也快有半个人高了。</p><p>相反基础类技术书寿命就长多了，但现阶段感觉都比不上《经济学原理》这种以前完全不看的书来的有用，视角都是随时间阶段悄然改变的，就像刚到30岁那会突然发现周围的话题怎么一下子都换成了养生一样，当注意到的时候，已经在下一个阶段里了:)</p><p>清理活动力，反倒是像D3，Three.js这样的家伙活了下来，想着以后哪天可能会用上而不舍丢弃，尽管实际上自第一遍浏览完成后便再无用武之地。大学时代买的诸如《编程珠玑》，《代码之美》现在看起来可能更有趣些吧，虽然都是些古老十几年历史的书。还有像《计算机程序的构造和解释》这样的神作，怕是要为防止自己老年痴呆做贡献了。</p><p>不知该说是得益还是受限于移动设备，现在的人的时间普遍被切碎，获取信息也更为方便快捷，静下来慢慢读书的感觉可能越来越罕有。自己也很少写博客，尽管每天都在解决新的问题，尝试新的技术，但过快的节奏还是难以有所沉淀。现在已经不是提笔忘字那么简单了，甚至是码字都断断续续，是自己还是环境变了？恐怕皆是。</p><p>望着即将被丢弃的1/3的书，并没有多少——留恋。</p>]]></content:encoded></item><item><title><![CDATA[回忆秋之回忆]]></title><description><![CDATA[<p>如果要说，哪些游戏早就了现在的自己，《秋之回忆》系列必是其中之一。伴随着青年时期的多愁善感和爆棚的中二感，是名为青春的冗长的青涩回忆和感动。这部1999起发售初代的游戏，在前作7代之销声匿迹多年之后，终于在20年后的现在，承载着无数人的期望以及在众多回忆者的努力下，迎来了最终的第八作据闻也是<strong>最后</strong>一作《<strong>告别回忆8  无垢少女</strong>》。</p><p>虽然国人工作室在<a href="https://zhongchou.modian.com/item/10028.html">摩点</a>众筹时间是在2018年初，但恰遇国内游戏版号暂停，PC版迟迟等到PC版。结果等了1年多了，最终还是选择了NS版。找人借了NS主机，然后自己买了卡带。自己也算是老玩家了，前7作虽然并非全部通关，但除了第三作外主要剧情也都玩的七七八八，2代目更是打出了所有结局。前7作虽各有褒贬，但秋之回忆其实也早已超越了Galgame的范畴，其对我的影响比起Clannad更甚，林林总总的评价怕是写个好多篇都会不够，便只提一下自己此系最初攻略的人是藤原雅。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/04/mo8box.jpg" class="kg-image"></figure><p>以下便是一些个人对作品的一些感想，涉及剧透。</p><p>打开游戏的瞬间，回忆便从悠久的长眠里苏醒了，看到画面中打出了MemoriesOff的那个感觉，仿佛自己又回到了10年以前。时间的力量是毫无疑问的，让人从悲伤中遗忘过去，让人从思念中堆积执念，然而，音乐超越了时间，阿保刚的音乐，志仓千代丸的歌曲，都是<strong>熟悉的配方，熟悉的味道</strong>。即便画面没能将我带回10年前，</p>]]></description><link>https://swordair.com/recall-memories-off/</link><guid isPermaLink="false">5ca9ecb3813ee30244850dce</guid><category><![CDATA[Game]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Sun, 07 Apr 2019 14:49:43 GMT</pubDate><content:encoded><![CDATA[<p>如果要说，哪些游戏早就了现在的自己，《秋之回忆》系列必是其中之一。伴随着青年时期的多愁善感和爆棚的中二感，是名为青春的冗长的青涩回忆和感动。这部1999起发售初代的游戏，在前作7代之销声匿迹多年之后，终于在20年后的现在，承载着无数人的期望以及在众多回忆者的努力下，迎来了最终的第八作据闻也是<strong>最后</strong>一作《<strong>告别回忆8  无垢少女</strong>》。</p><p>虽然国人工作室在<a href="https://zhongchou.modian.com/item/10028.html">摩点</a>众筹时间是在2018年初，但恰遇国内游戏版号暂停，PC版迟迟等到PC版。结果等了1年多了，最终还是选择了NS版。找人借了NS主机，然后自己买了卡带。自己也算是老玩家了，前7作虽然并非全部通关，但除了第三作外主要剧情也都玩的七七八八，2代目更是打出了所有结局。前7作虽各有褒贬，但秋之回忆其实也早已超越了Galgame的范畴，其对我的影响比起Clannad更甚，林林总总的评价怕是写个好多篇都会不够，便只提一下自己此系最初攻略的人是藤原雅。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/04/mo8box.jpg" class="kg-image"></figure><p>以下便是一些个人对作品的一些感想，涉及剧透。</p><p>打开游戏的瞬间，回忆便从悠久的长眠里苏醒了，看到画面中打出了MemoriesOff的那个感觉，仿佛自己又回到了10年以前。时间的力量是毫无疑问的，让人从悲伤中遗忘过去，让人从思念中堆积执念，然而，音乐超越了时间，阿保刚的音乐，志仓千代丸的歌曲，都是<strong>熟悉的配方，熟悉的味道</strong>。即便画面没能将我带回10年前，这些熟悉的音符也会确实地做到这一点。</p><p>虽然现在作为一个中年大叔，融入这样的青春剧本其实颇为困难，但音乐，人物，场景，还是渐渐唤起曾经的那些感动——其实仔细想想，主创团队，莫不也是一群中年大叔么:)</p><p>打出第一个结局花了约8小时，剧情走了约1/4。和多年以前不同的是，如今我基本已经能听懂大部分的日语，托这个的福，抵消了部分自身年龄带来的违和感，让自己能更好地融入进去。女主诺艾尔，是前前作“真”女主克罗艾的妹妹，在封面真是占了很大面积呢～声优表现还可以，居然还同时给猫配音，和猫对话时代精分现场挺有趣的。第一个打出的诺艾尔的GE，可以说是一个相当标准的Galgame范本，没太多惊喜当然，也并不失望。就故事线也能明白只完成了冰山一角而已，不过自己时间不多，后面就只能开始看<a href="https://www.douban.com/review/9787780/">攻略</a>了走剧情了。</p><p>和前作一样，主线剧情需要各个支线完成才能解锁。偷瞄了一眼结局列表，16个结局里居然有原本以为是NPC的人！当然作为前7作老玩家很快察觉到自己被封面耍了，于是第二遍看片头OP已经看到出端倪，歌词“通往真实的门”对应的居然是NPC的头发么...</p><p>不过基本也就是知道日紫喜是关键人物的程度而已，万万没想到是“真女主”，妈呀，女主居然连个封面都不给真是够绝的，可算是本作最大的惊喜了，当然这也是后来才知道的。</p><p>双子线的剧情有点冗长，并且有些过于玄乎(更后面怕是只能成为玄幻了)。打完其中一个结局又花了很久，章节标题却只到1/2...从后面来看，双子线完全算是铺垫剧情，为后面更不合理的展开稍稍加个台阶，并且整个过程有点胃疼。不过在玄幻也好，纠结剧情的合理性本来就无必要，作为游戏者需要接受这些设定，才能在游戏中体验与之相符的剧情。</p><p>来到主线真相，整体过程虽有诸多不合理，但剧情勉强自圆其说之下尽可能的曲折了，这点还是要给好评。然后，真女主日紫喜扮演了2支线NPC终于冷不防转正，真是没想到具备各种女主气质的诺艾尔，居然被一个连游戏封面都不存在的家伙给打败了！最后的ED曲播放位置已经表明了日紫喜唯一女主的地位...</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2019/04/mo8switch.jpg" class="kg-image"></figure><p>零零散散的吐槽：</p><ul><li>失忆真是个方便的设定呢</li><li>诺艾尔比起她姐姐，操作上差的实在不是一星半点..</li><li>日紫喜成女主后配置太高了吧！于是只能在肤色上减配？</li><li>男主配置也不低，只能在体力上减配了，即使如此，还是要在剧情需要时疯狂做蠢事！</li><li>......</li></ul><p>虽然现在可能没有时间去打出所有结局，但整个过程，我还是尽可能地去感受了——艰难地划出整块整块的时间，喝威士忌直到微醺抵消年龄上的理智，把自己关起来尽可能去融入剧情。看到前几作老人物来客串，那种怀念的温暖感充满内心。比如唯笑的声音有些变化，但依然可以识别，都已经过了20年了！而我自己从听到初代的声音算也至少是十多年前了！</p><p>可能内心有无数言语需要表达，但终将成为无言的回忆。那些往日与当下的感动，会在将来因为什么契机而被再次唤醒，回忆秋之回忆，最后感谢GloriaWorks的各位协调了多方给我们老粉丝带了了这个充满回忆的礼物。</p><p>雨，已经停了。</p><p>update 2019/4/19: 今天打完了最后一个结局，界面打出“Memory Off已通关”的字样时真的是百感交集。信的结局作为整个系列的结局真的是太合适了，这条线里，各代人物登场着实让人怀念，特别是各代人物自有BGM响起时的那种穿越感，仿佛自己这十几年像是一场梦。个人而言，仙堂的BGM唤起的记忆更多些，而唯笑的声音识别度可能是最高的，萤只在最后出场讲了几句话，不过也足够了，作为2代巅峰之作女主给整个系列画上句号也是非常合适。最后的回忆结局，使用的也是2代主题曲目 with memories。在各种意义上说，制作组真的相当用心了。</p><p>再见了，秋之回忆，回忆里再见。</p>]]></content:encoded></item><item><title><![CDATA[写在Edge变核的交错点]]></title><description><![CDATA[<p>12月6日微软官方博客放出一片博文《<a href="https://blogs.windows.com/windowsexperience/2018/12/06/microsoft-edge-making-the-web-better-through-more-open-source-collaboration/">Microsoft Edge: Making the web better through more open source collaboration</a>》，宣布了Edge浏览器将使用Chromium来开发：</p><blockquote>Today we’re announcing that we intend to adopt the Chromium open source project in the development of Microsoft Edge on the desktop to create better web compatibility for our customers and less fragmentation of the web</blockquote>]]></description><link>https://swordair.com/the-point-edge-change-to-chromium-powered/</link><guid isPermaLink="false">5c0bd0ad813ee30244850dbd</guid><category><![CDATA[Microsoft]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Sat, 08 Dec 2018 14:41:20 GMT</pubDate><content:encoded><![CDATA[<p>12月6日微软官方博客放出一片博文《<a href="https://blogs.windows.com/windowsexperience/2018/12/06/microsoft-edge-making-the-web-better-through-more-open-source-collaboration/">Microsoft Edge: Making the web better through more open source collaboration</a>》，宣布了Edge浏览器将使用Chromium来开发：</p><blockquote>Today we’re announcing that we intend to adopt the Chromium open source project in the development of Microsoft Edge on the desktop to create better web compatibility for our customers and less fragmentation of the web for all web developers.</blockquote><p>作为一个10年前端老兵，一个IE6时代遗留下的幸存者，在这样一个档口也忍不住冒个泡上来写两句感慨。唉，真是，“时代变了”。</p><p>记得上一次关于变核的话题，还是在Opera决定采用webkit的时候，那时我写了《<a href="https://swordair.com/presto-the-fall-of-a-bright-star/">晖星Presto的陨落</a>》，结尾甚是感慨。如今Edge的这一变故则更加人唏嘘不已——曾经的4大核心代表，如今仅余其二。抛开行将作古的Trident和被判死刑的EdgeHTML，今后我们就只能看着Mozilla孤军奋战，面对已经称霸桌面和移动端的Webkit(Blink)，仿佛又回到了从前Mozilla对抗强大的IE的时候。只是这次的对手，披着开源的黄袍，囊括3端，踏遍Web的每一寸土地，声势之壮比起当年IE唯有过之。</p><p>毫无疑问，浏览器内核形成了新的垄断，不过情况和当年IE有略有不同。只是这种一家独大对互联网来说真的是件好事么？当然作为开发者来说，其实我感觉不到特别高兴，反而有些遗憾。当然纯技术角度看，chromium占据足够市场份额之后，web的碎片化将明显得到改善，开发者会有更多精力处理业务，尝试更快迭代出的新功能，前景似乎一片光明，大统一时代来临，感觉像是在做梦？但闭上眼睛，自己还是忍不住叹了一口气，心情颇为复杂。</p><p>和上次写Opera一样，我不是Edge的用户，甚是我是个忠实的Chrome用户，但看到百花齐放的浏览器渐渐融合起来，依旧隐隐只是觉得“天下之事分久必合”罢了。引用自己之前说的：</p><blockquote>Web需要标准，但任何一个内核和浏览器都不是标准，它们为标准所用，却都不应单独主导标准。无论是曾经的Trident，还是现在的Webkit，当前它们不仅不是标准，未来，我们还得防止它们成为标准。</blockquote><p>没错，这个Edge变核的交错点，只愿——“Mozilla能继续前行”。</p>]]></content:encoded></item><item><title><![CDATA[关于Generator的误解]]></title><description><![CDATA[<p>生成器(<strong><strong>Generator</strong></strong>)一词在JavaScript中常常受到误解，一些细微的概念差别的积累，慢慢导致了不少理解上的混淆。它时而在指一个函数，时而又在代指迭代器(<strong><strong>iterator</strong></strong>)。那么它在概念上到底是指什么？</p><p>去前些时候在团队里做了一个redux-saga源码浅读的分享，由于redux-saga的实现机制核心就是Generator，为了写PPT我打算去抄个比较正式的定义，然后就又去翻了一下手边的两本参考书，阮一峰的《ES6入门指南》和Zakas的《深入理解ES6》，不过这次阅读却很快发现了后者的内容存在翻译上的错误。</p><!--kg-card-begin: markdown--><blockquote>
<p>ECMAScript6同时还引入了个<strong>生成器对象</strong>，它可以让创建迭代器对象的过程变得更简单。--深入理解ES6</p>
</blockquote>
<!--kg-card-end: markdown--><p>这上面是摘抄自深入理解ES6里的中文版原文，乍看之下好像没什么问题，但其实严格意义上讲是错的，“生成器对象”概念上错了，因为联系上下文，创建迭代器对象的是“生成器<strong>函数</strong>”。难道Zakas写错了？我特意翻查了英文原版：</p><!--kg-card-begin: markdown--><blockquote>
<p>Fortunately, ECMAScript 6 also provides <strong>generators</strong>, which make creating iterator objects much simpler.--Understanding ES6 By Zakas</p></blockquote>]]></description><link>https://swordair.com/about-misunderstanding-of-generator/</link><guid isPermaLink="false">5bcf1e48813ee30244850da8</guid><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Fri, 23 Nov 2018 15:52:56 GMT</pubDate><content:encoded><![CDATA[<p>生成器(<strong><strong>Generator</strong></strong>)一词在JavaScript中常常受到误解，一些细微的概念差别的积累，慢慢导致了不少理解上的混淆。它时而在指一个函数，时而又在代指迭代器(<strong><strong>iterator</strong></strong>)。那么它在概念上到底是指什么？</p><p>去前些时候在团队里做了一个redux-saga源码浅读的分享，由于redux-saga的实现机制核心就是Generator，为了写PPT我打算去抄个比较正式的定义，然后就又去翻了一下手边的两本参考书，阮一峰的《ES6入门指南》和Zakas的《深入理解ES6》，不过这次阅读却很快发现了后者的内容存在翻译上的错误。</p><!--kg-card-begin: markdown--><blockquote>
<p>ECMAScript6同时还引入了个<strong>生成器对象</strong>，它可以让创建迭代器对象的过程变得更简单。--深入理解ES6</p>
</blockquote>
<!--kg-card-end: markdown--><p>这上面是摘抄自深入理解ES6里的中文版原文，乍看之下好像没什么问题，但其实严格意义上讲是错的，“生成器对象”概念上错了，因为联系上下文，创建迭代器对象的是“生成器<strong>函数</strong>”。难道Zakas写错了？我特意翻查了英文原版：</p><!--kg-card-begin: markdown--><blockquote>
<p>Fortunately, ECMAScript 6 also provides <strong>generators</strong>, which make creating iterator objects much simpler.--Understanding ES6 By Zakas</p>
</blockquote>
<!--kg-card-end: markdown--><p>原文是generators，所以原文没有错。想是译者在处于自身习惯上添加了些词，虽然没什么大碍，但对于严谨的教科书来说，这个概念混淆是不合适的。而事实上，生成器对象一词是存在的，但意义完全不同。MDN上的关于生成器对象的定义是很精确的：</p><!--kg-card-begin: markdown--><blockquote>
<p>The <strong>Generator object</strong> is returned by a <strong>generator function</strong> and it conforms to both the iterable protocol and the iterator protocol.</p>
</blockquote>
<!--kg-card-end: markdown--><p>生成器函数(generator function)返回的是生成器对象(generator object)，而因为每个生成器对象都符合可迭代协议和迭代器协议，所以每个生成器对象都是迭代器(当然反过来就不是，迭代器是个更为广泛的概念)。</p><p>所以ES6引入的是生成器函数(generator function)，它使得创建迭代器对象(generator object)变得简单。当然Zakas还是简略了一些，用generator指代了generator function，这是常规做法，但他的文章里的词还是非常统一的，他文中的generator都指代generator funciton。</p><p>这点阮一峰老师就丝毫不含糊了，全程的用词是generator函数看似啰嗦，概念上却没有丝毫偏差。</p><p>还没开始写generator，但感觉我已经唠叨了一大堆了。那么下面列一下这些容易混淆的概念。</p><ul><li>Generator function: 返回生成器对象的函数，本身是一个生成数据的状态机。</li><li>Generator object：生成器函数返回的对象，本身是一个迭代器。</li><li>Iterrator: 符合迭代过程接口定义的对象</li><li>Generator: 根据上下文，即可指生成器函数，也可能指对象(错误用法)。狭义仅指代生成器函数。</li><li>Generator expression: 生成器表达式等同于生成器对象</li></ul><p>最后这个生成器表达式JavaScript并不支持，后续ES版本里也没有提及。而我放在这里的主要目的是解释generator本身。generator并非JavaScript独有，在Python里早已是广泛使用的语法。当然由于我接触的语言也并不多到10多种，所以其他语言情况并不清楚。但就个人过去学过一些Python的经验而言，JavaScript的generator与Python中的generator并无二致，概念一致，且Python还支持生成器表达式。</p><p>关于generator的问题都可以在Python中找到答案，可以在Python文档里找到详细的<a href="https://docs.python.org/3/glossary.html#term-generator">术语generator的定义</a>，甚至能在<a href="https://www.python.org/dev/peps/pep-0255/">Python增强议案</a>里找到为什么要用yield关键字之类的讨论。</p><p>所以generator究竟做什么用的？如果回归本意，generator是用来生成数据的。generator并非因为生成了迭代器而被称为生成器函数，而是因为它从机制上生成了数据，从而独占了这样一个宽泛的名字——不然它完全可以叫做迭代生成器么:) 当一系列数据可以通过迭代计算得出，那么我们就不需要读取加载整个数据，而只需去获取生成出来的数据。</p><p>当然JavaScript里我们更多的是把generator当作一个状态机来使用，并方便的处理异步流程。但显然状态本身也是数据，我们生成了状态并通过迭代器去控制流程，这个generator的用法还是颇为骚气的。最后列举一下自己对JavaScript generator的理解(可能并不准确)：</p><ul><li>一边迭代一边计算并生成数据的机制</li><li>一种以函数形式表达的生成数据的数据结构</li><li>一个可控(暂停，继续)的状态机</li><li>迭代器对象的生成函数</li></ul><p>好久不写这么长，有点疲劳(笑)。由于本篇概念性比较强，难免偏漏，如有错误欢迎指出(当然留言需要翻墙)。虽然不知道还有多少人会看到，总之谢谢各位。</p>]]></content:encoded></item><item><title><![CDATA[FoxPage Logo设计]]></title><description><![CDATA[<p>FoxPage是目前在开发中的页面制作系统，名字算是挑了很多，但最终还是根据项目的情况选择了Fox。虽然在中国角度看狐狸通常是狡猾的，但就全世界范围来看，Fox是一种灵巧聪明的动物，当然最主要的还是单词比较顺口。如果说一个品牌要打响名字是第一要素，那么将其现化的logo则是第零要素，而没事给各种名字设计logo也算是一个个人兴趣。</p><p>这次的题目是Fox和Page，算是个挺容易的选题，无论Fox还是Page都有相当多的具象概念。能在logo里具象一个隐含另一个无疑是最好的选择，所以在尝试了多种组合和概念描绘之后，选定了这样的草图：</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2018/12/fox-page-draft.png" class="kg-image"></figure><p>看起来就是纸张(Page)飞扬的状态，而后把它们揉合成Fox的形状。Fox是比较好成型的动物，无论是头部还是尾巴都颇有特点，在十几个草稿过后当画出这个形态的时候“决定就是它了”。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2018/11/fox-page-final.png" class="kg-image"></figure><p>AI稿件对外观形态进行了更多的修正，使得原本的纸张的感觉更加靠向狐狸。因为只是内部项目的Logo，所以我只是花了2个多小时来局部细化和调整，就细节来说还欠缺一些，但基本上满足这次的用例了。我并不打算将精度提高到严丝合缝的程度，配字也只是普通的Roboto，但整体自己还是挺满意的。</p><p>距离上一次设计项目的Logo刚好是一年了，感觉自己做设计还是有点少，毕竟平时全程都是写代码。大概也正是这个原因吧，偶尔做做设计总是感觉得劲的紧:)</p>]]></description><link>https://swordair.com/foxpage-logo-design/</link><guid isPermaLink="false">5bf584e6813ee30244850daf</guid><category><![CDATA[Logo]]></category><category><![CDATA[Design]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Wed, 21 Nov 2018 16:42:06 GMT</pubDate><media:content url="http://swordair.com/content/images/2018/12/fox-page-final.png" medium="image"/><content:encoded><![CDATA[<img src="http://swordair.com/content/images/2018/12/fox-page-final.png" alt="FoxPage Logo设计"><p>FoxPage是目前在开发中的页面制作系统，名字算是挑了很多，但最终还是根据项目的情况选择了Fox。虽然在中国角度看狐狸通常是狡猾的，但就全世界范围来看，Fox是一种灵巧聪明的动物，当然最主要的还是单词比较顺口。如果说一个品牌要打响名字是第一要素，那么将其现化的logo则是第零要素，而没事给各种名字设计logo也算是一个个人兴趣。</p><p>这次的题目是Fox和Page，算是个挺容易的选题，无论Fox还是Page都有相当多的具象概念。能在logo里具象一个隐含另一个无疑是最好的选择，所以在尝试了多种组合和概念描绘之后，选定了这样的草图：</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2018/12/fox-page-draft.png" class="kg-image" alt="FoxPage Logo设计"></figure><p>看起来就是纸张(Page)飞扬的状态，而后把它们揉合成Fox的形状。Fox是比较好成型的动物，无论是头部还是尾巴都颇有特点，在十几个草稿过后当画出这个形态的时候“决定就是它了”。</p><figure class="kg-card kg-image-card"><img src="http://swordair.com/content/images/2018/11/fox-page-final.png" class="kg-image" alt="FoxPage Logo设计"></figure><p>AI稿件对外观形态进行了更多的修正，使得原本的纸张的感觉更加靠向狐狸。因为只是内部项目的Logo，所以我只是花了2个多小时来局部细化和调整，就细节来说还欠缺一些，但基本上满足这次的用例了。我并不打算将精度提高到严丝合缝的程度，配字也只是普通的Roboto，但整体自己还是挺满意的。</p><p>距离上一次设计项目的Logo刚好是一年了，感觉自己做设计还是有点少，毕竟平时全程都是写代码。大概也正是这个原因吧，偶尔做做设计总是感觉得劲的紧:)</p>]]></content:encoded></item><item><title><![CDATA[更新Ghost到2.x.x]]></title><description><![CDATA[<p>自上次更新Ghost已经过了大半年了，而如今Ghost的主版本也来到了2.0，带来了很多新的有趣特性。虽然怕升级出现什么问题，但最终还是一咬牙更新到了最新，体验了一把新版本的编辑器，以及终于千呼万唤使出来的自定义URL。</p><p>更新过程比较顺利，有点小磕碰。从1.19.0更新到2.1.3，首先需要先更新到1.x的最新版本，然后才能再过渡到2.x。中间还更新了ghost-cli，更新后<a href="https://github.com/TryGhost/Ghost-CLI">ghost-cli</a>已经无法在root用户下运行，根据官方指导需要将<a href="https://docs.ghost.org/docs/troubleshooting#section-fix-root-user">ghost运行转移到普通用户</a>，且这个用户还不能是ghost，不然还会提示<a href="https://docs.ghost.org/docs/install#section-create-a-new-user">添加新用户</a>。</p><p>安装可能遇到的命令是：</p><pre><code>ghost update --v1
ghost doctor
ghost ls
ghost update
ghost setup linux-user systemd
</code></pre><p>官方文档和报错信息还是非常完整的，整个过程顺利结束之前，ghost-cli还检测了主题是否兼容Ghost新的版本。我使用的是老版本Casper改成的<a href="https://github.com/iifksp/grayliner">grayliner</a>，在检测中标出了需要改进的点，不过并不详细。可以再使用官方提供的<a href="https://github.com/TryGhost/gscan"></a></p>]]></description><link>https://swordair.com/update-ghost-to-2-x-x/</link><guid isPermaLink="false">5baaee14813ee30244850d97</guid><category><![CDATA[Ghost]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Wed, 26 Sep 2018 09:34:42 GMT</pubDate><content:encoded><![CDATA[<p>自上次更新Ghost已经过了大半年了，而如今Ghost的主版本也来到了2.0，带来了很多新的有趣特性。虽然怕升级出现什么问题，但最终还是一咬牙更新到了最新，体验了一把新版本的编辑器，以及终于千呼万唤使出来的自定义URL。</p><p>更新过程比较顺利，有点小磕碰。从1.19.0更新到2.1.3，首先需要先更新到1.x的最新版本，然后才能再过渡到2.x。中间还更新了ghost-cli，更新后<a href="https://github.com/TryGhost/Ghost-CLI">ghost-cli</a>已经无法在root用户下运行，根据官方指导需要将<a href="https://docs.ghost.org/docs/troubleshooting#section-fix-root-user">ghost运行转移到普通用户</a>，且这个用户还不能是ghost，不然还会提示<a href="https://docs.ghost.org/docs/install#section-create-a-new-user">添加新用户</a>。</p><p>安装可能遇到的命令是：</p><pre><code>ghost update --v1
ghost doctor
ghost ls
ghost update
ghost setup linux-user systemd
</code></pre><p>官方文档和报错信息还是非常完整的，整个过程顺利结束之前，ghost-cli还检测了主题是否兼容Ghost新的版本。我使用的是老版本Casper改成的<a href="https://github.com/iifksp/grayliner">grayliner</a>，在检测中标出了需要改进的点，不过并不详细。可以再使用官方提供的<a href="https://github.com/TryGhost/gscan">主题检测工具</a>进行诊断。主要的问题是这些：</p><ul><li>The {{#author}} block helper should be replaced with {{#primary_author}} or {{#foreach authors}}...{{/foreach}}</li><li>The .kg-width-wide CSS class is required</li><li>The .kg-width-wide CSS class is required</li><li>The .kg-width-full CSS class is required</li><li>The .kg-gallery-container CSS class is required</li><li>The .kg-gallery-row CSS class is required</li><li>The .kg-gallery-image CSS class is required</li></ul><p>都是和新功能相关的问题，除了多作者功能需要进行模板修改外，大部分都是必要的样式缺损，对位新版本的<a href="https://themes.ghost.org/docs/ghost-editor">Koenig editor</a>。按照官方给出的<a href="https://github.com/TryGhost/Casper/pull/475/files#diff-ce5e030f2e2e2a50f18199464f07ea70">解决方案</a>，先快速加上了一波兼容代码，以后再慢慢细化。</p><p><a href="https://blog.ghost.org/2-0/">Ghost 2.0</a>的很多新功能都非常吸引人，时间有限只体验了一部分内容，特别是新编辑器的使用上，将原本就已经非常舒适的编写体验提高到了一个新的层次！除了在中文输入法使用时偶尔有些多余的字符冒出来以外，当前的编辑器不仅在功能上更进一步，而且所见即所得比起以往更为直观。敲击键盘之间，仿佛又回到了多年以前，一边记录轨迹一边索求技艺的岁月，感觉，很是怀念。</p>]]></content:encoded></item></channel></rss>